隐藏在 URL Credentials 中的 Payload:一种被忽视的 Web 绕过路径
字数 1545 2025-08-30 06:50:11

隐藏在URL Credentials中的Payload:一种被忽视的Web绕过路径

一、URL Credentials原理深度解析

HTTP URL标准结构

URL Credentials指的是URL中username:password@部分,其标准结构为:

protocol://username:password@host:port/path?query#fragment

现代浏览器处理方式

  • Chrome 59+:直接去除地址栏显示用户信息
  • Chrome 65+、Firefox、Safari:全面禁止带有用户名密码的URL进行跳转(尤其是HTTPS下)
  • 现代浏览器访问这种格式的URL会:
    • 直接报错
    • 重定向失败
    • 忽略用户信息部分

关键特性

  1. 浏览器不会将username:password发送给目标站点,但会参与URL的host解析
  2. host部分仍是@之后的部分,因此实际请求发送到了目标主机
  3. 某些Web应用、Nginx、CDN、WAF会对完整URL进行正则处理,可能错误解析

二、攻击核心思想

攻击者可以将payload插入到usernamepassword字段中:

  • 这些数据在浏览器访问时不可见
  • 服务端通常不会注意到
  • 可用于:
    • DOM XSS
    • 混淆日志
    • 绕过WAF
    • 欺骗SSRF验证

示例

https://<script>alert(1)</script>@evil.com
  • 浏览器请求的是evil.com
  • WAF如果只做"全局keyword匹配"或"正则主机检查",可能会忽略<script>部分

三、DOM XSS绕过实例

目标站点配置

  • 云WAF开启
  • 拦截规则包含:<script>javascript:onloadalert(等关键词
  • 重定向接口:/go?url=...

攻击方式

  1. 常规Payload:被WAF拦截(403 Forbidden)
  2. 绕过Payload
    /go?url=https://<script>alert(1)</script>@evil.com
    
    • payload存储在username字段
    • WAF不检测@前内容
    • SSR渲染页面中若拼接该URL,容易造成二次执行(DOM XSS)

四、SSRF白名单绕过

攻击场景

目标使用Python <3.9的urllib.parse()解析URL:

import urllib.parse
urllib.parse.urlparse("https://admin:password123@evil.com/api")

返回结果:

ParseResult(
    scheme='https',
    netloc='admin:password123@evil.com',
    path='/api',
    ...
)

攻击效果

  • SSRF请求实际上打向evil.com
  • 白名单校验误判为合法
  • WAF误以为走的是可信接口,导致漏洞产生

五、日志注入与反欺骗

攻击方式

构造URL:

https://admin:admin123@evil.com

系统日志会记录完整URL,攻击者可以:

  1. 诱导安全人员以为admin凭据泄露
  2. 结合钓鱼页面伪造,构成渗透取证干扰链条

六、防御措施与架构建议

层级 建议
应用层 显式禁止含@的URL外链或重定向,统一做URL.normalize()处理
后端解析 使用现代标准库:Python 3.9+ urllib.parse,Java URI不带Legacy模式
SSRF防御 在解析Host后做DNS解析+IP白名单验证,不能依赖前缀判断
WAF策略 @前后部分均做关键词检测;配置基于字段结构识别
日志系统 不记录username:password部分,或统一使用掩码

七、扩展攻击链

假设目标存在以下组合:

  1. SSRF接口/?url=...
  2. DOM拼接触发跳转
  3. 站点部署了主流云WAF

构造攻击链

  1. 绕过SSRF白名单校验(走evil.com)
  2. WAF不拦截@前XSS Payload
  3. 页面跳转拼接触发XSS
  4. 利用CSP不当、Referer泄露等获取更多信息

八、总结

URL Credentials是一种被忽视的老标准,它让攻击者能将恶意payload隐匿在@前面,躲过:

  • WAF检测
  • 日志记录
  • 白名单验证

这种技术可以打通SSRF、XSS、钓鱼等多种攻击链路。在安全审计时,应特别注意检查@之前的内容。

隐藏在URL Credentials中的Payload:一种被忽视的Web绕过路径 一、URL Credentials原理深度解析 HTTP URL标准结构 URL Credentials指的是URL中 username:password@ 部分,其标准结构为: 现代浏览器处理方式 Chrome 59+ :直接去除地址栏显示用户信息 Chrome 65+、Firefox、Safari :全面禁止带有用户名密码的URL进行跳转(尤其是HTTPS下) 现代浏览器访问这种格式的URL会: 直接报错 重定向失败 忽略用户信息部分 关键特性 浏览器不会将 username:password 发送给目标站点,但会参与URL的host解析 host部分仍是 @ 之后的部分,因此实际请求发送到了目标主机 某些Web应用、Nginx、CDN、WAF会对完整URL进行正则处理,可能错误解析 二、攻击核心思想 攻击者可以将payload插入到 username 或 password 字段中: 这些数据在浏览器访问时不可见 服务端通常不会注意到 可用于: DOM XSS 混淆日志 绕过WAF 欺骗SSRF验证 示例 浏览器请求的是 evil.com WAF如果只做"全局keyword匹配"或"正则主机检查",可能会忽略 <script> 部分 三、DOM XSS绕过实例 目标站点配置 云WAF开启 拦截规则包含: <script> 、 javascript: 、 onload 、 alert( 等关键词 重定向接口: /go?url=... 攻击方式 常规Payload :被WAF拦截(403 Forbidden) 绕过Payload : payload存储在username字段 WAF不检测 @ 前内容 SSR渲染页面中若拼接该URL,容易造成二次执行(DOM XSS) 四、SSRF白名单绕过 攻击场景 目标使用Python <3.9的 urllib.parse() 解析URL: 返回结果: 攻击效果 SSRF请求实际上打向 evil.com 白名单校验误判为合法 WAF误以为走的是可信接口,导致漏洞产生 五、日志注入与反欺骗 攻击方式 构造URL: 系统日志会记录完整URL,攻击者可以: 诱导安全人员以为admin凭据泄露 结合钓鱼页面伪造,构成渗透取证干扰链条 六、防御措施与架构建议 | 层级 | 建议 | |------|------| | 应用层 | 显式禁止含 @ 的URL外链或重定向,统一做 URL.normalize() 处理 | | 后端解析 | 使用现代标准库:Python 3.9+ urllib.parse,Java URI不带Legacy模式 | | SSRF防御 | 在解析Host后做DNS解析+IP白名单验证,不能依赖前缀判断 | | WAF策略 | 对 @ 前后部分均做关键词检测;配置基于字段结构识别 | | 日志系统 | 不记录username:password部分,或统一使用掩码 | 七、扩展攻击链 假设目标存在以下组合: SSRF接口 /?url=... DOM拼接触发跳转 站点部署了主流云WAF 构造攻击链 绕过SSRF白名单校验(走evil.com) WAF不拦截 @ 前XSS Payload 页面跳转拼接触发XSS 利用CSP不当、Referer泄露等获取更多信息 八、总结 URL Credentials是一种被忽视的老标准,它让攻击者能将恶意payload隐匿在 @ 前面,躲过: WAF检测 日志记录 白名单验证 这种技术可以打通SSRF、XSS、钓鱼等多种攻击链路。在安全审计时,应特别注意检查 @ 之前的内容。