(十)HTTP.sys遠程代碼執行

01 漏洞描述

上篇文章介紹了Host頭攻擊,今天咱們講一講HTTP.sys遠程代碼執行漏洞。html

HTTP.sys是Microsoft Windows處理HTTP請求的內核驅動程序,爲了優化IIS服務器性能,從IIS6.0引入,IIS服務進程依賴HTTP.sys。HTTP.sys遠程代碼執行漏洞實質是HTTP.sys的整數溢出漏洞,當攻擊者向受影響的Windows系統發送特殊設計的HTTP 請求,HTTP.sys 未正確分析時就會致使此漏洞,成功利用此漏洞的攻擊者能夠在系統賬戶的上下文中執行任意代碼。緩存

主要存在Windows+IIS的環境下,任何安裝了微軟IIS 6.0以上的Windows Server 2008 R2/Server 2012/Server 2012 R2以及Windows 7/8/8.1操做系統都受到這個漏洞的影響。安全

02 漏洞知識拓展

說到HTTP.sys遠程代碼執行漏洞,不得不先介紹一下Range首部字段。服務器

在「上古時代」,網絡並非很好,下載大型文件很不容易。下載途中若是網絡中斷,就得重頭開始下。爲了解決這個問題,HTTP/1.1引入了範圍請求。網絡

 
 

在請求報文的Range首部字段中指定資源的byte範圍,告訴服務器,請求的是資源哪一個範圍的內容,讓斷點續傳和並行下載得以實現。性能

若是服務器支持範圍請求,響應包中就會存在Accept-Ranges字段(且值不爲「none」,bytes爲資源範圍的單位),並在Content-Length字段中告訴客戶端資源的大小範圍。優化

 
 

若是沒有Accept-Ranges字段,則服務器可能不支持範圍請求,有的服務器會明確將值設爲「none」。操作系統

服務器面對範圍請求,有三種響應:設計

請求成功:3d

響應206Partial Content請求範圍越界:(範圍超過資源的大小)

響應416Requested Range Not Satisfiable不支持範圍請求:

響應200OK

而HTTP.sys遠程代碼執行漏洞正是利用Range字段注入惡意數據。該漏洞的檢測,也是利用服務器面對範圍請求時的響應特徵來判斷。

固然,範圍請求不止這些知識點,詳情可查看RFC:

https://tools.ietf.org/html/rfc7233

03 漏洞檢測

HTTP.sys漏洞的檢測比較簡單,先判斷目標環境是否是Windows+IIS,而後構造Range字段進行檢測便可。

檢測時,在請求包中添加Range字段,以下:

Range: bytes=0-18446744073709551615

提交給服務器,查看服務器響應。

 
 

服務器響應400,證實不存在HTTP.sys遠程代碼執行漏洞。若是響應416,則證實系統存在漏洞。

 
 

這裏簡單說一下Range字段值的含義。18446744073709551615轉爲十六進制是 0xFFFFFFFFFFFFFFFF(16個F),是64位無符號整型所能表達的最大整數,整數溢出和這個超大整數有關。

另外,Apache幾個老版本存在的Apache HTTP Server畸形Range選項處理遠程拒絕服務漏洞,也是經過Range字段觸發的,有興趣的校友能夠去了解了解。

04 漏洞修復

升級補丁:

http://technet.microsoft.com/security/bulletin/MS15-034

禁用IIS內核緩存(緩解方案):

https://technet.microsoft.com/en-us/library/cc731903(v=ws.10).aspx

做者:安全小白團 連接:https://www.jianshu.com/p/2e00da8a12de 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。
相關文章
相關標籤/搜索