關於朋友圈《小心新型二維碼釣魚》揭秘

首先感謝鍾馗之眼公開的攻擊過程,感謝您的無私分享

老文章,當時沒有粉絲,在發一遍

今天刷著手機,突然被朋友圈裡一篇名為《小心新型二維碼釣魚》的文章吸引,看完演示影片心裡久久不能平靜,喜歡瞎折騰的我於是開始折騰起來,最終終於折騰明白了,於是寫下這篇文章分享一下技術細節。

首先先貼上大表哥的文章鏈接:小心新型二維碼釣魚

首先我們先來看一下qq郵箱快速登陸的api

https://xui.ptlogin2.qq.com/cgi-bin/xlogin?target=self&appid=522005705&daid=4&s_url=https://mail.qq.com/cgi-bin/readtemplate?check=false%26t=loginpage_new_jump%26vt=passport%26vm=wpt%26ft=loginpage%26target=&style=25&low_login=1&proxy_url=https://mail.qq.com/proxy.html&need_qr=0&hide_border=1&border_radius=0&self_regurl=http://zc.qq.com/chs/index.html?type=1&app_id=11005?t=regist&pt_feedback_link=http://support.qq.com/discuss/350_1.shtml&css=https://res.mail.qq.com/zh_CN/htmledition/style/ptlogin_input_for_xmail440503.css

F12,啟動,抓包看一下

既然是二維碼登陸釣魚,那麼我們首先要關注的點首先肯定是如何生成二維碼,我們先來找一下生成二維碼的api,F12,啟動!!!! 生成登陸二維碼的api如下圖

隨著F12裡面Network里抓的包越來越多,我被其中一個介面所吸引,這個介面是用來判斷f12是否過期的介面,我們來看一下。

既然有介面能驗證二維碼是否過期,那麼就說明生成的每一張二維碼里的某一個參數和這個介面里的某一個參數一定存在著某種不可告人的py交易。順著思路尋找,結局當然是被我當場捉姦,來看一下。

我發現在這兩個api中,二維碼生成介面的cookie里和二維碼是否過期查詢的介面里有同一個參數 login_sig,那麼下面我只需要找到login_sig這個值是從哪過來的,就能將二維碼和二維碼是否過期介面一一對應到一起了。果然,我們在這個介面的cookie里找到了login_sig

https://xui.ptlogin2.qq.com/cgi-bin/xlogin?target=self&appid=522005705&daid=4&s_url=https://mail.qq.com/cgi-bin/readtemplate?check=false%26t=loginpage_new_jump%26vt=passport%26vm=wpt%26ft=loginpage%26target=&style=25&low_login=1&proxy_url=https://mail.qq.com/proxy.html&need_qr=0&hide_border=1&border_radius=0&self_regurl=http://zc.qq.com/chs/index.html?type=1&app_id=11005?t=regist&pt_feedback_link=http://support.qq.com/discuss/350_1.shtml&css=https://res.mail.qq.com/zh_CN/htmledition/style/ptlogin_input_for_xmail440503.css

現在梳理一下以上的思路,首先我們訪問

https://xui.ptlogin2.qq.com/cgi-bin/xlogin?target=self&appid=522005705&daid=4&s_url=https://mail.qq.com/cgi-bin/readtemplate?check=false%26t=loginpage_new_jump%26vt=passport%26vm=wpt%26ft=loginpage%26target=&style=25&low_login=1&proxy_url=https://mail.qq.com/proxy.html&need_qr=0&hide_border=1&border_radius=0&self_regurl=http://zc.qq.com/chs/index.html?type=1&app_id=11005?t=regist&pt_feedback_link=http://support.qq.com/discuss/350_1.shtml&css=https://res.mail.qq.com/zh_CN/htmledition/style/ptlogin_input_for_xmail440503.css

從cooki里取到login_sig,然後就可以通過login_sig得到一個二維碼,和一個查詢二維碼是否過期的介面。

但是在實際操作過程中,我發現查詢二維碼是否過期的介面除了login_sig還需要ptqrtoken與action,action參數在這裡沒什麼可說的,就是一個時間戳,於是我就開始尋找ptqrtoken是如何生成的。

尋找思路就是

https://ssl.ptlogin2.qq.com/ptqrlogin

這個api的請求是從哪個地方發起的,最終我在這個js里找到了他

https://cdn-go.cn/qq-web/any.ptlogin2.qq.com/c7d607f7//ptlogin/ver/19112817/js/c_login_2.js

由於c_login_2.js後帶參數,所以想要自己親自調試的小夥伴可以自行抓包尋找這個js的路徑

首先我們來找ptqrtoken

好的,我們可以看到ptqrtoken是將cookie中的qrsig參數通過hash33方式加密得到的,我們再來找一下hash33方法的定義

hash33:function(t){for(var e=0,i=0,n=t.length;i<n;++i)e+=(e<<5)+t.charCodeAt(i);return 2147483647&e}}}()

這樣子我們就可以得到ptqrtoken了,同時也得到了一對url,一個是生成二維碼的url,一個是對應查詢那個二維碼是否過期的url

說了這麼多,小夥伴們可能還是一頭霧水,好奇我上面啰嗦這麼多是什麼意思,下面就是揭曉真相的時刻

我給大家寫一個不停訪問二維碼查詢是否過期介面的小例子大家就明白了,由於本人還是習慣用易語言,希望各位大佬看我用易語言寫demo做演示不要嘲笑我,看下圖

在掃碼之前,訪問那個介面的時候,介面會返回二維碼未失效,在掃碼的過程中,那個介面會返回二維碼認證中,在掃碼過後,介面直接返回了郵件免密登陸地址,那麼二維碼釣魚的原理就因此顯而易見了

那麼我們來訪問下面的url來測試一下

由於本人安全意識較強設置了獨立密碼,沒有獨立密碼的人將通過那個url直接進入郵箱了

驚不驚喜意不意外

以上就是今天給大家分享的內容,上面那些構造url的方法會在寫利用腳本裡面用到,為了防止某些小黑非法使用,利用腳本就不公開了,各位大佬自己去寫吧。

文章有看不懂的地方歡迎大家來跟我交流,有錯誤的地方也希望各位大佬指正

原創不易,希望大佬們多多關注,您的關注是我更新的動力,關注我,日常分享小技巧