zoukankan      html  css  js  c++  java
  • CRLF注入

    CRLF是  回车 + 换行( )的简称。在HTTP协议中,HTTP Header 与 HTTP Body 是用两个CRLF分隔的,浏览器就是根据这两个CRLF来取出HTTP 内容并显示出来。所以,一旦我们能够控制HTTP 消息头中的字符,注入一些恶意的换行,这样我们就能注入一些会话 Cookie 或者 HTML 代码,所以 CRLF Injection 又叫 HTTP Response Splitting,简称HRS。

    CRLF漏洞的修复:处理好 、  这两个保留字符。

    HRS是比XSS危害更大的安全问题,具体是为什么,我们往下看。

    对于 HRS 最简单的利用方式是注入两个 ,之后在写入 XSS 代码,来构造一个 XSS。

    举个例子,一般网站会在 HTTP 头中用 Location: http://baidu.com 这种方式来进行302跳转,所以我们能控制的内容就是Location: 后面的XXX某个网址。

    所以一个正常的302跳转包是这样:

    HTTP/1.1 302 Moved Temporarily 
    Date: Fri, 27 Jun 2014 17:52:17 GMT 
    Content-Type: text/html 
    Content-Length: 154 
    Connection: close 
    Location: http://www.sina.com.cn

    但如果我们输入的是

    http://www.sina.com.cn%0aSet-cookie:JSPSESSID%3Dwooyun

    注入了一个换行,此时的返回包就会变成这样:

    HTTP/1.1 302 Moved Temporarily 
    Date: Fri, 27 Jun 2014 17:52:17 GMT 
    Content-Type: text/html 
    Content-Length: 154 
    Connection: close 
    Location: http://www.sina.com.cn 
    Set-cookie: JSPSESSID=wooyun

    这个时候这样我们就给访问者设置了一个SESSION,造成一个 "会话固定漏洞"

    当然,HRS 并不仅限于会话固定,通过注入两个 CRLF 就能造成一个无视浏览器  Filter的反射型 XSS。

    比如一个网站接受 url 参数 http://test.sina.com.cn/?url=xxx ,xxx放在 Location 后面作为一个跳转。如果我们输入的是:

    http://test.sina.com.cn/?url=%0d%0a%0d%0a<img src=1 οnerrοr=alert(/xss/)>

    我们的返回包就会变成这样:

    HTTP/1.1 302 Moved Temporarily 
    Date: Fri, 27 Jun 2014 17:52:17 GMT 
    Content-Type: text/html 
    Content-Length: 154 
    Connection: close 
    Location:
    
    <img src=1 οnerrοr=alert(/xss/)>

    之前说了浏览器会根据第一个 CRLF 把HTTP包分成头和体,然后将体显示出来。于是我们这里<img>这个标签就会显示出来,造成一个XSS。

    为什么说是无视浏览器 Filter 的,这里涉及到另一个问题。

    浏览器的 Filter 是浏览器应对一些反射型 XSS 做的保护策略,当 URL 中含有 XSS 相关特征的时候就会过滤掉不显示在页面中,所以不能触发XSS。

    怎样才能关掉 Filter?一般来说用户这边是不行的,只有数据包中 http 头含有X-XSS-Protection并且值为0的时候,浏览器才不会开 Filter。

    说到这里应该就很清楚了,HRS不正是注入HTTP头的一个漏洞吗,我们可以将X-XSS-Protection:0注入到数据包中,再用两个CRLF来注入XSS代码,这样就成功地绕过了浏览器 Filter,并且执行我们的反射型XSS。

    所以说HRS的危害大于XSS,因为它能绕过一般 XSS 所绕不过的filter,并能产生会话固定漏洞。

    我们来一个真实案例吧。

    新浪某分站含有一个 URL 跳转漏洞,危害并不大,于是我就想到了CRLF Injection,当我测试

    http://xxx.sina.com.cn/?url=
    
    <img src=1>

    的时候,发现图片已经输出在页面中了,说明CRLF注入成功了:

    01.jpg

    那么我们试试XSS看看:

    02.jpg

    看控制台,果然被 XSS Filter 拦截了。

    那么我们就注入一个 X-XSS-Protection:0 到数据包中,看看什么效果:

    03.jpg

    @mramydnei 还想到了一个利用字符编码来绕过 XSS Filter的方法,当编码是 is-2022-kr时浏览器会忽略%0f,这样我们在onerror后面加个%0f就能绕过filter,前提是注入一个<meta charset=ISO-2022-KR>

    04.jpg

    当然,在Location:这里注入只有webkit内核浏览器才能够利用,其他浏览器可能会跳转、出错。不过对于chrome的使用量来说,危害已经足够了。

    如何修复HRS漏洞,当然是过滤  、 之类的换行符,避免输入的数据污染到其他HTTP头。

    原文:https://www.leavesongs.com/PENETRATION/Sina-CRLF-Injection.html

  • 相关阅读:
    SpringBoot自动装配源码
    对称加密、非对称加密、数字签名
    k8s部署mysql数据持久化
    docker部署 springboot 多模块项目+vue
    ES入门及安装软件
    prometheus入门介绍及相关组件、原理讲解
    流水线 Sonar 代码扫描
    postgresql数据库 查询表名、备注及字段、长度、是否可控、是否主键等信息
    Helm中Tiller镜像下载失败的解决办法
    程序员孔乙己
  • 原文地址:https://www.cnblogs.com/csnd/p/11807668.html
Copyright © 2011-2022 走看看