XSS挑战
在线:https://xss.tesla-space.com/
源码:https://github.com/rebo-rn/xss-lab
level 1 最基本的xss
看源码
payload
xss
level 2 转换为字符串
正常注入,注入失败
看下前端代码,可以看到payload被作为一个字符串整体输入了,我们只需要将value的第一个双引号闭合起来,然后再插入一个事件,最后再闭合value的第二个双引号即可
payload
在输入框中点一下,xss生效
level 3 使用htmlspecialchars函数
尝试payload
看下源码,可以看到使用了htmlspecialchars函数,它的作用是把预定义的字符 “<” (小于)和 “>” (大于)转换为 HTML 实体,所以不能使用尖括号
尝试payload
可以看到此时alert()多了一个’,所以payload还需要修改
最终payload
补充:htmlspecialchars绕过
level 4 使用htmlspecialchars函数
跟上一关差不多
level 5 当onclick被替换时
使用level 4 的payload发现onclick变成了o_nclick
看下源码,发现是替换了字符串
使用payload
" ><a href=javascript:alert()>xss</a><"
点击链接
成功进行xss
level 6 href被替换了
上关的href被替换了,可以使用大写
"><SCRIPT>alert()</SCRIPT><"
level 7 双写饶过
使用上一关的payload,这是啥情况,看源码
可以看到,它将字母全部转小写然后替换成空了
可以通过双写绕过
" ><scrscriptipt>alert()</scrscriptipt><"
level 8 实体编码
尝试payload
可以看到href=“111”
再试payload
字符串被替换了
换大写,还是不行
双写也不行
使用实体编码,服务器可能没有过滤,浏览器会自动解析
t就字母t的实体编码
可以看到没有替换
点击链接成功xss
level 9 检测链接
会检测链接是否合法
javascript:alert()//http://
也可以把链接放在alert内部
javascript:alert('http://')
level 10 隐藏按钮
通过url参数t_sort传递payload
默认按钮是隐藏的,无法触发XSS,所以要先显示按钮
level 11 Referer注入
没有可见的输入点
看源码,可以通过Referer传递payload
payload如下
level 12 User Agent注入
可以通过ua进行payload
payload如下
level 13 cookie注入
可能可以通过cookie进行注入
看源码得知要加上user
payload
level 14 罕见的exif xss
网页内嵌了一个exifviewer网页
将制作好的xss图片通过exifviewer上传,exifviewer在解析这个漏洞的时候会触发xss
所以需要先制作xss图片
查看图片详情
exiftool brute.jpeg
将xss写入图片某个属性,这样xss图片就做好了
$ exiftool -Artist=’ “><img src=1 onerror=alert(document.domain)>’ brute.jpeg
但是由于exifviewer现在好像不支持上传了,这个漏洞是以前该网站存在的一个漏洞,现在也已经无法复现了
level 15 ng-include
f12看一下,看到个奇怪的<!–ngInclude:1.gif
angular js的ng-include相当于php的include函数
payload
level 16 %a0
keyword的值是center的内容
payload,空格被过滤,使用%0D(url encode回车)替代
level 17 `1`
地址栏有两个参数
f12看一下
arg02可以进行注入
payload
level 18 跟17关相同
level 19 flash xss
本关进行之前需要了解flash xss:
Flash XSS攻击总结 杀死那个石家庄人/ 菲哥哥:https://www.secpulse.com/archives/44299.html
这一类的xss比较少见,更多技术细节参见:
那些年我们一起学xss:https://wizardforcel.gitbooks.io/xss-naxienian/content/14.html
payload flash xss
前提要打开flash
level 20 flash xss
这一题用到了zeroclipboard xss,具体可以参考这篇文章:
https://www.freebuf.com/sectool/108568.html
国内广泛使用了zeroclipboard.swf,主要的功能是复制内容到剪切板,中间由flash进行中转保证兼容主流浏览器,具体做法就是使这个透明的flash漂浮在复制按钮之上
看一下源码:
使用jpexs反编译(swf反编译工具:https://github.com/jindrapetrik/jpexs-decompiler
)
原因显而易见,Externalinterface.call第二个参数传回来的id没有正确过滤导致xss
payload