xss的防御
反射型xss測驗的時候,可以使用掃描器,或者burp進行fuzz
存盤型xss測驗的時候,可以直接把字典中的payload都塞進去,根據彈窗的編號,就知道是哪個,但這個容易被發現,所以可以先試探一下特殊符號是否被過濾,
DOM型xss測驗,主要以閱讀js代碼為主,在頁面上找打輸入點的相關dom節點,在開發者選項中搜索一下,根據搜索結果去看是否被相關的JS操作,如果有js的操作,就去看我們的輸入操作后輸出在哪個地方,就按照常規的xss思路進行構建,
防御一般來說,做物體字符編碼,htmlspecialchars(), 函式功能就是把特殊符號,比如尖括號,引號轉換成物體編碼,這樣就不會再輸入的地方去干擾頁面源代碼,
經過物體字符編碼后,用戶輸入的特殊符號在源代碼中就變成編碼,但是在頁面輸出的時候,還是會顯示成原來的樣子,
當輸出位置在元素內容里面,并且被物體編碼后,基本上就沒有xss的可能了,
但是如果輸出在事件屬性中,還是有可能存在繞過的可能性,
比如在a標簽中,<a href=javascript:alert(1)>,這種形式,沒有尖括號也沒有引號,就有可能被繞過,如果存在類似這種的情況,需要在鏈接屬性中加上http://或https://的正則運算式來限制,
xss的繞過方式
繞過過濾
1、前端限制,直接用F12開發者選項修改js既可,或者用burpsuite繞過,
2、字符過濾,雙寫,大小寫繞過 通過注釋符繞過,也可以通過換行符繞過
繞過編碼
1、明確瀏覽器決議的機制
2、明白機制后,選擇對應的編碼
(1)輸出在標簽間的情況:測驗<>是否被過濾或轉義,若無則直接<imgsrc=https://www.cnblogs.com/gx991010/p/1onerror=alert(1)> (2)輸出在script標簽內:我們需要在保證內部JS語法正確的前提下,去插入我們的payload,如果我們的輸出在字串內部,測驗字串能否被閉合,如果我們無法閉合包裹字串的引號,這個點就很難利用了,可能的解決方案:可以控制兩處輸入且\可用、存在寬位元組 (3)輸出在HTML屬性內:首先查看屬性是否有雙引號包裹、沒有則直接添加新的事件屬性;有雙引號包裹則測驗雙引號是否可用,可用則閉合屬性之后添加新的事件屬性;TIP:HTML的屬性,如果被進行HTML物體編碼(形如''),那么HTML會對其進行自動解碼,從而我們可以在屬性里以HTML物體編碼的方式引入任意字符,從而方便我們在事件屬性里以JS的方式構造payload, (4)輸出在JS中,空格被過濾:使用/**/代替空格, (5)輸出在JS注釋中:設法插入換行符%0A,使其逃逸出來, (6)輸出在JS字串內:可以利用JS的十六進制、八進制、unicode編碼, (7)輸出在src/href/action等屬性內:可以利用javascript:alert(1),以及data:text/html;base64;加上base64編碼后的HTML,
(8)當我們的XSSpayload位于這些標簽中間時,并不會決議,除非我們把它們閉合掉,
?<textarea></textarea><title></title>
<iframe></iframe>
<noscript></noscript>?
<noframes></noframes> <xmp></xmp> <plaintext></plaintext>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/5094.html
標籤:其他
上一篇:xss講解
下一篇:資訊收集---1
