[转帖]挖洞经验 | 获取Facebook Marketplace卖家精确地理位置信息
挖洞经验 | 获取Facebook Marketplace卖家精确地理位置信息
https://www.freebuf.com/vuls/202820.html 知识就是力量 5000刀的一个漏洞.
本文分享的writeup是与Facebook Marketplace销售系统相关的用户信息泄露漏洞,通过该漏洞可以获取到发布商品卖家的精确到经纬度和邮编等具体地理位置信息。漏洞上报一波三折,经历拒绝后再次被Facebook接收,最终Facebook给予的奖励为$5,000美金。以下是作者的漏洞发现分享。
Facebook Marketplace简介
Facebook Marketplace是Facebook于2016年10月在移动端推出的一个P2P(个人对个人)的商品拍卖和交易功能,允许用户在其上购买和销售物品。
点击Facebook底部的Marketplace按钮进入,在界面中用户可以像网络商城那样直接以商品名字、种类和售价等分类来搜索某商品,Facebook会自动为用户显示最靠近用户身边的Facebook卖家,并显示该卖家的报价和商品信息。在找到心仪商品之后,用户便可以直接用Messenger来与该卖家联络。而如果你是卖家,你也可以直接在Marketplace中添加商品、报价、地点等相关消息。与一般拍卖网站不同的是,其内置的地点工具可以调整中你正在查看的地区,或变更为其它城市。目前,Facebook Marketplace服务仅在某些国家开放。
发现漏洞的原因
Facebook Marketplace上线后,有些卖家会在上面销售一些被盗商品,所以我有时会协助调查Facebook Marketplace中的一些被盗商品,在分析其相关的可追回技术可行性过程中,我发现了其中存在的一个漏洞,利用该漏洞可以发现卖家的一些敏感数据,获取其包含经纬度的精确地理位置。
以我要卖掉的下图这辆7000欧的山地自行车拍卖销售页面分析入手,经测试,我发现Facebook Marketplace中与地理位置相关的数据信息相对具体,它包含在销售商品返回的广告中,其相关的响应消息为JSON格式内容,而这种卖家商品的地理位置又可以通过Facebook Marketplace进行设定。
为此,我觉得有些疑惑,为什么Facebook Marketplace呈现在用户页面上的商品地理位置又非常简单呢?这看来值得深究一番。
深入分析
于是,我又登录进入Facebook Marketplace应用,把这辆7000欧的山地自行车,用其中的地图位置选择工具设置了一个随机地址,看看有什么反应:
哦,看到没,在右下角之处,有一行小而灰色的字,Facebook Marketplace声称为了保护卖家隐私,位置信息仅只是大概位置(“Location is approximate to protect the seller’s privacy”),哟,还不错。
好吧,退出Facebook Marketplace看看这次请求包中的位置数据是什么,注意此时我是一个未授权的普通用户。在销售页面中,我开启了Chrome的浏览器网络监控功能,当我点击了这辆山地车的相关信息之后,可以在网络数据包中看到很多关于该商品的位置信息,查看后,我发现是Facebook的API – facebook.com/api/graphql 在响应时泄露了一些地理位置信息,如下:
其中竟然包含了商品发布的精确地理位置信息,有经纬度数据、城市、国家、邮编,如下:
"location": {
"latitude": 54.9942235,
"longitude": -1.6041244,
"reverse_geocode": {
"city": "Newcastle upon Tyne",
"state": "England",
"postal_code": ""
},
"reverse_geocode_detailed": {
"city": "Newcastle upon Tyne",
"state": "England",
"postal_code": "NE2 2DS"
}
}
经纬度!?哦,足够了!打开谷歌地图,输入其中的经纬度信息进行查找,当然,就发现了我在商品后台设置的具体地理位置了!
由于卖家很少会去刻意伪造销售商品的实际地理位置,而这种精确到米的地理位置和城市及邮编信息泄露,再结合交易过程涉及的卖家真实姓名,恶意攻击者或其它别有用心者可以利用它来准确确定卖家的具体住址。
这算是安全漏洞或问题吗?
由于卖家必须在商品发布过程中标明确切的个人位置信息,而Facebook Marketplace又声称会保护用户隐私,会做地理位置模糊化显示给浏览者。就像我设置山地车的销售位置时,拖动地图选择的圆圈后,Facebook Marketplace表明只会显示大概位置,当然,很少有卖家会刻意伪造这种地理位置信息。
另外,当我想用Facebook Marketplace提交一些具体精确的地理位置时,Facebook提供的位置或地址选择项中根本没有一些更准确或更近的位置可以选择,就算输入完整邮编或地址都不行。
所以,这种就互相矛盾了,那么,这就算是一种安全问题了。
这难道是Facebook的预期行为?
我本以为Facebook会从地图选择圆圈中随机分配到其中的一个位置,或者像某些Web应用一样会捕捉到最近的大概位置。我也期望Facebook只显示邮编的前三四个数字。但事实,当Facebook采取措施防止这些信息泄露时,以上模糊化的大概位置显示貌似是他们采取的方法。但是,现在当我试图在Facebook Marketplace添加一个销售商品时,Facebook甚至会去抓拍与其位置相关的当地一个公园图片,完全说不通。
漏洞上报
这无疑是一个安全漏洞了,我及时上报给了Facebook,并高亮显示了其中的邮编,但是却被Facebook拒绝了,他们认为这不是一个安全漏洞。不服气的我又继续分析了其中的相关参数,并再次更新上报,WTF,又被拒。好在我认识一个在Facebook工作的朋友,和他聊了聊,他把漏洞转给了某位内部人士进行了深入了解,最终,我的漏洞被接收了,一周后Facebook修复了漏洞并奖励了我$5,000美金。
[转帖]挖洞经验 | 获取Facebook Marketplace卖家精确地理位置信息的更多相关文章
- 使用LocationManager来获取移动设备所在的地理位置信息
在Android应用程序中,可以使用LocationManager来获取移动设备所在的地理位置信息.看如下实例:新建android应用程序TestLocation. 1.activity_main.x ...
- 转:Google Project Zero挖洞经验整理
https://www.sec-un.org/google-project-zero%E6%8C%96%E6%B4%9E%E7%BB%8F%E9%AA%8C%E6%95%B4%E7%90%86/ 1. ...
- [日志分析]Graylog2进阶之获取Nginx来源IP的地理位置信息
如果你们觉得graylog只是负责日志收集的一个管理工具,那就too young too naive .日志收集只是graylog的最最基础的用法,graylog有很多实用的数据清洗和处理的进阶用法. ...
- 【挖洞经验】如何在一条UPDATE查询中实现SQL注入
直奔主题 跟往常一样,在喝完我最爱的果汁饮料之后,我会习惯性地登录我的Synack账号,然后选择一个应用来进行渗透测试,此时我的“黑客之夜”便正式开始了. 我与很多其他的安全研究人员的习惯一样,我会在 ...
- 挖洞经验 | 绕过WAF限制利用php:方法实现OOB-XXE漏洞利用
几个星期以前,作者在某个OOB-XXE漏洞测试中遇到过这样一种场景:目标应用后端系统WAF防火墙阻挡了包含DNS解析在内的所有出站请求(Outgoing Request),但最终,通过利用php:// ...
- 微信小程序实现城市定位:获取当前所在的国家城市信息
微信小程序中,我们可以通过调用wx.getLocation()获取到设备当前的地理位置信息,这个信息是当前位置的经纬度.如果我们想获取当前位置是处于哪个国家,哪个城市等信息,该如何实现呢? 微信小程序 ...
- 挖洞入门_显错型SQL注入
简介:在漏洞盒子挖洞已经有一段时间了,虽说还不是大佬,但技术也有所进步,安全行业就是这样,只有自己动手去做,才能将理论的知识变为个人的经验.本篇文章打算分享一下我在挖显错型SQL注入漏洞过程中的一些个 ...
- UnityGUI扩展实例:图片挖洞效果 Mask的反向实现
转载自 https://www.taidous.com/forum.php?mod=viewthread&fid=211&tid=55259 我想大家在用uGUI做界面时,可能经常会碰 ...
- unity, 挖洞特效
想模仿这个游戏的挖洞特效: 思路: 效果: 代码下载:http://pan.baidu.com/s/1kUN8goZ
随机推荐
- JAVA泛型里面各值代表的意义
Java泛型中的标记符含义: E - Element (在集合中使用,因为集合中存放的是元素) T - Type(Java 类) K - Key(键) V - Value(值) N - Number ...
- js 获取dom 为null 测试
<!DOCTYPE html> <html> <head> </head> <body> <h1> 这是H1 </h1&g ...
- Spring 4.2.2以上版本和swagger集成方案和踩过的坑
因为公司使用的spring版本太高,在集成swagger的时候会存在一些问题,而网上的很多实例大多都是版本比较低的,为了是朋友们少才坑,我这边将集成的过程记录一下: 1. 引入spring.swagg ...
- 使用Jacoco获取 Java 程序的代码执行覆盖率
Jacoco是Java Code Coverage的缩写,顾名思义,它是获取Java代码执行覆盖率的一个工具,通常用它来获取单元测试覆盖率.它通过分析Java字节码来得到代码执行覆盖率,因此它还可以分 ...
- OI常用的常数优化小技巧
注意:本文所介绍的优化并不是算法上的优化,那个就非常复杂了,不同题目有不同的优化.笔者要说的只是一些实用的常数优化小技巧,很简单,虽然效果可能不那么明显,但在对时间复杂度要求十分苛刻的时候,这些小的优 ...
- mysql 时间差
SELECT TIMESTAMPDIFF(minute,'2019-01-01 00:00:00', '2019-01-01 01:30:00') 返回结果 90 类推,有 SELECT TIMEST ...
- zabbix 监控安装部署
今天尝试一下部署zabbix 官方文档包括多个版本,此处选择4.0版本 https://www.zabbix.com/documentation/4.0/manual 1.安装环境选择 zabbix4 ...
- 二、robotframework接口测试-常用关键字介绍
1.常用关键字介绍: a. 打印:log 用法:log 打印内容 ---------------- ...
- leetcode 1122. 数组的相对排序 (python)
1.题目描述 给你两个数组,arr1 和 arr2, arr2 中的元素各不相同arr2 中的每个元素都出现在 arr1 中对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中 ...
- flask + celery实现定时任务和异步
参考资料: Celery 官网:http://www.celeryproject.org/ Celery 官方文档英文版:http://docs.celeryproject.org/en/latest ...