TPCTF2025 Web WriteUp
字数 1712 2025-08-29 08:30:12
TPCTF2025 Web题目解析与XSS绕过技术详解
1. Baby Layout题目分析
1.1 漏洞原理
该题目利用了DOMPurify库对<textarea>标签内容检测的缺陷:
- DOMPurify对
<textarea>中的内容检测存在漏洞 - 浏览器在遇到
<textarea>标签时,会将所有后续内容视为纯文本,直到遇到</textarea> - 这使得可以在
<textarea>中插入恶意内容,绕过DOMPurify的过滤
1.2 利用步骤
- 审计发现发帖子和创建layout的API都使用了DOMPurify过滤输入
- 确认该版本DOMPurify存在已知漏洞(相关CVE)
- 测试发现常规XSS payload被完全过滤
- 构造利用
<textarea>缺陷的payload:<textarea></textarea> - 通过
onerror事件触发XSS
1.3 关键点
- 利用浏览器与DOMPurify对
<textarea>处理的不一致性 - 通过图片加载失败触发
onerror事件 - 最终payload提交到
/api/layout或/api/post接口
2. Safe Layout题目分析
2.1 漏洞升级
这是Baby Layout的升级版,主要区别在于:
- 设置了
ALLOWED_ATTR白名单为空 - 但保留了
ALLOW_DATA_ATTR和ALLOW_ARIA_ATTR的默认值(true)
2.2 利用原理
DOMPurify的默认配置:
ALLOW_DATA_ATTR默认为true:允许使用data-*属性ALLOW_ARIA_ATTR默认为true:允许使用aria-*属性- 即使
ALLOWED_ATTR为空,仍可使用这些属性
2.3 利用步骤
- 构造使用
data-*或aria-*属性的payload: - 由于
/api/layout接口没有替换操作,payload得以保留 - 通过保留的HTML标签构造XSS
2.4 关键点
- 利用DOMPurify默认配置的宽松性
data-*和aria-*属性的特殊处理- 接口未对内容进行二次处理
3. Safe Layout Revenge题目分析
3.1 进一步限制
在前一题基础上增加了限制:
- 将
ALLOW_DATA_ATTR和ALLOW_ARIA_ATTR都设置为false - 需要寻找新的绕过方式
3.2 新绕过技术
利用DOMPurify检测规则的缺陷:
- DOMPurify依赖正则表达式
/<[/\w]/进行检测 - 使用
{{content}}导致出现<{这种模式 - 这种模式无法被DOMPurify正确检测
3.3 利用步骤
- 构造包含
{{content}}的payload - 利用动态内容替换构造XSS
- 示例payload:
<{{content}}script>alert(1)</script>
3.4 关键点
- 利用DOMPurify正则检测的盲区
- 动态内容替换的技巧
- 特殊字符组合绕过过滤
4. Supersqli题目分析
4.1 注入技术
-
初始尝试:
- 时间盲注:发现远程数据库和附件数据库的目标表是空的
- 堆叠注入:注入点的
raw()只支持单个语句执行,不可行
-
Quine注入:
- 通过自引用查询绕过空表限制
- 示例payload:
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
-
uwsgi中间件编码绕过:
- 利用uwsgi支持的编码方式绕过WAF
- 另一种方法:利用Go不解析filename参数的特性,绕过代理服务器对password参数的检测
4.2 关键点
- Quine注入的自引用技术
- 中间件特性导致的WAF绕过
- 不同语言处理参数的差异性
5. 防御建议
- 更新DOMPurify到最新版本
- 明确设置所有安全相关的配置选项,不要依赖默认值
- 对
ALLOW_DATA_ATTR和ALLOW_ARIA_ATTR根据实际需求进行配置 - 对
<textarea>等特殊标签进行额外检查 - 实施多层防御策略,不依赖单一过滤机制