GHCTF比赛web方向详细多种解(全)
字数 1372 2025-08-29 08:30:12

GHCTF Web方向题目解析与技巧总结

文件上传与SSTI注入

题目分析

题目描述了一个文件上传服务器,存在SSTI(服务器端模板注入)漏洞。

关键点

  1. 漏洞位置在查看文件内容处
  2. 访问路径为/file/文件名,如/file/1.txt
  3. 源码中的parse方法解析XML,寻找name属性并返回其值

利用方法

  1. XML注入:构造恶意XML文件实现数据外带
  2. SSTI利用:通过文件上传触发模板注入漏洞

SQL注入绕过技巧

题目特征

  • 过滤了空格字符
  • 存在5个位置但只有4个回显位

利用方法

  1. 使用sqlmap
    sqlmap -r sql.txt -p id --dbs -T flag -C flag --dump
    
  2. 手工注入
    • 绕过空格过滤(使用注释/**/或+号替代)
    • 通过回显位获取flag表中的flag字段

PHP反序列化漏洞

POP链构造方法

  1. 寻找起点:优先查找__destruct__construct魔术方法
  2. 终极调用点:寻找可能导致代码执行的函数如call_user_func
  3. 链式调用
    • 未定义方法触发__call
    • 未定义属性触发__get
    • 对象作为函数调用触发__invoke

关键函数

  • array_walk:遍历数组并对每个元素执行回调函数
  • 利用PHP原生类进行文件操作

文件包含与路径穿越

利用方法

  1. 通过/proc/self/environ获取环境变量
  2. 路径穿越读取源码:
    ../../../../etc/passwd
    
  3. 读取Docker环境文件

.htaccess文件上传绕过

绕过技巧

  1. 添加图片文件头:
    #define width 1337
    #define height 1337
    
    或16进制头:\x00\x00\x8a\x39\x8a\x39
  2. 设置Content-Type为image/gif
  3. 上传恶意.htaccess后再上传webshell

MD5强碰撞利用

工具与方法

  1. 使用fastcoll_v1.0.0.5.exe生成碰撞文件
  2. 通过BP发包利用碰撞漏洞
  3. 本地生成payload直接攻击

PHP过滤器链利用

利用步骤

  1. 读取/proc/self/maps获取内存映射信息
  2. 定位libc库位置:
    php://filter/convert.base64-encode/resource=/lib/x86_64-linux-gnu/libc-2.31.so
    
  3. 使用工具生成利用代码:
    • GitHub项目:php-filter-iconv
    • 将maps和libc文件放在同一目录

会话伪造与加密绕过

利用方法

  1. 爆破获取管理员凭证(如admin/admin123)
  2. 读取环境变量获取加密密钥和IV
  3. 本地生成加密payload:
    # 在Linux系统上运行
    from Crypto.Cipher import AES
    # 使用获取的key和IV加密payload
    
  4. 将加密结果放入session字符串

Gopher协议利用

攻击步骤

  1. 扫描发现app.py源码
  2. 绕过127.0.0.1限制(使用0.0.0.0)
  3. 构造Gopher请求:
    /Gopher?url=gopher://0.0.0.0:8000/_POST%20/Manage%20HTTP/1.1%0D%0AHost%3A%200.0.0.0%3A8000%0D%0AContent-Type%3A%20application/x-www-form-urlencoded%0D%0AContent-Length%3A%207%0D%0A%0D%0Acmd%3Denv%0D%0A
    
  4. BP发包时双重URL编码绕过

字符串逃逸与死亡绕过

利用原理

  1. 利用替换机制导致字符串长度计算错误
  2. 例如将"flag"替换为"error"导致长度变化
  3. 构造特定用户名实现字符逃逸:
    a:2:{s:8:"username";s:29:"admin";s:5:"admin";s:5:"admin";}
    

WAF绕过技巧

常见方法

  1. 使用双引号包裹payload避免语法错误
  2. 多行payload使用回显头验证执行
  3. 绕过模块限制(如os模块):
    • 使用__import__动态导入
    • 通过子进程调用

提权方法

参考资源

  1. GTFOBins(https://gtfobins.github.io/)
  2. 利用系统工具如wc进行提权

以上总结了GHCTF比赛中Web方向的多种解题技巧和关键知识点,涵盖了文件上传、注入漏洞、反序列化、文件包含、协议利用等多个方面,提供了详细的利用方法和绕过技巧。

GHCTF Web方向题目解析与技巧总结 文件上传与SSTI注入 题目分析 题目描述了一个文件上传服务器,存在SSTI(服务器端模板注入)漏洞。 关键点 : 漏洞位置在查看文件内容处 访问路径为 /file/文件名 ,如 /file/1.txt 源码中的 parse 方法解析XML,寻找name属性并返回其值 利用方法 XML注入 :构造恶意XML文件实现数据外带 SSTI利用 :通过文件上传触发模板注入漏洞 SQL注入绕过技巧 题目特征 过滤了空格字符 存在5个位置但只有4个回显位 利用方法 使用sqlmap : 手工注入 : 绕过空格过滤(使用注释/** /或+号替代) 通过回显位获取flag表中的flag字段 PHP反序列化漏洞 POP链构造方法 寻找起点 :优先查找 __destruct 或 __construct 魔术方法 终极调用点 :寻找可能导致代码执行的函数如 call_user_func 链式调用 : 未定义方法触发 __call 未定义属性触发 __get 对象作为函数调用触发 __invoke 关键函数 array_walk :遍历数组并对每个元素执行回调函数 利用PHP原生类进行文件操作 文件包含与路径穿越 利用方法 通过 /proc/self/environ 获取环境变量 路径穿越读取源码: 读取Docker环境文件 .htaccess文件上传绕过 绕过技巧 添加图片文件头: 或16进制头: \x00\x00\x8a\x39\x8a\x39 设置Content-Type为 image/gif 上传恶意.htaccess后再上传webshell MD5强碰撞利用 工具与方法 使用 fastcoll_v1.0.0.5.exe 生成碰撞文件 通过BP发包利用碰撞漏洞 本地生成payload直接攻击 PHP过滤器链利用 利用步骤 读取 /proc/self/maps 获取内存映射信息 定位libc库位置: 使用工具生成利用代码: GitHub项目: php-filter-iconv 将maps和libc文件放在同一目录 会话伪造与加密绕过 利用方法 爆破获取管理员凭证(如admin/admin123) 读取环境变量获取加密密钥和IV 本地生成加密payload: 将加密结果放入session字符串 Gopher协议利用 攻击步骤 扫描发现app.py源码 绕过127.0.0.1限制(使用0.0.0.0) 构造Gopher请求: BP发包时双重URL编码绕过 字符串逃逸与死亡绕过 利用原理 利用替换机制导致字符串长度计算错误 例如将"flag"替换为"error"导致长度变化 构造特定用户名实现字符逃逸: WAF绕过技巧 常见方法 使用双引号包裹payload避免语法错误 多行payload使用回显头验证执行 绕过模块限制(如os模块): 使用 __import__ 动态导入 通过子进程调用 提权方法 参考资源 GTFOBins(https://gtfobins.github.io/) 利用系统工具如 wc 进行提权 以上总结了GHCTF比赛中Web方向的多种解题技巧和关键知识点,涵盖了文件上传、注入漏洞、反序列化、文件包含、协议利用等多个方面,提供了详细的利用方法和绕过技巧。