ISCTF2025-WEB方向WP详解
字数 2634 2025-12-17 12:17:13

ISCTF2025 WEB方向题目解析与漏洞利用技术详解

1. b@by n0t1ce b0ard

1.1 漏洞分析

  • 漏洞位置registration.php文件上传功能
  • 漏洞类型:文件上传漏洞
  • 关键缺陷:对上传文件后缀名缺乏有效检查

1.2 利用方法

  1. 直接上传Webshell文件(如PHP木马)
  2. 访问上传的恶意文件路径执行命令
  3. 通过万能密码绕过认证:
    • 闭合符:'
    • 注释符不可用
    • or被过滤,使用OR替代
    • 最终payload:admin' OR 1=1

1.3 技术要点

  • 上传后重定向到/admin/upload.php
  • 实际有效路径为根目录下的upload.php
  • 通过目录扫描发现正确路径

2. 难过的bottle

2.1 源码分析

# 黑名单过滤机制
def contains_blacklist(content):
    # 过滤多种危险字符
    blacklist = ['import', 'eval', 'exec', 'os', 'system', ...]
    for item in blacklist:
        if item in content:
            return True
    return False

2.2 Python全角字符绕过技术

  • 原理:Python3支持Unicode标准化(NFKC)
  • 关键发现:过滤函数对payload进行字符串检查,但模板引擎会进行标准化处理
  • 利用方法
    1. 使用全角字符替换关键标识符
    2. 将payload写入模板文件(如test.tpl
    3. 压缩为zip格式上传
    4. 访问触发模板渲染

2.3 payload构造要点

  • 利用{{}}模板语法注入代码
  • 标准化过程将全角字符转换为半角字符执行

3. 考察软链接

3.1 漏洞原理

  • 服务器对上传的压缩包进行自动解压
  • 缺乏对符号链接的安全检查

3.2 利用步骤

  1. 在本地创建指向目标目录的软链接:
    ln -s /target/directory link_name
    
  2. 将软链接打包为tar格式:
    tar -cvf payload.tar link_name
    
  3. 上传tar包,服务器解压后访问符号链接

3.3 注意事项

  • 避免使用图片后缀(如.jpg),防止服务器错误解析
  • 目标路径通常为根目录(/

4. ezrce

4.1 限制条件分析

  • /等路径分隔符被过滤
  • 数字字符被禁止
  • 只能使用括号和分号等有限字符

4.2 无参RCE构造技术

// 基础payload结构
?code=print_r(scandir(current(localeconv())));

4.3 目录遍历payload解析

// 连续向上跳转10次到达根目录
chdir(next(scandir(current(localeconv()))));
// 重复10次后读取flag
readfile('flag');

4.4 关键函数说明

  • localeconv():返回本地化数字格式信息数组
  • current():获取数组第一个元素(.
  • scandir():扫描目录内容
  • chdir():改变当前工作目录
  • next():移动数组指针并返回值

5. 来签个到吧

5.1 反序列化漏洞链

入口条件:输入必须以blueshark:开头

5.2 类结构分析

class ShitMountant {
    public $url;
    
    public function __destruct() {
        $this->fetch();
    }
    
    public function fetch() {
        include($this->url);
    }
}

5.3 利用链构造

  1. 实例化ShitMountant
  2. 设置$url为恶意URL
  3. 序列化对象
  4. 添加blueshark:前缀提交

5.4 最终效果

  • 反序列化触发__destruct()
  • 调用fetch()方法包含远程文件
  • 写入Webshell到shell.php

6. mv_upload

6.1 源码审计发现

  • 存在备份文件:/.index.php~
  • 使用mv命令的-S选项

6.2 恶意文件名构造

预期命令

mv -S php t. ./var/www/html/upload/

6.3 利用步骤

  1. 上传三个特殊命名文件:
    • 文件名1:-S
    • 文件名2:php
    • 文件名3:t.
  2. 服务器执行mv命令拼接后缀
  3. t.php组合成t.php可执行文件

6.4 关键技术点

  • 利用命令行参数注入
  • 文件上传顺序影响命令构造
  • -S选项指定备份后缀

7. Bypass

7.1 环境分析

  • PHP版本:7.1.x
  • create_function可用(7.3+废弃)

7.2 create_function机制

// 内部实现原理
function create_function($args, $code) {
    eval("function lambda_func($args) { $code }");
}

7.3 payload构造

};system('ls /');//
  • 使用}闭合匿名函数
  • ;开始新命令
  • //注释后续内容

7.4 绕过技术

  • 八进制编码绕过过滤:\xxx格式
  • 十六进制编码(注意字符限制)
  • 异或运算构造payload

8. 双生序列

8.1 多阶段攻击架构

  1. index.php:序列化数据存储入口
  2. api.php:PHP反序列化触发点
  3. run.php:Python反序列化执行点

8.2 PHP POP链构造

攻击流程

  1. 注入Bridge对象到数据库
  2. api.php反序列化触发Bridge::fetch()
  3. 调用Writer::write_all()生成Python payload
  4. Shark::__toString()生成PHP触发文件

8.3 Python漏洞利用

双重漏洞

  1. 密钥同步绕过:固定密钥kaqikaqi
  2. Pickle反序列化RCE:无白名单限制

8.4 完整攻击步骤

  1. 生成Python Pickle payload
  2. 构造PHP序列化字符串
  3. 注入数据库并获取ID
  4. 访问api.php?id=X铺设环境
  5. 访问run.php?action=run触发RCE

9. ezpop

9.1 空格绕过技术

IFS(内部字段分隔符)原理

  • 默认包含:空格、制表符、换行符
  • 替代字符:%20(空格)、%09(制表符)、%0a(换行符)
  • 特殊字符:<>(重定向符)

9.2 payload构造

// 使用制表符替代空格
system\t('ls\t/');
// 或使用重定向符
system<('ls</');

9.3 反序列化链

  • 利用类方法调用链
  • passthru替代system执行命令
  • 特殊字符绕过过滤检查

10. include_upload

10.1 Phar反序列化利用

漏洞原理

  • include函数处理phar文件时自动反序列化
  • 压缩格式绕过内容检查

10.2 利用步骤

  1. 生成恶意phar文件:
    $phar = new Phar('payload.phar');
    $phar->startBuffering();
    $phar->addFromString('test.txt', 'payload');
    $phar->setStub('<?php __HALT_COMPILER(); ?>');
    $phar->stopBuffering();
    
  2. 使用gz或bzip2压缩
  3. 修改后缀为.png上传
  4. 通过include触发反序列化

10.3 关键技术点

  • 文件名包含.phar触发特殊处理
  • 压缩绕过内容安全检查
  • Phar元数据反序列化

11. Who am I

11.1 Flask应用漏洞

漏洞位置pydash.set_函数参数可控

11.2 模板路径劫持

攻击payload

/operate?username=app&password=jinja_loader.searchpath[0]&confirm_password=/
/impression?point=flag

11.3 漏洞利用原理

  1. 修改Jinja2模板加载路径:
    • app.jinja_loader.searchpath[0]指向根目录
  2. 模板渲染时加载指定文件:
    • point参数控制模板文件名
    • 渲染/flag文件内容

11.4 技术要点

  • pydash.set_函数属性注入
  • Jinja2模板加载器路径控制
  • Flask应用上下文利用

总结

本教学文档详细分析了ISCTF2025 WEB方向的各类漏洞利用技术,涵盖文件上传、代码注入、反序列化、参数绕过等多个安全领域。每种漏洞都提供了完整的原理分析、利用方法和实战技巧,为Web安全学习和CTF竞赛提供了全面的技术参考。

ISCTF2025 WEB方向题目解析与漏洞利用技术详解 1. b@by n0t1ce b0ard 1.1 漏洞分析 漏洞位置 : registration.php 文件上传功能 漏洞类型 :文件上传漏洞 关键缺陷 :对上传文件后缀名缺乏有效检查 1.2 利用方法 直接上传Webshell文件(如PHP木马) 访问上传的恶意文件路径执行命令 通过万能密码绕过认证: 闭合符: ' 注释符不可用 or 被过滤,使用 OR 替代 最终payload: admin' OR 1=1 1.3 技术要点 上传后重定向到 /admin/upload.php 实际有效路径为根目录下的 upload.php 通过目录扫描发现正确路径 2. 难过的bottle 2.1 源码分析 2.2 Python全角字符绕过技术 原理 :Python3支持Unicode标准化(NFKC) 关键发现 :过滤函数对payload进行字符串检查,但模板引擎会进行标准化处理 利用方法 : 使用全角字符替换关键标识符 将payload写入模板文件(如 test.tpl ) 压缩为zip格式上传 访问触发模板渲染 2.3 payload构造要点 利用 {{}} 模板语法注入代码 标准化过程将全角字符转换为半角字符执行 3. 考察软链接 3.1 漏洞原理 服务器对上传的压缩包进行自动解压 缺乏对符号链接的安全检查 3.2 利用步骤 在本地创建指向目标目录的软链接: 将软链接打包为tar格式: 上传tar包,服务器解压后访问符号链接 3.3 注意事项 避免使用图片后缀(如.jpg),防止服务器错误解析 目标路径通常为根目录( / ) 4. ezrce 4.1 限制条件分析 / 等路径分隔符被过滤 数字字符被禁止 只能使用括号和分号等有限字符 4.2 无参RCE构造技术 4.3 目录遍历payload解析 4.4 关键函数说明 localeconv() :返回本地化数字格式信息数组 current() :获取数组第一个元素( . ) scandir() :扫描目录内容 chdir() :改变当前工作目录 next() :移动数组指针并返回值 5. 来签个到吧 5.1 反序列化漏洞链 入口条件 :输入必须以 blueshark: 开头 5.2 类结构分析 5.3 利用链构造 实例化 ShitMountant 类 设置 $url 为恶意URL 序列化对象 添加 blueshark: 前缀提交 5.4 最终效果 反序列化触发 __destruct() 调用 fetch() 方法包含远程文件 写入Webshell到 shell.php 6. mv_ upload 6.1 源码审计发现 存在备份文件: /.index.php~ 使用 mv 命令的 -S 选项 6.2 恶意文件名构造 预期命令 : 6.3 利用步骤 上传三个特殊命名文件: 文件名1: -S 文件名2: php 文件名3: t. 服务器执行mv命令拼接后缀 t. 与 php 组合成 t.php 可执行文件 6.4 关键技术点 利用命令行参数注入 文件上传顺序影响命令构造 -S 选项指定备份后缀 7. Bypass 7.1 环境分析 PHP版本:7.1.x create_function 可用(7.3+废弃) 7.2 create_ function机制 7.3 payload构造 使用 } 闭合匿名函数 ; 开始新命令 // 注释后续内容 7.4 绕过技术 八进制编码绕过过滤: \xxx 格式 十六进制编码(注意字符限制) 异或运算构造payload 8. 双生序列 8.1 多阶段攻击架构 index.php :序列化数据存储入口 api.php :PHP反序列化触发点 run.php :Python反序列化执行点 8.2 PHP POP链构造 攻击流程 : 注入 Bridge 对象到数据库 api.php 反序列化触发 Bridge::fetch() 调用 Writer::write_all() 生成Python payload Shark::__toString() 生成PHP触发文件 8.3 Python漏洞利用 双重漏洞 : 密钥同步绕过:固定密钥 kaqikaqi Pickle反序列化RCE:无白名单限制 8.4 完整攻击步骤 生成Python Pickle payload 构造PHP序列化字符串 注入数据库并获取ID 访问 api.php?id=X 铺设环境 访问 run.php?action=run 触发RCE 9. ezpop 9.1 空格绕过技术 IFS(内部字段分隔符)原理 : 默认包含:空格、制表符、换行符 替代字符: %20 (空格)、 %09 (制表符)、 %0a (换行符) 特殊字符: < 、 > (重定向符) 9.2 payload构造 9.3 反序列化链 利用类方法调用链 passthru 替代 system 执行命令 特殊字符绕过过滤检查 10. include_ upload 10.1 Phar反序列化利用 漏洞原理 : include 函数处理phar文件时自动反序列化 压缩格式绕过内容检查 10.2 利用步骤 生成恶意phar文件: 使用gz或bzip2压缩 修改后缀为.png上传 通过include触发反序列化 10.3 关键技术点 文件名包含 .phar 触发特殊处理 压缩绕过内容安全检查 Phar元数据反序列化 11. Who am I 11.1 Flask应用漏洞 漏洞位置 : pydash.set_ 函数参数可控 11.2 模板路径劫持 攻击payload : 11.3 漏洞利用原理 修改Jinja2模板加载路径: app.jinja_loader.searchpath[0] 指向根目录 模板渲染时加载指定文件: point 参数控制模板文件名 渲染 /flag 文件内容 11.4 技术要点 pydash.set_ 函数属性注入 Jinja2模板加载器路径控制 Flask应用上下文利用 总结 本教学文档详细分析了ISCTF2025 WEB方向的各类漏洞利用技术,涵盖文件上传、代码注入、反序列化、参数绕过等多个安全领域。每种漏洞都提供了完整的原理分析、利用方法和实战技巧,为Web安全学习和CTF竞赛提供了全面的技术参考。