2015年8月31日 星期一

Remote Code Execution through GDB Remote Debugging Protocol


在準備 DEFCON CTF 時額外想到的小玩具,
很多人使用 GDB remote debugging 時為了方便遠端使用,會將 port 綁在 0.0.0.0 上使得攻擊者可以連接上做一些事情

至於可以做哪些事情,不來個遠端代碼執行就不好玩了XD

大部分的工作都基於 Turning arbitrary GDBserver sessions into RCE 這篇文章,
修改部分則是加上 arm 及 x64 的支援以及把 code 改好看點....XD

比較 tricky 的部分則是 GDB 在 extended-remote 後,GDB 預設的處理器架構會是 i386
如果遠端的處理器架構非 x86 的架構下會失敗,所以必須用 set architecture 指定處理器架構
(原文章因為都在 x86 架構下所以沒這個問題XD)
但是在 run 之前無法知道所處的處理器架構所以變成一個很尷尬的狀態XD

另外一個有趣的是如何檢測掃描到的 port 是否為 GDB remote debugging protocol
送個
$?#3f
就可以判斷,接著就可以寫成 script 就可以批次掃描處理了XD

最後 PoC,在本機跑
gdbserver --remote-debug 0.0.0.0:31337 /bin/ls
配合下面 Exploit 就可以拿 shell XD

不多說,貼 code