來自攻防世界官方WP | darkless師傅版本
題目描述
抓住那只貓
思路
打開頁面,有個輸入框輸入域名,輸入baidu.com進行測試
發現無任何回顯,輸入127.0.0.1進行測試。
發現已經執行成功,執行的是一個ping命令,一開始想的應該是命令拼接執行,但是輸入任何有關拼接的字符串都會提示invalid url
說明系統對這些字符串都進行了過濾,fuzz測試后發現只有@
沒有被過濾。
且當輸入@
時,會將@
編碼為%40
嘗試在url處輸入寬字符,比如%bf
出現報錯信息,是一段html代碼,將這些代碼復制出來打開。
看到了熟悉的django報錯頁面,看來是將輸入的參數傳到了后端的django服務中進行解析,而django設置了編碼為gbk導致錯誤編碼了寬字符(超過了ascii碼范圍)。
到這一步后,聯系到前面的@
字符沒有被過濾,然后看了大佬們的解題思路(這里太坑了,原題目上其實是由提示的)
意思是可以用@
讀取文件內容。
結合django的報錯得知了項目的絕對路徑為/opt/api
這里還需要懂一些django開發的基本知識,我感覺這道題涉及的面有點廣了,django項目下一般有個settings.py文件是設置網站數據庫路徑(django默認使用的的是sqlites數據庫),如果使用的是其它數據庫的話settings.py則設置用戶名和密碼。除此外settings.py還會對項目整體的設置進行定義。
讀取settings.py文件,這里需要注意django項目生成時settings.py會存放在以項目目錄下再以項目名稱命名的文件夾下面。
同上將報錯信息已html文件打開,可看到一些敏感信息:
同樣在使用@
讀取數據庫信息
在報錯信息中搜索CTF得到flag。
以上就是這道題的解法,我只能說大佬們的思路真野!
總結:
- Django 是用python語言寫的開源web開發框架
- http://www.wupco.cn/?p=4195
- curl的@+文件名做本地文件讀取
- django開發
- 寬字節注入