00.前言
这篇文章将展示获取该靶机flag的过程,并对其中的通关步骤进行解析。
启动环境
打开漏洞靶机http://192.168.70.6:9060,查看提示,只需触发alert函数弹窗即可过关:
01.第一关
我们首先看到这是get型地址,且username的输入会在网页输出,我们尝试修改数据,将数字与常见的特殊字符一并输入,发现其没有过滤直接输出:
直接尝试最经典的XSS payload:<script>alert(1)</script>
,弹窗成功进入下一关:
02.第二关
看首页并没发现和LV1有什么不一样,那就先试试<script>alert(1)</script>
,然后查看源码信息:
可以发现我们输入的的确有进入源码,且多了一个escape函数,百度查看该函数的作用:
使用了escape()函数进行过滤,但这个函数放的位置不对,我们可以发现输入的字符串是先进入前面的username这个参数的,再进入escape函数进行过滤,所以我们可以使用</script>
进行拼接闭合前面原有的<script>
标签 再加其他的语句构造XSS,如</script><img src=1 onerror=alert(1)>;</script><script>alert(123)</script>
,当然也可以直接:';alert(123);'
03.第三关
老样子,输入特殊字符查看返回,发现返回正常,查看源码发现单引号被过滤,加了一个反斜杠’\’这其实是一个转义字符:
目前不少xss防御机制较为成熟,但是引号转义却不转义转义符的情况,仍然可以进行逃逸并触发反射xss,此处的单引号被转义,然而在单引号前加上转义符,可以导致单引号逃逸,成功闭合,触发反射xss:
其实这一关我们不需要使用单引号也可以进行弹窗:</script><script>alert(123)</script>
或者尝试使用<img src=1 onerror=alert(123)>
,成功弹窗:
04.第四关
页面显示10秒后将会重定向到http%3A//192.168.70.6%3A9050/level4。查看源码,跳转页面取决于jumpUrl是否正确:
使用jumpUrl=<script>alert(123)</script>
,发现存在特殊字符过滤:
使用jumpUrl=javascript:alert(123)
,避免了特殊字符<>成功弹窗:
05.第五关
查看源码,和第四关差不多,给参数autosubmit、action赋值即可:autosubmit=123&action=javascript:alert(1)
:
06.第六关
这题比较复杂,问题出在JavaScript框架AngularJS,原因是后端语言flask的jinja2使用不当,存在模板注入。
因为我们的AngularJS版本是1.4.6,使用对应版本的沙箱逃逸的方法构造payload:?username={{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}
成功弹窗并过去flag:
07.总结
这几关可以说是由易到难,但也不难吧哈哈,仔细看看找找还是可以过关的。