Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中eval()函数内部的嵌套变量引用_Php_Security - Fatal编程技术网

PHP中eval()函数内部的嵌套变量引用

PHP中eval()函数内部的嵌套变量引用,php,security,Php,Security,我试图将引用另一个变量的变量传递到PHP中的eval()函数中 bin2hex和大多数其他PHP函数无法使用,因此我必须依赖(我所认为的)PHP特性,它可以自动将十六进制解析为ascii字符串 当我尝试运行此命令时: <?php $t = "\x70\x68\x70\x69\x6e\x66\x6f\x28\x29" eval($t . "();"); ?> 十六进制字符串未被解析(而是按原样打印)且未被执行 我的目标是通过HTTP查询参数($\u GET)在eval()函数中执行p

我试图将引用另一个变量的变量传递到PHP中的
eval()
函数中

bin2hex和大多数其他PHP函数无法使用,因此我必须依赖(我所认为的)PHP特性,它可以自动将十六进制解析为ascii字符串

当我尝试运行此命令时:

<?php
$t = "\x70\x68\x70\x69\x6e\x66\x6f\x28\x29"
eval($t . "();");
?>
十六进制字符串未被解析(而是按原样打印)且未被执行

我的目标是通过HTTP查询参数($\u GET)在
eval()
函数中执行
phpinfo()
,因为我传递了
\x70\x68\x70\x69\x6e\x66\x6f\x28\x29
,它是
phpinfo()
的十六进制。但是在我的例子中,十六进制没有被解析,因此没有被执行。我做错了吗?

为什么
eval()
无法返回方法结果?只是因为你没有返回你评估部分的任何东西。 你喜欢这个吗

$phpInfo = decode_code('\x70\x68\x70\x69\x6e\x66\x6f\x28\x29'); // here decode to string
eval('$phpinfoOut ='.$phpInfo.';'); // You can assign variable 
echo $phpinfoOut; // **TESTED IT WORKS** 
function decode_code($code){
    return preg_replace_callback(
        "@\\\(x)?([0-9a-f]{2,3})@",
        function($m){
            return chr($m[1]?hexdec($m[2]):octdec($m[2]));
        },
        $code
    );
}
为什么
eval()
无法返回方法结果?只是因为你没有返回你评估部分的任何东西。 你喜欢这个吗

$phpInfo = decode_code('\x70\x68\x70\x69\x6e\x66\x6f\x28\x29'); // here decode to string
eval('$phpinfoOut ='.$phpInfo.';'); // You can assign variable 
echo $phpinfoOut; // **TESTED IT WORKS** 
function decode_code($code){
    return preg_replace_callback(
        "@\\\(x)?([0-9a-f]{2,3})@",
        function($m){
            return chr($m[1]?hexdec($m[2]):octdec($m[2]));
        },
        $code
    );
}
“\x70\x68\x70\…”
只会变成
“phpinfo”
,因为它是用PHP字符串文字编写的
$t
已包含
“phpinfo”
<代码>评估与此无关。从
$\u get
获取的字符串实际上包含“反斜杠exseven zero…”的内容,并且不会被解释为字符串文字(因为它不是字符串文字)。如果有的话,您需要创建一个字符串文本,然后
eval
“\x70\x68\x70\…”只会变成
“phpinfo”
,因为您是用PHP字符串文本编写的
$t
已包含
“phpinfo”
<代码>评估与此无关。从
$\u get
获取的字符串实际上包含“反斜杠exseven zero…”的内容,并且不会被解释为字符串文字(因为它不是字符串文字)。如果有的话,您需要创建一个字符串文本,然后
eval