寫在前面的我的做法:
我是先看了下面的文章才做出來的,我不知道怎么fuzz,也沒有拿域名測試,這次學(xué)到了寬字符 %bf 然后呢,還靈機(jī)一動將報錯信息復(fù)制的本地弄成html文件再打開,大佬還是太強(qiáng)了
原作者:darkless
題目描述:抓住那只貓
思路:
打開頁面,有個輸入框輸入域名,輸入baidu.com進(jìn)行測試

發(fā)現(xiàn)無任何回顯,輸入127.0.0.1進(jìn)行測試。

發(fā)現(xiàn)已經(jīng)執(zhí)行成功,執(zhí)行的是一個ping命令,一開始想的應(yīng)該是命令拼接執(zhí)行,但是輸入任何有關(guān)拼接的字符串都會提示invalid url

說明系統(tǒng)對這些字符串都進(jìn)行了過濾,fuzz測試后發(fā)現(xiàn)只有@沒有被過濾。

且當(dāng)輸入@時,會將@編碼為%40

嘗試在url處輸入寬字符,比如%bf

出現(xiàn)報錯信息,是一段html代碼,將這些代碼復(fù)制出來打開。

看到了熟悉的django報錯頁面,看來是將輸入的參數(shù)傳到了后端的django服務(wù)中進(jìn)行解析,而django設(shè)置了編碼為gbk導(dǎo)致錯誤編碼了寬字符(超過了ascii碼范圍)。
到這一步后,聯(lián)系到前面的@字符沒有被過濾,然后看了大佬們的解題思路(這里太坑了,原題目上其實(shí)是由提示的)

意思是可以用@讀取文件內(nèi)容。結(jié)合django的報錯得知了項(xiàng)目的絕對路徑為/opt/api

這里還需要懂一些django開發(fā)的基本知識,我感覺這道題涉及的面有點(diǎn)廣了,django項(xiàng)目下一般有個settings.py文件是設(shè)置網(wǎng)站數(shù)據(jù)庫路徑(django默認(rèn)使用的的是sqlites數(shù)據(jù)庫),如果使用的是其它數(shù)據(jù)庫的話settings.py則設(shè)置用戶名和密碼。除此外settings.py還會對項(xiàng)目整體的設(shè)置進(jìn)行定義。
讀取settings.py文件,這里需要注意django項(xiàng)目生成時settings.py會存放在以項(xiàng)目目錄下再以項(xiàng)目名稱命名的文件夾下面。

同上將報錯信息已html文件打開,可看到一些敏感信息:

同樣在使用@讀取數(shù)據(jù)庫信息

在報錯信息中搜索CTF得到flag。

以上就是這道題的解法,我只能說大佬們的思路真野!