影响版本:

2.0.0-2.0.9

1.0.0-1.0.5

0x00 前言

这个漏洞与之前那个SpringBoot的SpEL表达式注入漏洞点基本一样,而且漏洞爆出来的时间点也差不多,可是没有找到那个漏洞的CVE编号,不知道是什么原因。

这个漏洞的触发点也是对用户传的参数的递归解析,从而导致SpEL注入,可是两者的补丁方式大不相同。Springboot的修复方法是创建一个NonRecursive类,使解析函数不进行递归。而SpringSecurityOauth的修复方法则是在前缀${前生成一个六位的字符串,只有六位字符串与之相同才会对其作为表达式进行解析。然而如果请求足够多,这种补丁也是会失效的。

0x01 调试分析

payload:
http://localhost:8080/oauth/authorize?response_type=token&client_id=acme&redirect_uri=${new%20java.lang.ProcessBuilder(new%20java.lang.String(new%20byte[]{99,97,108,99})).start()}

首先,这个漏洞是在错误页触发的,所以这里在错误页的控制器打个断点。可以看到,最后渲染视图的时候使用了SpelView,并传入一个模板字符串,跟springboot的洞类似。

然后跟到render方法,接收模板字符串之后,接着使用replacePlaceholders方法,对模板进行解析。

跟进一下replacePlaceholders方法

跟进parseStringValue方法,这个方法与springboot中的方法基本相同,简单看一下。

72行进行一次递归,用于解析模板中类似于${${}}的结构。由于这里的模板只是一个单纯的${errorSummary},故不跟进这里。

73行是将errorSummary作为参数传入SpEL模板解析引擎

可以看到,35行将errorSummary转换成了一个字符串,注意看这个值,其中包含我们的payload:${xxxx}。

return之后回到parseStringValue函数,将返回值赋值给propVal。

继续跟进,到87行,这里对propVal又进行了一次递归解析。而propVal的值中刚好包含我们的payload(即包含“${}”)

跟进递归,到66行成功将我们的payload从${}中提取出来,马上就到触发点了

跟进到73行,将payload传入resolvePlaceholder,继续跟进

成功在35行将payload作为SpEL表达式解析,弹出了计算器。

0x02 补丁分析

可以看到,这里在${前加了个

RandomValueStringGenerator().generate(),用于生成一个随机字符串。可是正如前面说的,如果可以发出足够多的请求,那么这个补丁依旧是可以被利用的。

0x03 参考

Spring Security OAuth RCE (CVE-2016-4977) 漏洞分析

SpringSecurityOauth RCE (CVE-2016-4977) 分析与复现的更多相关文章

  1. DLink 815路由器栈溢出漏洞分析与复现

    DLink 815路由器栈溢出漏洞分析与复现 qemu模拟环境搭建 固件下载地址 File DIR-815_FIRMWARE_1.01.ZIP - Firmware for D-link DIR-81 ...

  2. CVE 2021-44228 Log4j-2命令执行复现及分析

    12月11日:Apache Log4j2官方发布了2.15.0 版本,以修复CVE-2021-44228.虽然 2.15.0 版本解决了Message Lookups功能和JNDI 访问方式的问题,但 ...

  3. Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)

    0x00 漏洞描述 Windows系列服务器于2019年5月15号,被爆出高危漏洞,该漏洞影响范围较广如:windows2003.windows2008.windows2008 R2.windows ...

  4. 2016年终分析(传统开发与网络时代的Java开发)

    2016重大事件:(在此将2016年的开发称为传统开发) 1.乌镇互联网大会大会(大数据&云计算) 2.某东struts2安全漏洞 3.作为一个程序呀对于淘宝双11和双12的分析应该是最好的案 ...

  5. SpringBoot SpEL表达式注入漏洞-分析与复现

    目录 0x00前言 0x01触发原因 0x02调试分析 0x03补丁分析 0x04参考文章 影响版本: 1.1.0-1.1.12 1.2.0-1.2.7 1.3.0 修复方案:升至1.3.1或以上版本 ...

  6. thinkphp5.0.22远程代码执行漏洞分析及复现

    虽然网上已经有几篇公开的漏洞分析文章,但都是针对5.1版本的,而且看起来都比较抽象:我没有深入分析5.1版本,但看了下网上分析5.1版本漏洞的文章,发现虽然POC都是一样的,但它们的漏洞触发原因是不同 ...

  7. Nexus Repository Manager 3(CVE-2019-7238) 远程代码执行漏洞分析和复现

    0x00 漏洞背景 Nexus Repository Manager 3是一款软件仓库,可以用来存储和分发Maven,NuGET等软件源仓库.其3.14.0及之前版本中,存在一处基于OrientDB自 ...

  8. [CVE-2017-5487] WordPress <=4.7.1 REST API 内容注入漏洞分析与复现

    记录下自己的复现思路 漏洞影响: 未授权获取发布过文章的其他用户的用户名.id 触发前提:wordpress配置REST API 影响版本:<= 4.7 0x01漏洞复现 复现环境: 1) Ap ...

  9. webmin RCE漏洞利用及分析

    Webmin是目前功能最强大的基于Web的Unix系统管理工具.管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作. 利用条件:webmin <= 1.910 原因:官网 Sou ...

随机推荐

  1. iphone连接电脑itunes之后 C盘突然小很多被占了很多空间

    很有可能是你的iTunes开启了自动备份,把iphone上的数据都备份到了电脑上,而默认目录就是在C盘.我们可以找到并删除它,换C盘一个清白. 我的路径参考如下: C:\Users\scc\AppDa ...

  2. tomcat 绑定ipv4端口

    在<tomcat>/bin目录打开catalina.sh,然后添加如下内容: JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=t ...

  3. ThinkPHP5从零基础搭建CMS系统(二)

    接上节,开启wamp集成环境,在浏览器地址栏输入http://localhost/cms/public,即可运行项目,但是这边域名太长,做一下处理. 注:需要查看tp5全部教程,请点击右侧thinkp ...

  4. Hype-v 共享文件办法

    Hype-v在Windows下跑Windows系统,其效率要远好于VMWare,唯一蛋疼的就是剪贴板不能复制文件.共享文件的方案就剩下以下几种: 远程访问 虚拟磁盘 挂载镜像 挂载镜像把每个文件都制作 ...

  5. 使用input file上传文件中onChange事件只触发一次问题

    每次上传文件的时候,都会将当前的文件路径保存至$event.target.value中,当第二次选择文件时,由于两次$event.target.value相同,所以不会触发change事件. 解决方案 ...

  6. 去重是distinct还是group by?

    distinct简单来说就是用来去重的,而group by的设计目的则是用来聚合统计的,两者在能够实现的功能上有些相同之处,但应该仔细区分,因为用错场景的话,效率相差可以倍计. 单纯的去重操作使用di ...

  7. 关于Linux虚拟化技术KVM的科普

    虚拟化技术应用越来越广泛,虚拟化技术需求越来越强劲.KVM.XEN.Docker等比较热门,尤其是KVM技术越来越受欢迎. 基于此背景,了解一下KVM+QEMU就有点必要了. 从网上收集了一些资料进行 ...

  8. 关于Linux虚拟化技术KVM的科普 科普二(KVM虚拟机代码揭秘)

    代码分析文章<KVM虚拟机代码揭秘--QEMU代码结构分析>.<KVM虚拟机代码揭秘--中断虚拟化>.<KVM虚拟机代码揭秘--设备IO虚拟化>.<KVM虚拟 ...

  9. InnoDB页压缩技术

    Ⅰ.想起一个报错 1.1 创建表报错 (root@localhost) [(none)]> create tablespace ger_space add datafile 'ger_space ...

  10. Golang 嵌套map赋值办法

    http://my.oschina.net/sol/blog/159060 m := map[string]map[string]string{} mm, ok := m["kkk" ...