我的朋友趙一天今晚給我發了一個站,跟我說他xss繞不過去,讓我試試。我正好無事,就幫她看看咯。
通過趙一天發我的站點,說實話,我自己學到了很多東西,感謝大佬的教誨。今天分享出來:
站點:xxx.com/sou

當我嘗試:
xxx.com/souaaaa

我們查看源碼或者f12 Ctrl+f搜索aaaa:
頗為震驚,搜索結果有400多條。。

首先是我們發現第一處利用是<input>標簽,下面的都是href=""中利用
繼續往下看看aaaa還在哪些標簽里面:
下面大部分都是a標簽。。

繼續往下看:
我們發現aaaa在我們的js中。

ok我們整理好了,我們輸入的aaaa在input,a和js中輸出了。
現在我們以input元素為例子嘗試去xss攻擊:
首先我先嘗試閉合標簽:

然后查看源碼:
真刺激,我們輸入的>被轉義成了全角的>

無法利用了
換個姿勢我們還能" onxx=
我們試試:

查看源碼:

沒有對onxxx進行過濾,慶幸的是咱們可以onxxx
這里就用onmouseover了。那么我們直接 "%20onmouseover=alert(1)"

我們發現沒有彈窗。。看看怎么回事吧。。

""(1)""
觀察發現,過濾了alert這個彈窗事件,括號變成了中午的括號:
我這里采取的措施:把alert事件改成
過濾了alert
我們嘗試其他彈窗方法,confirm和prompt,因為過濾了括號,所以使用``(反引號進行利用):
嘗試:

查看源碼:

prompt沒被過濾掉,反引號被過濾了。。頭大了 。
然后我嘗試對其進行各種編碼再次查看源碼:

變成這個樣子,現在我們來總結下我們的過濾問題:
1.全局的過濾了(),當攻擊者輸入()將會轉義成中文的括號
2.當攻擊者對()進行編碼處理直接不顯示信息被過濾
3.當攻擊者輸入>會被轉義成全角的>
首先從這里看來我們無法明面上進行彈窗xss了。。
那么我們使用另一種思路
從onxxx=下手
onxxx=內容=<script>內容</script>
我首先選擇document節點,因為過濾了()所以我不能document.getElementById(id)肯定會被過濾。。。
那么我現在想加載document還想要不被過濾?怎么做? 選擇一個不使用()的不就可以了嗎。
我嘗試:看看是否可以


除了這種方法我們還有其他辦法執行嗎?
答案是肯定有:" onmouseover="var ccc=11111;document.body.innerHTML=ccc//

成功閉合

對於xss我們的感覺就是必須得彈窗,這里沒彈窗,我們的目標,不彈窗誓不罷休:
我們知道location.hash這個屬性
今天我們要講解一個新知識點,docuemt.URL
document.URL屬性包含頁面完整的URL比如:{協議}://{用戶名}:{密碼}@{主機名}:{端口號}/{路徑}/{文件}?{參數}
他的功能和location.hash類似,我們可以#xss payload利用:
我們如下:" onmouseover=document.body.innerHTML=document.URL "#<img src=1 onerror=alert(1)>
在最新版本IE下:

為什么我不用var xx=xss payload;document.body.innerHTML=xx是因為<>被轉義了。。
現在這是一種彈窗方式,還有一種就是JS下的。
JS下的彈窗,我首選location.href:

簡直了到處過濾
沒辦法了還是使用我們之前的姿勢吧:"; document.body.innerHTML=document.URL// #<img src=1 onerror=alert(123)>
JS下利用

記錄學習下,蠻有意思的。。。如果有其他思路歡迎留言。
