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


  前幾天在漏洞挖掘中遇到個xss,感覺繞過過程蠻有意思的,寫篇文章記錄下。

  接下里是我對這個xss詳細的分析和繞過

  存在問題站點http://******/index/appInfo?appId=784&url=xss

  當我查看源代碼搜索xss:

  一處輸出點:

 

  繼續搜索第二處輸出點:

     

 

 

兩次輸出,第一次輸出是在input標簽中,第二次是在js中,這里不考慮input中利用了。因為input的type為hidden,即使能夠利用成功xss也非常的雞肋:

 

 

所以不考慮input標簽了,我們轉戰到js下構造代碼讓其彈窗。

  最簡單的,我們先閉合引號,先輸入:';alert(1);//

  

 

頁面直接變成空白頁。。是不是程序判斷中過濾了 alert?

  我們嘗試刪除 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基礎!馬上要過年了,特此 寫這篇文章 留念下。新的一年有更多的困難和挑戰等着我,更多的基礎知識需要掌握!加油!    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM