使用nginx將http請求強轉https引發的CRLF安全漏洞

一、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跳轉給用戶,所以我們注入的頭部參數又會返回到客戶這邊。

三、漏洞復現

  1. 首先請求 https://xss.ason.com/ ,並查看有無cookie

  2. 構造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;
}

再次重複前邊復現步驟。發現設置不成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章