mitmproxy實踐——退選已過退選期的博雅課程


mitmproxy實踐——退選已過退選期的博雅課程

一、什么是mitmproxy

所謂mitm,全稱是Man-in-the-Middle Attack(中間人攻擊),是一種監聽和篡改http封包的黑客行為。在學習爬蟲的時候大家基本已經嘗試過Chrome對封包的查看,Chrome僅能監聽該應用內的HTTP協議封包,且不能進行修改,用處較窄。

在監聽上最常用的軟件是Wireshark,可以監聽幾乎任何類型的網絡,並可以進行解析格式漂亮地顯示封包。推薦大家下載學習。

在HTTP篡改方面最常用的是Fiddler,不過我前些日發現了一款極佳的應用可以代替Fiddler,它就是mitmproxy——一款功能豐富強大擴展性強的HTTP封包修改工具。

在本篇博客中,我將在一個實際的應用場景下演示mitmproxy的基本用法,更多的用法和擴展方式強烈建議查看官方文檔學習。

二、安裝mitmproxy

安裝方式

mitmproxy支持Windows,Mac,Linux三平台,在Mac和Linux平台安裝使用包管理器會極其方便:

Mac:

brew install mitmproxy

如果你從沒用過brew,可以參考這篇文章https://www.jianshu.com/p/06a9a59e7040 ,不建議從brew官網安裝,你會遇到一大堆網絡問題。(熟悉配置代理的大佬請無視)

Linux(Ubuntu):

sudo apt install mitmproxy

Windows的話可以在官網下載安裝包:https://www.mitmproxy.org/

使用方式

Mac用戶和Linux用戶可以直接在終端里使用命令mitmproxy打開一個命令行版本的或者使用命令mitmweb打開一個網頁UI版的,Windows僅可以使用網頁UI版的。

配置網絡和偽造證書

啟動mitmproxy之后,將會默認開放一個8080端口的代理,你要主動把瀏覽器的流量主動引向這個端口,才可以讓mitmproxy攔截流量。如果你還不會設置系統代理,可以參考這兩篇文章Mac: https://www.kuaidaili.com/doc/using/mac/ Windows: https://jingyan.baidu.com/article/eae07827ed56fa5eed548514.html 。代理服務器地址填寫127.0.0.1,端口填寫8080。

配置好之后,你用瀏覽器的訪問就會在mitmproxy中留下記錄了。

不過你可能會發現訪問https://www.baidu.com之類的網站瀏覽器會提示不安全,這是因為TLS的安全機制探測到了中間人攻擊,是正常現象。鑒於這次攻擊是你有意為之,可以通過相信一個偽造證書來消除這個問題。(當然,這步可以不完成,手動在瀏覽器忽略風險直接訪問也是可以的)

訪問 http://mitm.it/ 這個網站即可獲得你的專屬證書,找到你的操作系統,安裝它。

三、來Hack選課網站吧

下面我會用命令行界面進行演示,webui的用法會更加簡單。

進入選課網站,點擊已選課程,就可以看到這兩個數據包了,其中我們要觀察queryChosenCourse返回的數據,找到我們要退選的課程的id。當左邊的>>指向目標,按回車就可以查看細節,該程序各個界面的指針的移動方式都可以選擇使用vim鍵位,十分舒適。

就在這里,我們找到了目標的id是2570,將其記錄下來,按q可以返回剛才的界面。

接下來,我們隨便找到一個可以選的課,選了然后立刻退掉,這樣就拿到了選課包和退選包。

移動到delChosenCourse,按回車進入,可以看到我們發送的數據包是

{
  "id": xxxx
}

我們接下來要修改它並進行重放,達到退選的目的,按e之后選擇request-body,修改請求包的包體。

之后會進入一個文本編輯器(根據你的配置不同可能是vim或nano之類的)將數字修改為剛才記錄的2570,保存退出。

此時我們離成功只差一步了,數據包現在只在本地被修改,我們還需要進行Replay-Attack,將修改過后的包發送出去。僅需要在這個界面按R就完成了。

可以看到此時已經退選成功了,課程人數從40人變成39人。

同理,還可以再次利用這個工具Replay選課的數據包把這門已經過了選課時間的課選回來,人數又變回了40。

四、小結

mitmproxy這款工具在我看來堪稱神器,在Mac上的Fiddler Everywhere真的難用且無法擴展;Windows上功能夠用的Fiddler4也不如這款工具美觀。mitmproxy界面很清新美觀,對vim各種鍵位的支持讓我可以用起來很流暢,這篇博客僅僅展示了Replay的功能,除此以外它還支持攔截流量,修改后再繼續;它的擴展語言使用了Python,相較於Fiddler Script來說過於友好。非常歡迎大家來學習,相信會對大家計算機網絡這門課有所幫助。

我們之所以可以利用修改封包來退選過期課程,是因為選課網站沒有做后端校驗,過分相信前端的用戶輸入,這是極其錯誤的做法。在做網頁開發乃至應用開發時應該注意到這點,后端一定要做好校驗。(某軟工課程項目組因為不驗證用戶token在答辯時被公開處刑,太慘了)

另外,我在這里用Python封裝了選課退選接口,剛才演示的步驟用這個腳本也可以極快地完成。https://github.com/Dr-Bluemond/BuaaBykcCrawler

感謝您的閱讀!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM