記錄一次有意思的XSS過濾繞過2

  前幾天在漏洞挖掘中遇到個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基礎!立刻要過年了,特此 寫這篇文章 留念下。新的一年有更多的困難和挑戰等着我,更多的基礎知識須要掌握!加油!    

相關文章
相關標籤/搜索