You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含Expect:100-continue的请求返回双响应,如何构造XSS POC?

关于Expect:100-continue触发双响应场景下的XSS问题分析与POC构造指导

一、301响应体的浏览器处理逻辑

在你遇到的场景中,301响应的内容不会被浏览器当作可渲染的payload处理,核心原因如下:

  • HTTP 100 Continue是临时响应,仅用于告知客户端可以发送请求体,浏览器会直接忽略它的内容。
  • 对于后续的301重定向响应,浏览器的核心逻辑是优先执行Location头指定的跳转,而非渲染响应体。只有当跳转失败(比如URL解析错误、用户手动取消)时,才会 fallback 显示301的响应体,但这种场景下自动脚本执行也会被浏览器安全策略限制。

二、Location头XSS无法触发的原因

你提到Location头存在XSS漏洞但未触发,本质是浏览器对Location头的强约束:

  • 浏览器会严格按照URL规范解析Location值,自动转义<>等特殊字符,且现代浏览器默认拦截javascript:伪协议在Location头中的执行,哪怕服务器返回恶意值,也会直接拒绝执行。
  • 双响应场景并未改变浏览器对301的处理优先级,100 Continue只是额外的临时响应,不会干扰跳转逻辑。

三、触发XSS的POC构造思路

要在该场景下触发XSS,核心是让浏览器放弃跳转、转而渲染响应体,或干扰浏览器的响应解析逻辑,以下是具体方向:

1. 破坏Location头有效性,阻止跳转

构造不符合URL规范的Location值,让浏览器解析失败从而放弃跳转,例如:

Location: \x00\x01\x02<script>alert(1)</script>

注:不同浏览器的URL解析容错性不同,需测试多种无效格式(如超长内容、非法字符组合)。

2. 在301响应体中注入恶意脚本

结合第一步的无效Location头,修改301的响应体,直接插入恶意脚本:

<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>CloudFront</center>
<script>alert(document.domain)</script>
</body>
</html>

浏览器放弃跳转后,会渲染该响应体,从而执行脚本。

3. 尝试响应拆分攻击,伪装正常HTML响应

利用双响应的特性,构造畸形响应,将第二个响应伪装成200 OK的HTML响应,绕过301的跳转逻辑:

HTTP/1.1 100 Continue\r\n
\r\n
HTTP/1.1 200 OK\r\n
Server: CloudFront\r\n
Date: Tue, 07 Nov 2023 08:06:33 GMT\r\n
Content-Type: text/html\r\n
Content-Length: 80\r\n
Connection: close\r\n
\r\n
<html><body><script>alert('XSS')</script></body></html>

注:现代CDN(如CloudFront)和浏览器有响应拆分防护机制,需针对具体环境测试。

4. 利用旧版浏览器兼容性漏洞

部分旧版本浏览器对100 Continue响应的解析存在逻辑漏洞,可尝试在100与301响应之间插入异常换行、空白字符,干扰浏览器的响应拆分逻辑,让响应体中的脚本被错误解析执行。

内容的提问来源于stack exchange,提问作者New Acc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 02:38:35