CRLF介绍

CRLF -- Carriage-Return Line-Feed 回车换行

1简介

  CRLF的意思   CRLF命令   CRLF注入

2实际应用

  CRLF的含义   CRLF攻击   避免攻击的方法

1简介编辑

CRLF的意思

就是回车(CR, ASCII 13, \r) 换行(LF, ASCII 10, \n)。
换行在有的 ASCII码表也用newline(简nl)来进行表示,这里的lf是line feed的概念,意思是一样的。
这两个ACSII字符不会在屏幕有任何输出,但在 Windows中广泛使用来标识一行的结束。而在Linux/UNIX系统中只有换行符。
CR和LF组合在一起即

CRLF命令

它表示键盘上的"Enter"键(可以用来模拟 回车键)。

CRLF注入

就是说黑客能够将 CRLF命令注入到系统中。它不是系统或 服务器软件的漏洞,而是网站应用开发时,有些开发者没有意识到此类攻击存在的可能而造成的。
针对这个漏洞黑客能够做什么?
就算黑客发现网站存在CRLF注入,他们仍然受到应用结构和这个缺陷的严重程度的限制。
对有些站点它将非常严重,而有些站点它只是很小的bug。
HTTP Header CRLF Injection
许多 网络协议,包括HTTP也使用CRLF来表示每一行的结束。这就意味着用户可以通过CRLF注入自定义HTTP header,导致用户可以不经过 应用层直接与Server对话。
HTTP header的定义就是基于这样的"Key: Value"的结构,用CRLF命令表示一行的结尾。
"Location:"头用来表示重定向的URL地址,"Set-Cookie:"头用来设置cookies。
如果用户的输入经过验证,其中存在CRLF的 字符就可以被用来达到欺骗的目的。

2实际应用编辑

CRLF注入攻击并没有像其它类型的攻击那样著名。但是,当对有安全漏洞的应用程序实施CRLF注入攻击时,这种攻击对于攻击者同样有效,并且对用户造成极大的破坏。让我们看看这些应用程序攻击是如何实施的和你能够采取什么措施保护你的机构。

CRLF的含义

是“carriage return/line feed”,意思就是回车。这是两个ASCII 字符,分别排在第十三和第十位。CR和LF是在计算机终端还是电传打印机的时候遗留下来的东西。电传打字机就像普通打字机一样工作。在每一行的末端,CR命令让打印头回到左边。LF命令让纸前进一行。虽然使用卷纸的终端时代已经过去了,但是,CR和LF命令依然存在,许多应用程序和 网络协议仍使用这些命令作为 分隔符。
攻击者在搜索安全漏洞的时候没有忽略很少使用的CRLF。攻击者可以通过在一段数据中加入CRLF命令来改变接受这个数据的应用程序处理这个数据的方式,从而执行CFRL注入攻击。

CRLF攻击

最基本的例子包括向 记录文件中增加伪造的记录。也就是说,有安全漏洞的应用程序把一个用户输入的内容写到系统记录文件中。攻击者可以提供如下输入内容:
Testing123MYSQL DATABASE ERROR: TABLE CORRUPTION
当系统管理员在早上查看他的纪录时,他可能会用很多时间排除一个根本就不存在的故障。狡猾的攻击者在攻击系统的另一部分时,可以使用这种特洛伊木马分散管理员的注意力。
想像一下,一个应用程序收到用户输入的一个文件名,然后对那个文件执行一个指令,如“ls -a .”。如果这个应用程序存在CRLF安全漏洞,攻击者就可以输入这样的内容:
File.txtrm -rf /
这个有安全漏洞的应用程序就会执行这个命令“ls -a File.txt”,然后再执行这个命令“rm -rf /”。如果这个应用程序是一个根程序,这可能就是它执行的最后一个命令,因为在根分区的全部文件都被删除了。
考虑使用一种CRFL注入攻击暴露使用一种基于网络的匿名 电子邮件系统的某个人的电子邮件地址。那个电子邮件系统的工作方式可能是这样的:电子邮件的发送者用他们的电子邮件地址、信息主题和信息本身填写一个表格。当这个表格递交到 网络服务器上的时候,网络服务器把这个表格转换为一个SMTP电子邮件,并且发送给收件人。发送者永远不会看到收件人的电子邮件地址。这个地址只有服务器知道。
如果这个应用程序存在CRLF攻击安全漏洞,电子邮件的发件人可以通过创建下面这样的一行主题来破坏收件人的匿名性:
Subject: Peekaboo, I see youBcc:
当有安全漏洞的应用程序得到这个数据的时候,它向这个邮件的 文件头增加一个不需要的行,创建一个发送到发件人邮件地址的这封邮件的盲送副本。在这个副本中,“To:”地址是看不到的,因此把收件人的邮件地址暴露给发送者。

避免攻击的方法

使用良好的 编程技术能够避免包括CRLF攻击在内的注入攻击。要使你的应用程序不受CRLF注入攻击,需要你保持与防御SQL注入攻击等其它类型的注入攻击一样的警惕性:永远不要相信输入的内容!在你控制范围以外的任何来源的输入内容都必须要进行检查,在你的应用程序对数据执行操作之前,任何不符合预期的数据类型的字符都要删除。例如,如果你期待着一个电子邮件主题行,这个数据中的所有的字符都应该是字母、数字和标点符号。如果你的应用程序期待着一个文件名,这个数据中只能包含合法地在文件名中使用的 字符。如果程序员在这两个例子的情况下简单地过滤掉CR和LF字符,这个攻击就失败了。
用户输入是“坏字符”的一个来源。但是,你不要忘记检查你从来没有编写过的其它程序输入的内容。在许多情况下,攻击者可以把一个注入攻击从一个有漏洞的应用程序转移到一个基本的例行程序中。程序员不会检查基本的例行程序中的数据,因为那里的数据不是直接来自于用户。你要把任何你不能跟踪到可信赖的来源的数据都当作被感染的数据。这样,你就安全了。

你可能感兴趣的:(编程语言)