文章目錄XSS,,跨站腳本攻擊(Cross Site Scripting),為了不和CSS縮寫(xiě)混淆,,故縮寫(xiě)為XSS,。 1 XSS分類(lèi)1.1 反射型XSS又稱(chēng)非持久性XSS,這種攻擊往往具有一次性,。 攻擊者通過(guò)郵件等形式將包含XSS代碼的鏈接發(fā)送給正常用戶,,當(dāng)用戶點(diǎn)擊時(shí),服務(wù)器接受該用戶的請(qǐng)求并進(jìn)行處理,,然后把帶有XSS的代碼發(fā)送給用戶,,用戶瀏覽器解析執(zhí)行代碼,觸發(fā)XSS漏洞,。 例如: <?php echo $_GET[“uname”] ?> 1.2 存儲(chǔ)型XSS又稱(chēng)持久性XSS,,攻擊腳本存儲(chǔ)在目標(biāo)服務(wù)器的數(shù)據(jù)庫(kù)種,具有更強(qiáng)的隱蔽性,。 攻擊者在論壇,、博客、留言板,,發(fā)帖的過(guò)程中嵌入XSS攻擊代碼,,帖子被目標(biāo)服務(wù)器存儲(chǔ)在數(shù)據(jù)庫(kù)中。當(dāng)用戶進(jìn)行正常訪問(wèn)時(shí),,觸發(fā)XSS代碼,。 例如:DVWA中的Stored XSS 1.3 DOM型XSS全稱(chēng)Document Object Model,使用DOM動(dòng)態(tài)訪問(wèn)更新文檔的內(nèi)容,、結(jié)構(gòu)及樣式,。 服務(wù)器響應(yīng)不會(huì)處理攻擊者腳本,而是用戶瀏覽器處理這個(gè)響應(yīng)時(shí),,DOM對(duì)象就會(huì)處理XSS代碼,,觸發(fā)XSS漏洞。 2 XSS危害2.1 cookie介紹Cookie是在HTTP協(xié)議下,,服務(wù)器或腳本可以維護(hù)客戶工作站上信息的一種方式,,Cookie是由web服務(wù)器保存在用戶瀏覽器(客戶端)上的小文件,他可以包含有關(guān)用戶的信息,。 目前有些cookie是臨時(shí)的,,有些是持續(xù)的,。臨時(shí)的Cookie只在瀏覽器上保存一段規(guī)定的時(shí)間,一旦超過(guò)規(guī)定的時(shí)間,,該cookie就會(huì)被系統(tǒng)清楚,。 服務(wù)器可以利用cookie包含信息的任意性來(lái)篩選并經(jīng)常性維護(hù)這些信息,以判斷在HTTP傳輸中的狀態(tài),。 cookie最典型的應(yīng)用是判定注冊(cè)用戶是否已經(jīng)登錄網(wǎng)站,,用戶可能會(huì)得到提示,是否在下一次進(jìn)入此網(wǎng)站時(shí)保留用戶信息以便簡(jiǎn)化登錄手續(xù),,這些都是cookie的功用,。另一個(gè)重要應(yīng)用場(chǎng)合是“購(gòu)物車(chē)”之類(lèi)處理。用戶可能會(huì)在一段時(shí)間內(nèi)在同一家網(wǎng)站的不同頁(yè)面中選擇不同的商品,,這些信息都會(huì)寫(xiě)入cookie,,以便在最后付款時(shí)提取信息。 2.2 盜取用戶信息若存在反射型XSS漏洞的站點(diǎn)位置,,可以利用以下鏈接來(lái)盜取cookie:
其中的鏈接是惡意鏈接,,目的是獲取cookie并發(fā)送到惡意者的網(wǎng)站中。 此外,,可利用cookie值,訪問(wèn)目標(biāo)站點(diǎn),,利用獲取的cookie值來(lái)訪問(wèn)網(wǎng)站,,從而盜取用戶信息。 2.3 篡改網(wǎng)頁(yè)鏈接使用JS代碼,,注入到對(duì)于的XSS位置,,篡改網(wǎng)頁(yè)中所有的鏈接。 //window.onload 當(dāng)窗口加載時(shí),,執(zhí)行匿名函數(shù),。 //使用for循環(huán)遍歷獲得所有鏈接a標(biāo)簽 //將所有a標(biāo)簽所有的鏈接都指向構(gòu)造的URL <script> window.onload=function(){var link=document.getElementsByTagName("a"); for(j=0;j<link.length;j ){link[j].href="http://URL"; } } </script> 3 XSS存在位置3.1 探測(cè)XSS
3.2 可能存在的位置
4 繞過(guò)簡(jiǎn)單保護(hù)機(jī)制4.1 相關(guān)編碼介紹4.1.1 URL編碼url的設(shè)計(jì)者,,考慮到安全傳輸?shù)膯?wèn)題,為了防止url字符丟失,,所以選用了相對(duì)較小的,、通用的安全字母表。另一方面,,url的設(shè)計(jì)者希望url是完整的,,有時(shí)候需要url中包含除去通用安全字母表之外的二進(jìn)制數(shù)據(jù)和字符(比如中文)。所以u(píng)rl引入了一種轉(zhuǎn)義機(jī)制,,將不安全的字符編碼為安全字符再進(jìn)行傳輸,。 百分號(hào)編碼:url編碼包含一個(gè)百分號(hào),后面跟著兩個(gè)表示字符ASCII碼的十六進(jìn)制數(shù),。例如:空格轉(zhuǎn)為 ,。 4.1.2 html編碼一些保留字符出現(xiàn)在文本節(jié)點(diǎn)和標(biāo)簽值里是不安全的。比如“<>”會(huì)導(dǎo)致瀏覽器誤認(rèn)為標(biāo)簽,。如果想要正確的顯示這些字符,,需要使用html編碼。 實(shí)體編碼:一般以“&”開(kāi)頭,,以“;”結(jié)尾,。 進(jìn)制編碼:以“&#”開(kāi)頭,加上字符的數(shù)值,。字符的數(shù)值可以是任意十進(jìn)制ascii碼或Unicode字符編碼,。十六進(jìn)制的數(shù)值需要在編碼數(shù)字前加“x”。 4.1.3 JavaScript編碼數(shù)字形式:\u后面加上4位16進(jìn)制數(shù)字(或\后加上2位16進(jìn)制數(shù)字),,按字符的Unicode數(shù)值編碼,,不足位數(shù)以零填充。如“<”轉(zhuǎn)為“\u003c”或“\x3c”,。其中,,“\u”開(kāi)頭的Unicode轉(zhuǎn)義方式可以用在字符串之外的位置。 4.2 雙寫(xiě)繞過(guò)同SQL注入的雙寫(xiě)繞過(guò),,例如服務(wù)端中過(guò)濾了“script”關(guān)鍵字,,一般是直接替換“script”為“”,則可以雙寫(xiě)構(gòu)造payload,, 4.3 編碼繞過(guò)當(dāng)過(guò)濾了某些關(guān)鍵字時(shí),例如構(gòu)造
此外,可以將字符轉(zhuǎn)換為16進(jìn)制編碼或unicode編碼來(lái)運(yùn)行,。 雙斜杠 16進(jìn)制繞過(guò),,例如, 雙斜杠 unicode編碼繞過(guò),, HTML實(shí)體替換雙引號(hào): CSS/JS編碼(unicode)替換尖括號(hào): CSS/JS編碼(base16)替換圓括號(hào): ANSI編碼替換局部er: 4.4 js偽協(xié)議繞過(guò)將JS代碼添加到偽協(xié)議說(shuō)明符javascript后的URL中,,這個(gè)特殊的協(xié)議類(lèi)型聲明了URL的主體是任意的JS代碼,它由JS的解釋器運(yùn)行,。 例如,, 4.5 CSS特性繞過(guò)可以在屬性中,利用CSS和偽協(xié)議來(lái)繞過(guò),, 例如,, 4.6 HTML5特性繞過(guò)插入新標(biāo)簽,在新標(biāo)簽中構(gòu)造payload,。 例如,,SVG標(biāo)簽。 SVG意為可縮放矢量圖形(Scalable Vector Graphics),。使用XML格式定義圖像,。 SVG文件可通過(guò)以下標(biāo)簽嵌入HTML文檔:<embed>、<object>或者<iframe>,,也可以使用svg標(biāo)簽插入,。
例如, 4.7 其他姿勢(shì)使用反引號(hào)“`”代替圓括號(hào),,如alert(1)替換成alert`1`。 在過(guò)濾中可用空格,,換行穿插在payload,,從而繞過(guò)過(guò)濾機(jī)制,并且不會(huì)影響,。 5 防范措施5.1 同源策略在計(jì)算機(jī)中,,同源策略(Same-origin Policy,SOP)用于阻止一個(gè)非同源的頁(yè)面惡意代碼去訪問(wèn)另外一個(gè)非同源頁(yè)面。 只有兩個(gè)頁(yè)面屬于同一個(gè)源才能互相訪問(wèn),,不同源的客戶端腳本在沒(méi)有明確授權(quán)的情況下,,不能讀寫(xiě)對(duì)方資源,所以a.com下的JS腳本采用ajax讀取b.com里面的文件數(shù)據(jù)是會(huì)報(bào)錯(cuò)的,。 例如,,源A頁(yè)面要訪問(wèn)源B頁(yè)面認(rèn)證Cookie,如果不加阻止讀取Cookie,,會(huì)造成Cookies欺騙繞過(guò)登錄驗(yàn)證,。 注意:同源一定要是協(xié)議,、主機(jī)名、端口號(hào)完全一致,。 例如,,http://www.與https://www.是不同源。 此外,, domain屬性可以解決因同源安全策略帶來(lái)的不同文檔的屬性共享問(wèn)題,。 降域document.domain同源策略認(rèn)為域和子域?qū)儆诓煌挠颉?/p> 可以通過(guò)都設(shè)置document.domain=‘a(chǎn).com’,瀏覽器就會(huì)認(rèn)為他們都是同一個(gè)源,。 5.2 設(shè)置httponlysetcookie(name,value,expire,path,domain,secure)
secure可選,。規(guī)定是否通過(guò)安全的HTTPS連接來(lái)傳輸cookie。如果設(shè)置為true,,就不能使用JS來(lái)獲取cookie,,就可以初步避免cookie劫持。 6 XSS Filter過(guò)濾器可從網(wǎng)上下載Filter,,也可以使用各種函數(shù)來(lái)過(guò)濾,。 htmlspecialchars()函數(shù)
htmllentities()函數(shù)
strip_tags()函數(shù)
除此之外,,還可以自定義xss filter,。 7 工具7.1 XSStrike工具XSStrike是一款檢測(cè)XSS的高級(jí)檢測(cè)工具。它集成了payload生成器,、爬蟲(chóng)和模糊引擎功能,。XSStrike不是像其他工具那樣注入有效負(fù)載并檢查其工作,二十通過(guò)多個(gè)解析器分析響應(yīng),,然后通過(guò)與模糊引擎集成的上下文分析來(lái)保證有效負(fù)載,。除此之外,,XSStrike還具有爬行,模糊測(cè)試,,參數(shù)發(fā)現(xiàn)WAF檢測(cè)功能,。它還會(huì)掃描DOM XSS漏洞。 項(xiàng)目地址: https://github.com/s0md3v/XSStrike 運(yùn)行在python3.6 安裝命令: sudo apt-get install python3-pip git clone https://XXXXX.git pip3 install -r requirements.txt chmod x xsstrike.py 7.2 xsser工具針對(duì)web應(yīng)用程序自動(dòng)化挖掘,、利用,、報(bào)告XSS漏洞的框架。 工具原理:不斷拼接payload 8 在線靶場(chǎng)https://xss-quiz./ 一個(gè)日本安全研究院制作的XSS練習(xí)靶場(chǎng) https://xss./ 來(lái)源:https://www./content-4-800051.html |
|
來(lái)自: 印度阿三17 > 《開(kāi)發(fā)》