技术讨论 | 一次尚未完成的薅羊毛行动
一、背景
XX眼鏡,免費領取日拋5日裝隱形眼鏡活動,發現接收到的手機驗證碼為4位數字,看到4位驗證碼時就覺得有搞頭。
順便祝我倫生日快樂,等你下課~
二、技術手段
因為是跟朋友一起,所以他直接掃碼注冊領取了,我就是回到家掃碼抓包看一下
發送驗證碼請求為
POST we_chatget_auth_code?phoneNumber=13812345678
沒有什么問題,沒有把驗證碼直接顯示在response包中
那我們來看看驗證過程
POST /tws/we_chat/active/check_auth_code HTTP/1.1?name=%E4%BD%A0%E5%A5%BD&phoneNumber=13812345678&verificationCode=1234
verificationCode通過burpsuite的intuder,4位數字,1分鐘內就爆破成功,成功登錄
這里由于第一次沒注意,所以又預約到了之前的門店,不可能再去一次啊,所以想著換個別的近的門店
于是剛才的過程再抓包,找一下門店對應的字段
GET /tws/we_chat/active/detail?activeId=5e6d2ccd-a9b5-41b8-a376-2c00ab0c4ee4&storeId=store20160003 HTTP/1.1
找到了storeId,遍歷一下,找到最近的門店,預約成功,由于之前和朋友一起的時候有過領取經驗,所以直接預約后把二維碼地方截圖,等待去門店領取
三、門店領取
持以上二維碼,到預約的門店,由店員掃碼核銷,即可領取成功。理論上,你在家里多用幾個手機號預約并截圖保存二維碼,臉皮夠厚的話可以一直換。
第一次做羊毛黨,我就知道沒這么簡單~
1.到門店后,店員會讓你現場掃他們店里的活動二維碼進行預約。
(為什么要讓你掃呢,因為每個門店二維碼是綁定他們店的id的,這也是在第二節中我說的要修改storeId,不然會預約錯門店。)這里我趕緊機智的說,上次我路過拍了你們店的活動二維碼,我回家自己預約了。不管店員信不信,我反正信了。
2.掃碼領取后,店員客戶端被我看到了彈出核銷成功幾個字,我以為這就算完成了,誰知道店員問我,你成功了么?一臉懵逼,你不是都核銷成功了么。
(后來研究了一下,原來是核銷成功后,我們自己的二維碼頁面也會進行跳轉到領取成功的頁面。因為我是圖片啊!!!!怎么跳轉啊!!!我估計也是因為這個活動這個漏洞,導致很多人來偽冒領取,店員所以要多確認一下)一臉懵逼,我趕緊按下home鍵,然后一臉懵逼的說我已經關掉頁面了,沒看是否跳轉。然后跟她一直巴拉巴拉我為什么要來騙你這東西,我不稀罕,不領就不領之類的,最后還是給我了東西,然后不歡而散。
四、正文
前面大家就當看個故事,涉及的burp爆破也很簡單。這里總結一下類似這個場景的兩個問題。
1.店員既然等著你頁面刷新,保存為圖片肯定不行,頁面不關閉可能會話會退出導致還是需要登錄。所以最好就是能在門店里及時的得到爆破的驗證碼。4位驗證碼burpsuite算慢的也就2分鐘左右,完全等的起。
2.之前跟姐姐還有她孩子逛商場,里面你懂的,有各種地推人員會拿著小玩具比如風車啊,氣球啊等,見到小朋友就說免費送給小朋友,小朋友肯定會拿著要啊。然后工作人員就拉著你說,填個問卷,或者注冊一下什么的。有什么辦法,我也很無奈啊,只能照做,畢竟東西都被小朋友拿著跑了。以前的這種很傻的,留個假的手機號就行了,現在這種機構也都學精了,也都需要手機號和驗證碼了。都是現場讓你注冊的,就算看到是4位的驗證碼也沒辦法馬上爆破。
所以基于以上兩個場景,如果有種把手機的請求包發到云端進行爆破,然后返回驗證碼給手機,2分鐘以內的時間,不就可以解決這個問題了么。
五、代理
思路很簡單,把手機請求的數據包發送到云服務器,服務器上腳本解析請求獲取字段然后爆破,結果返回給客戶端。這里結合微信訂閱號或小程序功能為未來設想。未來的目標就是微信發一條指令,服務器上就開始工作了。
簡單畫的圖,1,2,3步驟,2,3步驟后續再實現,而且難度不大,這次先試著解決步驟1.
隨便找到代理公司,這里剛好看到了wyproxy,基于mitmproxy造的輪子,由之前豬豬俠搞的,可以把請求存到mysql中。
https://github.com/ring04h/wyproxy
工具不多做介紹,大家可以自己看。
$ python wyproxy.py -h usage: wyproxy.py [-h] [-d] [-stop] [-restart] [-pid] [-p] [-m] [-us]wyproxy v 1.0 ( Proxying And Recording HTTP/HTTPs and Socks5)optional arguments:-h, --help show this help message and exit-d, --daemon start wyproxy with daemond-stop, --stop stop wyproxy daemond-restart, --restart restart wyproxy daemond-pid , --pidfile wyproxy daemond pidfile name-p , --port wyproxy bind port-m , --mode wyproxy mode (HTTP/HTTPS, Socks5, Transparent)-us, --unsave Do not save records to MySQL server提供三種代理模式,HTTP/HTTPS, Socks5, Transparent
手機端配置代理,很簡單,在連接wifi后的設置地方,直接配置代理服務器ip和端口,如果是socks代理的話,可以通過代理自動配置文件pac來實現。
搞了半天,這種代理還是要連接wifi,不管是連接到商場的wifi還是另外一部手機開熱點自己去連都可以做到。
那么,純蜂窩網絡該怎么配置呢?找了半天,也只在IOS配置VPN的地方有這樣的配置,未嘗試,應該是可以的。
不過大家應該知道,IOS VPN一般都是通過客戶端軟件添加的,如上圖的wingy,brook等。現在大家用shadowsocks代理比較多,那么可以通過手機連接ss服務器,然后再能中間人獲取請求就行了。
網上也搜索了下
https://github.com/shadowsocks/shadowsocks/issues/747
問:想把ss服務端的對外鏈接通過服務端本地的http代理中轉再發出去(主要想通過mitmproxy抓包),有這樣的參數設置嗎?還是需要改源碼??
需求一樣啊,也看到了有解決方法
sudo iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner root --dport 443 -j REDIRECT --to-port 8080sudo iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner root --dport 80 -j REDIRECT --to-port 8080sudo iptables -t nat -A PREROUTING --dst ***.***.***.*** -p tcp -m owner ! --uid-owner root --dport 8080 -j DNAT --to-destination 127.0.0.1:8080sysctl -w net.ipv4.ip_forward=1
創建個另外的用戶跑ss,之后照著這個做,未成功。sad。
然后自己想想原理,ss客戶端請求某頁面,然后服務器上抓包查看。
可以看到三次握手過程,請求響應過程和后面的TCP關閉動作,我們簡單畫下圖。
然后我們希望在ss服務端請求你應用服務器的時候插入代理。
原理搞清楚了,然后就是實現端口轉發了,這里用iptables實現。
六、未完待續
到上面為止,突然就結束了,沒有后續實現的過程,因為還沒成功,所以發出來也讓大家一起討論指點下。
1.iptables實現端口轉發,試了很多次均無法成功,不知道是iptables本身有問題還是規則配置問題。針對iptables nat表中的OUTPUT,PREROUTING等chain鏈,是SNAT還是DNAT,網上各種不一,不過都嘗試了還是不通。請網絡大牛指點。
2.是否是我ss 服務器和wyproxy代理服務器是同一臺導致出現這樣的問題?
3.也有搜索過ss和burpsuite連起來使用,畢竟burp還是好用和方便。
但是基本都是瀏覽器設置代理——->burpsuite——->burp里加一層ss代理,請求是先到burp再到ss服務器
想請求先到ss服務器,然后再到burp,跟上面一樣,也一樣是端口轉發,試了下windows的,如下,也不行,這樣有問題么。這意思不就是有請求到ip138的80端口,就轉發到本地監聽的8080端口,burp開啟,監聽8080端口不就行了么?
請各位大佬指點。這次就算是上篇,等后續有時間一槍頭搞定了再給大家分享下篇。
*本文原創作者:西毒若相惜,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載
原文地址:http://www.freebuf.com/articles/web/156737.html
總結
以上是生活随笔為你收集整理的技术讨论 | 一次尚未完成的薅羊毛行动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业壳的反调试及Hook检测分析
- 下一篇: Satori变种正在通过替换钱包地址盗取