传递给 $_REQUEST 数组中的 php 脚本的十六进制字符串未被解释?

Hex string passed to php script in $_REQUEST array isn't being interpreted?

这是一个非常简单的例子:

$val = "";

if(array_key_exists("param", $_REQUEST)) {
    $val = $_REQUEST["param"];
}

print "echo \"$val\"";
passthru("echo \"$val\"");

如果我通过 test.php?param=\x41,我希望 passthru() 打印 A。但是,看起来 PHP 并没有解释转义序列并将“\x41”传递给 passthru。我知道 \xAA shorthand 仅适用于 PHP 中的双引号字符串,但在上面的示例中应该满足该条件。从 $_REQUEST 中读取变量是否会修改任何内容?

转义序列不会在字符串中扩展,它们只会在代码中的字符串文字中扩展。

shell 命令 printf 将处理其格式字符串参数中的转义序列,因此您可以:

passthru("printf '$val'");

您还可以使用 shell 带引号的字符串 $'' 来处理转义序列。

passthru("echo $'$val'");