首发于合天智汇:http://www.heetian.com/info/827
http://www.heetian.com/info/827
文章目录:
● 引言
● 代码解析
● 无参数任意文件读取
● 查看当前目录文件名
● 读取当前目录文件
● 查看上一级目录文件名
● 读取上级目录文件
● 查看和读取多层上级路径的就不写了,一样的方式套娃就行
● 无参数命令执行(RCE)
● getallheaders()&apache_request_headers()
● get_defined_vars()
● session_id()
● getenv()
● 小结
● 参考
无参数读文件和RCE总结
例题:
<?php
highlight_file(__FILE__);
if(';' === preg_replace('/[^W]+((?R)?)/', '', $_GET['code'])) {
eval($_GET['code']);
}
?>
代码解析
preg_replace('/[^W]+((?R)?)/', '', $_GET['code'])
这里使用preg_replace
替换匹配到的字符为空,w
匹配字母、数字和下划线,等价于 [^A-Za-z0-9_]
,然后(?R)?
这个意思为递归整个匹配模式
所以正则的含义就是匹配无参数的函数,内部可以无限嵌套相同的模式(无参数函数),将匹配的替换为空,判断剩下的是否只有;
举个例子:
a(b(c()));
可以使用,但是a('b')
或者a('b','c')
这种含有参数的都不能使用
所以我们要使用无参数的函数进行文件读取或者命令执行
...