前言
在滲透測試XSS(跨站腳本攻擊)漏洞的時候, 有一些網站爲了防護XSS, 將所有可以禁止的tag、event都禁止了, 但這還不是絕對安全的, 如果網站會將自定義的標籤寫入網頁的話, 還是可能引起XSS的, 也就是本文談到的內容。
接下來以一個XSS靶場爲例。
Fuzz
測試伊始, 當然是尋找waf允許的標籤以及事件類型, 這裏本人採用burpsuite的intruder來Fuzz, 看看是否存在某些tag或者event是可行的。
1. 設置一下需要Fuzz的參數, 注意需要在<>內:
2. 加載Fuzz的字典:
3. 發現無可用的html標籤:
都被waf攔下:
思考
到這裏就沒有辦法了嗎? 其實是有的。
首先來複習一下URL中的 #
他的功能是: 使窗口定位到頁面中的id, class的位置, 用法通常是:
https://www.example.com/index.html#id
例如:
調用過程中, 可以理解爲選中/加載了指定id或者class標籤。
小試牛刀
正如前言所述的情況, 頁面運行寫入自定義的(非html)標籤:
於是熟練的配合xss打出一個payload?
發現, alert並沒有被執行, 似乎少了點什麼...
# 符號雖然可以將頁面定位到指定id上, 但是自定義的custom標籤並沒有獲得焦點(focus), 所以包含的alert事件並不會被執行。
敲黑板! 劃重點!
- tabindex屬性
html中的tabIndex屬性可以設置鍵盤中的TAB鍵在控件中的移動順序,即焦點的順序。
把控件的tabIndex屬性設成1到32767的一個值,就可以把這個控件加入到TAB鍵的序列中。
這樣,當瀏覽者使用TAB鍵在網頁控件中移動時,將首先移動到具有最小tabIndex屬性值的控件上,最後在具有最大tabIndex屬性值的控件上結束移動。
如果有兩個控件的tabIndex屬性相同,則以控件在html代碼中出現的順序爲準。
默認的tabIndex屬性爲 0 ,將排列在在所有指定tabIndex的控件之後。
而若把tabIndex屬性設爲一個負值(如tabIndex="-1"),那麼這個鏈接將被排除在TAB鍵的序列之外
瞭解了tabindex的功能之後, 這裏就加入tabindex屬性配合#符號來使得自定義標籤獲得焦點:
防護措施
1. 將< >標籤禁止;
2. html編碼實體化