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