记某次AWDP的坎坷之旅
字数 1339 2025-08-18 11:39:03

AWDP攻防竞赛技术分析与实战教学文档

1. Web ezcache题目分析与利用

1.1 题目环境分析

  • 题目提供两个源码目录:src(主源码)和packages(依赖)
  • Web根目录在/app下,但源码中也有app目录,导致路径混淆(重要注意点)

1.2 关键漏洞点

  • SSTI(服务器端模板注入)漏洞
    • generate_page函数中intro参数可控
    • 使用format()方法拼接用户输入,存在模板注入风险
    • 原始过滤仅检查adminconfig.关键词

1.3 漏洞利用方法

  1. 绕过过滤

    • 初始过滤:intro.replace("{", "").replace("..", "").replace("/", "")
    • 绕过思路:使用未过滤的模板语法,如{{7*7}}
  2. 文件上传利用

    • 可上传任意文件(除.py后缀)
    • 文件保存路径:/app/static/目录下
    • 可结合SSTI实现RCE

1.4 修复方案

  • 加强SSTI过滤:彻底禁用{}符号或使用更安全的模板渲染方式
  • 限制文件上传类型:白名单方式限制可上传文件扩展名

2. Whatis题目分析与利用

2.1 题目特点

  • 通过控制变量法进行fuzz测试
  • 关键发现:禁用特定导入包(file模块)会导致服务异常

2.2 漏洞定位

  • 异常文件位于file/__init__.py
  • POST请求存在文件读取功能

2.3 漏洞利用

  1. 过滤绕过

    • 原始过滤:替换{, .., /, cat, flag, tac等关键词
    • 绕过思路:使用未过滤的命令如lessmore或编码方式
  2. 修复方案

    • 实现更严格的路径校验
    • 禁用危险命令执行功能

3. Security System题目分析与利用

3.1 漏洞类型

  • Jackson反序列化漏洞
  • 使用Spring 2.7.12版本(已知存在漏洞)

3.2 关键代码分析

  • /safeobject路由接收objclasses参数
  • 通过反射获取类并进行反序列化
  • SecurityCheck.deObject()方法存在安全隐患

3.3 漏洞利用链

  1. 修改safe属性

    {
      "@type": "com.example.jackson.SecurityCheck",
      "safe": false
    }
    
  2. 利用treeMap属性

    {
      "@type": "com.example.jackson.SecurityCheck",
      "safe": false,
      "treeMap": {
        "@type": "java.util.HashSet",
        "map": {
          "base64编码的payload": null
        }
      }
    }
    
  3. 攻击载荷

    • 反弹Shell
    • Spring内存马注入

3.4 修复方案

  • 禁用危险的base64反序列化功能
  • 限制可反序列化的类范围
  • 升级Jackson库版本

4. AWDP实战技巧总结

4.1 路径处理要点

  • 必须仔细确认Web根目录和实际路径
  • 可疑路径都应尝试(如/app和app同时存在时)

4.2 过滤策略

  • 不必过度过滤,关键过滤1-2个点即可
  • 禁用单个字母如"f"可能比禁用完整单词"flag"更有效

4.3 依赖分析

  • 检查render等关键函数的依赖关系
  • 通过禁用依赖测试服务异常点

4.4 代码处理

  • 不必追求最少代码,确保功能完整更重要
  • 可疑功能点可先删除测试服务反应

5. 附录:关键Payload示例

5.1 Jackson反序列化完整攻击Payload

POST /safeobject HTTP/1.1
Host: target
Content-Type: application/x-www-form-urlencoded

obj={"@type":"com.example.jackson.SecurityCheck","safe":false,"treeMap":{"@type":"java.util.HashSet","map":{"rO0ABXNy...(base64编码payload)":"null"}}}&classes=org.springframework.ui.ExtendedModelMap

5.2 Spring内存马注入

{
  "@type": "com.example.jackson.SecurityCheck",
  "safe": false,
  "treeMap": {
    "@type": "java.util.HashSet",
    "map": {
      "rO0ABXNy...(内存马payload)": ""
    }
  }
}

本教学文档涵盖了三个典型AWDP题目的详细分析、利用方法和修复方案,以及实战中的关键技巧,可作为AWDP竞赛的参考指南。

AWDP攻防竞赛技术分析与实战教学文档 1. Web ezcache题目分析与利用 1.1 题目环境分析 题目提供两个源码目录:src(主源码)和packages(依赖) Web根目录在/app下,但源码中也有app目录,导致路径混淆(重要注意点) 1.2 关键漏洞点 SSTI(服务器端模板注入)漏洞 : generate_page 函数中 intro 参数可控 使用 format() 方法拼接用户输入,存在模板注入风险 原始过滤仅检查 admin 和 config. 关键词 1.3 漏洞利用方法 绕过过滤 : 初始过滤: intro.replace("{", "").replace("..", "").replace("/", "") 绕过思路:使用未过滤的模板语法,如 {{7*7}} 文件上传利用 : 可上传任意文件(除.py后缀) 文件保存路径: /app/static/ 目录下 可结合SSTI实现RCE 1.4 修复方案 加强SSTI过滤:彻底禁用 {} 符号或使用更安全的模板渲染方式 限制文件上传类型:白名单方式限制可上传文件扩展名 2. Whatis题目分析与利用 2.1 题目特点 通过控制变量法进行fuzz测试 关键发现:禁用特定导入包(file模块)会导致服务异常 2.2 漏洞定位 异常文件位于 file/__init__.py POST请求存在文件读取功能 2.3 漏洞利用 过滤绕过 : 原始过滤:替换 { , .. , / , cat , flag , tac 等关键词 绕过思路:使用未过滤的命令如 less 、 more 或编码方式 修复方案 : 实现更严格的路径校验 禁用危险命令执行功能 3. Security System题目分析与利用 3.1 漏洞类型 Jackson反序列化漏洞 使用Spring 2.7.12版本(已知存在漏洞) 3.2 关键代码分析 /safeobject 路由接收 obj 和 classes 参数 通过反射获取类并进行反序列化 SecurityCheck.deObject() 方法存在安全隐患 3.3 漏洞利用链 修改safe属性 : 利用treeMap属性 : 攻击载荷 : 反弹Shell Spring内存马注入 3.4 修复方案 禁用危险的base64反序列化功能 限制可反序列化的类范围 升级Jackson库版本 4. AWDP实战技巧总结 4.1 路径处理要点 必须仔细确认Web根目录和实际路径 可疑路径都应尝试(如/app和app同时存在时) 4.2 过滤策略 不必过度过滤,关键过滤1-2个点即可 禁用单个字母如"f"可能比禁用完整单词"flag"更有效 4.3 依赖分析 检查render等关键函数的依赖关系 通过禁用依赖测试服务异常点 4.4 代码处理 不必追求最少代码,确保功能完整更重要 可疑功能点可先删除测试服务反应 5. 附录:关键Payload示例 5.1 Jackson反序列化完整攻击Payload 5.2 Spring内存马注入 本教学文档涵盖了三个典型AWDP题目的详细分析、利用方法和修复方案,以及实战中的关键技巧,可作为AWDP竞赛的参考指南。