ICLESCTF-Writeup
字数 2233 2025-08-29 08:30:12
CTF Writeup 教学文档:命令执行绕过、SSTI、SQL注入、文件上传等技巧
1. Web安全挑战
1.1 ping_server - 命令执行绕过
题目类型:命令执行绕过
关键点:
- WAF将常见命令分隔符替换为空
- 需要绕过过滤执行系统命令
解决方案:
- 使用未过滤的命令分隔符或组合
- 典型payload结构:
command1;command2或command1&&command2
防御措施:
- 避免直接拼接用户输入到系统命令
- 使用白名单验证输入
- 转义所有特殊字符
1.2 template_injection - SSTI (服务器端模板注入)
题目类型:服务器端模板注入
关键点:
- 传入参数为
name - 过滤了括号
(),限制了传统SSTI payload的使用
解决方案:
- 使用
lipsum函数读取环境变量 - 典型payload结构:
{{lipsum.__globals__.__builtins__.open('/etc/passwd').read()}}
进阶技巧:
- 当括号被过滤时,可以使用属性访问链
- 利用
__globals__访问全局变量 - 使用
__builtins__访问内置函数
防御措施:
- 使用沙盒环境执行模板
- 限制模板可访问的对象和方法
- 对用户输入进行严格过滤
1.3 ezsql - SQL注入
题目类型:SQLite手工注入
关键点:
- 数据库为SQLite
- 需要手工构造注入语句
解决方案:
- 发现表名:
SELECT name FROM sqlite_master WHERE type='table'
- 发现Secrets表后爆flag:
SELECT * FROM Secrets
SQLite注入特点:
- 使用
sqlite_master系统表获取元数据 - 字符串连接使用
||而非+ - 注释使用
--或/* */
防御措施:
- 使用参数化查询
- 最小权限原则
- 输入验证和过滤
1.4 upload-difficult - 文件上传漏洞
题目类型:文件上传漏洞
关键点:
- 未对上传文件类型进行有效过滤
- 可直接上传PHP文件获取shell
解决方案:
- 直接上传PHP webshell文件
- 访问上传的文件路径执行代码
非预期解:
- 题目本意可能是考察PHAR文件上传
- 但由于逻辑缺陷导致可直接上传PHP
防御措施:
- 验证文件类型和内容
- 存储上传文件时重命名
- 限制可执行文件的存储位置
- 设置适当的文件权限
2. 杂项(MISC)挑战
2.1 Interesting_web - 源码分析
解题步骤:
- 访问网页查看源码
- 在
cc.gif中分帧查看图片 - 发现隐藏的flag
技巧:
- 使用工具如
binwalk分析文件 - 逐帧查看GIF动画
- 检查文件元数据
2.2 Hidden_Evidence - 隐写术
解题步骤:
- 保存页面中的特定图片
- 用文本编辑器打开图片文件
- 发现base64编码的数据
- 解码后加上flag格式
技巧:
- 检查文件的十六进制内容
- 尝试不同编码方式
- 注意文件末尾的附加数据
2.3 网络迷踪 - OSINT(开源情报)
解题步骤:
- 使用Google搜图功能
- 定位图片大致位置
- 根据文章内容精确定位
- 在珠江西路前加上"珠江新城"得到flag
技巧:
- 使用多个搜索引擎反向图片搜索
- 结合地理特征和文字线索
- 验证多个可能的位置
3. 密码学(Crypto)挑战
3.1 xor_index_cipher - 异或加密
加密原理:
- 基于索引和异或操作的加密算法
解密步骤:
- 分析加密代码逻辑
- 逆向操作过程
- 实现解密算法
关键点:
- 理解异或操作的可逆性
- 跟踪索引变化
- 精确还原加密过程
3.2 RSA - 非对称加密
解题步骤:
- 分析给出的RSA参数
- 实现解密算法
- 成功获取flag
关键点:
- 理解RSA数学原理
- 正确处理大数运算
- 注意填充方案
3.3 破解数据流 - 流密码分析
解题步骤:
- 分析加密数据流
- 识别加密模式
- 实现解密算法
- 获取原始flag
技巧:
- 分析数据流模式
- 尝试已知明文攻击
- 验证解密结果
4. PWN挑战
4.1 easy_pwn_2 - 简单逆向
解题步骤:
- 直接用文本编辑器打开文件
- 在文件中搜索flag格式
- 直接获取flag
技巧:
- 检查文件的字符串表
- 使用
strings命令快速查找 - 分析文件元数据
4.2 calculator - 缓冲区溢出
漏洞分析:
calculate(&argc)函数存在缓冲区溢出s变量没有长度限制- 存在直接读取flag的函数
利用步骤:
- 构造足够长的输入覆盖返回地址
- 将返回地址覆盖为读flag函数的地址
- 触发漏洞执行目标函数
关键点:
- 确定偏移量
- 处理地址对齐
- 绕过可能的保护机制(如ASLR)
防御措施:
- 使用安全的字符串函数
- 启用栈保护(Stack Canary)
- 使用地址随机化(ASLR)
- 编译时启用栈不可执行(NX)
5. 通用CTF技巧总结
-
Web安全:
- 始终检查输入验证和过滤逻辑
- 尝试多种编码和绕过技术
- 理解服务器端处理流程
-
密码学:
- 精确实现加密/解密算法
- 注意数据格式和编码
- 利用已知弱点(如RSA的小指数)
-
逆向工程:
- 静态分析与动态调试结合
- 识别关键函数和漏洞点
- 构造精确的利用载荷
-
杂项:
- 全面检查文件内容和元数据
- 使用合适的工具进行分析
- 结合多种信息源解决谜题
-
漏洞利用:
- 理解内存布局和保护机制
- 精确控制程序执行流
- 利用现有功能(如后门函数)