0x01:whitelabel error page SpEL RCE
0x01:whitelabel error page SpEL RCE
利用条件:
spring boot 1.1.0-1.1.12、1.2.0-1.2.7、1.3.0
至少知道一个触发 springboot 默认错误页面的接口及参数名
利用方法:
步骤一:找到一个正常传参处
比如发现访问 /article?id=xxx
,页面会报状态码为 500 的错误: Whitelabel Error Page
,则后续 payload 都将会在参数 id 处尝试。
步骤二:执行 SpEL 表达式
输入 /article?id=${7*7}
,如果发现报错页面将 7*7 的值 49 计算出来显示在报错页面上,那么基本可以确定目标存在 SpEL 表达式注入漏洞。
由字符串格式转换成 0x**
java 字节形式,方便执行任意代码:
执行 calc
命令
漏洞原理:
spring boot 处理参数值出错,流程进入
org.springframework.util.PropertyPlaceholderHelper
类中此时 URL 中的参数值会用
parseStringValue
方法进行递归解析其中
${}
包围的内容都会被org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration
类的resolvePlaceholder
方法当作 SpEL 表达式被解析执行,造成 RCE 漏洞
漏洞分析:
漏洞环境:
正常访问:
执行 calc
命令:
附注:controller/Article.java 中路由中接收了id参数,所以payload在article?id=
Last updated
Was this helpful?