文章总结: CRLF注入攻击是一种网络安全漏洞,攻击者通过在用户输入中插入回车符(CR)和换行符(LF)来篡改HTTP响应头或请求头。这种攻击可导致会话固定、XSS攻击、开放重定向、缓存中毒等危害。防御措施包括严格的输入验证和过滤、配置WAF规则、使用标准API、全局参数过滤等。检测方法有手动检测、自动化工具(CRLFsuite)、代码审查等。 综合评分: 90 文章分类: 漏洞分析,WEB安全,渗透测试,安全建设,应用安全
CRLF注入攻击
原创
安融技术
安融技术
2025年12月15日 11:38 广东
CRLF注入攻击是一种当用户将CRLF字符插入到应用中而触发漏洞的攻击技巧。CRLF字符(%0d%0a)在许多互联网协议中表示行的结束,包括HTML,该字符解码后即为rn。这些字符可以被用来表示换行符,并且当该字符与HTTP协议请求和响应的头部一起联用时就有可能会出现各种各样的漏洞,包括HTTP请求走私(HTTP Request Smuggling)和HTTP响应拆分(HTTP Response Splitting)。
CRLF注入攻击的原理
CRLF注入攻击(Carriage Return Line Feed Injection)是一种网络安全漏洞,攻击者通过在用户输入中插入回车符(CR,\r )和换行符(LF,\n ),篡改HTTP响应头或请求头,从而实现各种恶意攻击。这种攻击也被称为HTTP响应拆分(HTTP Response Splitting)。
1.HTTP协议中的CRLF:
• HTTP协议使用CRLF( \r\n )作为行的分隔符,用于分隔HTTP请求头和响应头中的每一行。
• HTTP响应头以两个连续的CRLF( \r\n\r\n )结束,标志着响应头的结束和响应体的开始。
2.漏洞成因:
• 当应用程序将用户输入直接或间接用于HTTP响应头中,且未对输入中的CRLF字符进行严格过滤时,攻击者可以通过注入CRLF字符,篡改HTTP响应头。
• 例如,攻击者可以在URL参数中注入%0d%0a(URL编码的 \r\n ),导致服务器在构建HTTP响应头时将这些字符误认为是行分隔符。
3.攻击示例:
• 正常响应:
• 攻击者构造恶意请求:
• 服务器响应:
CRLF注入攻击的危害
1.会话固定攻击:
• 攻击者可以通过注入额外的Set-Cookie头,强制设置受害者的会话标识符。
• 示例:
2.跨站脚本攻击(XSS):
• 攻击者可以通过注入X-XSS-Protection头,禁用浏览器的XSS保护机制。
• 示例:
3.开放重定向:
• 攻击者可以通过注入Location头,强制用户重定向到恶意网站。
• 示例:
4.缓存中毒:
• 当CRLF注入的响应被缓存服务器缓存时,错误内容会被存储在缓存中,影响多个用户。
• 持续性威胁:这种错误内容可能会持续影响后续的合法用户。
5.HTTP响应拆分:
• 攻击者可以通过注入额外的响应头或响应体,导致信息泄露。
• 响应混淆:攻击者可以注入额外的响应头,导致响应混淆,绕过安全机制。
CRLF注入攻击的检测方法
1.手动检测:
• 构造测试请求:在请求中插入CRLF字符(如 %0d%0a ),观察服务器的响应。
• 示例:
• 检查响应:如果服务器响应中包含了注入的头信息(如Set-Cookie: a=1),则可能存在CRLF注入漏洞。
2.自动化检测工具:
• CRLFsuite:一个自动化检测CRLF注入漏洞的工具。
• 安装:
• 使用:
3.Web应用防火墙(WAF):
• 配置WAF规则:通过配置WAF规则,检测和阻止包含CRLF字符的恶意请求。
• 示例:
4.代码审查:
• 审查输入处理:检查应用程序代码,确保对用户输入进行了严格的验证和过滤,特别是对CRLF字符的处理。
• 示例:
防御措施
1.输入验证和过滤:
• 严格验证用户输入:对所有用户输入进行严格的验证和过滤,特别是对CRLF字符的处理。
• 使用安全库:使用如OWASP的ESAPI等安全库,对用户输入进行编码和转义。
• 示例:
2.配置WAF规则:
• 检测和阻止恶意请求:通过配置WAF规则,检测和阻止包含CRLF字符的恶意请求。
• 示例:
3.启用HTTP头保护机制:
• 禁用XSS保护机制:通过设置X-XSS-Protection头,启用浏览器的XSS保护机制。
• 示例:
4.安全配置:
• 限制响应头:限制应用程序可以设置的响应头,避免注入额外的响应头。
• 示例:
5.安全审计和监控:
• 定期审计:定期对应用程序进行安全审计,发现和修复潜在的CRLF注入漏洞。
• 监控日志:监控应用程序的日志,及时发现和响应异常行为。
6.使用标准API:
• 标准API:使用标准的API设置文件名或响应头,避免直接拼接用户输入。
• 示例:
7.全局参数过滤:
• 全局Filter:通过一个全局Filter,对所有参数进行一次性清洗。
• 示例:
class CRLFSanitizerFilter implements Filter {
public function doFilter(ServletRequest $req, ServletResponse $res, FilterChain $chain) {
$request = new HttpServletRequestWrapper($req);
$chain->doFilter($request, $res);
}
}
8.Nginx配置:
• 拦截请求:通过Nginx配置,拦截包含CRLF字符的请求。
• 示例:
CRLF注入攻击通过在用户输入中插入CRLF字符,篡改HTTP响应头或请求头,从而实现各种恶意攻击,如会话固定、XSS攻击、开放重定向等。
查看原文:《CRLF注入攻击》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论