在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'].");");