XSSLABS精简总结
适看人群: 精简总结适合有一定(SQL或XSS等)注入基础的朋友阅读,若在做题过程中遇到困难或是想了解更多细节可在评论区留言询问。
一个小Tips: 您可以点击右方的按钮打开只看目录模式,以便快速定位到章节。
第一关
直接把js语句注传入name里就过了。
<script>alert(`123`)</script>
第二关
直接注入没成功,右击页面查看一下源码,发现①处尖括号被替换,很可能是开发者使用了htmlspecialchars
参数,不过②处仍然是原样,那就从②下手。
使用">
对value进行补全,在payload最后加上//
来注释掉后面的语句。
"><script>alert(`123`)</script>//
第三关
1和2都将尖括号替换了,我们换一种没有尖括号<
、>
的执行方式,在2处使用onfocus
来执行js命令。
同样地,我们需要使用'
和//
将语句补全(这一步也可以叫做使语句闭合
)。
' onfocus=javascript:alert(`123`)//
类似的事件
有onfocus
、οnmοuseοver
、onclick
等,都可以实现类似功能。
第四关
与上一关不同的是,2处将尖括号直接过滤了,这个仍然可以用onfocus
来绕过,注意语句闭合时单引号变为双引号。
"onfocus=javascript:alert(`123`)//
第五关
服务器将<script>
标签做了处理,onfocus
、οnmοuseοver
、onclick
也都被处理了,我们只好寻找新注入方式。
经过查找,我们发现 <a>
标签的href
属性用于指定超链接目标的 URL,href 属性的值可以是任何有效文档的相对或绝对 URL,包括片段标识符和 JavaScript 代码段。
所以我们可以利用这一特点来构造payload:
"><a href=javascript:alert(`123`) > aaaaaaaa</a>
第六关
服务器将href做了处理,我们使用大小写转换
绕过。
"><a Href=javascript:alert('123')>aaaaaaaa</a>//
第七关
js标签、事件、href属性都被服务器过滤了,针对过滤,我们可以尝试双写绕过
。
双写绕过具体详细操作移步我的另一篇短文章:#双写绕过的具体实现【小短篇】
"><a hrhrefef=javascscriptript:alert('123')>aaaaaaaa</a>//
第八关
对script和常见方法中间加入了其他字符,使用编码转换绕过(将原payload javascript:alter(1)
转为unicode的&#xxx编码
),
unicode在线转换http://www.jsons.cn/unicode/
javascript:alert(1)
第九关
对传入的链接是否有http://
进行了验证,将原payload编码后加上http://
和注释符//
来绕过。
javascript:alert(1)//http://
第十关
从前端可以发现这一关中隐藏了编辑框,在代码审计后,通过payload将编辑框显示出来以进行xss。
下方这张图为代码审计时的源码,可以看到t_sort被接收后连续进行了两次转换将左尖括号和右尖括号替换为了空格,那么我们选取不使用左尖括号和右尖括号的方式来xss。
?keyword=111&t_sort="οnclick=alert(1) type="text"