2012-11-11 44 views
2

我在回溯5筆記本電腦上針對堆溢出漏洞進行培訓。但是,回溯似乎有抵禦這些攻擊的保護措施。這是我在嘗試破壞malloc分配塊的元數據時得到的結果。禁用回溯

Starting program: /root/exploit/basicheap `python -c 'print "A"*1024+"\xff\xff\xff\xff"+"\x01\x02\x03\x04"'` 
buf1=0x804b008 buf2=0x804b410 
*** glibc detected *** /root/exploit/basicheap: double free or corruption (out): 0x0804b410 *** 
======= Backtrace: ========= 
/lib/tls/i686/cmov/libc.so.6(+0x6b591)[0xb7edf591] 
/lib/tls/i686/cmov/libc.so.6(+0x6cde8)[0xb7ee0de8] 
/lib/tls/i686/cmov/libc.so.6(cfree+0x6d)[0xb7ee3ecd] 
/root/exploit/basicheap[0x80484ee] 
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0xb7e8abd6] 
/root/exploit/basicheap[0x80483f1] 
======= Memory map: ======== 
08048000-08049000 r-xp 00000000 08:01 13377588 /root/exploit/basicheap 
08049000-0804a000 r--p 00000000 08:01 13377588 /root/exploit/basicheap 
0804a000-0804b000 rw-p 00001000 08:01 13377588 /root/exploit/basicheap 
0804b000-0806c000 rw-p 00000000 00:00 0   [heap] 
(ETC...) 

Program received signal SIGABRT, Aborted. 
0xb7fe2430 in __kernel_vsyscall() 

有沒有辦法禁用這種保護?它是由內核處理還是在編譯期間由gcc設置(我希望我可以使用像-fno-stack-protector這樣的選項來禁用它,以刪除gcc中的堆棧溢出保護)?

回答

2

該消息來自glibc的free實現,它檢測堆損壞。它不是程序中的編譯時選項,它不是內核檢查。

嘗試:

MALLOC_CHECK_=0 /root/exploit/basicheap ... 

的glibc中的malloc(3)手冊頁說,與環境變量設置爲0,「任何檢測到堆損壞被自動忽略」,所以它可能只是忽略你的堆損壞並繼續運行,但它可能會成功崩潰。

另請參閱mallopt(3)M_CHECK_ACTION選項,該選項提供有關此檢查代碼的更多詳細信息。

+0

謝謝你的人,它工作正常。 – joub