CRLF注入漏洞

一,CRLF漏洞原理

        在《HTTP/HTTP报文》中介绍了HTTP报文的结构,状态行和首部中的每行以CRLF结束,首部于主题之间有一空行分隔。

        可以理解为HTTP头部之间有一个CRLF做间隔,而头部和主体之间有两个CRLF做间隔。

        CRLF漏洞是因为web应用没有对用户输入做严格验证,导致攻击者可以输入一些恶意字符。攻击者一旦向请求体或者头部中的字段注入恶意的CRLF,并在响应中输出,所以又称为HTTP响应拆分漏洞。

二,CRLF漏洞拓展知识

        CRLF指的是回车符(CR,ASCII值为13,\r,%0d)和换行符(LF,ASCII值为10,\n,%0a),来源于打字机,表示行的结束,计算机出现后沿用了这个概念。

        回车符:光标移动到行首

        换行符:光标移动到下一行

        键盘上的回车键(ENTER)就可以执行该操作。但是不同的操作系统,行的结束符时不一样的。

        Windows系统:使用CRLF表示行结束

        Linux系统:使用LF表示行结束

        MacOS:早期使用CR表示,现在使用LF表示行结束

        所以同一文件再不同操作系统中打开,内容格式可能会出现差异,这是行结束符不一致导致的。

三,漏洞检测

       漏洞产生的先决条件:

                服务器端使用head函数设置了响应头属性的情况下(代码审计)

if(isset($_GET["url"]) && ($_COOKIE["security"]!="1") && $_COOKIE["security_level"]!="2"))
{
    //header函数设置响应头中的location的值
    header("location:" .$_GET["url"]);
    exit();
}

        CRLF注入漏洞的本质和XSS有点相似,攻击者将而已数据发送给易受攻击的web应用程序,web应用程序将恶意数据输出在HTTP响应头中。(XSS一般输出在响应主体中)

        CRLF注入漏洞的检测和XSS差不太多,通过修改HTTP参数或URL,注入恶意的CRLF,查看构造的恶意数据是否在响应头中输出。

四,漏洞利用

        1,通过一个CRLF分割成另一个响应头,可以添加请求头属性,如Set-Cookie;

        2,通过两个CRLF分割成响应体,传入的数据会直接将给浏览器执行,这样的话可以逃逸XSS过滤,因为这个数据不是POST传入的,而是服务器通过响应头生成的。

五,漏洞防御

        过滤\r,\n之类的行结束符。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CRLF注入漏洞是一种常见的网络安全漏洞,它在代码中未对输入进行正确的过滤和验证,导致攻击者可以利用换行符(CRLF:Carriage Return Line Feed)来执行恶意代码或实施其他攻击。 要复现CRLF注入漏洞,首先需要找到存在漏洞的应用程序。这些应用程序通常会接收用户的输入,并在服务器上生成响应,而在生成响应时未能很好地处理输入的换行符。 我们可以通过使用一个简单的示例来演示CRLF注入漏洞的复现。假设我们有一个简单的表单,允许用户提交评论,并在页面上显示评论内容,我们可以通过评论框中的输入来复现漏洞。 首先,我们在评论框中输入以下内容: ``` 本次评论测试漏洞%0D%0AContent-Length: 0%0D%0A%0D%0AHTTP/1.1 200 OK%0D%0AContent-Type: text/html%0D%0A%0D%0A<html><body>Hacked!</body></html> ``` 在上述输入中,`%0D%0A`表示换行符。我们在注入的内容中使用了换行符,然后添加了一些伪造的HTTP响应头,包括`Content-Length: 0`和`HTTP/1.1 200 OK`。最后,我们添加了一个简单的HTML页面。 当我们提交评论后,应用程序未能正确处理换行符,导致我们的注入成功。服务器在生成响应时,将我们注入的内容也作为响应头部分显示出来。 这样,我们就成功利用CRLF注入漏洞,并在生成的页面上显示了我们的内容。 为了防止CRLF注入漏洞,开发者应该对用户的输入进行正确的过滤和验证。在处理用户的输入时,应该移除或转义包含换行符的内容,以防止攻击者注入恶意内容并执行攻击。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值