XSS-labs通关实录
XSS-labs-1
观察页面,发现url中参数name在页面中显示,尝试在name中插入JS代码
(代码审计:源码重写了window.alert函数,只要有alert函数执行,则跳转到下一关)
XSS-labs-2
与less-1同思路,发现搜索框内容,在页面回显,则尝试插入JS代码
发现JS代码被原样输出,而非被执行
查看源码,发现输入内容有两处显示,一处被实体化,一处被闭合
解:闭合掉双引号(输入"><")
XSS-labs-3
尝试插入js代码,发现两次显示都被实体化
尝试绕过实体化函数htmlspecialchars(该函数默认不过滤单引号)
所以使用仅有单引号的alert调用语句
XSS-labs-4
仍旧试着插入JS代码,发现第一处被实体化,第二处被过滤掉"<“与”>"(这个过滤只在value中被执行,不然第一处位置不会有<)
同less-3,闭合value,另起炉灶,则不会被过滤
XSS-labs-5
第一处实体化,第二处进行过滤
过滤方式为:替换<script为<scr_ipt以及替换on为o_n。则οnfοcus=javascript:alert()和onclick = alert(1)都不能使用
点击自己创建的链接即可过关(自己输入的内容在html中原封不动输出,只要能闭合value,相当于是自己在重构网站)
XSS-labs-6
过滤方式如下(大小写敏感)
在关键过滤监察处改变大小写即可
XSS-labs-7
直接删除关键字,且大小写不敏感(GET传参后立即都转化为小写)
使用复写成功绕过
XSS-labs-8
value中进行严格实体化,但是链接位置只是进行了关键词过滤
对javascript:alert(1)进行html编码过滤
XSS-labs-9
添加了新的条件,检测输入中有没有“http://”,没有则视为非法链接
在最后加上/ http:// /即可(可以通过检测,且被注释掉,不会影响代码执行)
XSS-labs-10
一个实体化,三个隐藏属性
尝试向3个隐藏属性标签传参,发现第三个可以接收内容
XSS-labs-11
类似less-10,一个实体化,4个隐藏属性(t_ref为新添加的,可能是提示使用referer传参)
Burosuite抓包添加Referer,成功过关
XSS-labs-12
同less-12,修改UA内容即可
XSS-labs-13
同less-12,修改Cookie内容即可
XSS-labs-14
暂留(题解可参考link)
XSS-labs-15
没有发现传参点,直接查看源码
GET方法接收src并实体化,突破口在ng-include
ng-include指令一般用于包含外部的 HTML 文件,ng-include属性的值可以是一个表达式,返回一个文件名,但是默认情况下,包含的文件需要包含在同一个域名下。
payload:src=’ level1.php?name=">xss ’
则less-15页面展示了’ level1.php?name=">xss ’
的内容
XSS-labs-16
过滤:敏感符号用空格代替(直接进行绕过即可)
?keyword=
XSS-labs-17 & XSS-labs-18
参数拼接
(火狐浏览器不支持,Edge浏览器可正常弹窗)
XSS-labs-19 & XSS-labs-20
与flash xss有关(暂放)
总结
XSS攻击与sql注入逻辑相似,找到注入点,插入恶意代码,过滤绕过……