一次JAVA系统三个组合拳RCE代码审计案例
免责申明本文章仅用于信息安全防御技术分享,因用于其他用途而产生不良后果,作者不承担任何法律责任,请严格遵循中华人民共和国相关法律法规,禁止做一切违法犯罪行为。
一、前言
跟着小朋友师傅学习了一段时间代码审计,来验证一下成果,也把自己成果审计到的一个组合拳RCE漏洞分享给师傅们,希望师傅们不要嫌弃。
针对上述系统进行代码审计,当然源码是通过py得到的。
二、框架识别
小朋友老师说过,在做审计之前先清楚对方系统框架是一个什么框架,这里进行查看。
使用到的是Spring-MVC框架方式进行开发的,并且配置信息位于spring-servlet.xml文件当中,这个框架的中间件一般配置为Tomcat,并且tomcat下如果权限认证错误是存在一定的权限绕过风险的(小朋友说的)。
并且在这里进行查看对应的class文件,确定为SPring-mvc开发方式。
三、鉴权绕过
刚才我们分析到了对应的springmvc架构,查看配置文件,主要是进行查看权限是如何进行校验的。
在这里可以看到权限校验是通过一个类AuthInterceptor类来进行验证,跟入这个类进行查看。
相关代码如下,其中我们着重观看下面的代码。
在这里获取URL的方式存在错误,配合Tocmat中间价存在绕过风险,同时继续往下看。
这里进行判断我们的URL是否包含uploadFileApp并且请求是否走的是上传数据包,这里我们不是,继续往下走代码。
然后进行判断,是否包含actionCloudModifyFile以及actionCloudAddFile这两个路径,
这里同样是进行判断是否为上传请求,这两个路径的上传请求,继续往下看。
这里是重点,可以看到首先获取我们的session,我们模拟攻击视角肯定是没有session的,于是我们的u肯定为null,在下main进行判断我们的网址是否包含在属性opens当中,如果我们的URL是其中的某一类那么久进行返回true,这里我们查看opens属性的信息。
那么这里我们就可以理解了,我们这里可以进行尝试绕过了,首先我们包含opens当中的信息的时候不进行鉴权,但是代码当中获取URL的方式有误,并且配合Tomcat导致出现解析问题,导致存在鉴权绕过。
四、文件上传
这里可以看到目标是解析JSP文件的,于是直接进行尝试定位文件上传漏洞,搜索几个常见的文件上传关键词。
*.getOriginalFilename();
最终在这里成功定位到了漏洞。
获取到文件名之后直接进行重命名保存,并未进行过滤,并且这里的路径为actionDetailTmpFile,并非拦截器当中判断的uploadFileApp、actionCloudModifyFile、actionCloudAddFile这三个路径,导致可以进行上传。
但是还要注意原由参数pa_id\text\position这几个参数。
五、漏洞验证
构造数据包成功上传相关文件,但是发现并为进行返回信息,重新回去查看代码。
确实在进行上传成功之后返回数字0。
但是在下面还有一个接口。
这里进行传递参数pa_id参数,同时进行调用方法listPhotoAdsDetailTmp方法。
查看刚才的上传代码。
发现上传成功之后会进行调用add方法,传递tmp信息,然而tmp信息当中是包含filename的,filename则为我们上传之后服务器重命名的参数,跟入add方法。
最终发现add方法保存在了表tb_photo_ads_detail_tmp当中。
然而在看我们刚才的方法。
通过传递进去pad_id可以知道。
查询了表tb_photo_ads_detail_tmp,并且该方法最后返回了查询信息。
那么我们就可以得到相关重命名之后的文件名称,尝试获取刚才上传的文件名称。
成功获取文件名称。
上传到了这个目录,拼接这个目录后跟入获取到的文件名称。
成功解析。
Re: 一次JAVA系统三个组合拳RCE代码审计案例
感谢师傅的细致分享!这个组合拳RCE案例很经典,从框架识别、鉴权绕过到文件上传和文件名获取,每一步都讲得很清楚。尤其是利用Spring MVC配置中URL获取方式与Tomcat解析差异来实现权限绕过,以及通过数据库查询拿到重命名后的文件路径,思路非常连贯。这种从前端到后端的完整攻击链分析,对理解Java安全审计实战很有帮助。请问在审计中对于类似“opens”白名单路径的发现,除了直接看配置文件,还有没有其他常用的快速定位方法?再次感谢!Re: 一次JAVA系统三个组合拳RCE代码审计案例
楼主的审计过程非常清晰,从框架识别、鉴权绕过到文件上传漏洞的定位和利用,一步步剥茧抽丝,学到了很多。尤其注意到Tomcat路径解析差异导致的鉴权绕过,以及利用数据库查询回显文件名来定位上传后的JSPshell,这个组合思路很巧妙。感谢分享实战案例,对理解SpringMVC+Tomcat下的安全风险很有帮助。Re: 一次JAVA系统三个组合拳RCE代码审计案例
感谢师傅的详细分享!这个组合拳的思路很清晰,从鉴权绕过到文件上传再到通过数据库获取重命名文件名,环环相扣,学到了很多。特别是利用Tomcat和SpringMVC的URL解析差异绕过鉴权,再配合未过滤的文件上传和另一个接口回显文件名,整个利用链设计得很巧妙。期待师傅更多审计案例!Re: 一次JAVA系统三个组合拳RCE代码审计案例
看了楼主的审计案例,思路很清晰,尤其是通过URL获取方式错误配合Tomcat解析差异来绕过鉴权,再加上文件上传后利用数据库查询获取重命名文件名的组合拳,确实很巧妙。跟着大佬学习果然能学到实战技巧,感谢分享!
页:
[1]