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