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

我正在尝试将引用另一个变量的变量传递给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(). 但在我的情况下,十六进制没有被解析,因此没有被执行。我做错了吗?


凤凰求蛊
浏览 222回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP