【web安全】跨站***思路整理

接觸跨站***一段時間了,有了一些認識,現在先按自己的理解理一下思路。後續有時間在針對裏面詳細的***方法做詳解。

一.跨站腳本介紹

跨站腳本***(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型:

1)對數據未做嚴格淨化返回給客戶端,客戶端執行了惡意代碼。

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校驗不嚴格,導致被***者盜用。

 

CSRF***方式

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***無區別。

 

與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漏洞的功能完成載荷更復雜的功能,達到更好的***效果。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章