XSS挑戰
在線:https://xss.tesla-space.com/
源碼:https://github.com/rebo-rn/xss-lab
level 1 最基本的xss
看源碼
payload
xss
level 2 轉換爲字符串
正常注入,注入失敗
看下前端代碼,可以看到payload被作爲一個字符串整體輸入了,我們只需要將value的第一個雙引號閉合起來,然後再插入一個事件,最後再閉合value的第二個雙引號即可
payload
在輸入框中點一下,xss生效
level 3 使用htmlspecialchars函數
嘗試payload
看下源碼,可以看到使用了htmlspecialchars函數,它的作用是把預定義的字符 “<” (小於)和 “>” (大於)轉換爲 HTML 實體,所以不能使用尖括號
嘗試payload
可以看到此時alert()多了一個’,所以payload還需要修改
最終payload
補充:htmlspecialchars繞過
level 4 使用htmlspecialchars函數
跟上一關差不多
level 5 當onclick被替換時
使用level 4 的payload發現onclick變成了o_nclick
看下源碼,發現是替換了字符串
使用payload
" ><a href=javascript:alert()>xss</a><"
點擊鏈接
成功進行xss
level 6 href被替換了
上關的href被替換了,可以使用大寫
"><SCRIPT>alert()</SCRIPT><"
level 7 雙寫饒過
使用上一關的payload,這是啥情況,看源碼
可以看到,它將字母全部轉小寫然後替換成空了
可以通過雙寫繞過
" ><scrscriptipt>alert()</scrscriptipt><"
level 8 實體編碼
嘗試payload
可以看到href=“111”
再試payload
字符串被替換了
換大寫,還是不行
雙寫也不行
使用實體編碼,服務器可能沒有過濾,瀏覽器會自動解析
t就字母t的實體編碼
可以看到沒有替換
點擊鏈接成功xss
level 9 檢測鏈接
會檢測鏈接是否合法
javascript:alert()//http://
也可以把鏈接放在alert內部
javascript:alert('http://')
level 10 隱藏按鈕
通過url參數t_sort傳遞payload
默認按鈕是隱藏的,無法觸發XSS,所以要先顯示按鈕
level 11 Referer注入
沒有可見的輸入點
看源碼,可以通過Referer傳遞payload
payload如下
level 12 User Agent注入
可以通過ua進行payload
payload如下
level 13 cookie注入
可能可以通過cookie進行注入
看源碼得知要加上user
payload
level 14 罕見的exif xss
網頁內嵌了一個exifviewer網頁
將製作好的xss圖片通過exifviewer上傳,exifviewer在解析這個漏洞的時候會觸發xss
所以需要先製作xss圖片
查看圖片詳情
exiftool brute.jpeg
將xss寫入圖片某個屬性,這樣xss圖片就做好了
$ exiftool -Artist=’ “><img src=1 onerror=alert(document.domain)>’ brute.jpeg
但是由於exifviewer現在好像不支持上傳了,這個漏洞是以前該網站存在的一個漏洞,現在也已經無法復現了
level 15 ng-include
f12看一下,看到個奇怪的<!–ngInclude:1.gif
angular js的ng-include相當於php的include函數
payload
level 16 %a0
keyword的值是center的內容
payload,空格被過濾,使用%0D(url encode回車)替代
level 17 `1`
地址欄有兩個參數
f12看一下
arg02可以進行注入
payload
level 18 跟17關相同
level 19 flash xss
本關進行之前需要了解flash xss:
Flash XSS攻擊總結 殺死那個石家莊人/ 菲哥哥:https://www.secpulse.com/archives/44299.html
這一類的xss比較少見,更多技術細節參見:
那些年我們一起學xss:https://wizardforcel.gitbooks.io/xss-naxienian/content/14.html
payload flash xss
前提要打開flash
level 20 flash xss
這一題用到了zeroclipboard xss,具體可以參考這篇文章:
https://www.freebuf.com/sectool/108568.html
國內廣泛使用了zeroclipboard.swf,主要的功能是複製內容到剪切板,中間由flash進行中轉保證兼容主流瀏覽器,具體做法就是使這個透明的flash漂浮在複製按鈕之上
看一下源碼:
使用jpexs反編譯(swf反編譯工具:https://github.com/jindrapetrik/jpexs-decompiler
)
原因顯而易見,Externalinterface.call第二個參數傳回來的id沒有正確過濾導致xss
payload