果然還是我太菜了嗚嗚嗚,這道題仍然是沒有自己做出來。哎。
這一道用的並不是PHP的環境,而是用Python中的Django編寫的。
記得做過類似的一道題目。來源於MOCTF中的網站掃描器,當時做完后其實一回想,后台用的應該是file_get_contents類似的函數,還應該開啟了遠程包含之類的。然后我們才可以直接輸入url返回頁面的源碼等等。
但是這個感覺就是一個命令執行,他返回的是ping的結果。並且這個是不接通外網的,然后嘗試了一下dvwa里面的命令執行。還是沒有成果,然后看了一下題解才知道這個是Django編寫的東西。。
這里面是使用@來進行任意文件的讀取(原理是啥我也不太清楚)。顯示利用報錯獲得Django一些敏感信息,至於后面加上 %80以及以后的Url編碼會造成報錯可能是因為超過了ascii的范圍(ascii是0-127)。%80是16進制正好是128
然后讀取他的配置文件(/opt/api/api/settings.py),具體為什么是這里,可能是默認的保存路徑
url=@/opt/api/api/settings.py可以得到數據庫名
然后直接讀取數據庫文件
url=@/opt/api/database.sqlite3得到flag
總結:幸虧看了一下題解,不然硬肝的話估計也做不出來。