網(wǎng)站設(shè)建設(shè)表單chatgpt網(wǎng)址
0x01:利用編輯器的超鏈接組件導(dǎo)致存儲XSS
鄙人太菜了,沒啥高質(zhì)量的洞呀,隨便水一篇文章吧。
在月黑風(fēng)高的夜晚,某駭客喊我起床挖洞,偷瞄了一下發(fā)現(xiàn)平臺正好出活動了,想著小牛試刀吧
首先信息收集了一下,發(fā)現(xiàn)一個奇怪了域名引起了我的注意,訪問后,發(fā)現(xiàn)是一個投稿平臺,可以發(fā)布文章到后臺進行審核。
使用賬戶登錄進系統(tǒng),就能發(fā)現(xiàn)一處文章管理
第一時間就想到發(fā)布文章,再觀察系統(tǒng)中發(fā)現(xiàn)一個不知名的編輯器(知道的大牛可以說一下)存在 超鏈接 功能,那么就嘗試利用一下吧
在超鏈接中注入偽協(xié)議來構(gòu)造xss
這里有個小細節(jié)就是下方的小按鈕
- 當處于開啟狀態(tài)時:觸發(fā)超鏈接按鈕后,頁面會在新窗口中執(zhí)行跳轉(zhuǎn)操作
- 當處于關(guān)閉狀態(tài)時,觸發(fā)超鏈接按鈕后,頁面會在當前網(wǎng)站中執(zhí)行javascript操作
所以這里就需要關(guān)閉掉
發(fā)布文章后,可以看到在正文中成功觸發(fā)javascript:
因為這里我是直接插入的超鏈接 ,所以頁面中是處于純白色狀態(tài)。
0x02:文章正文處的存儲XSS繞過
來到新建文章中就是上payload,鄙人很菜,挖XSS都是見框就X
在標題處和正文中輸入payload點擊提交,開啟burpsuite抓包
可以看到運作過程是先進行前端HTML實體編碼處理
這邊只要重新替換掉payload就可以達到繞過的效果了
訪問發(fā)布的文章頁面后,成功觸發(fā)XSS
至此,兩個存儲XSS提交上去,收工睡覺。
0x03:編輯器中的媒體組件導(dǎo)致存儲XSS
經(jīng)過上回的兩個存儲XSS,我覺得還沒完,第二天繼續(xù)看,果然功夫不負有心人
在測試編輯器的其他功能后,發(fā)現(xiàn)媒體功能插入的資源地址可以回顯在頁面
添加網(wǎng)絡(luò)資源:
其過濾了很多了標簽,事件,但并不妨礙我們通過burp進行FUZZ
選擇嵌入式媒體,經(jīng)過反復(fù)測試構(gòu)造如下payload:
x"><marquee loop=1 width=0 onfinish=alert(document.cookie)>
提交文章后訪問url 成功觸發(fā)
0x04:編輯器中的媒體組件導(dǎo)致存儲XSS(Bypass
前面的漏洞均已提交,過了幾天就修復(fù)了,本來以為這樣就結(jié)束了。然而事情并不如此
既然修復(fù)了,那么真男人就該嘗試繞過,根據(jù)0x03的操作步驟重新打了一遍,發(fā)現(xiàn)其中的種種過濾問題。
- 過濾了alert腳本函數(shù)
- 過濾了不少js事件,但Onfinish事件沒有過濾
- 標簽也沒有進行過濾
這個開發(fā)估計也是偷懶了,過濾做的拉胯的一批,那我們就對癥下藥,更換prompt的腳本函數(shù),進行繞過。
x"><marquee loop=1 width=0 onfinish=prompt(document.cookie)>ffj</marquee>
最后也是如愿以償?shù)膱?zhí)行了:
因為業(yè)務(wù)線那邊的修復(fù)狀態(tài)原因,目前還不方便更新該站的繞過,只能止步于此了
欲知后事如何,請聽下回分解
0x05 分享一些xss小tips
1.當某參數(shù)輸出的值在JS中被反引號包囊,通過${ }可以執(zhí)行javascript
<script>var a=`Hello${alert(1)}`</script>
2.SVG中的測試XSS
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svgonload="window.location='https://www.baidu.com'"xmlns="http://www.w3.org/2000/svg"></svg>
3.不允許使用函數(shù)執(zhí)行的WAF可嘗試如下payload繞過
<svg/onload="[]['\146\151\154\164\145\162']['\143\157\156\163\164\162\165\143\164\157\162']('\141\154\145\162\164\50\61\51')()">
4.在測試中也可以嘗試使用編碼繞過,多重url編碼、HTML實體編碼、json中使用Unicode、html編碼,或者一些字符拼接。
或者使用回車;換行 繞過 某些WAF \r\n可以實現(xiàn)繞過
payload:
<svg onload\r\n=$.globalEval("al"+"ert()");>
<svg onload\r\n=$.globalEval("al"+"ert()");>