ctf.show 萌新模塊 web14關, 此關卡是一個代碼執行漏洞, 重點在于命令執行函式的利用方式, 原始碼中過濾比較嚴格, 尤其是過濾了分號;之后, 雖然可以用?>來代替分號, 但這樣一來就只能執行一行代碼, 難度較大, 需要注意的是, 原始碼中的過濾只針對GET請求的引數, 而未對POST請求的引數做限制, 這里推薦曲線救國, GET請求傳遞一句話木馬, 然后在POST請求中傳遞引數執行系統命令, 從而獲取 flag

來到頁面后展示了部分原始碼, 并提示 flag 就在 config.php檔案中

原始碼中通過GET請求獲取引數, 并過濾了引數中的 system exec highlight cat ( . ; file php config 等關鍵字, 這里有幾個比較重要的點
1.過濾了括號( , 函式不能用了, 但仍然可以用反引號``來執行系統命令
2.過濾了分號; , 可以使用?>來代替分號, 但這樣一來就只能執行一行代碼, 增加了解題的難度
3.原始碼中的過濾只針對GET請求的引數, 并未對POST請求的引數做限制, 可以利用這一點搞事情
首先我們通過GET請求的引數傳遞一句話木馬, $-POST[a] 接收 POST請求傳遞的引數, 而后反引號``將接收的引數當做系統命令執行, 由于反引號``執行完成后并不輸出結果, 而是回傳一個保存執行結果的字串型別變數, 所以需要使用 echo 來輸出這個變數, 從而輸出執行結果
?c=echo `$_POST[a]`?>
而后使用代理工具( Burp Suite)抓包, 在POST請求中傳遞需要執行的系統命令, 這里需要注意兩個地方( 如果使用的是其他工具可以忽略)
1.攔截的請求是GET請求, 需要改成POST請求才能在請求體中傳遞引數
2.由于手動將GET請求改成了POST請求, 需要再手動添加 Content-Type: application/x-www-form-urlencoded , 否則將無法正常發送POST請求的引數

請求頭
Content-Type: application/x-www-form-urlencoded
POST請求引數
a=cat config.php
頁面空顯示, 但也沒有報錯, 不用擔心, 這很正常

右鍵查看網頁原始碼, 即可獲取 flag

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/299611.html
標籤:其他
