01?漏洞描述
上篇文章介紹了Host頭攻擊功舀,今天我們講一講HTTP.sys遠程代碼執(zhí)行漏洞扒寄。
HTTP.sys是Microsoft
Windows處理HTTP請求的內(nèi)核驅(qū)動程序,為了優(yōu)化IIS服務(wù)器性能旺订,從IIS6.0引入乍狐,IIS服務(wù)進程依賴HTTP.sys赠摇。HTTP.sys遠程代碼執(zhí)行漏洞實質(zhì)是HTTP.sys的整數(shù)溢出漏洞,當(dāng)攻擊者向受影響的Windows系統(tǒng)發(fā)送特殊設(shè)計的HTTP
請求澜躺,HTTP.sys 未正確分析時就會導(dǎo)致此漏洞蝉稳,成功利用此漏洞的攻擊者可以在系統(tǒng)帳戶的上下文中執(zhí)行任意代碼抒蚜。
主要存在Windows+IIS的環(huán)境下掘鄙,任何安裝了微軟IIS 6.0以上的Windows Server 2008 R2/Server 2012/Server 2012 R2以及Windows 7/8/8.1操作系統(tǒng)都受到這個漏洞的影響。
02?漏洞知識拓展
說到HTTP.sys遠程代碼執(zhí)行漏洞嗡髓,不得不先介紹一下Range首部字段操漠。
在“上古時代”,網(wǎng)絡(luò)并不是很好,下載大型文件很不容易浊伙。下載途中如果網(wǎng)絡(luò)中斷撞秋,就得重頭開始下。為了解決這個問題嚣鄙,HTTP/1.1引入了范圍請求吻贿。
在請求報文的Range首部字段中指定資源的byte范圍,告訴服務(wù)器哑子,請求的是資源哪個范圍的內(nèi)容舅列,讓斷點續(xù)傳和并行下載得以實現(xiàn)。
如果服務(wù)器支持范圍請求卧蜓,響應(yīng)包中就會存在Accept-Ranges字段(且值不為“none”帐要,bytes為資源范圍的單位),并在Content-Length字段中告訴客戶端資源的大小范圍弥奸。
如果沒有Accept-Ranges字段榨惠,則服務(wù)器可能不支持范圍請求,有的服務(wù)器會明確將值設(shè)為“none”盛霎。
服務(wù)器面對范圍請求赠橙,有三種響應(yīng):
請求成功:
響應(yīng)206Partial Content請求范圍越界:(范圍超過資源的大小)
響應(yīng)416Requested Range Not Satisfiable不支持范圍請求:
響應(yīng)200OK
而HTTP.sys遠程代碼執(zhí)行漏洞正是利用Range字段注入惡意數(shù)據(jù)摩渺。該漏洞的檢測简烤,也是利用服務(wù)器面對范圍請求時的響應(yīng)特征來判斷。
當(dāng)然摇幻,范圍請求不止這些知識點横侦,詳情可查看RFC:
https://tools.ietf.org/html/rfc7233
03?漏洞檢測
HTTP.sys漏洞的檢測比較簡單,先判斷目標(biāo)環(huán)境是不是Windows+IIS绰姻,然后構(gòu)造Range字段進行檢測即可枉侧。
檢測時,在請求包中添加Range字段狂芋,如下:
Range: bytes=0-18446744073709551615
提交給服務(wù)器榨馁,查看服務(wù)器響應(yīng)。
服務(wù)器響應(yīng)400帜矾,證明不存在HTTP.sys遠程代碼執(zhí)行漏洞翼虫。如果響應(yīng)416,則證明系統(tǒng)存在漏洞屡萤。
這里簡單說一下Range字段值的含義珍剑。18446744073709551615轉(zhuǎn)為十六進制是 0xFFFFFFFFFFFFFFFF(16個F),是64位無符號整型所能表達的最大整數(shù)死陆,整數(shù)溢出和這個超大整數(shù)有關(guān)招拙。
另外,Apache幾個老版本存在的Apache?HTTP?Server畸形Range選項處理遠程拒絕服務(wù)漏洞,也是通過Range字段觸發(fā)的别凤,有興趣的校友可以去了解了解饰序。
04?漏洞修復(fù)
升級補丁:
http://technet.microsoft.com/security/bulletin/MS15-034
禁用IIS內(nèi)核緩存(緩解方案):
https://technet.microsoft.com/en-us/library/cc731903(v=ws.10).aspx
05參考鏈接
https://www.freebuf.com/column/202763.html