S2-001 一、漏洞原理 因用户提交表单数据并且验证失败时,后端会将用户之前提交的参数值使用OGNL表达式%{value}进行解析,然后重新填充到对应的表单数据中。如注册或登录页面,提交失败后一般会默认返回之前提交的数据,由于后端使用%{value}对提交的数据执行了一次OGNL 表达式解析,所以可以直接构造 Payload进行命令执行...
分析 先从漏洞原理分析以便于我们的断点: 该漏洞因为用户提交表单数据并且验证失败时,后端会将用户之前提交的参数值使用 OGNL 表达式 %{value} 进行解析,然后重新填充到对应的表单数据中。例如注册或登录页面,提交失败后端一般会默认返回之前提交的数据,由于后端使用 %{value} 对提交的数据执行了一次 OGNL 表达式解析,...
S2-001的漏洞原理是在Struts2重新渲染jsp时,对ognl表达式进行了递归解析,导致了恶意的表达式被执行。我们以Debug方式运行环境: 在此之前需下一断点,系统在运行在这里的地方会停住,在点击Submit,http请求经过tomcat容器的处理之后会到达struts2,所以可以从这里开始调试,ParametersInterceptor类接受我们输入的参数值进行处理:...
struts2漏洞 S2-001是当用户提交表单数据且验证失败时,服务器使用OGNL表达式解析用户先前提交的参数值,%{value}并重新填充相应的表单数据。例如,在注册或登录页面中。如果提交失败,则服务器通常默认情况下将返回先前提交的数据。由于服务器用于%{value}对提交的数据执行OGNL表达式解析,因此服务器可以直接发送有效载荷来执...
原理 参考:S2-001漏洞分析 由工作流程我们可以看到,当一个 HTTP 请求被Struts2处理时,会经过一系列的 拦截器(Interceptor) ,这些拦截器可以是Struts2自带的,也可以是用户自定义的。例如下图struts.xml中的package继承自struts-default,而struts-default就使用了Struts2自带的拦截器。
s2-001漏洞原理:用户提交表单时,后端会将OGNL表达式%{value}进行解析 在账号或者密码框中输入%{1+1}点击登陆后,账号或者密码框执行了表达式并且将2显示在输入框中 任意命令执行Exp: %{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"ls","/"})).redirectErrorStream(true).start(),#b=#a.ge...
Struts2漏洞系列之S2-001分析 0x00 前⾔ 最近在学习java的相关漏洞,所以Struts2的漏洞⾃然是绕不开的。为了更好的理解漏洞原理,计划把Struts2所有的漏洞⾃⼰都做⼀个复现。并且⾃⼰去实现相关的POC。相关的环境搭建,以及POC实现细节,参考⽂章我都会尽可能的写清楚。⽅便⾃⼰记录学习过程的...
Struts2 漏洞系列之S2-001分析 0x00 前言 最近在学习java的相关漏洞,所以Struts2的漏洞自然是绕不开的。为了更好的理解漏洞原理,计划把Struts2所有的漏洞自己都做一个复现。并且自己去实现相关的POC。相关的环境搭建,以及POC实现细节,参考文章我都会尽可能的写清楚。方便自己记录学习过程的同时,方便看文章的人学习。
S2-001 漏洞原理: 后端将用户之前提交的参数使用OGNL表达式%{}进行解析,然后重新填充到对应的表单数据中,例如注册或登录页面,提交失败后端一般会默认返回之前提交的数据,由于后端使用%{value}对提交的数据执行了一次OGNL表达式解析,所以可以直接构造payload进行命令执行 ...