XSS搞安全的應該都很熟悉。本次並非說其原理,僅是分享下在測試過程當中遇到的案例。本人小白一枚,因此案例大佬們看着可能很是簡單,就當是記錄下本身筆記吧,不喜勿噴哈。。數據庫
關於xss的防護,基本上都是採用輸入過濾,輸出編碼。最近作的一個項目中的某個模塊中,進行了輸入過濾,採用跳轉的形式。好比遇到<>或alert,響應包就會302跳轉到固定網址。遇到這種黑名單的能夠嘗試各類繞過。安全
有些輸入是在input標籤中的title或value屬性中的值,這些,咱們不是非得閉合標籤,添加新標籤才能夠,咱們能夠直接閉合title或value這個屬性,添加新事件,好比鼠標相關的事件,例如onclick、onmousemove。還有的採用屢次編碼的方式繞過<>的過濾。xss
0X01 限制輸入<>的xss測試
課程名字處進行了過濾,不能輸入<>,咱們就嘗試輸入」onclick=」prompt(55),第一個引號是用來閉合前面屬性的,後一個引號是用來閉合剩下的一個雙引號。咱們發現,保存後,點擊課程名字並不彈框。經過查看元素,發現課程名字不是出如今屬性值的位置,這種就須要增長新標籤,纔可能會執行。ui
可是,發如今別的地方執行了彈框。查看元素髮現,此處顯示把課程名字做爲title屬性的值顯示的,那咱們的輸入就可完美的閉合title屬性,增長鼠標點擊事件,點擊即執行。編碼
這個漏洞差點錯過,由於保存後點擊並沒執行。幸虧在查看其它的地方時,注意到了,因此咱們測試時須要細心。spa
0X02 繞過對<>的黑名單的xssblog
經過屢次編碼繞過對尖括號的過濾。可是這種只有在屢次解碼的地方纔會執行成功。事件
好比:在課時名稱處,先用了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防護基本上採用輸出處理,輸出編碼,無論輸入的惡意的仍是正常的,都全盤接收,可是輸出顯示時實體化編碼輸出,這樣即便是惡意的也不會執行。