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