我正在尝试将引用另一个变量的变量传递给eval()PHP 中的函数。
bin2hex 和大多数其他 PHP 函数无法使用,因此我必须依赖(我认为的)PHP 特性,它将十六进制自动解析为 ascii 字符串。
当我尝试运行它时:
<?php
$t = "\x70\x68\x70\x69\x6e\x66\x6f\x28\x29"
eval($t . "();");
?>
在phpinfo()被调用并在网页上显示
但是当$t像这样从超全局变量引用变量时:
<?php
// HTTP request:
// http://myserver.com/debug.php?t=$_GET['s']&s=\x70\x68\x70\x69\x6e\x66\x6f\x28\x29
// Info:
// $_GET['t'] = $_GET['s'];
// $_GET['s'] = \x70\x68\x70\x69\x6e\x66\x6f\x28\x29
eval($_GET['t'] . "();");
?>
十六进制字符串不会被解析(而是按原样打印)并且不会被执行。
我的目标是通过 HTTP 查询参数 ($_GET)phpinfo()在eval()函数内部执行,因为我通过\x70\x68\x70\x69\x6e\x66\x6f\x28\x29了phpinfo(). 但在我的情况下,十六进制没有被解析,因此没有被执行。我做错了吗?