Linux下緩衝區溢位攻擊及Shellcode

來源:互聯網
上載者:User

標籤:linux   shellcode   

4.3.2 Linux32環境下函數的返回地址

編譯、連結、執行程式buffer_overflow.c,並關閉Linux的棧保護機制,參見:


下面用gdb偵錯工具:

在foo函數的入口、調用strcpy函數處和foo返回處設定斷點:

 

繼續運行,找到函數的返回地址:

 

buff的起始地址B到儲存函數的返回地址A之間的位移:

A-B=0xbffff29c-0xbffff280=0x1c=16+12=28

因此,如果Lbuffer的長度超過28位元組,將會發生緩衝區溢位,Lbuffer中位移28的4個位元組“ABCD”將覆蓋地址為0xbffff29c記憶體單元的值,即foo的返回地址變為“ABCD”(0x44434241)。


由於0x44434241不可訪問,因此出現斷錯誤。

 

4.3.3 Linux32環境下的Shellcode編寫

編譯、連結、執行shell_asm_fix_opcode.c,可以通過緩衝區溢位獲得shell,參見:


4.4做實驗並寫實驗報告

沒有修改檔案前:

 

為了找出發生溢出的原因,用gdb調試:

由於lvictim沒有發生溢出,所以為了調試方便,我把老師的原始碼buffer[512]改成了buffer[500],


重新編譯運行,發生段錯誤:


下面開始用gdb調試,找出smash_largebuf函數的返回地址所在的記憶體單元與緩衝區起始地址的距離。

先反編譯smash_largebuf函數:



然後設定三個斷點:


下面啟動進程,得到函數的返回地址0xbffff35c:


繼續執行到下一個斷點,buff的開始地址在0xbffff158,存放在0xbfffed30中:


所以:

0xbffff35c-0xbffff158=0x204=516

OFF_SET=516

BUFFER_ADDRESS有一個範圍,可以從0xbffff158開始設定

程式中需要改動的地方如下:


下面開始示範攻擊lvictim,並獲得shell,要注意關閉地址隨機化:


可以看到,已經獲得了shell,實驗成功了。

 

 

完

Linux下緩衝區溢位攻擊及Shellcode

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.