CRLF注入
CRLF注入原理:
一个HTTP请求报文由四个部分组成:请求行、请求头部、空行、请求数据。
请求行和请求头的尾部都有CRLF标志,请求头和请求体之间也是通过CRLF标志分割的。
CRLF注入漏洞就是利用Http的这种报文结构,向请求行或请求头的字段注入恶意的CRLF,就能注入一些首部字段或报文主体(请求响应数据),并在响应中输出,所以CRLF又称为HTTP响应拆分漏洞(HTTP Response Splitting)。
CRLF注入漏洞的本质和XSS有点相似,攻击者将恶意数据发送给易受攻击的Web应用程序,Web应用程序将恶意数据输出在HTTP响应头中(XSS一般输出在主体中)。
所以CRLF注入漏洞的检测也和XSS漏洞的检测差不多。通过修改HTTP参数或URL,注入恶意的CRLF,查看构造的恶意数据是否在响应头中输出。
总结下:
如果你找到了一个你传给Web程序的参数最后会在响应的Http头部回显,那么这个地方可能就是一个存在CRLF注入漏洞的地方。
找到注入点后,构造恶意的CRLF字符,抓包,在请求行的url参数中加入特殊构造的CRLF字符,查看恶意数据是否在响应头中输出。
通过CRLF注入消息头引发XSS漏洞
在请求参数中插入CRLF字符:?email=a%0d%0a%0d%0a<script>alert(/xss/);</script>
服务器返回:
HTTP/1.1 200 OK
Set-Cookie:de=a
<script>alert(/xss/);</script>
原理:服务器端没有过滤\r\n,而又把用户输入的数据放在HTTP头中,从而导致安全隐患。