2014年2月10日 星期一

Olympic CTF 2014 CURLing 400 write up



Olympic CTF CURLing 400 的 write up

前言可以參考 Olympic CTF 2014 CURLing 200 write up

這題也是個人覺得出的非常不錯的題目之一,

要解開必須很熟悉 PHP 的特性以及攻擊手法才能解開這道題目,

網址打開是一個白畫面,有個 PHP 的錯誤訊息
Notice: Undefined index: rpc_json_call in /var/www/index.php on line 27


有再寫 PHP 的同學應該馬上可以知道這個 Notice 這是少了一個 GPC 參數的警告,

所以我們可以自己補上 POST
rpc_json_call=blablalba


哦,會發現錯誤訊息變了

Google 搜尋一下 JSON RPC 的標準,照著標準送出
rpc_json_call={"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1} 


會發現錯誤訊息又變了

哦?不正確的 method 名稱?

這時候可以猜測 method 名稱,不過笨蛋才會亂猜 :p

有範圍的猜測會比盲目的亂猜好太多,

如果對 PHP 夠了解,會知道 PHP class 上都會有一些 Magic Method 存在,

經過測試會發現 __construct 以及 __wakeup 是可以使用的!

送出
rpc_json_call={"jsonrpc": "2.0", "method": "__construct", "params":[1,2], "id": 1} 


錯誤訊息又變了! 不過從這次的錯誤訊息中可以得到資訊,知道了 __construct 的參數有三個,log_dir, debug, 以及 state

一樣偽造這三個參數的值後送出
rpc_json_call={"jsonrpc": "2.0", "method": "__construct", "params":{"log_dir":"aa", "debug":true, "state": "foo"}, "id": 1}


發現是白畫面T____ï¼´

到這邊卡住了一下,也許 __construct 只是去設定了 log_dir, debug 以及 state 這三個參數並沒有其他動作,所以是不是能在一個 reuqest 內執行兩次 JSON RPC CALL 呢(?

沒有翻得很勤勞不過猜測在一個 array 內送兩個 json hash 竟然可以XDDD
rpc_json_call=[
{"jsonrpc": "2.0", "method": "__construct", "params":{"log_dir":"aa", "debug":true, "state": "foo"}, "id": 1},
{"jsonrpc": "2.0", "method": "__wakeup", "params":{}, "id": 1}

哦,loged ? 啊是 log 三小XDDDD

把 log_dir 參數改一下改成 /var/www 看看


竟然說 permission denied XD

那嘗試 /tmp/ 呢?


看來是真的可以寫檔,那它寫了什麼呢?

可以用 out-of-bound 的方法利用 PHP 支援的 wrapper æŠŠå…§å®¹çµ¦å¯«å‡ºä¾†
(PHP 支援的話甚至可以用 except://ls 執行指令)

利用 php://output 可以把內容寫到網頁上,


原來寫了一個 serialize 過後的 PHP Object 進去,難怪會用到 __wakeup 的 magic method

所以我們可以嘗試把 webshell 寫到 /var/www/ 內

不過因為 server 的設定,似乎每隔一秒會定時把 /var/www 的檔案清掉,所以如果手速不夠快會一直以為自己沒有寫成功
(哭哭T___ï¼´)

所以寫個 script 搞定!



執行 ls -alh


執行 cat /FLAG
CTF{b15ffee30a117f418d1cede6faa57778}


<( ̄︶ ̄)>


1 則留言:

  1. the Joker game can be played on mobile. สมัครPGSLOT Computers and tablets. Easy to choose. Supports all formats on Android and iOS. Joker123 can be downloaded automatically สมัครPGSLOT for free via the App Store and Play Store.

    回覆刪除