渗透测试中利用 403 状态码绕过访问限制的方法
1. 概述
在 Web 安全测试过程中,403 Forbidden 状态码表示服务器理解请求但拒绝授权。这通常由访问控制列表(ACL)、Web 应用防火墙(WAF)或服务器配置引起。虽然看似无法访问,但通过深入分析 HTTP 协议机制和服务器配置逻辑,往往能找到绕过限制的方法。本文详细介绍多种常见的 403 绕过技巧,涵盖端口探测、请求头修改、路径混淆及扫描策略等。
2. 端口利用与服务发现
2.1 原理
许多 Web 服务可能部署在同一台服务器的不同端口上。管理员可能仅对主域名开放了 80/443 端口,而忽略了其他内部服务端口(如 8080, 8000, 8081 等)。这些端口可能运行着未受保护的后台管理系统或 API 接口。
2.2 操作步骤
- 端口扫描:使用 Nmap 或 Masscan 对目标 IP 进行全端口扫描。
nmap -sV -p- <target_ip> - 服务识别:确认开放端口的服务类型(HTTP, Tomcat, JBoss 等)。
- 尝试访问:直接访问非标准端口,观察响应状态码。
curl -v http://<target_ip>:8080/admin - 漏洞挖掘:若返回 200 OK,则可能存在未授权访问风险;若返回 403,可结合后续 Header 绕过技巧。
3. Host 头注入与子域名枚举
3.1 原理
HTTP 请求头中的 Host 字段用于指定目标主机。部分 Web 应用(尤其是虚拟主机环境)依赖 Host 头判断路由规则。如果后端配置不当,攻击者可以通过修改 Host 值指向白名单内的子域名或 IP,从而绕过基于域名的访问控制。
3.2 操作步骤
- 子域名收集:利用 Subfinder、Amass 等工具收集目标域名的所有子域名资产。
- Fuzz 测试:使用 Burp Suite Intruder 模块遍历收集到的子域名,检测哪些能返回 200 状态码。
- Payload 示例:
subdomain.target.com,admin.target.com
- Payload 示例:
- Host 头伪造:将请求的 Host 头修改为成功的子域名。
GET / HTTP/1.1 Host: valid-subdomain.target.com - IP 地址测试:部分系统支持直接使用 IP 作为 Host 头,尝试将 Host 改为服务器内网 IP。
4. 请求 URL 覆盖技术
4.1 原理
某些反向代理服务器(如 Nginx, Apache)或负载均衡器支持特定的扩展 Header 来重写请求路径。如果后端应用信任这些 Header 而非原始请求路径,攻击者可利用此特性绕过 WAF 对特定路径的限制。
4.2 常见 Header
X-Original-URLX-Rewrite-URLX-Loc-PathX-Forwarded-Prefix
4.3 代码示例
import requests
url =
headers = {
: ,
:
}
response = requests.get(url, headers=headers)
(response.status_code)


