使用HTTP 0.9進(jìn)行繞過——解析HTTP逃逸

HTTP 0.9是第一個版本的HTTP協(xié)議,在1991年的時候被正式提出,實際上在更早的時候就已經(jīng)一直在使用這個版本了。簡單來說,它是由客戶端上的GET請求和服務(wù)端的響應(yīng)組成,其中,GET請求和現(xiàn)在用的GET請求有點(diǎn)類似。與HTTP 1.0中的響應(yīng)包不同的是0.9版本的并不是由響應(yīng)頭和響應(yīng)內(nèi)容組成,而是只有一個響應(yīng)體構(gòu)成。這就意味著不可以構(gòu)造特殊的數(shù)據(jù)類型(Content-type),所以響應(yīng)包只是簡單的以與服務(wù)器的TCP連接的斷開為結(jié)束。

在現(xiàn)在的HTTP 1.1中包含了請求頭和請求體,如下:
HTTP/1.1 200 ok
Content-type: application/octet-stream
Content-length: 68
some-malware-here
同樣的內(nèi)容,在HTTP 0.9中就沒有頭部,就像下面一樣:
some-malware-here

使用HTTP 0.9進(jìn)行繞過——解析HTTP逃逸
有趣的是,HTTP 1.1的請求得到的HTTP 0.9響應(yīng)包會被大多數(shù)瀏覽器接收(除了Safari)即使有些并沒有在現(xiàn)在的協(xié)議中被定義出來。

HTTP 0.9如何被用于逃逸的分析

HTTP 0.9的響應(yīng)并不像HTTP 1.x的響應(yīng)包,因為它沒有響應(yīng)頭。按我們的想象,防火墻應(yīng)該要過濾掉這樣的響應(yīng)包,因為它看起來并不符合HTTP協(xié)議。誰也不能肯定在如今的網(wǎng)絡(luò)中不存在依然在使用HTTP 0.9的產(chǎn)品。所以,防火墻能做的只是檢測HTTP 0.9響應(yīng)包并對其做做惡意軟件分析。

但是出乎意料的是,大多數(shù)防火墻都是簡單的讓HTTP/0.9的響應(yīng)包直接通過,而沒有做進(jìn)一步的檢測。從排名前10的防火墻測試報告中,我們發(fā)現(xiàn),僅僅只有一小部分的HTTP Evader被攔截,更多的(大概有80%)用這種方式直接通過了防火墻。由于這些防火墻并沒有對HTTP 0.9的響應(yīng)包做惡意軟件分析,我們可以這么認(rèn)為:防火墻只是簡單的讓所有它無法分析的數(shù)據(jù)包直接通過。
在HTTP 0.9剛剛被提出來的時候,它僅僅只是用來顯示靜態(tài)頁面(不需要其他字段進(jìn)行說明),這種情況下,這些并不是什么問題,因為他只是用來把頁面顯示在瀏覽器中。但是,如果結(jié)合使用老版本的HTTP 0.9和HTML 5,如果遇到一個下載頁面,執(zhí)行下載的時候:
? download="malware.exe">

HTTP 0.9響應(yīng)可以被當(dāng)成腳本、圖片或缺html頁面來使用,只要把它嵌入到適當(dāng)?shù)捻撁嬷芯托?,例如?br /> ?src="http://attacker.test/http09-response.js">
? src="http://attacker.test/http09-response.gif">
? >
通過這樣的方式,任何文件只要以這個結(jié)構(gòu)來傳輸,都可以直接繞過防火墻。