CRLF注入原理

摘要:
CRLF指回车符和换行符。操作系统根据该标识符执行换行。您在键盘上输入回车键以输出此字符,但win和linux系统使用的标识符不同。CRLF漏洞可导致cookie会话固定和反射XSS的危害。注入XSS的利用方法:连续两次使用%0d%oa将导致标头和正文之间的分离,您可以将XSS代码插入其中以形成反射XSS漏洞。CRLF注入漏洞的检测也类似于XSS漏洞的检测。通过修改HTTP参数或URL来注入恶意CRLF,以检查构建的恶意数据是否在响应标头中输出。

CRLF 指的是回车符(CR,ASCII 13, ,%0d) 和换行符(LF,ASCII 10, ,%0a),操作系统就是根据这个标识来进行换行的,你在键盘输入回车键就是输出这个字符,只不过win和linux系统采用的标识不一样而已。

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


测试

CRLF注入漏洞的检测也和XSS漏洞的检测差不多。通过修改HTTP参数或URL,注入恶意的CRLF,查看构造的恶意数据是否在响应头中输出。主要是在看到有重定向或者跳转的地方,可以在跳转的地址添加?url=http://baidu.com/xxx%0a%0dSet-Cookie: test123=123测试一下,通过查看响应包的数据查看结果。

GET /index.php?c=rpzy&a=query&type=all&value=123&datatype=json&r=X1MU6E86%0a%0dSet-Cookie: test123=123 HTTP/1.1
Host: www.xxxxyou.net

CRLF注入原理第1张

这里并没有利用成功,如果利用成功的话,响应包会出现一行Set-Cookie: test123=123 数据。


原理分析

HRS漏洞存在的前提是 :url当中输入的字符会影响到文件,比如在重定位当中可以尝试使用%0d%0a作为crlf.

一般网站会在HTTP头中加上Location: http://baidu.com的方式来进行302跳转,所以我们能控制的内容就是Location:后面的XXX网址,对这个地址进行污染。

假设服务端(PHP)的处理方式:

if($_COOKIE("security_level") == 1)
{
    header("Location: ". $_GET['url']);
    exit;
}

代码意思是说当条件满足时,将请求包中的url参数值拼接到Location字符串中,并设置成响应头发送给客户端。

此时服务器端接收到的url参数值是我们修改后的:
http://baidu.com/xxx%0a%0dSet-Cookie: test123=123

在url参数值拼接到Location字符串中,设置成响应头后,响应头就会看到:
Set-Cookie: test123=123


修复方式

服务端收到前端过来的参数,在加入Location之前,需要过滤 、 之类的行结束符,避免输入的数据污染其它HTTP首部字段。


参考文献

https://www.jianshu.com/p/2f2e311e797b
https://blog.csdn.net/shakeyin1998/article/details/88411756

免责声明:文章转载自《CRLF注入原理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇计算两个日期之间的工作日数idea基本设置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

浅析b站2021/7/13日晚服务崩溃问题

14日凌晨,B站发布消息称: 昨晚,B站的部分服务器机房发生故障,造成无法访问。技术团队随即进行了问题排查和修复,现在服务已经陆续恢复正常。耽误大家看视频了,对不起! 已知: Bilibili,Acfun,豆瓣都出现崩溃404. 豆瓣和Acfun很快恢复,Bilibili大约用了一个小时让用户能够正常访问。 Bilibili直播是可以正常观看的,朋友看吃鸡...

Celery学习---Celery 分布式队列介绍及安装

 Celery介绍和基本使用 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, 举几个实例场景中可用的例子: 1. 你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着结果返回,而是给你返回 一个任务ID,...

MQTT

MQTT简介 mqtt基于订阅者模型架构,客户端如果互相通信,必须在同一订阅主题下,即都订阅了同一个topic,客户端之间是没办法直接通讯的。订阅模型显而易见的好处是群发消息的话只需要发布到topic,所有订阅了这个topic的客户端就可以接收到消息了。 发送消息必须发送到某个topic,重点说明的是不管客户端是否订阅了该topic都可以向topic发送了...

c# 如何捕捉控制台程序的关闭事件。(转)

最近要做个控制台程序,在用户关闭程序的时候要做些处理,但控制台程序却没有WinForm的Closing或Closed事件,想想只能用API才捕捉消息来实现了,代码如下: 1using System; 2using System.Windows.Forms; 3using System.Diagnostics; 4using System.Runtime....

各大免费邮箱邮件群发账户SMTP服务器配置及SMTP发送量限制情况

网络产品推广和新闻消息推送时,经常用到的工具就是用客户邮箱发送邮件了,如果是要发送的邮件量非常大的话,一般的建议是搭建自己的邮局服务器,或者是花钱购买专业的邮件群发服务,免费邮箱的SMTP适合少量的邮件群发需求。 例如Wordpress的评论邮件通知功能,每天要发送的邮件数量最多可能是几百封,如果用PHP自带的Mail()函数发送,容易被各大邮箱判定为垃圾...

iOS 各种控件默认高度

1.状态栏 状态栏一般高度为20像素,在打手机或者显示消息时会放大到40像素高,注意,两倍高度的状态栏在好像只能在纵向的模式下使用。如下图   用户可以隐藏状态栏,也可以将状态栏设置为灰色,黑色或者半透明的黑色。   如果需要隐藏状态栏可以使用调用: [[UIApplication sharedApplication] setStatusBarHidde...