為什麼你什麼都沒幹,但QQ空間中卻發了很多小廣告?也許你的QQ賬号已經被盜。本文将講解一個QQ的快速登入的原理。
而利用這個原理最終可以實作,隻要你點選一個頁面或運作過一個程式,那麼我就可以擁有你的登入權限。可以直接進你郵箱,進你微雲,進你QQ空間等....
看懂本篇需要一點點web安全的基礎,請移步我的上篇
http://www.cnblogs.com/1996V/p/7458377.html

騰訊QQ有一個快速登入的功能,意思就是當你點開網頁的時候,他能自動效驗你是否登入了QQ。
那麼騰訊是怎樣實作的呢?
騰訊是通過NPAPI和 ActiveX 來實作的。
(網景插件應用程式程式設計接口(NPAPI, Netscape Plugin Application Programming Interface)是Netscape Navigator、Mozilla Suite、Mozilla SeaMonkey和Mozilla Firefox等Gecko引擎浏覽器與Apple Safari和Google Chrome等webkit引擎浏覽器所使用的類似ActiveX的插件接口。
ActiveX 是一個開放的內建平台,為開發人員、 使用者和 Web生産商提供了一個快速而簡便的在 Internet 和 Intranet 建立程式內建和内容的方法。 使用 ActiveX, 可輕松友善的在 Web頁中插入 多媒體效果、 互動式對象、以及複雜程式,建立使用者體驗相當的高品質多媒體CD-ROM 。)
因為IE從5.5版本後停止支援 NPAPI,是以, 騰訊對 IE浏覽器 采用 ActiveX 插件,對除IE浏覽器等其它主流浏覽器采用NPAPI的形式來實作快速登入。
每當你運作該頁面的時候,他會判斷你浏覽器支援不支援ActiveX,然後再進行相關操作,代碼我就不放出來了,有興趣的大家可自行百度了解。
當然,如果用ActiveX呢,你的浏覽器又得下載下傳插件,如果用NPAPI呢部分浏覽器還要稽核插件,并且伴随着時代的發展,NPAPI和ActiveX 已經顯得老态龍鐘,是以,騰訊想了個新花招來實作快速登入。
原來,QQ在本地開了一些端口(4300),做了個httpd,可以把這個東西了解成web伺服器,類似于IIS Express
httpd是是Apache超文本傳輸協定(HTTP)伺服器的主程式。被設計為一個獨立運作的背景程序,它會建立一個處理請求的子程序或線程的池。
下面,我們開始着眼于實作。
将使用到一款工具:Fiddler。
我們随便打開一個QQ域下的網站,比如www.qq.com,我們打開Fiddler進行監測。
發現:
在ui.ptlogin2.qq.com的Host下,會産生一個key為 pt_local_token的 cookie, 如圖所示,尾号為562。
然後我們點選右上角登入,
繼而會彈出一個快速登入的框
他是怎麼監測到我登入的有QQ号呢?
好,我們接着用Fiddler來監測,我們發現,當點選右上角登入的時候,會觸發一個接口。
這個接口的位址是:https://localhost.ptlogin2.qq.com:4300/pt_get_uins?callback=ptui_getuins_CB&r=0.9417236381383591&pt_local_tk=0.1111111111111562
我們可以發現 ,這個接口的 pt_local_tk參數就是 之前的pt_local_token,尾号562,剛好吻合。
這個接口傳回了一串 關于目前QQ的資訊:
var var_sso_uin_list=[{"account":"137780739","client_type":65793,"face_index":486,"gender":1,"nickname":"看客 er","uin":"137780739","uin_flag":323486274}];ptui_getuins_CB(var_sso_uin_list);
還發現,還會請求一個接口,ptlogin2.qq.com/getface?appid=636014201&imgtype=3&encrytype=0&devtype=0&keytpye=0&uin=137780739&r=0.9433088515882535
這個接口會傳回目前QQ的頭像位址:
這樣一來,頁面上就顯示了我們的頭像 網名等資訊了。
再然後我們在快速登入框中點選, 登入按鈕。
會調用:localhost.ptlogin2.qq.com:4300/pt_get_st?clientuin=137780739&callback=ptui_getst_CB&r=0.2443934530496683&pt_local_tk=0.11111111111111562
這個接口的作用是,伺服器設定給浏覽器Cookie,
再然後,又會調用接口:/jump?clientuin=137780739&keyindex=9&pt_aid=636014201&u1=http://www.qq.com/qq2012/loginSuccess.htm&pt_local_tk=0.11111111111111562&pt_3rd_aid=0&ptopt=1&style=40
将帶入之前的Cookie然後進入這個接口,最終傳回的仍然是注冊Cookie,
而這次的Cookie,就是你登入所需要的Cookie。
這些Cookie就相當于令牌,有了這個令牌就可以擁有快速登入的權限,就相當于你登入一般的網站,賬号密碼進去,背景會給浏覽器注冊一條Token來做狀态驗證一樣。
也就是說,拿到了Cookie,你就可以通過CSRF(跨站僞裝)的形式,來搞好多事情。
可以在網站上放一個頁面,裡面跑http請求,或者搞個窗體,裡面也跑http請求。
隻要你電腦上登入了QQ,隻要你打開了這個頁面或者打開了這個窗體,那麼你的賬号就已經被入侵!
不需要輸入賬号密碼,可以直接拿着QQ空間發表留言的接口直接調用,可以直接爬蟲抓相冊圖檔,可以進微雲等等等等。
最後,再告訴大家一個非常好的接口。
http://localhost.ptlogin2.qq.com:4300/mc_get_uins
Host: localhost.ptlogin2.qq.com:4300
Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8
Get即可
傳回: