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

原题内容:

地址:http://120.24.86.145:8003/

 

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

 





拿到代码,还是很简单就分析出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);"); 


结果也是很明显:

 

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

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

下面理一理两个失误点,

 

 

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

 

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

 

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

划重点,这里很关键,

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

 

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

 

这个的区别我在网上没有找到详细的解释,不过,我本地做了个测试,简单说明下问题吧,求大佬解答
CTF/CTF练习平台-本地包含【eval函数闭合及代码段的理解】_第2张图片

 

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

 

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

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

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

 

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

 

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

 

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

紧接着我测试了var_dump()

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

没错,可以显示

 

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

待解决,以后补上

 

 

你可能感兴趣的:(ctf相关)