一、CRLF注入攻擊
一、漏洞描述
CRLF是”回車+換行”(\r\n)的簡稱,其十六進制編碼分別爲0x0d和0x0a。在HTTP協議中,HTTP header與HTTP Body是用兩個CRLF分隔的,瀏覽器就是根據這兩個CRLF來取出HTTP內容並顯示出來。所以,一旦我們能夠控制HTTP消息頭中的字符,注入一些惡意的換行,這樣我們就能注入一些會話Cookie或者HTML代碼。CRLF漏洞常出現在Location與Set-cookie消息頭中。
二、漏洞原理
1、 CRLF漏洞利用了http協議
2、 修改nginx.conf,在如下圖位置添加如下配置,此配置實現了強制跳轉的功能,當用戶訪問nginx服務器時由於此配置的存在會被強制跳轉到以https協議訪問之前訪問的鏈接。
server{ listen 80; server_name xss.ason.com; return 302 https://$host$uri; }
2、上面的配置的關鍵利用點由兩個:一是配置中的是我們可以控制的這樣我們就可以在uri處填入CRLF,然後對服務器進行訪問實現頭部注入。二是服務器會返回一個302跳轉給用戶,所以我們注入的頭部參數又會返回到客戶這邊。
三、漏洞復現
-
首先請求 https://xss.ason.com/ ,並查看有無cookie
-
構造CRLF注入鏈接 http://xss.ason.com/%0d%0aSet-Cookie:timor=%20xys 發現成功注入cookie
四、優化http強轉htps
使用rewrite實現http強轉https
server{ listen 80; server_name xss.ason.com; rewrite ^(.*) https://$server_name$1 permanent; }
再次重複前邊復現步驟。發現設置不成功。