XSS/CSRF/SSRF/XXE
XSS/CSRF/SSRF/XXE
參考:
https://www.jianshu.com/p/4fcb4b411a66
XSS
概述
Cross Site Scripting 簡稱 XSS(跨站指令碼攻擊)。是一種注入攻擊,當web應用對使用者輸入過濾不嚴格,攻擊者寫u人惡意的指令碼程式碼(HTML, JavaScript)到網頁中時,如果使用者訪問了含有惡意程式碼的頁面,惡意指令碼就會被瀏覽器解析執行導致使用者被攻擊。
常見的危害有:cookie竊取,sesssion劫持,釣魚攻擊,蠕蟲,DDos
分類
-
反射型XSS
反射型xss一般出現在URL引數種及網站搜尋欄中,由於需要點選包含惡意程式碼的URL才可觸發,並且只能觸發一次,所以也被稱為“非持久型XSS
-
儲存型XSS
儲存型XSS一般出現在網站留言板,評論處,個人資料處,等需要使用者可以對網站寫入資料的地方。比如一個論壇評論處由於對使用者輸入過濾不嚴格,導致攻擊者在寫入一段竊取cookie的惡意JavaScript程式碼到評論處,這段惡意程式碼會寫入資料庫,當其他使用者瀏覽這個寫入程式碼的頁面時,網站從資料庫中讀取惡意程式碼顯示到網站中被瀏覽器執行,導致使用者cookie被竊取,攻擊者無需受害者密碼即可登入賬戶。所以也被稱為“持久型XSS”。持久型比反射型XSS危害要大的多。
-
DOM型XSS
DOM是一個與平臺、程式語言無關的介面,它允許程式或指令碼動態地訪問和更新文件內容、結構和樣式,處理後的結果能夠成為顯示頁面的一部分
CSRF
概述
Cross Site Request Forgery 簡稱CSRF (跨站站點請求偽造)。攻擊者盜用了你的身份,以你的名義傳送惡意請求,對伺服器來說這個請求時完全合法的,但是卻完成了攻擊者所期望的一個操作,比如以你的名義傳送郵件,法訊息,盜取你的賬號,新增系統管理員,甚至於購買商品、虛擬貨幣轉賬等。
以兩個例子說明
-
案例一
一個銀行站點存在一個csrf漏洞,使用者A轉賬B使用者2000元,執行轉賬操作後會對銀行傳送一次請求
http://www.bank.com/money?user=A&num=2000&transfer=B
,然後A使用者就會把自己的2000元轉到B的賬戶下。在傳送這個請求給銀行伺服器時,伺服器首先會驗證這個請求是否為一個合法的session,並且使用者A確認登入才可以驗證通過。如果此時有一個惡意使用者C像把A使用者的錢轉到自己的賬戶下,那麼他可以構造
http://www.bank.com/money?user=A&num=2000&transfer=C
這個請求,但是這個請求必須由A使用者發出才可以生效,此時惡意使用者C可以搭建一個自己的站點,在網站中寫入如下程式碼<img src="http://www.bank.com/money?user=A&num=2000&transfer=C">
,之後誘導A使用者訪問自己的站點,當A訪問了這個網站時,這個網站就會把img標籤裡的URL傳送給銀行伺服器,而且除了這個請求以外,還會把A使用者的cookie一起傳送到伺服器,如果此時A使用者的瀏覽器與銀行的sessions沒有過期,那麼就會在A使用者毫不知情的情況下執行轉賬給C的操作。訪問銀行站點時,使用的銀行域下的cookie, 也就不存在跨域 -
案例二
一個cms系統的管理後臺,可以傳送一個post請求新增一個管理員,由於沒有加token或者驗證碼限制,惡意攻擊者可以在自己的伺服器evil.com上建立一個a.html的檔案,a.html檔案是一個新增管理員賬戶的表單,上面寫入需要新增的賬戶使用者名稱及密碼,當網站管理員開啟evil.com/a.html的時候,並且管理員sessions(cookie中含有sessionID)沒有失效,那麼此時a.html就會請求受攻擊站點,在管理員毫不知情的情況下新增一個後臺賬戶
但是查詢資料的地方卻不需要保護,因為csrf是藉助受害者的cookie來進行攻擊者需要的惡意操作的,攻擊者並不能拿到受害者cookie,對於伺服器返回的結果也無法解析檢視,攻擊者唯一可以做的就是讓伺服器執行自己的操作命令,或者說改變網站資料,而查詢操作即不會改變資料也不會把結果返回給攻擊者,所以並不需要保護。
危害
- 對網站管理員進行攻擊
- 修改受害者網站上的使用者賬戶和資料
- 賬戶劫持
- 傳播CSRF蠕蟲進行大規模攻擊
- 利用CSRF進行拖庫
- 利用其他漏洞進行漏洞進行組合
- 針對路由器的CSRF攻擊
解決
-
使用驗證碼
csrf攻擊一般都是在受害者不知情的情況下,使用驗證碼可以有效的防止攻擊,但是每次請求都要輸入驗證碼會影響使用者體驗,所以通常只在使用者登入註冊,還有一些特定業務場景下使用,比如銀行轉賬。如何使用驗證碼要根據業務和場景來決定
-
驗證http Referer
http頭中的referer欄位記錄了請求來源地址,比如從
http://www.test.com
點選連結到http://m.test.com
之後,那麼referer就是http://www.test.com
這個地址。攻擊者在對受害者進行攻擊的時候,是在攻擊者自己的伺服器上構建自己的惡意指令碼,誘騙受害者點選,所以此時的referer值就是攻擊者自己的URL地址。通過以上可知,csrf攻擊都是跨域發起的,所以在服務端針對referer欄位驗證是否屬於安全可靠的域名,可在一定程度上有效防禦此類攻擊。
但是此類方法並非萬無一失,在低版本存在漏洞的瀏覽器中,黑客可以篡改referer值。另一種情況是csrf結合xss進行攻擊,此時就不需要跨域傳送,也可以繞過referer驗證。
-
使用token
在說token如何防禦csrf攻擊之前,我們瞭解下token的工作原理。當用戶第一次進行登陸時,客戶端會通過使用者名稱和密碼去請求伺服器登陸,服務端在收到請求後會驗證客戶端傳來的使用者名稱和密碼,如果驗證通過,服務端就會簽發一個token傳送給客戶端,並且將token放到session中,客戶端收到token後儲存到本地,以後客戶端只要每次請求伺服器就要帶上token,經過伺服器驗證通過後才會返回響應資料,否則報錯。
csrf攻擊成功的前提條件是攻擊者可以完全偽造處受害者的所有請求,而且請求中的驗證資訊都在cookie中,黑客只要使用使用者的cookie通過安全驗證就可以完成攻擊。瞭解這些之後,想要防止csrf攻擊,就要在http請求中放置黑客不可以偽造的資訊,而且該資訊不可以存在於cookie中,否則就無效。而token令牌最大的特點就是隨機性,不可預測,並且不存在於cookie中。
對於GET請求,請求引數直接在URL當中,這樣token的形式就為
http://xxx.com?csrftoken=tokenvalue
,但是這種方式把請求引數都放在URL中,會導致在referer中洩漏,不僅如此,設想另一種場景,一個在內網系統的員工,從內部敏感系統在點選對外部提供服務的網站連線,此時就會把內網敏感資訊通過referer洩漏出去。而對於POST請求,token是隱藏表單存在,<input type=”hidden” name=”csrftoken” value=”tokenvalue”/>
最後一點,如果在同域下存在xss漏洞,那麼這種tokoen的防禦將形同虛設
SSRF
Server-Side Request Forgery 簡稱SSRF(服務端請求偽造),是一種由攻擊者構造形成由服務端發起請求的一個安全漏洞。在一般情況下,SSRF攻擊目標是從外網無法訪問的內部系統。正是因為它是由服務端發起的,所以它能夠請求到與它相連而與外網隔離的內部系統
正常情況下,我們無法從外網去訪問一個公司的內部系統,但是如果服務端提供了從其他伺服器應用獲取資料的功能且沒有對目標地址做過濾與限制。比如從指定URL地址獲取網頁文字內容,載入指定地址的圖片,下載等等。攻擊者就可以利用該漏洞繞過防火牆等訪問限制,進而將受感染或存在漏洞的伺服器作為代理進行埠掃描,甚至是訪問內部系統資料。
ssrf的攻擊利用主要有以下幾種:
-
內網、本地埠掃描,獲取開放埠資訊
-
主機資訊收集,web應用指紋識別,獲取服務banner資訊
-
根據識別出的應用針對性的傳送payload攻擊,例如struts2
-
攻擊內網和本地的應用程式及服務。
-
穿越防火牆
-
利用file協議讀取本地檔案,比如file:///etc/passwd
一般存在於
- 線上分享:通過URL地址分享網頁內容
- 線上識圖
- 線上翻譯:百度翻譯,有道翻譯
- 各大網站訂閱
- 圖片加載於下載:通過URL地址載入或下載圖片
- 圖片,文章收藏功能
- 接收郵件服務地址的郵件系統
- 呼叫URL的功能
- 檔案處理,如ImageMagick, xml
- 請求遠端伺服器資源,遠端URL上傳,靜態資源圖片檔案等
- 資料庫內建功能,比如mongodb和copyDatabase函式
- 從URL關鍵字中尋找:share,url,link,src,source,sourceURL,imageURL,domain
漏洞驗證方式
1、右鍵圖片在新視窗開啟,如果瀏覽器地址顯示為 www.xxx.com/xx.jpg
類似格式的,說明不存在ssrf漏洞,但是如果資源地址類似 http://www.xxx.com/1.jsp?image=
的格式就有可能存在漏洞。
2、另一種方式是使用抓包工具burp fiddler來判斷,SSRF漏洞是構造伺服器傳送請求的安全漏洞,所以就可以通過抓包分析請求是否有服務端發起的來判斷是否存在漏洞。