XSS搞安全的應該都很熟悉。本次並不是說其原理,僅是分享下在測試過程中遇到的案例。本人小白一枚,所以案例大佬們看着可能非常簡單,就當是記錄下自己筆記吧,不喜勿噴哈。。
關於xss的防御,基本上都是采用輸入過濾,輸出編碼。最近做的一個項目中的某個模塊中,進行了輸入過濾,采用跳轉的形式。比如遇到<>或alert,響應包就會302跳轉到固定網址。遇到這種黑名單的可以嘗試各種繞過。
有些輸入是在input標簽中的title或value屬性中的值,這些,我們不是非得閉合標簽,添加新標簽才可以,我們可以直接閉合title或value這個屬性,添加新事件,比如鼠標相關的事件,例如onclick、onmousemove。還有的采用多次編碼的方式繞過<>的過濾。
0X01 限制輸入<>的xss
課程名字處進行了過濾,不能輸入<>,我們就嘗試輸入”onclick=”prompt(55),第一個引號是用來閉合前面屬性的,后一個引號是用來閉合剩下的一個雙引號。我們發現,保存后,點擊課程名字並不彈框。通過查看元素,發現課程名字不是出現在屬性值的位置,這種就需要增加新標簽,才可能會執行。

但是,發現在別的地方執行了彈框。查看元素發現,此處顯示把課程名字作為title屬性的值顯示的,那我們的輸入就可完美的閉合title屬性,增加鼠標點擊事件,點擊即執行。

這個漏洞差點錯過,因為保存后點擊並沒執行。幸好在查看其它的地方時,注意到了,所以我們測試時需要細心。
0X02 繞過對<>的黑名單的xss
通過多次編碼繞過對尖括號的過濾。但是這種只有在多次解碼的地方才會執行成功。
比如:在課時名稱處,先用了HTML實體化編碼,比如<編碼成< 但是在參數間隔是采用&符號來間隔的,所以我們對&進行URL編碼,這樣<最終編碼為%26#x3c;。這樣我們就可以輸入成功<>,比如><img src=1>,%26#x3e;%26#x3c;img src=1%26#x3e;,在保存時,抓包,將課時名稱改為編碼后的。

這樣在涉及到HTML解碼的地方就會執行成功,這就涉及到了邏輯了。就像你花了很漂亮的妝,但是自己要洗臉,那保護層就沒辦法了,哈哈哈哈,比喻不恰當,湊合看~
比如,在選擇上傳資源時,課時名稱處的標簽代碼執行了。這樣就繞過了對<>的過濾

0X03 需要改變請求方法才執行的xss
記錄下遇到的反射xss,這個沒有什么,只是改變一下。在此只是記錄下。在跑注入的時候,若有xss則會提醒我們,在注入惡意代碼后,響應包中可以看到執行了,但是在放包后,並沒有彈框。這時,把請求方式改了,由POST改為GET(這個利用burpsuite中右擊有個change request method),然后再copy URL訪問,即可看到執行。

然后copy URL訪問,執行

總結:對於xss的防范,輸入過濾,基本上都是黑名單,但是有些還是可以繞過的,還有的輸入過濾是在輸入的時候采用編碼后存到數據庫中,但是編碼后,變長,數據庫存儲就大了,而且輸入編碼也存在風險,如果在輸出的時候,你又不小心給解碼了。。。。XSS防御基本上采用輸出處理,輸出編碼,不管輸入的惡意的還是正常的,都全盤接收,但是輸出顯示時實體化編碼輸出,這樣即使是惡意的也不會執行。
