上篇文章介紹了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操做系統都受到這個漏洞的影響。安全
說到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
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字段觸發的,有興趣的校友能夠去了解了解。
升級補丁:
http://technet.microsoft.com/security/bulletin/MS15-034
禁用IIS內核緩存(緩解方案):
https://technet.microsoft.com/en-us/library/cc731903(v=ws.10).aspx