暑期练习web2:MISC web2(i春秋)

和第一题一样的开始(代码解读可看我上一篇wp)


include "flag.php";
$a = @$_REQUEST['hello'];
eval( "var_dump($a);");
show_source(__FILE__);

但这次题目的hint是:flag不在变量中
flag既然不在变量之中,那自然就在文件中喽
这时候或许一些同学就会想到文件包含那方面的知识,这里讲一下。
开头就有个include “flag.php”这里表示include已经将flag.php固定了。
有同学就要问了:固定了是虾米呀?
简单举个例子
文件包含用c语言不准确描述就是

int hello
scanf hello
a=include hello
print a

这里我们输入到hello的东西最后输出出来了
而本题呢

这题是 
int hello
scanf hello
a=eval hello
print a

我们传的hello根本没有作为include函数的参数啊
所以说include固定了flag.php,它只读取这里面的东西。因此,本题主要考察的是eval
我们利用file_get_contents,这个函数的作用是将整个文件内容读入到一个字符串中
通过这个我们试着读取flag.php中的内容
payload为:http://40aabd8c7282430db3f5ad1b195233db1587c90e0ab54614.game.ichunqiu.com/?hello=file_get_contents(‘flag.php’)
暑期练习web2:MISC web2(i春秋)_第1张图片
我们查看一下源码
暑期练习web2:MISC web2(i春秋)_第2张图片
得到了flag
另一种方法则是利用了linux的指令,并通过eval作命令执行;

暑期练习web2:MISC web2(i春秋)_第3张图片
而eval这个函数先进行替换,再执行命令
暑期练习web2:MISC web2(i春秋)_第4张图片
而cat是linux中读取文件的一个命令,所以和第一个方法类似
总结:这题就是要根据hint猜到flag是放在了文件中,所以我们要想办法读取文件,而我们也要辨别这到底是文件包含,还是利用其他方式来读取文件

你可能感兴趣的:(ctf,web)