• CRLF注入原理


    CRLF 指的是回车符(CR,ASCII 13, ,%0d) 和换行符(LF,ASCII 10, ,%0a),操作系统就是根据这个标识来进行换行的,你在键盘输入回车键就是输出这个字符,只不过win和linux系统采用的标识不一样而已。

    在HTTP当中HTTP的Header和Body之间就是用两个crlf进行分隔的,如果能控制HTTP消息头中的字符,注入一些恶意的换行,这样就能注入一些会话cookie和html代码,所以CRLF injection 又叫做 HTTP response Splitting,简称HRS。CRLF漏洞可以造成Cookie会话固定反射型XSS(可过waf)的危害,注入XSS的利用方式:连续使用两次%0d%oa就会造成header和body之间的分离,就可以在其中插入xss代码形成反射型xss漏洞。


    测试

    CRLF注入漏洞的检测也和XSS漏洞的检测差不多。通过修改HTTP参数或URL,注入恶意的CRLF,查看构造的恶意数据是否在响应头中输出。主要是在看到有重定向或者跳转的地方,可以在跳转的地址添加?url=http://baidu.com/xxx%0a%0dSet-Cookie: test123=123测试一下,通过查看响应包的数据查看结果。

    GET /index.php?c=rpzy&a=query&type=all&value=123&datatype=json&r=X1MU6E86%0a%0dSet-Cookie: test123=123 HTTP/1.1
    Host: www.xxxxyou.net
    

    这里并没有利用成功,如果利用成功的话,响应包会出现一行Set-Cookie: test123=123 数据。


    原理分析

    HRS漏洞存在的前提是 :url当中输入的字符会影响到文件,比如在重定位当中可以尝试使用%0d%0a作为crlf.

    一般网站会在HTTP头中加上Location: http://baidu.com的方式来进行302跳转,所以我们能控制的内容就是Location:后面的XXX网址,对这个地址进行污染。

    假设服务端(PHP)的处理方式:

    if($_COOKIE("security_level") == 1)
    {
        header("Location: ". $_GET['url']);
        exit;
    }
    

    代码意思是说当条件满足时,将请求包中的url参数值拼接到Location字符串中,并设置成响应头发送给客户端。

    此时服务器端接收到的url参数值是我们修改后的:
    http://baidu.com/xxx%0a%0dSet-Cookie: test123=123

    在url参数值拼接到Location字符串中,设置成响应头后,响应头就会看到:
    Set-Cookie: test123=123


    修复方式

    服务端收到前端过来的参数,在加入Location之前,需要过滤 、 之类的行结束符,避免输入的数据污染其它HTTP首部字段。


    参考文献

    https://www.jianshu.com/p/2f2e311e797b
    https://blog.csdn.net/shakeyin1998/article/details/88411756

  • 相关阅读:
    Python—函数基础篇
    C语言 文件操作(四)
    C语言 文件操作(三)
    C语言 文件操作(二)
    C语言 文件操作(一)
    C语言 生日快乐
    Matlab入门(二)
    Matlab入门(一)
    精华篇:数组指针
    汇编刷题:求一到100内的偶数之和(本程序将和按十六进制输出)
  • 原文地址:https://www.cnblogs.com/mysticbinary/p/12560080.html
Copyright © 2020-2023  润新知