ICLESCTF-Writeup
字数 2233 2025-08-29 08:30:12

CTF Writeup 教学文档:命令执行绕过、SSTI、SQL注入、文件上传等技巧

1. Web安全挑战

1.1 ping_server - 命令执行绕过

题目类型:命令执行绕过

关键点

  • WAF将常见命令分隔符替换为空
  • 需要绕过过滤执行系统命令

解决方案

  • 使用未过滤的命令分隔符或组合
  • 典型payload结构:command1;command2command1&&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
  • 需要手工构造注入语句

解决方案

  1. 发现表名:
SELECT name FROM sqlite_master WHERE type='table'
  1. 发现Secrets表后爆flag:
SELECT * FROM Secrets

SQLite注入特点

  • 使用sqlite_master系统表获取元数据
  • 字符串连接使用||而非+
  • 注释使用--/* */

防御措施

  • 使用参数化查询
  • 最小权限原则
  • 输入验证和过滤

1.4 upload-difficult - 文件上传漏洞

题目类型:文件上传漏洞

关键点

  • 未对上传文件类型进行有效过滤
  • 可直接上传PHP文件获取shell

解决方案

  • 直接上传PHP webshell文件
  • 访问上传的文件路径执行代码

非预期解

  • 题目本意可能是考察PHAR文件上传
  • 但由于逻辑缺陷导致可直接上传PHP

防御措施

  • 验证文件类型和内容
  • 存储上传文件时重命名
  • 限制可执行文件的存储位置
  • 设置适当的文件权限

2. 杂项(MISC)挑战

2.1 Interesting_web - 源码分析

解题步骤

  1. 访问网页查看源码
  2. cc.gif中分帧查看图片
  3. 发现隐藏的flag

技巧

  • 使用工具如binwalk分析文件
  • 逐帧查看GIF动画
  • 检查文件元数据

2.2 Hidden_Evidence - 隐写术

解题步骤

  1. 保存页面中的特定图片
  2. 用文本编辑器打开图片文件
  3. 发现base64编码的数据
  4. 解码后加上flag格式

技巧

  • 检查文件的十六进制内容
  • 尝试不同编码方式
  • 注意文件末尾的附加数据

2.3 网络迷踪 - OSINT(开源情报)

解题步骤

  1. 使用Google搜图功能
  2. 定位图片大致位置
  3. 根据文章内容精确定位
  4. 在珠江西路前加上"珠江新城"得到flag

技巧

  • 使用多个搜索引擎反向图片搜索
  • 结合地理特征和文字线索
  • 验证多个可能的位置

3. 密码学(Crypto)挑战

3.1 xor_index_cipher - 异或加密

加密原理

  • 基于索引和异或操作的加密算法

解密步骤

  1. 分析加密代码逻辑
  2. 逆向操作过程
  3. 实现解密算法

关键点

  • 理解异或操作的可逆性
  • 跟踪索引变化
  • 精确还原加密过程

3.2 RSA - 非对称加密

解题步骤

  1. 分析给出的RSA参数
  2. 实现解密算法
  3. 成功获取flag

关键点

  • 理解RSA数学原理
  • 正确处理大数运算
  • 注意填充方案

3.3 破解数据流 - 流密码分析

解题步骤

  1. 分析加密数据流
  2. 识别加密模式
  3. 实现解密算法
  4. 获取原始flag

技巧

  • 分析数据流模式
  • 尝试已知明文攻击
  • 验证解密结果

4. PWN挑战

4.1 easy_pwn_2 - 简单逆向

解题步骤

  • 直接用文本编辑器打开文件
  • 在文件中搜索flag格式
  • 直接获取flag

技巧

  • 检查文件的字符串表
  • 使用strings命令快速查找
  • 分析文件元数据

4.2 calculator - 缓冲区溢出

漏洞分析

  1. calculate(&argc)函数存在缓冲区溢出
  2. s变量没有长度限制
  3. 存在直接读取flag的函数

利用步骤

  1. 构造足够长的输入覆盖返回地址
  2. 将返回地址覆盖为读flag函数的地址
  3. 触发漏洞执行目标函数

关键点

  • 确定偏移量
  • 处理地址对齐
  • 绕过可能的保护机制(如ASLR)

防御措施

  • 使用安全的字符串函数
  • 启用栈保护(Stack Canary)
  • 使用地址随机化(ASLR)
  • 编译时启用栈不可执行(NX)

5. 通用CTF技巧总结

  1. Web安全

    • 始终检查输入验证和过滤逻辑
    • 尝试多种编码和绕过技术
    • 理解服务器端处理流程
  2. 密码学

    • 精确实现加密/解密算法
    • 注意数据格式和编码
    • 利用已知弱点(如RSA的小指数)
  3. 逆向工程

    • 静态分析与动态调试结合
    • 识别关键函数和漏洞点
    • 构造精确的利用载荷
  4. 杂项

    • 全面检查文件内容和元数据
    • 使用合适的工具进行分析
    • 结合多种信息源解决谜题
  5. 漏洞利用

    • 理解内存布局和保护机制
    • 精确控制程序执行流
    • 利用现有功能(如后门函数)
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 需要手工构造注入语句 解决方案 : 发现表名: 发现Secrets表后爆flag: 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的小指数) 逆向工程 : 静态分析与动态调试结合 识别关键函数和漏洞点 构造精确的利用载荷 杂项 : 全面检查文件内容和元数据 使用合适的工具进行分析 结合多种信息源解决谜题 漏洞利用 : 理解内存布局和保护机制 精确控制程序执行流 利用现有功能(如后门函数)