緩存區溢出之slmail fuzzing
這是我們的實驗環境
kali 172.18.5.118
smtp windows2003 172.18.5.117 pop3 110 smtp 25
本機 172.18.5.114
已經知道slmail存在PASS處的緩沖區溢出漏洞 當你輸入的足夠長的時候會緩沖區溢出
但是如果我們進行手動測試會顯得很麻煩 所有這裏我們使用腳本來跑這是01.py
import socket s = socket.socket(socket.AF_INET,socket.SOCKET_STREAM) try: print"\nSending evil buffer..." s.connect((‘172.18.5.117‘,110)) data = s.recv(1024) print data s.send(‘USER Aadministrator‘+‘\r\n‘) data =s.recv(1024) print data s.send(‘PASS password\r\n‘) data =s.recv(1024) print data s.close() print "\nDone!" except: print "Could not connect to POP3"
先建立一個鏈接
發送魔鬼buffer \n是換行的意思
s.connect是連接目標的110端口
data 是回顯的信息 pirnt輸出顯示信息
s.send是你要發送的內容
然後close這個鏈接
最後是未執行成功的報錯(except)
但是小編這裏遇到了這個問題 原來是windows的py與liunx不兼容造成的
以下是解決鏈接
https://blog.csdn.net/u010383937/article/details/73161475
這裏是在kali裏面在創一個記事本然後復制代碼上去 改名為001.py完成的不兼容繞過
改好後
用戶名收到 OK 密碼回顯錯誤 腳本是可以的
我們不斷的增大向目標服務器的數據數量
接下來是002.py
在服務器端觀察一下進程是如何溢出的
進入
進來是默認的暫停狀態
點擊播放來實時的監管這個344端口的進程
然後我們從客服端向服務器發送 數據在服務端在查看 這是進行的002.py
發到2900的時候發現他一直沒有動了 那我們來到服務端來看一下
這是ASCII編碼轉換為10進制後就是40+1
EIP是下一步這個進程要進行的操作的地址 我們在這裏發送大量的A將其復制了
所有說這裏下一步的進程被我們發送的大量的A覆蓋了 簡單說就是這個程序被搞崩潰了。因為414141不是原來要執行的地址
這裏我們進行重新啟動一下
將A改成B
可以看出slmail的PASS命令存在緩沖區溢出的漏洞
EIP是存放下一條指令的地址 這是原來的EIP
精確的定位溢出位置 繼續查找 剛才2900停了
現在我們發2700個A
2700個A也發生EIP寄存器的溢出了
我們試試2600個A
發現存在溢出了但是 2600不足以溢出到EIP
我們可以用以下方法
用kali裏面現成的腳本來實現唯一字符串
下是的事目錄 kali裏面的默認目錄
usr/share/metasploit-framework/tools/pattern_create.rb 2700
sploit-framework/tools/pattern_create.rb 2700
現在EIP裏面存在了這麽一串字符串
39 69 44 38
38 69 44 39
8 D i 9
但是windows內存裏面的存放規則是高位
./pattern.offset.rb 39694438
自動計算後面的數字在數組裏面產生的位置 也就是偏移量
找到位置是2606 所以我們在2607開始填充
驗證EIP溢出位置是否真確
我們在2067位置填充BBBB
ASCII??是42424242
驗證成功 溢出位置正確
緊跟著eip的是ESP20個c一個不少
我們可以在後面不填充20個C 從而讓你的服務器來連接我的一個端口這樣 就可以訪問我的服務端口來訪問你的服務器了
usr/share/metasploit-framework/tools/pattern_create.rb 2700
緩存區溢出之slmail fuzzing