nginx CRLF(换行回车)注入漏洞复现

一、漏洞描述

CRLF是”回车+换行”(\r\n)的简称,其十六进制编码分别为0x0d和0x0a。在HTTP协议中,HTTP header与HTTP Body是用两个CRLF分隔的,浏览器就是根据这两个CRLF来取出HTTP内容并显示出来。所以,一旦我们能够控制HTTP消息头中的字符,注入一些恶意的换行,这样我们就能注入一些会话Cookie或者HTML代码。CRLF漏洞常出现在Location与Set-cookie消息头中。

二、漏洞原理

1、 修改nginx.conf,在如下图位置添加如下配置,此配置实现了强制跳转的功能,当用户访问nginx服务器时由于此配置的存在会被强制跳转到以https协议访问之前访问的链接。

  

2、上面的配置的关键利用点由两个:一是配置中的$url是我们可以控制的,这样我们就可以在$url处填入CRLF,然后对服务器进行访问实现头部注入。二是服务器会返回一个302跳转给用户,所以我们注入的头部参数又会返回到客户这边。

三、漏洞环境搭建和复现

1、 在ubuntu 16.04安装nginx

1.1安装nginx依赖库

1.1.1安装gcc g++的依赖库

ubuntu平台可以使用如下命令:

apt-get install build-essential

apt-get install libtool

1.1.2安装pcre依赖库

apt-get install libpcre3 libpcre3-dev

1.1.3安装zlib依赖库

apt-get install zlib1g-dev

1.1.4安装ssl依赖库

apt-get install openssl

1.2安装nginx

#下载最新版本:

wget http://nginx.org/download/nginx-1.11.3.tar.gz

#解压:

tar -zxvf nginx-1.11.3.tar.gz

#进入解压目录:

cd nginx-1.11.3

#配置:

./configure --prefix=/usr/local/nginx

#编辑nginx:

Make

#安装nginx:

make install

#启动nginx:

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

1.3浏览器访问,测试nginx是否搭建成功

  

2、 修改/usr/local/nginx/conf/nginx.conf,在如下图位置添加如下内容:

  

3、重启nginx服务

./sbin/nginx -s reload

  

3、重启nginx服务

./sbin/nginx -s reload

  

4、浏览器访问http://192.168.10.137/,然后抓包,修改数据包,如下图所示,成功实现了CRLF头部注入

  

四、漏洞防御

1、删除配置不当的配置

--------------------------------------------------------------------------------------------

参考资料: https://blog.csdn.net/liuhuaijin/article/details/77449579

最新文章

  1. HTTP压缩
  2. 10-8位7段数码管驱动实验——小梅哥FPGA设计思想与验证方法视频教程配套文档
  3. Eculid算法 以及Extend_Eculid算法 证明及实现
  4. MVC 基础和增删改、登录
  5. PHP自学链接收藏
  6. myeclipse调式与属性显示
  7. Netbackup备份失败:ORA-19506 ORA-27028 ORA-19511
  8. MS Build参考
  9. python学习之路-4 内置函数和装饰器
  10. Java RMI 简介及其优劣势总结
  11. qstring.h赏析
  12. lua序列化table表到文件中
  13. android ndk通过遍历和删除文件
  14. mysql数据库 调优
  15. Oracle常见错误:ORA-06550、ORA-00911、ORA-02085
  16. java 将指定文件夹递归的进行zip打包压缩
  17. Caffe 分类问题 Check failed: error == cudaSuccess (2 vs. 0) out of memory
  18. 新版的 Springsecurity request.getRequestDispatcher).forward(request, response); 404 问题,已解决
  19. caoni大业 spring boot 跳坑记
  20. Python又把GUI界面攻下了,今天就告诉你怎么玩

热门文章

  1. CPU的最小执行单位是线程,协程不需要qt支持...直接用现成的协程库就行了
  2. Spring的Bean的生命周期
  3. 304902阿里巴巴Java开发手册1.4.0
  4. kubernetes之使用http rest api访问集群
  5. bean 解析、注册、实例化流程源码剖析
  6. PWN菜鸡入门之栈溢出(1)
  7. 【粗略版】Linux deploy手机上创建自己的服务器
  8. Java进阶——高性能MySQL(一)
  9. Java学习笔记——设计模式之七.模板方法模式
  10. JS中 【“逻辑运算”,“面试题:作用域问题”,“dom对象”】这些问题的意见见解