欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

CRLF注入原理

程序员文章站 2022-11-22 10:24:47
CRLF 指的是回车符(CR,ASCII 13,\r,%0d) 和换行符(LF,ASCII 10,\n,%0a),操作系统就是根据这个标识来进行换行的,你在键盘输入回车键就是输出这个字符,只不过win和linux系统采用的标识不一样而已。 在HTTP当中HTTP的Header和Body之间就是用两个 ......

crlf 指的是回车符(cr,ascii 13,\r,%0d) 和换行符(lf,ascii 10,\n,%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

CRLF注入原理

这里并没有利用成功,如果利用成功的话,响应包会出现一行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之前,需要过滤 \r 、\n 之类的行结束符,避免输入的数据污染其它http首部字段。


参考文献