您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關Python建代理配合burp怎樣實現(xiàn)自動免費用水,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
0x01 前言 本文只是對某校園熱水服務app做個測試,其實本人并沒有做大壞事,并未傳播相關技術,文章以下內(nèi)容的敏感部分會打碼,并且相關廠商已經(jīng)正在進行漏洞修復,大家看看就好。文章后會提供“Python簡易搭建代理服務器”的關鍵代碼,代碼簡單而且開源,我自己也加了點注釋。最后的exp只針對本app,感興趣的朋友可以看看。以下內(nèi)容包含個人見解,輕噴。若有誤導懇請指出。
0x02 利用fd分析與實戰(zhàn)
要對這app做測試,首先了解下app的運作流程。
登錄后,app主界面如下
邏輯簡單,步驟如下:
1.app使用藍牙連接水表。
2.先扣你10塊余額,轉(zhuǎn)到預扣款里(不夠10元扣除所有)
3.水表上顯示10塊錢,也就是你的預扣款(我只有6元所有會顯示6元),水表出水
4.用水,水表上的金額隨著用水量而減少
5.停止用水,水表上顯示的金額就是余額,將返還給余額
這樣分析還不夠,我們利用fiddler看看app向服務器的HTTP請求內(nèi)容
怎么抓手機包看這,講的比我好我就不多說了:如何用Fiddler對Android應用進行抓包
app啟動時的HTTP數(shù)據(jù)請求截圖:
一共請求了5次,沒發(fā)現(xiàn)什么地方有問題。要想知道這些請求都是做什么的,可以看看請求的get的內(nèi)容以及post的內(nèi)容,還可以看看網(wǎng)站的響應內(nèi)容。從截圖中fiddler右下角的“Message=未發(fā)現(xiàn)版本”就可以猜想這個http請求可能是檢查更新的請求。
我們用的是“fiddler”,大家都知道的,許多利用都是改金額,現(xiàn)在還沒用水,還沒發(fā)生金額的變化,咱們現(xiàn)在用水試試。
點擊“點擊開始用水”按鈕,看看app截圖以及fiddler的http請求
app扣除了6塊,轉(zhuǎn)到了預扣款里,水表上顯示6.00元,<img>假裝有水表照片.jpg</img>
看fiddler截圖,一共有4個http請求,注意紅框,“00A3AAAF”是本次用水的訂單號,之后會用到。
看了下這些http請求,發(fā)現(xiàn)并未和服務器發(fā)生有關金額的信息交互。
我們進行下個步驟,停止用水讓它退還余額。
app截圖,以及fiddler抓取到的金額數(shù)據(jù)截圖:
可以看到之前紅框框起來的訂單號在結(jié)賬返還金額的時候用到了,不用改。bal的值明顯就是退還金額,將他改為6,也就是我的預扣款試試。成功退還所有預扣款?。ㄟ@app有兩次http請求返回的余額,內(nèi)容都相同,都需要改為6,另一次就不貼截圖了)
點擊確認結(jié)賬就余額就能變回6元了,這個“確認結(jié)賬”按鈕實際上是個刷新命令。
0x03 Python+burp簡易搭建代理服務器
之前已經(jīng)用fd實現(xiàn)漏洞利用,但是每次都需要手動改,如果寫個腳本會比較快一些。正巧我在某同性交友網(wǎng)看到了“Python搭建代理服務器”的代碼,就想試試能不能通過這個代碼稍加更改實現(xiàn)自動化Exp。
貼出原代碼:
關鍵部分我寫了注釋,還有代碼不清楚格式是否會亂,我在文后以附件的形式貼出來吧
這次配合burpsuite來使用,使用方法:第90行(倒數(shù)第二行)寫入之前用fiddler改包時手機wifi設置的代理,以及端口號,用來監(jiān)聽手機發(fā)出的http請求。第44行寫burpsuite監(jiān)聽的地址,從手機上獲取的http請求都會轉(zhuǎn)發(fā)給burpsuite,burpsuite設置我也貼出來吧:
設置好后,只要運行代碼,就可以實現(xiàn)代理服務。雖然想要代理直接連burp就好,但是這提供了一個可以使用PY代碼進行一定程度的中間人操作的環(huán)境。
0x04 實現(xiàn)自動化exp
PS:看到這里就可以不看了,因無法提供app與藍牙水表,以下內(nèi)容多半無法看明白。。
之前實現(xiàn)了代理,那么現(xiàn)在就要開始改代碼了,將代碼改成漏洞app的漏洞利用工具。
因為這個不是通用型漏洞,漏洞利用工具也只能針對這個app,所以以下內(nèi)容不存在干貨,感興趣的可以看下去。
思路:通過這個代理,將停止用水后“結(jié)賬”請求中返還的金額替換為預扣款的金額,即返還所有金額。
還有個:對app的http請求分析的越透徹,exp就可能寫的越簡單思路越清晰。
漏洞利用程序方法眾多,以下將按我自己的思路
從之前的fd測試可以知道,“用水”與“結(jié)賬返還金額”是兩個獨立的http請求部分,根據(jù)常識“結(jié)賬”肯定要在“用水”之后,那我們可以在app執(zhí)行“用水”之后就馬上向服務器請求偽造的“結(jié)賬”http請求,因偽造的“結(jié)賬”請求只是PC機跳過app與服務器交互,所以執(zhí)行結(jié)賬后不會影響藍牙水表的供水。這種思路有個前提,就是能成功偽造“結(jié)賬”請求,如果無法偽造,也可以在“結(jié)賬”請求發(fā)出時攔截并改包,這樣理論上是不會出問題的。
偽造“結(jié)賬”需要在“用水”之后,那怎么判斷“用水”請求?
用 if 判斷數(shù)據(jù)的特征,簡單明了。因為只是判斷,不是攔截,所以只需要在conn_destnation函數(shù)的結(jié)尾,也就是destnation.send() 執(zhí)行后,添加 if 判斷即可,如果是“用水”便開始偽造“結(jié)賬”。因為結(jié)賬需要訂單號,所以可以用re模塊正則表達式匹配“用水”請求的特征時順帶取出訂單號,見截圖:
訂單號正好包含在URL中,真方便。
用if判斷不為空就可以剛剛獲取的訂單號進行偽造的“結(jié)賬”了
偽造“結(jié)賬”請求需要類似cookies的憑證,憑證存在header里,可以直接使用“用水”請求的header。
可是??!我發(fā)現(xiàn)用水、結(jié)賬、查余額等一系列操作是使用的header中的憑證永不過期,若重登會給予新的憑證,但舊憑證依舊可以使用!所以就可以偷懶直接貼一份header使用。
有了憑證就可以為所欲為了,偽造“結(jié)賬”請求除了訂單號還需要知道預扣款,前面提到過,預扣款一般為10元,但有時候余額不足預扣款就不足10元,所以為了程序兼容性,還需要獲取下預扣款。既然有了憑證為所欲為,那么可以再偽造下一個能讓服務器返回預扣款的請求即可。
見上圖:有了憑證,并且正好服務器返回的是json形式的,直接用Python 的 eval,再獲取對應鍵值就行。
然后就是執(zhí)行偽造的“結(jié)賬”請求:
看完上述內(nèi)容,你們對Python建代理配合burp怎樣實現(xiàn)自動免費用水有進一步的了解嗎?如果還想了解更多知識或者相關內(nèi)容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。