前言
某天晚上鼓蜒,key在研究了一下朋友圈在傳的QQ點擊劫持陕见,直接導致QQ凍結24小時好爬。然后我們一起交流著聊著聊著扯到了二維碼劫持這個話題上扒俯,發(fā)現(xiàn)國內(nèi)也沒有一些實戰(zhàn)性的文章奶卓,所以針對微信展開了二維碼劫持的實戰(zhàn)。(順便讓我安靜的做個小小的標題黨)
原理
首先我們來看一下QRLJacking的實際原理:
1.攻擊者首先進行客戶端QR會話撼玄,并將登錄QR碼復制到網(wǎng)絡釣魚網(wǎng)站夺姑。“現(xiàn)在掌猛,一個精心制作的網(wǎng)絡釣魚頁面有一個有效和定期更新的QR碼可以被發(fā)送給受害者盏浙。”
2.攻擊者將釣魚頁面發(fā)送給受害者荔茬。
3.受害者使用特定目標移動應用掃描QR碼废膘。
4.攻擊者獲得受害者帳戶的控制權。
5.該服務正在與攻擊者的會話交換所有受害者的數(shù)據(jù)慕蔚。
這個原理的缺陷在于 -> 攻擊者需要打開客戶端QR會話丐黄,所以就只能進行1V1的實時性攻擊,缺陷較大孔飒。
而我們實驗室的成員在交流的時候發(fā)現(xiàn)其實可以實時撒網(wǎng)式QRLJacking(命名為:Netting-QRLJacking)灌闺,恰好之前研究過微信的WEB協(xié)議,所以這里拿微信來當作“實驗靶機“坏瞄。
Netting-QRLJacking的原理如下:
1.攻擊者首先精心制作一個網(wǎng)絡釣魚頁面桂对,釣魚頁面獲取真實頁面的二維碼。
2.攻擊者將釣魚頁面發(fā)送給受害者鸠匀。
3.受害者使用特定目標移動應用掃描QR碼蕉斜。
4.攻擊者后臺獲得受害者帳戶的認證鏈接。
5.攻擊者打開認證鏈接后直接控制受害者的微信權限缀棍。
協(xié)議分析
因為寫過微信機器人宅此,所以第一時間想起了wxpy這個神奇的模塊,不過很有意思的寫第一條命令的時候就遇到挫折:
from wxpy import *
bot = Bot()
Bot()需要執(zhí)行完之后才會執(zhí)行下一條代碼睦柴,但是我用的Flask框架的代碼就無法執(zhí)行诽凌。
那怎么辦?只能自己去分析微信QR快速登陸的WEB協(xié)議:
1. 獲取uuid
(這個uuid是一個很關鍵的東西坦敌,我們可以通過接口去獲嚷滤小)
接口:
https://login.weixin.qq.com/jslogin
POST正文:
appid=wx782c26e4c19acffb&fun=new&lang=zh_CN
返回結果:
2. 獲取的uuid與鏈接https://login.weixin.qq.com/qrcode/組合->https://login.weixin.qq.com/qrcode/ob8jLaxD6Q==
返回結果:
aHR0cHM6Ly9sb2dpbi53ZWl4aW4ucXEuY29tL2wvb2I4akxheEQ2UT09 (二維碼自動識別)
(這就是二維碼的地址)
3. 監(jiān)聽接口https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=uuid&tip=1&r=855749254&_=1502382803479
GET請求參數(shù)中的uuid也就是上面的uuid,正常組合就行狱窘。
這個監(jiān)聽接口打開杜顺,只要有人掃描2的二維碼那么就會返回消息:
這個返回的其實就是微信頭像而已:
真的只是頭像而已么?有心的人已經(jīng)注意到了最開始有一個window.code=201蘸炸,這個window.code=201是掃描成功后會返回的躬络,而如果二維碼時效性過期就會返回window.code=400。
window.userAvatar是頭像搭儒,window.redirect_uri是用戶憑證鏈接(這里只要我們點開鏈接直接可以進入用戶微信WEB界面進行任意操作)
代碼編寫
這里使用一個能夠快速開發(fā)flask的框架來完成
首先定義一個index的route當用戶訪問index時調用獲取uuid的接口 將其渲染到模板中
模板獲取后端傳過來的uuid 并用img標簽去調用獲取二維碼的接口
在客戶端上顯示出來 緊接著輪詢二維碼掃描的API
并且判斷各種情況 盡可能實現(xiàn)地和微信一樣
前端輪詢代碼
二維碼掃描的route:
前端用ajax請求后端 將返回的結果轉換為Javascript表達式
當全局里面的code為408的時候說明沒有掃描
繼續(xù)遞歸調用當前函數(shù)
當全局里面的code為400的時候說明二維碼過期了
自動刷新當前界面獲取新的二維碼
當全局里面的code為201的時候說明掃描成功了
但沒有在移動終端點擊確認 將返回的用戶頭像渲染到界面中 繼續(xù)遞歸調用當前函數(shù)
當全局里面的code為200的時候說明用戶在移動終端點擊確認了
這時候將返回的redirect_uri傳入到后端 接著跳轉返回的redirect_uri
掃描成功時調用的route:
釣魚實踐
You died.戲劇性的是這里key自己日了自己了穷当,奶權并沒有上當~
研究人員gh0stkey 來自米斯特安全攻防實驗室@ 奶權 & vulkey
參考資料: