PHP:通过 URL 参数在两个字符串之间的 XOR 的 eval()



在PHP中,2个字符串之间的XOR是通过对每几个字符的ascii值进行xoing来完成的。例如,我可以写"_<(0[|@>2__[@"^":_@_{[([^30|{"而不是"echo 'hello';"

如果我运行这个PHP<?php eval("_<(0[|@>2__[@"^":_@_{[([^30|{");,它会在页面上打印hello。(沙盒中的示例(

我尝试使用以下代码在URL 参数中eval该 XOR,该代码在本地运行localhost:8000但它没有打印任何内容。

<?php
if(isset($_GET['param'])){
eval($_GET['param']);
die();
}

我编写的请求 URL 是:

http://localhost:8000/?param="_<(0[|@>2__[@"^":_@_{[([^30|{"

我的问题是为什么不计算 URL 参数中字符串之间的异或。我怎样才能让它工作?

如果在 PHP 安装中on转换错误,您将看到以下错误:

解析错误:语法错误,... 中的文件意外结尾:eval(('d 第 1 行上的代码

现在,在进一步检查错误时,我发现eval()需要语句而不是表达式。参见:eval(('d 代码中的意外$end

由于您对 eval 的参数不包含语句 而是 表达式"_<(0[|@>2__[@"^":_@_{[([^30|{"因此失败。

正如@Progman在他的评论中所建议的那样,而不是使用:

eval($_GET['param']);

使用以下内容:

eval('eval('.$_GET['param'].");");

最新更新