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