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


01 漏洞描述

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

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”。

服務器面對范圍請求,有三種響應:

請求成功:

響應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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM