資訊保安技術實用教程-第4版---張同光---ISBN-9787121423031---5.4.2例項——緩衝區溢位攻擊WindowsXPSP3
資訊保安技術實用教程-第4版---張同光---ISBN-9787121423031---5.4.2例項——緩衝區溢位攻擊WindowsXPSP3
https://www.cnblogs.com/ztguang/p/12828764.html
主 編: 張同光
ISBN號: 978-7-121-42303-1 9787121423031
出版日期: 2021-11-20
出版社: 電子工業出版社
頁碼: 定價:¥69.80元
5.4.2 例項——緩衝區溢位攻擊Windows XP SP3
1.實驗環境
實驗環境如圖5.17所示,使用宿主機(Windows 10)、虛擬機器KaliLinux(攻擊機)、虛擬機器WinXPsp3(目標機),
圖5.17 實驗環境
從宿主機將檔案slmail55_4433.exe、ImmunityDebugger_1_85_setup.exe和python-2.7.18.msi拖放到目標機(WinXPsp3)。
在目標機(WinXPsp3)中,雙擊slmail55_4433.exe安裝郵件伺服器,如圖5.18、圖5.19、圖5.20所示,安裝完成後重啟系統。如圖5.21所示,在命令列視窗執行命令netstat -nao
從宿主機將檔案mona.py拖放或複製到目標機(WinXPsp3)中Immunity Debugger的安裝目錄C:\Program Files\Immunity Inc\Immunity Debugger\PyCommands裡。
郵件伺服器SLmail 5.5.0 Mail Server的POP3 PASS命令存在緩衝區溢位漏洞,無需身份驗證
為了本次實驗,關閉Windows防火牆。當然,也可以開啟防火牆,不過需要在防火牆增例外:pop3(110埠)和SMTP(25埠)。
圖5.18 安裝郵件伺服器 圖5.19安裝郵件伺服器
圖5.20安裝郵件伺服器 圖5.21檢視開放的埠
2.緩衝區溢位攻擊過程
第1步:入侵者測試目標機的25和110埠。
在攻擊機(KaliLinux)執行nc 192.168.56.102 25命令和nc 192.168.56.102 110命令測試目標機(WinXPsp3)是否開放25和110埠,結果表示已經開放,如圖5.22所示。
圖5.22測試目標機(WinXPsp3)是否開放25和110埠
第2步:入侵者測試目標機緩衝區溢位。
如圖5.23所示,在攻擊機(KaliLinux)執行telnet 192.168.56.102 100命令,然後輸入user命令和pass命令。我們已經知道SLmail5.5.0中POP3協議的PASS(大小寫均可)命令是存在快取區溢位漏洞的,所以只要在pass後面輸入的資料量達到某一個量值時,就會出現緩衝區溢位。
圖5.23手動測試緩衝區溢位漏洞 圖5.24 自動化測試
手動測試緩衝區溢位漏洞的效率太低,下面通過Python指令碼進行自動化測試。
Python指令碼檔案(overflow.py)內容如下。如圖5.24所示,為overflow.py檔案增加可執行許可權,然後執行該指令碼檔案。
#!/usr/bin/python import socket buffer = ["A"] counter = 300 while len(buffer) <= 20: buffer.append("A" * counter) counter +=300 for string in buffer: print "FUZZING PASS WITH %s BYTES" % len(string) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) connect = s.connect(('192.168.56.102', 110)) s.recv(1024) s.send('USER test' + '\r\n') s.recv(1024) s.send('PASS ' + string + '\r\n') s.send('QUIT\r\n') s.close() |
現在的問題是:向郵件伺服器傳送這麼多資料後,仍然不知道目標機是否發生了緩衝區溢位。
第3步:判斷目標機是否發生緩衝區溢位。
在目標機(WinXPsp3),命令列視窗執行命令netstat -nao,檢視在110埠監聽的程序的PID(1840,注意,每次重啟系統後,該PID的值可能都不一樣),如圖5.21所示。開啟ImmunityDebugger,依次選擇選單“File”→“Attach”,如圖5.25所示,選擇PID為1840(SLmail)的行,然後單擊“Attach”按鈕。程序預設處於暫停狀態(單擊“F12”可以暫停程序的執行),為了觀察溢位情況,單擊開始按鈕或“F9”繼續執行1840(SLmail)程序,如圖5.26所示。
圖5.25Attach程序 圖5.26繼續執行程序
在攻擊機(KaliLinux),再次執行overflow.py,當傳送到3000個A的時候停了下來,如圖5.27所示。接下來檢視目標機(WinXPsp3)的情況,如圖5.28所示,檢視ImmunityDebugger偵錯程式,發現程序已經崩潰,且EIP暫存器中的內容為AAAA的ASCII碼值(41414141,十六進位制表示),所以下一條要執行的指令的地址是程式碼段中位移量為41414141的指令,而這個地址基本不是一條有效指令,因此程序崩潰。
圖5.27執行overflow.py 圖5.28發生緩衝區溢位,程序崩潰
在攻擊機(KaliLinux),指令碼overflow.py每次遞增300個位元組向目標機(WinXPsp3)的SLmail發起請求資料,當傳送的位元組數達到3000時,程序崩潰了,說明PASS指令確實存在緩衝區溢位,接下來要做的事情是得到確切的緩衝區溢位位置,通過快取區溢位利用EIP暫存器,進而執行Shellcode來進一步控制目標機。
第4步:得到確切緩衝區溢位位置所在的區間。