渗透测试中利用 403 状态码绕过访问限制的方法
1. 概述
在 Web 安全测试过程中,403 Forbidden 状态码表示服务器理解请求但拒绝授权。这通常由访问控制列表(ACL)、Web 应用防火墙(WAF)或服务器配置引起。虽然看似无法访问,但通过深入分析 HTTP 协议机制和服务器配置逻辑,往往能找到绕过限制的方法。本文详细介绍多种常见的 403 绕过技巧,涵盖端口探测、请求头修改、路径混淆及扫描策略等。
主要介绍在渗透测试过程中遇到 403 Forbidden 状态码时的多种绕过技巧。涵盖端口探测、Host 头伪造、请求路径覆盖、Referer 欺骗、代理 IP 伪装及扩展名绕过等方法。通过修改 HTTP 请求头参数或利用服务器配置漏洞,可尝试获取受限资源访问权限。同时提供防御建议,帮助开发者加固 Web 应用安全。

在 Web 安全测试过程中,403 Forbidden 状态码表示服务器理解请求但拒绝授权。这通常由访问控制列表(ACL)、Web 应用防火墙(WAF)或服务器配置引起。虽然看似无法访问,但通过深入分析 HTTP 协议机制和服务器配置逻辑,往往能找到绕过限制的方法。本文详细介绍多种常见的 403 绕过技巧,涵盖端口探测、请求头修改、路径混淆及扫描策略等。
许多 Web 服务可能部署在同一台服务器的不同端口上。管理员可能仅对主域名开放了 80/443 端口,而忽略了其他内部服务端口(如 8080, 8000, 8081 等)。这些端口可能运行着未受保护的后台管理系统或 API 接口。
nmap -sV -p- <target_ip>
curl -v http://<target_ip>:8080/admin
HTTP 请求头中的 Host 字段用于指定目标主机。部分 Web 应用(尤其是虚拟主机环境)依赖 Host 头判断路由规则。如果后端配置不当,攻击者可以通过修改 Host 值指向白名单内的子域名或 IP,从而绕过基于域名的访问控制。
subdomain.target.com, admin.target.comGET / HTTP/1.1
Host: valid-subdomain.target.com
某些反向代理服务器(如 Nginx, Apache)或负载均衡器支持特定的扩展 Header 来重写请求路径。如果后端应用信任这些 Header 而非原始请求路径,攻击者可利用此特性绕过 WAF 对特定路径的限制。
X-Original-URLX-Rewrite-URLX-Loc-PathX-Forwarded-Prefiximport requests
url = "http://target.com/auth/login"
headers = {
"X-Original-URL": "/auth/login",
"X-Rewrite-URL": "/auth/login"
}
response = requests.get(url, headers=headers)
print(response.status_code) # 可能返回 200
并非所有服务器都支持上述 Header。需根据具体中间件版本进行测试。例如,Nginx 默认不处理 X-Original-URL,除非配置了 proxy_set_header。
部分网站通过检查 Referer 头来实施防盗链或来源验证。如果服务器逻辑错误地将 Referer 作为唯一权限校验依据,攻击者可伪造合法的来源页面地址以绕过限制。
Referer 校验。Referer 值。
GET /restricted/page HTTP/1.1
Host: target.com
Referer: https://target.com/allowed/page
开发者常通过 Nginx 代理识别客户端真实 IP 并实施访问频率限制或黑白名单。然而,许多框架会优先读取自定义 Header 中的 IP 信息,导致攻击者可以伪造 IP 地址绕过限制。
X-Originating-IPX-Remote-IPX-Client-IPX-Forwarded-ForX-Real-IPX-Custom-IP-Authorizationheaders = {
"X-Forwarded-For": "127.0.0.1",
"X-Client-IP": "127.0.0.1",
"X-Custom-IP-Authorization": "127.0.0.1"
}
requests.get("http://target.com/api", headers=headers)
服务端应强制信任 X-Forwarded-For 仅来自可信代理,并在应用层校验会话 Token 而非单纯依赖 IP。
Web 服务器对文件扩展名的解析存在差异。通过添加特殊字符、重复斜杠、编码字符或大小写混合,可能触发服务器解析逻辑的异常,从而绕过针对特定扩展名或目录的拦截。
/admin/, /admin//, /admin////admin/., /admin/./, /admin/../%2f (斜杠), %2e (点), %20 (空格)/admin?, /admin??/admin;, /admin..;/site.com/admin => 403
site.com/admin/ => 200
site.com/admin// => 200
site.com/admin/* => 200
site.com/admin/. => 200
site.com/%2f/admin => 200
site.com/admin%20/ => 200
site.com/admin..;/ => 200
遇到 403 时,应启用支持 403 探测的目录扫描工具。常用工具包括 Dirsearch, Gobuster, FFuF。
.git, .env, backup)的字典。dirsearch -u http://target.com -e php,html,txt --force-redirect
ffuf -w wordlist.txt -u http://target.com/FUZZ -H "X-Original-URL: /FUZZ"
部分 Linux 文件系统区分大小写,而 Windows 不区分。尝试 Admin, ADMIN, aDmIn 等变体。
对特殊字符进行两次 URL 编码,可能绕过 WAF 的单次解码过滤。
在某些情况下,HTTPS 重定向到 HTTP 可能导致 Host 头丢失或变更,可利用此机会重新协商连接。
为了有效防止 403 被绕过,建议采取以下措施:
X-Forwarded-For 等 Header,从负载均衡层获取真实 IP。403 状态码并非不可逾越的障碍。通过深入理解 HTTP 协议、服务器配置及中间件逻辑,安全研究人员可以发现潜在的访问控制缺陷。在实际测试中,应遵循合法合规的原则,仅在获得授权的情况下进行测试。同时,开发者和运维人员应重视上述绕过场景,及时修补配置漏洞,提升系统整体安全性。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online