前幾天在漏洞挖掘中遇到個xss,感受繞過過程蠻有意思的,寫篇文章記錄下。javascript
接下里是我對這個xss詳細的分析和繞過java
存在問題站點http://******/index/appInfo?appId=784&url=xssapp
當我查看源代碼搜索xss:dom
一處輸出點:xss
繼續搜索第二處輸出點:函數
兩次輸出,第一次輸出是在input標籤中,第二次是在js中,這裏不考慮input中利用了。由於input的type爲hidden,即便可以利用成功xss也很是的雞肋:學習
因此不考慮input標籤了,咱們轉戰到js下構造代碼讓其彈窗。this
最簡單的,咱們先閉合引號,先輸入:';alert(1);//編碼
頁面直接變成空白頁。。是否是程序判斷中過濾了 alert?url
咱們嘗試刪除 alert:
仍是 空白頁,說明()被過濾了。
咱們嘗試刪除()看看alert有沒有被過濾:
頁面顯示依舊是空白,接着我嘗試把alert替換成prompt和confirm等經常使用彈窗碰見 ,依舊是空白頁,很明顯這裏對彈窗函數和過濾了(),咱們再次嘗試雙引號("")有沒有被過濾:
輸入:http://******/index/appInfo?appId=784&url=xss';"xss";//
頁面顯示內容,而後再次查看源代碼:
雙引號沒有被過濾。過濾了括號,一些彈窗函數。
如今咱們不抱着彈窗的目的看看可否執行一些簡單的js操做,嘗試用js代碼跳轉到百度:
代碼window.location.href="http://baidu.com"
咱們閉合而後構造:
發現仍是顯示空白頁,說明過濾了,我猜想過濾window,我刪除其餘內容 保留window關鍵字:
只要有 window他就顯示空白頁面。說明對window作了過濾。
window表示打開的當前窗口,表示當前的還有this關鍵字,這裏過濾了window咱們能夠嘗試使用this代替window:
咱們再次構造地址:http://******/index/appInfo?appId=784&url=xss';this.location.href="http://baidu.com";//
此次他沒有攔截,讓咱們跳轉到了百度:
如今咱們可使用他進行url的跳轉,如今我開始想着嘗試彈窗,可是這貌似很難,由於他過濾的東西有點多。
我嘗試能不能使用dom節點寫入:
又是空白頁面,我保留document刪除其餘部分 :
我發現程序只要 有document他就會攔截你到空白頁,對於dom來講,沒有document是沒有靈魂的。雖然過濾document可是咱們仍是有辦法繞過的。
本地調試:
發現self['doc'+'ument']就是document
咱們構造地址:http://******/index/appInfo?appId=784&url=xss';self['doc'%2b'ument'].body.innerHTML=111//
其實寫到這裏,咱們回顧發現咱們如今已經能夠作不少咱們想作的事情了,咱們能夠經過js修改一個 界面內容,經過js實現一個任意跳轉等。
可是咱們本能的以爲xss必須得彈個框框,這是咱們廣泛對xss的認知,如今我就只想彈窗?我該怎麼作?
在過濾了括號,一些彈窗的函數後,我發現我已經很難讓他彈窗了。。我思考了好久都沒法作到彈窗。。後來請教大佬獲得了一種彈窗的方法,爲我xss學習又一次打開新的世界:
思路1:經過函數劫持彈窗 :
查看源碼咱們發如今下面一行調用了jq的attr屬性操做函數,這裏咱們可否進行函數的劫持?對attr函數進行劫持,劫持他變成alert呢?
這樣不就能彈窗了?
由於alert被過濾了,因此咱們要用self['al'+'ert']替代繞過:
咱們嘗試構造這樣一個地址:http://******/index/appInfo?appId=784&url=xss';jQuery['attr']=this['al'%2b'ert']//
咱們查看 源代碼:
下面是我對函數劫持的分析:
彈窗思路2:
使用#xss payload的方法
使用window.location.hash而後外部定位就不會形成任何攔截了 :
由於過濾不少關鍵字,咱們構造以下地址:
http://******/index/appInfo?appId=784&url=xss%27;location=this.location.hash.slice%601%60;//#javascript:alert('xss')
就能夠形成彈窗,這裏過濾了()我嘗試%28%29同樣是空白頁,嘗試把括號改爲``仍是空白頁,當我編碼``爲%60的時候發現沒有攔截,程序自動decode了。故致使xss:
先寫到這裏,此次xss的繞過讓我收穫了不少,爲我之後xss研究打開了新的大門,總結 了一些寶貴的經驗,從前輩師傅那裏學到了更深層的東西
好比說想玩好xss,必定要學好javascript基礎!立刻要過年了,特此 寫這篇文章 留念下。新的一年有更多的困難和挑戰等着我,更多的基礎知識須要掌握!加油!