为什么期望:100 在 2 中继续标头拆分响应

Why Expect: 100 Continue header splitting response in 2

提问人:New Acc 提问时间:11/7/2023 最后编辑:mplungjanNew Acc 更新时间:11/7/2023 访问量:44

问:

我是一名安全研究员,在研究一个项目时,我发现当我在请求响应中插入 Expect: 100-continue 标头时,如下所示:

 HTTP/1.1 100 Continue\cr\lf
    \cr\lf

    HTTP/1.1 301 Moved Permanently
    Server: CloudFront
    Date: Tue, 07 Nov 2023 08:06:33 GMT
    Content-Type: text/html
    Content-Length: 167
    Connection: close
    Location: https://redacted.com/test.js
    X-Cache: Redirect from cloudfront
    X-XSS-Protection: 1; mode=block
    X-Frame-Options: SAMEORIGIN
    Referrer-Policy: strict-origin-when-cross-origin
    X-Content-Type-Options: nosniff
    Vary: Origin

    <html>
    <head><title>301 Moved Permanently</title></head>
    <body>
    <center><h1>301 Moved Permanently</h1></center>
    <hr><center>CloudFront</center>
    </body>
    </html>

就像在一个请求中发送 2 个响应一样,100 继续 301 重定向,其中包含两个 \cr\lf。

我想知道是否是这样,那么其他 301 重定向响应应该像 HTTP 有效负载一样工作,并且其中的任何脚本都应该在浏览器中呈现,因为两个 \cr\lf 之后出现的任何内容都意味着标头结束,现在有效负载已启动。

正如我所提到的,我是一名安全研究人员,那么我怎样才能进行概念验证来触发 XSS。

需要注意的要点:

这是一个简单的HTTP到HTTPS升级请求,大多数网站通过将HTTP重定向到HTTPS来处理这个问题。

Expect : 100 continue header is the exploit in the request. 

我尝试了很多方法,但浏览器没有渲染XSS,只是将请求重定向到Location:标头。

位置标头容易受到 XSS 的攻击。

javascript http 浏览器 cors csrf

评论

0赞 Bergi 11/7/2023
"我想知道是否是这样,那么其他 301 重定向响应应该像 HTTP 有效负载一样“ - 不。301 响应不是 100 响应的有效负载,它确实是对请求的单独第二个响应。查看 rfc-editor.org/rfc/rfc9110#name-informational-1xx
0赞 New Acc 11/7/2023
我想你弄错了。您是否知道错误赏金中的 \cr\lf 注入,如果没有,则意味着如果您以任何方式在响应中注入 \cr\lf 并且响应被拆分为两个响应c,则将另一半响应作为 HTTP 有效负载,因为任何内容都出现在两个 \cr\lf 之后,它应该被提示为 HTTP 有效负载。大多数情况下,hunter 通过链接或开放重定向注入 \cr\lf。喜欢:
0赞 New Acc 11/7/2023
但是在我的情况下,100 continue 标头注入了 \cr\lf 本身,并且位置标头容易受到 XSS 的攻击,这就是为什么我问为什么浏览器不呈现 XSS 的原因
0赞 New Acc 11/7/2023
到目前为止,在正常情况下,我在单个响应中没有找到两个 HTTP 状态。
0赞 Bergi 11/7/2023
这不是一个单一的回应。诚然,这是两个响应,在同一个连接上。

答:

0赞 Bergi 11/7/2023 #1

不可以,301 响应不充当 100 响应的有效负载。这是两个单独的响应(在同一连接上)。请参阅 HTTP 标准

1xx 响应在标头部分的末尾终止;它不能包含内容或预告片。

客户端必须能够解析在最终响应之前收到的一个或多个 1xx 响应,即使客户端不希望有响应。

当然,您可能会发现有缺陷的 HTTP 客户端,但您不太可能在浏览器上运行注入攻击。