接觸跨站攻擊一段時間了,有了一些認識,現在先按自己的了解理一下思路。後續有時間在針對裡面詳細的攻擊方法做詳解。
一.跨站腳本介紹
跨站腳本攻擊(XSS)是一種攻擊技術,是攻擊者将惡意代碼插入到回應給使用者浏覽器的代碼中的一種執行個體。跨站腳本的幾個特點:
受害者:跨站作用在用戶端,而不是服務端,即受害者是用戶端而不是伺服器。
跨站類型:反射式;持久式;基于DOM式;其它式(包括嵌入FLASH,PDF等其它載體)。
1. 非持久型XSS漏洞一般存在于URL參數中,需要通路黑客構造好的特定URL才能觸發漏洞。
2. 持久型XSS漏洞一般存在于富文本等互動功能,如發帖留言等,黑客使用的XSS内容經正常功能進入資料庫持久儲存。
3. DOM XSS漏洞,也分為持久和非持久型兩種,多是通過javascript DOM接口擷取位址欄、referer或編碼指定HTML标簽内容造成。
4. FLASH,PDF等其他第三方檔案所造成的特殊XSS漏洞,同樣按應用功能也分為持久和非持久型。
對跨站三種類型的了解:用戶端執行了 用戶端送出給服務端,服務端傳回的惡意代碼。
反射型:服務端提取使用者的輸入,未做嚴格過濾,直接傳回給用戶端,用戶端浏覽器執行了代碼。
1)對資料未做嚴格淨化傳回給用戶端。
2)實作攻擊需要點選攻擊者構造的連結,每次點選完成一次攻擊,因為不能儲存。
存儲型:
1)對資料未做嚴格淨化傳回給用戶端,用戶端執行了惡意代碼。
2)攻擊者構造連結完成攻擊,受害者點選正常的連結,就會受影響。因為代碼已經被儲存。
DOM型:
2)服務端傳回給用戶端的是同樣的代碼(js代碼),在客戶執行的時候才出問題,在服務端的響應中是沒有惡意代碼的。DOM型可以是反射型或者存儲型,在于js代碼是否存儲輸入的值。
幾個差別:
反射式和存儲式的差別:
1)服務端對資料的處理方式:一個是儲存後傳回,一個是直接傳回。
2)出現的觸發點不一樣:反射一般出現在傳回錯誤資訊等,而存儲一般
出現在填寫表單等。(本質是第一個的原因,看哪些情況是要儲存資料的,哪些情況是不儲存資料的)
3)是否是一次性的,反射是一次性,每次都要點。 存儲不是。(本質也是第一個原因,因為存儲儲存了代碼)。
是以綜上,差別其實就一個,就是服務端有沒有儲存資料,其他就是根據特點得出的。
DOM式和上面的兩個的差別:
DOM是因為服務端處理資料用的是js代碼,不會對資料進行處理
而是到達浏覽器後才處理的,是以在響應代碼中是沒有惡意代碼的。它也可以是儲存或者反射,在于js代碼中有沒有儲存輸入的值。
二.CST、CFS、CSRF
2.1 CST
CST攻擊是一種使用XSS和HTTP TRACE功能來進行攻擊的方式。它是一種攻擊技巧,可以利用它避開HttpOnly對cookie提供的保護,使之能夠通過用戶端JavaScript擷取已經标記為HttpOnly的cookie值。
正常情況下,用戶端腳本(如JS腳本)是可以通過document.cookie函數獲得,這樣如果有XSS跨站漏洞,cookie很容易被盜取。浏覽器有一個安全政策,通過設定cookie的httponly屬性,這樣用戶端腳本就不能通過document.cookie通路該cookie,即時有跨站漏洞,也不能盜取使用者cookie。(注意:httponly屬性對正常的HTTP請求并沒有影響,即時Cookie設定了HTTPONLY屬性,當使用者浏覽有效域中的站點時候,這個Cookie仍然被自動發送,隻是不能使用腳本來通路該Cookie。(解釋HTTPONLY)
一般用戶端向伺服器請求是利用HTTP GET和POST方式,但那隻是常見,還有其它方式(詳細參考RFC2616文檔)。其中HTTP TRACE也是一種方式,這種向服務端請求資訊主要用于調試web伺服器連接配接用。如果請求有效,則在響應中會在實體中包含整個請求消息。(解釋HTTP TRACE)
與XSS聯系和差別:
聯系:CST是XSS的一種子類,也屬于XSS跨站漏洞。
差別:浏覽器請求的方式不一樣,普通的XSS一般通過GET和POST方式在頁面上輸入攻擊腳本實作,但是CST如果要在頁面上輸入,需要找到會通過TRACE發送的輸入點,一般是自己構造攻擊封包在TRACE方法中進行發送。
測試相關:
由于普通的XSS攻擊封包可以通過GET或者POST被送出,而CST則要通過TRACE來送出,由于比較少用,目前還未搜尋到有頁面輸入框可以使用TRACE送出的。是以對它的測試需要注意,攻擊腳本中需要自己提供發送函數,比如使用XMLHttpRequest發送請求(當然普通的XSS攻擊也需要覆寫用XMLHTTPRequest發送GET、POST請求)。
測試總結:對CST的測試隻需要将普通XSS的攻擊特征腳本放在HTTP的TRACE位置發送出去就可以。
2.2 CFS
在浏覽器的安全機制中,用戶端腳本是不能通路不同伺服器或域名的頁面相關資訊。而通過HTML的frame/iframe可以在頁面中包含第三方伺服器的頁面,這樣攻擊者可以利用首頁面的腳本程式擷取到frame/iframe包含的第三方伺服器的資訊。
同源政策:用戶端腳本是不能通路不同伺服器或域名的頁面相關資訊,但是也有例外,可以通過設定document.domain解決,在兩個不同域名的用戶端腳本都設定document.domain為同個父域。(注意:兩個域是要擁有同個父域這個方法才有效果),然後在首頁面加載FRAME/IFRAME頁面實作,首頁就可以調用架構内的頁面的元素。
與XSS的聯系和差別:
聯系:CFS是XSS的一種攻擊子類,也屬于XSS跨站漏洞。
差別:CFS主要利用HTML中的FRAME/IFRAME來實作跨站攻擊。将他單獨出來,主要是由于他攻擊後效果不同,有一些特殊的場景。
CFS的測試和XSS的測試一樣,被包含在XSS測試中,是它的一個子集,特征為frame和iframe關鍵字。如果針對性測試,就是對frame和iframe進行各種編碼。
2.3 CSRF
CSRF:cross site request forgery,跨站請求僞造。是一種将受害使用者欺騙到包含有惡意HTTP請求的頁面的攻擊方式,這種攻擊方式的危害性在于它繼承了受害使用者的實體身份和權限,即盜用了受害人的身份以其的名義進行非法的操作,比如篡改使用者資料、使用者密碼、以及購買物品等。通俗的說,CSRF攻擊是在受害者毫不知情的情況下以受害者名義僞造請求發送給受攻擊站點,進而在未授權的情況下執行受害者權限保護之下的操作。
CSRF(XSRF)的本質:服務端對用戶端的COOKIE校驗不嚴格,導緻被攻擊者盜用。
<a href="http://blog.51cto.com/attachment/201202/201419691.jpg" target="_blank"></a>
1)情況一:站點B和站點A是不同站點,站點B中的請求代碼URL沒有包含腳本,而是正常的請求情況,隻是利用了浏覽器而浏覽器不知道而已。這個時候使用者點選惡意網站B發送給站點A的封包 和 使用者真實發送給站點A的封包隻有在referer字段有所差別。Referer字段會顯示發送的起始域,也就是站點B。
2)情況二:站點B和站點A重合,這個時候利用站點B的存儲XSS漏洞使得使用者發送請求給站點A的其它頁面。
3)情況三:站點B和站點A是不同站點,但是站點B中的請求的代碼含有JS代碼來實作相應功能。同時站點A有XSS漏洞,會使得傳給站點A的代碼傳回到用戶端執行。
以上三種情況僅情況二是比較特殊的,測試時候需要構造referer字段與使用者登入的時候域不一樣的域名,其它兩種同XSS攻擊無差別。
聯系:CSRF可以利用XSS實作更有用的攻擊(經常也這麼用)。上述情
二和情況三就是利用XSS漏洞的情況。
差別:CSRF不是XSS的子類,他們的本質問題不一樣。XSS本質是服務端對輸入過濾不嚴而後輸出的時候将用戶端的腳本再輸出。CSRF是服務端對使用者的身份認證不嚴格(cookie等),使得攻擊者冒充使用者達到攻擊目的。
對于CSRF測試,兩個方面測試:
1)包括XSS測試,同XSS測試,重點在于請求方法。主要有兩種:XMLHTTPRequest和帶有SRC屬性的标簽(frame、iframe、img、input)等。
2)測試Referer域的URL是其它位址,非請求的本URL位址。
三. 跨站攻擊整個學習思路:
跨站本質-->跨站類型分析-->有效載荷内容(就是能完成什麼攻擊,攻擊效果上)-->載荷傳送方式--》檢測漏洞方式
CST和CFS都是在有效載荷内容上的差別。
CSRF本質跟XSS不一樣,經常是利用XSS漏洞的功能完成載荷更複雜的功能,達到更好的攻擊效果。
本文轉自wzhj132 51CTO部落格,原文連結:http://blog.51cto.com/wzhj132/781626