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。

    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/)>

    浏览器的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,并能产生会话固定漏洞。

    修复

    过滤 、 之类的行结束符,避免输入的数据污染其他 HTTP 首部字段。

  • 相关阅读:
    大数据时代下的隐私保护(二)
    互联网+究竟想干什么
    MySql触发器使用解说
    系统函数C字符串的实现(12):strset
    參加湛江新教育群线下活动有感
    Axure多人协作
    hdu (1556 树状数组)
    [leetcode]Subsets II
    Oracle insert all语句介绍
    JQuery 实现锚点链接之间的平滑滚动
  • 原文地址:https://www.cnblogs.com/Silkage/p/13328060.html
Copyright © 2011-2022 走看看