Weblogic_SSRF漏洞_CVE-2014-4210
- 1 漏洞概述
- 1.1 基础知识
- 1.2 漏洞概述
- 1.3 影响版本
- 2 漏洞原理分析
- 3 漏洞复现
- 4 漏洞修复
- 5 其他
- 6 参考
1 漏洞概述
1.1 基础知识
什么是SSRF漏洞:SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
1.2 漏洞概述
weblogic的这个uddiexplorer组件的SearchPublicRegistries.jsp页面存在一个SSRF漏洞,我们可以根据这个漏洞去判断服务器端口的开放情况,并且通过探测内网利用redis反弹shell
1.3 影响版本
weblogic 10.0.2版本
weblogic 10.3.6版本
2 漏洞原理分析
Step1:访问http://localhost:7001/uddiexplorer/SearchPublicRegistries.jsp,填入值,查看后台调用日志(我是下载weblogic的jar包,然后使用IDEA去调起的)
我们从日志中可以看到这句weblogic.uddi.client.structures.exception.XML_SoapException: www-3.ibm.com
发现异常是www-3.ibm.com
相关的参数;然后我们对比jsp提交的参数,发现异常由operator这个参数产生
Step2:然后我们进行代码审计
1:找到SearchPublicRegistries.jsp,加载一下所需要的包
我们看到SearchPublicRegistries.jsp导入了这些类包
2:经过上面的分析,我们去在SearchPublicRegistries.jsp
页面中查看operator
参数
从这我们看到了setOperator()方法对operator参数进行设置,然后我们去进一步查看setOperator方法。
可以看到setUDDIInquiryURL方法进行URL查询,然后设置到operator中
从这可以看到setURL去通过服务器设置operator的值。
3:然后我们再回去看SearchPublicRegistries.jsp里面的下一步,search.getResponse()去返回查询的结果
可以看到第一个传入的参数就是name,然后调用了findBusinessListByName()方法,接着我们进入这个方法
我们看到了返回的参数是调用了findBusiness(),然后我们进入这个方法;
进入这个方法,我们又看到调用了sendMessage方法,然后继续进入
可以看到这个sendMessage方法,sendMessage函数先将operator传递过来的数据,也就是inquery的URL属性,赋值给了BindingInfo的实例。然后通过BindingFactory工厂,使用Bindinfo实例创建了一个Binding实例。BindingFactory工厂提供了HttpClientBinding、HttpsClientBinding、Http11ClientBinding、Http11ClientBinding、JMSClientBinding接口,并通过operator参数的url协议关键字(http、https、http11、jms)决定当前使用哪个接口。而接口的send方法将使用socket函数,及operator参数传入的url创建socket并发送请求。而这里调用socket产生了ssrf漏洞。
BindingFactory根据operator传入的URL关键字,调用不同的工厂类实例化对象
如下图java_src_audit审计分析的漏洞类型及代码所在行:
3 漏洞复现
4 漏洞修复
5 其他
6 参考
链接一