進入之后可以看到我們需要輸入一個計算式來得到答案,burpsuite進行抓包之后發現頁面來自於calc.php
我們直接訪問calc.php頁面
發現源代碼泄露
可以看到當我們沒有輸入num值的時候就會顯示源代碼,否則對輸入的num進行eval命令執行,在命令執行之前有黑名單過濾。
我們需要繞過黑名單進行命令執行。
雖然是這樣,但是ls不在黑名單執行里面,所以我們先ls一下
返回了403界面。
這里很可能是因為有waf設備保護着輸入的參數,這里我們利用php的特性,使用php字符串解析繞過WAF。
因為防護設備檢測的是num,而php需要將所有參數轉換為有效的變量名,所以在解析查詢字符串時,php會做兩件事情:
1,刪除初始空格
2,將某些字符轉換成下划線(包括空格)
所以我們將傳入的變量改為%20num,即空格num,故WAF不會對其進行檢測,而php在處理的時候又會將其還原成num。
這樣成功繞過了服務器端的WAF,緊接着我們要繞過黑名單來讀取flag
使用scandir函數進行讀取,查看當前目錄下需要使用/符號,我們使用chr函數來繞過。
所以查看當前目錄下的payload為:
?%20num=print_r(scandir(chr(47)))
可知flag在flagg文件下,於是我們使用file_get_contents()函數進行讀取
payload為
?%20num=print_r(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
flag到手