|
HTTP头注入/响应拆分攻击——伪造缓存投毒 摘要:HTTP响应拆分(HTTP Response Splitting)和头注入攻击通过注入回车换行符(CRLF,\r\n),使Web服务器输出两个HTTP响应,攻击者可控制第二个响应的内容,实现XSS、缓存投毒甚至网站劫持。尽管现代Web框架已部分缓解,但某些错误的头拼接方式仍可导致CRLF注入。本文阐释CRLF注入原理,演示利用方式,并给出验证输入、使用安全头函数等防御方案。 关键词:黑客网站攻击;CRLF注入;HTTP响应拆分;渗透测试;缓存投毒;头注入防御 一、引言HTTP协议使用CRLF(\r\n)分隔头部和主体,两个连续CRLF标记头部结束。当应用将用户输入动态添加到响应头(如Location、Set-Cookie、重定向URL)而未做过滤时,攻击者可注入\r\n来添加任意头部甚至第二个响应。这种攻击可导致会话固定、XSS、中间人攻击。 二、攻击原理2.1 注入点典型场景:重定向URL参数 [size=12.573px]php
header("Location: " . $_GET['redirect_to');
攻击者提供redirect_to=/home%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0a%0d%0a<script>alert(1)</script>,导致服务器输出两个响应,浏览器解析第二个恶意响应。 2.2 缓存投毒如果中间缓存服务器(如CDN)存储了被污染的响应,则后续用户访问时将获得恶意内容,形成大规模攻击。 三、防御措施四、总结CRLF注入是常见但易被忽视的漏洞,防御核心在于:用户输入绝不能直接拼接进HTTP头,使用框架提供的安全方法或进行严格的字符过滤。
|