PHP中eval()函数内部的嵌套变量引用
我试图将引用另一个变量的变量传递到PHP中的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
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
。