信息安全技術實用教程-第4版---張同光---ISBN-9787121423031---5.4.2實例——緩衝區溢出攻擊WindowsXPSP3

信息安全技術實用教程-第4版---張同光---ISBN-9787121423031---5.4.2實例——緩衝區溢出攻擊WindowsXPSP3

https://my.oschina.net/ztguang/blog/5329391

主  編:     張同光

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命令存在緩衝區溢出漏洞,無需身份驗證即可實現遠程代碼執行。Immunity Debugger動態調試工具腳本mona.py用於定位進程模塊

爲了本次實驗,關閉Windows防火牆當然,也可以打開防火牆,不過需要在防火牆例外:pop3110端口SMTP25端口)。

 

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命令。我們已經知道SLmail 5.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所示。打開Immunity Debugger依次選擇菜單File”→“Attach”,5.25所示選擇PID1840SLmail)的行,然後單擊Attach”按鈕。進程默認處於暫停狀態(單擊“F12”可以暫停進程的執行),爲了觀察溢出情況,單擊開始按鈕或“F9”繼續執行1840SLmail)進程,5.26所示

 

 

 5.25  Attach進程 5.26  繼續執行進程

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

 

 

 

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章