TPCTF2025复现(全)
字数 1547 2025-08-30 06:50:28

TPCTF2025 复现技术解析

1. Baby Layout 题目解析

题目特点

  • postid参数有限制
  • 使用异步请求处理report路由
  • 设置5秒超时
  • 将flag注入到Cookie中
  • 限制访问频率为每分钟2次
  • 使用session保存会话状态
  • 字符长度限制为500

漏洞利用

  1. XSS绕过

    • 使用DOMPurify进行XSS过滤
    • 在生成POST阶段将{{content}}替换
    • 可以拼接绕过过滤
  2. POC构造

    
    
    • 利用DOMPurify不会消除img标签的特性
    • 注意注入时机是在生成post时进行替换

2. Safe Layout 题目解析

与Baby Layout的区别

  • 设置了ALLOWED_ATTR: []禁用所有HTML属性
  • 但自定义属性仍然可以使用

绕过方法

<div custom-attribute="malicious"></div>

3. Safe Layout Revenge 题目解析

新增限制

  • ALLOW_ARIA_ATTR: false:禁止ARIA属性
  • ALLOW_DATA_ATTR: false:禁止data-*自定义属性

绕过思路

  1. 利用DOMPurify特定版本漏洞
  2. 参考文章:https://ensy.zip/posts/dompurify-323-bypass/
  3. 利用{{content}}置空特性进行穿插绕过

4. Supersqli 题目解析

环境特点

  • 使用SQLite3数据库
  • 严格的黑名单过滤
  • 需要通过密码更新获取flag

关键文件

  1. go文件:作为代理层进行WAF过滤
  2. views.py:实际执行查询

注入技术

  1. 时间盲注

    • 构造延时数据包验证漏洞存在
  2. Quine注入

    • 查询语句和查询结果保持一致的特殊注入手法
    • 将MySQL示例适配为SQLite3语法

示例POC

SELECT REPLACE(REPLACE('SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)),CHAR(36),"$") AS "quine"',CHAR(34),CHAR(39)),CHAR(36),'SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)),CHAR(36),"$") AS "quine"') AS "quine"

5. Thumbor 1 题目解析

环境分析

  • 仅提供Dockerfile
  • 需要从GitHub拉取应用源码
  • 提示不是0day漏洞

漏洞发现

  1. 检查README发现"unsafe"相关可疑描述
  2. 可能存在的漏洞:
    • ImageMagick任意文件读取漏洞
    • 参考:https://www.freebuf.com/vuls/359193.html

利用方法

  1. 使用P牛脚本生成特殊PNG文件
  2. 保存为flag.png进行利用

6. Thumbor 2 题目解析

与Thumbor 1的区别

  • 题目描述与Thumbor 1无关
  • 同样不是0day漏洞
  • 增加了更多文件

漏洞利用

  1. 官方WP参考

    • https://www.canva.dev/blog/engineering/when-url-parsers-disagree-cve-2023-38633/
  2. 利用技术

    • 使用libsvg进行XInclude回退实现任意文件读取
  3. POC示例

    <xi:include href="file:///etc/passwd" xmlns:xi="http://www.w3.org/2001/XInclude"/>
    

注意事项

  • 外部文件加载后内容无法覆盖更新
  • 如使用2.svg,修改内容后仍加载原始内容

7. Are-You-Incognito 题目解析

题目要求

  • 必须是一个HTTP服务才能被处理
  • 使用visit.js加载指定扩展
  • 设置5秒超时
  • 每分钟只允许2次请求

关键代码分析

if (browser.extension.inIncognitoContext) {
    // 访问/flag路由
}

攻击方法

  1. DOM Clobbering攻击

    • 劫持覆盖全局变量
    • 绕过inIncognitoContext检查
  2. 实现步骤

    • 创建伪造的extension对象
    • 设置inIncognitoContext为true
    • 提供/flag路由供扩展访问

示例实现

<script>
// 伪造extension对象
window.browser = {
    extension: {
        inIncognitoContext: true
    }
};
</script>

总结

本系列题目涵盖了多种Web安全技术:

  1. XSS绕过技术(包括DOMPurify绕过)
  2. SQL注入高级技巧(Quine注入)
  3. 文件读取漏洞利用
  4. DOM Clobbering攻击
  5. 各种安全限制的绕过方法

每道题目都考察了不同的安全知识点,需要结合具体环境特点进行分析和利用。

TPCTF2025 复现技术解析 1. Baby Layout 题目解析 题目特点 对 postid 参数有限制 使用异步请求处理 report 路由 设置5秒超时 将flag注入到Cookie中 限制访问频率为每分钟2次 使用session保存会话状态 字符长度限制为500 漏洞利用 XSS绕过 : 使用DOMPurify进行XSS过滤 在生成POST阶段将 {{content}} 替换 可以拼接绕过过滤 POC构造 : 利用DOMPurify不会消除 img 标签的特性 注意注入时机是在生成post时进行替换 2. Safe Layout 题目解析 与Baby Layout的区别 设置了 ALLOWED_ATTR: [] 禁用所有HTML属性 但自定义属性仍然可以使用 绕过方法 3. Safe Layout Revenge 题目解析 新增限制 ALLOW_ARIA_ATTR: false :禁止ARIA属性 ALLOW_DATA_ATTR: false :禁止data-* 自定义属性 绕过思路 利用DOMPurify特定版本漏洞 参考文章:https://ensy.zip/posts/dompurify-323-bypass/ 利用 {{content}} 置空特性进行穿插绕过 4. Supersqli 题目解析 环境特点 使用SQLite3数据库 严格的黑名单过滤 需要通过密码更新获取flag 关键文件 go 文件:作为代理层进行WAF过滤 views.py :实际执行查询 注入技术 时间盲注 : 构造延时数据包验证漏洞存在 Quine注入 : 查询语句和查询结果保持一致的特殊注入手法 将MySQL示例适配为SQLite3语法 示例POC 5. Thumbor 1 题目解析 环境分析 仅提供Dockerfile 需要从GitHub拉取应用源码 提示不是0day漏洞 漏洞发现 检查README发现"unsafe"相关可疑描述 可能存在的漏洞: ImageMagick任意文件读取漏洞 参考:https://www.freebuf.com/vuls/359193.html 利用方法 使用P牛脚本生成特殊PNG文件 保存为flag.png进行利用 6. Thumbor 2 题目解析 与Thumbor 1的区别 题目描述与Thumbor 1无关 同样不是0day漏洞 增加了更多文件 漏洞利用 官方WP参考 : https://www.canva.dev/blog/engineering/when-url-parsers-disagree-cve-2023-38633/ 利用技术 : 使用libsvg进行XInclude回退实现任意文件读取 POC示例 : 注意事项 外部文件加载后内容无法覆盖更新 如使用2.svg,修改内容后仍加载原始内容 7. Are-You-Incognito 题目解析 题目要求 必须是一个HTTP服务才能被处理 使用visit.js加载指定扩展 设置5秒超时 每分钟只允许2次请求 关键代码分析 攻击方法 DOM Clobbering攻击 : 劫持覆盖全局变量 绕过 inIncognitoContext 检查 实现步骤 : 创建伪造的extension对象 设置 inIncognitoContext 为true 提供/flag路由供扩展访问 示例实现 总结 本系列题目涵盖了多种Web安全技术: XSS绕过技术(包括DOMPurify绕过) SQL注入高级技巧(Quine注入) 文件读取漏洞利用 DOM Clobbering攻击 各种安全限制的绕过方法 每道题目都考察了不同的安全知识点,需要结合具体环境特点进行分析和利用。