簡體   English   中英

漏洞利用可在gdb中使用,但不能在命令行上使用

[英]Exploit works in gdb but not on the command line

我一直在研究“黑客:剝削的藝術”並遵循這些示例。 在第145頁上,作者演示了如何利用存儲在環境變量中的shellcode利用notesearch.c程序。 Erickson通過以下方式做到這一點:

./notesearch $(perl -e'print“ \\ x47 \\ xf9 \\ xff \\ xbf” x40')

在命令行上,這對我不起作用,但是在GDB中,鍵入

運行$(perl -e'print“ \\ x47 \\ xf9 \\ xff \\ xbf” x40')

確實有效。

注意:現在,由於CPU的保護,上面的地址當然與我的地址不同,但是我只是按照他的示例在gdb中運行notesearch,在環境變量中獲取shellcode的地址,並向其中添加100:

(gdb)x / s 0xbffff8e3 + 100

當然,我的地址和他上面的地址不同,但是仍然結帳,但沒有用。

****但****

當我在GDB中運行他的漏洞利用代碼時,它可以正常工作。

運行$(perl -e'print“ \\ x47 \\ xf9 \\ xff \\ xbf” x40')

那為什么會

運行$(perl -e'print“ \\ x47 \\ xf9 \\ xff \\ xbf” x40')

在gdb中工作,並給我一個root shell,但是

./notesearch $(perl -e'print“ \\ x47 \\ xf9 \\ xff \\ xbf” x40')

在命令行上不起作用? 是否在gdb中關閉了地址隨機化功能,但在OS中未關閉? GDB顯示的地址與程序實際運行的地址之間是否不匹配? 在此先感謝您的指導。

我們不需要借助ASLR來解釋Exploit為什么可以在gdb中工作,而不能在命令行上工作 在GDB中運行時,堆棧位置只是簡單地移動了一點(在我的系統上,向下移動了80個字節),因此需要對提供的地址0xbffff947進行調整以從Shell命令行運行。 為了驗證這一點,只需看一下例如

    printf("searchstring = %p\n", searchstring);

notesearch.c 每次從shell運行命令時,您可能都會看到一個常量地址,而每次從GDB運行時,您可能會看到另一個常量地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM