------小小分割線-----
那原本是一個Happy的夜晚,我搞了二兩小白酒,聽到領導發來的消息,還TM喝酒,加班了!
接到測試網站,利用crawlergo+XRAY掃到了一個xss,這是入口點。打開網頁長這個樣子。
利用點在keyword參數
我們閉合前面的<script>看看
嗯..問題不大
而當直接注入payload的時候,會被攔截
麻麻賴賴的,咋直接幹它!
開始嘗試繞過payload
最後發現,onerror= 會被直接攔截
onerror== 不會被攔截,而是變成onerror=&34;
除此之外,不論=後面是否存在數值,都會被攔截。
於是猜想,是不是onerror這個事件太常用了,
所以作為關鍵詞的一部分被攔截了,因此我開始fuzz事件
這裡貼出所有的事件,來自菜鳥教程。
onclick oncontextmenu ondblclick onmousedown onmouseenter onmouseleave onmousemove onmouseover onmouseout onmouseuponkeydownonkeypressonkeyuponabortonbeforeunloadonerroronhashchange onloadonpageshowonpagehideonresize onscroll onunload onblur onchange onfocus onfocusin onfocusoutoninput onresetonsearchonselectonsubmitoncopy oncut onpasteonafterprint onbeforeprint ondragondragend ondragenterondragleaveondragoverondragstart ondroponabortoncanplayoncanplaythroughondurationchangeonemptiedonendedonerror onloadeddata onloadedmetadataonloadstartonpause onplay onplaying onprogressonratechangeonseekedonseeking onstalledonsuspendontimeupdateonvolumechangeonwaiting animationendanimationiterationanimationstarttransitionend onmessage onmousewheelononlineonoffline onpopstate onshowonstorage ontoggle onwheel
隨後,fuzz出了一堆可觸發的事件出來
最後我選擇了onwhell,滾動的時候觸發,但是緊跟著alert依舊不行
於是,我認為是alert(1)這個函數太過敏感,我們可以用一些別的方法來進行混淆。
於是在嘗試了反引號,confirm,prompt等都不行的時候,我居然想出了console.log(1)這個方法。
沒想到又出來一個攔截
真的是i了i了
最後掏出我彈藥庫裡的一些儲備
例如這些:
self[&39;%2B&39;](1) > parent[&39;%2B&39;](1) > frames[&39;%2B&39;](1) > content[&39;%2B&39;](1) > window[&39;%2B&39;](1) >
但是也都一一被攔截下來
最後,幸運之神還是眷顧了我,讓我找到了沒有被waf住的包
例如:
javascript:alert(document.cookie)
在javascript接著的語句中,進行編碼後依舊可以進行識別
或者利用toString的編碼轉換,來進行bypass
例如
最後結合top來進行二次繞過
top[11189117..toString(32)](1);
那麼最後為什麼還沒有彈框呢?原因是src=1 和onwheel壓根沒啥子關係。。
我們換個<svg onwheel>會不會更好。只需滾動一下滑鼠滑輪即可
</sCrIpT><svg onwheel=top[11189117..toString(32)](1);>
搞定收工,繼續喝酒去!
轉自https://mp.weixin.qq.com/s/83Q7sKmITMR1Qcu-WcILVA
點擊下方「了解更多」