1. 程式人生 > 其它 >資訊保安技術實用教程-第4版---張同光---ISBN-9787121423031---5.4.2例項——緩衝區溢位攻擊WindowsXPSP3

資訊保安技術實用教程-第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(目標機),

KaliLinuxWinXPsp3虛擬機器的網路連線方式選擇“僅主機(Host-Only)網路”攻擊機192.168.56.109目標機192.168.56.102進行緩衝區溢位攻擊。

5.17 實驗環境

從宿主機將檔案slmail55_4433.exeImmunityDebugger_1_85_setup.exepython-2.7.18.msi拖放到目標機(WinXPsp3

在目標機(WinXPsp3)中,雙擊slmail55_4433.exe安裝郵件伺服器,5.185.195.20所示安裝完成後重啟系統。5.21所示在命令列視窗執行命令netstat -nao

,發現25110180埠處於監聽狀態,並且在“計算機管理”視窗可以看到郵件相關的三個服務已啟動,說明郵件伺服器安裝成功。在目標機(WinXPsp3)中,接著安裝python-2.7.18.msiImmunityDebugger_1_85_setup.exe

從宿主機將檔案mona.py拖放或複製到目標機(WinXPsp3)中Immunity Debugger的安裝目錄C:\Program Files\Immunity Inc\Immunity Debugger\PyCommands裡。

郵件伺服器SLmail 5.5.0 Mail ServerPOP3 PASS命令存在緩衝區溢位漏洞,無需身份驗證

即可實現遠端程式碼執行。ImmunityDebugger動態除錯工具指令碼mona.py用於定位程序模組

為了本次實驗,關閉Windows防火牆當然,也可以開啟防火牆,不過需要在防火牆例外:pop3110SMTP25)。

5.18 安裝郵件伺服器 5.19安裝郵件伺服器

5.20安裝郵件伺服器 5.21檢視開放的埠

2緩衝區溢位攻擊過程

1步:入侵者測試目標機的25110

在攻擊機(KaliLinux)執行nc 192.168.56.102 25命令和nc 192.168.56.102 110命令測試目標機(WinXPsp3)是否開放25110結果表示已經開放,5.22所示。

5.22測試目標機(WinXPsp3)是否開放25110

2步:入侵者測試目標機緩衝區溢位

5.23所示在攻擊機(KaliLinux)執行telnet 192.168.56.102 100命令,然後輸入user命令和pass命令。我們已經知道SLmail5.5.0POP3協議的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埠監聽的程序的PID1840,注意,每次重啟系統後,該PID的值可能都不一樣),5.21所示。開啟ImmunityDebugger依次選擇選單File”→“Attach”,5.25所示選擇PID1840SLmail)的行,然後單擊Attach”按鈕。程序預設處於暫停狀態(單擊“F12”可以暫停程序的執行),為了觀察溢位情況,單擊開始按鈕或“F9”繼續執行1840SLmail)程序,5.26所示

5.25Attach程序 5.26繼續執行程序

在攻擊機(KaliLinux),再次執行overflow.py,當傳送到3000A的時候停了下來,5.27所示接下來檢視目標機(WinXPsp3)的情況,5.28所示,檢視ImmunityDebugger偵錯程式,發現程序已經崩潰,且EIP暫存器中的內容為AAAAASCII碼值(41414141,十六進位制表示),所以下一條要執行的指令的地址是程式碼段中位移量為41414141的指令,而這個地址基本不是一條有效指令,因此程序崩潰。

5.27執行overflow.py 5.28發生緩衝區溢位,程序崩潰

在攻擊機(KaliLinux),指令碼overflow.py每次遞增300個位元組向目標機(WinXPsp3)的SLmail發起請求資料,當傳送的位元組數達到3000時,程序崩潰了,說明PASS指令確實存在緩衝區溢位,接下來要做的事情是得到確切的緩衝區溢位位置,通過快取區溢位利用EIP暫存器,進而執行Shellcode來進一步控制目標機。

4步:得到確切緩衝區溢位位置所在的區間