1、审题发现是xss(跨站脚本攻击)类型题目:
(1)第一关:无任何过滤:
执行:script>alert("xss")</script>
这段代码是一个简单的JavaScript脚本,其中包含一个alert函数调用,用于显示一个弹出框,内容为"xss"。这种代码通常被称为跨站脚本(XSS)攻击载荷。
当这段代码被嵌入到网页中,并且网页被用户访问时,浏览器会执行其中的JavaScript代码。在这种情况下,会弹出一个包含"xss"的警告框,可能会误导用户或利用用户的信任执行恶意操作。
(2)第二关:存在过滤,使用了js所编写的一个过滤,username被escape加密
执行:1';alert(1);'1
使用';结束前面的语句,后面加上函数alert(1);使用'1闭合后面的单引号,当然也可以使用"//"将其注释,最终 username = alert(1);,执行了alert函数。
(3)第三关:存在过滤,输入1';alert(1);'1 ,发现 ' 字符被转义。
所以执行:1'';alert(1);'1,则 ’ 转义为 \ 后另一个 ' 也可以完成闭合。
(4)第四关:页面一直在跳转,伪链接问题。
执行:jumpUrl=javascript:alert(1)
javascript:alert(1),浏览器会把javascript后面的内容当做代码执行,直接在当前页面执行。代码中接收jumpUrl作为跳转url。
(5)第五关:getQueryVariable()函数绕过
所以执行:autosubmit=1&action=JavaScript:alert(1);//
JavaScript后面的代码会直接执行。所以action=1,绕过getQueryVariable()函数。对于 // 可有可无
(6)第六关:(xss模板注入)沙箱逃逸
测试{{8*9}}发现是xss模板注入的题目,具体为Angular JS客户端模板注入。
执行:{{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}
沙箱逃逸
这个方法,就是确认了存在xss模板注入以后,我们对Angular(版本号v1.4.0-v1.4.9)沙箱逃逸
这段代码是一个利用AngularJS漏洞进行的攻击载荷。具体分析如下:
{{'a'.constructor.prototype.charAt=[].join;:这部分代码试图修改JavaScript中String对象的原型,将其charAt方法替换为数组的join方法。这是为了绕过AngularJS的防御机制,使得后续的代码能够成功执行。
$eval('x=1} } };alert(1)//');:这是AngularJS中的一个内置函数eval的调用。eval函数接受一个字符串参数,并将其作为AngularJS表达式进行求值。在这里,字符串参数包含恶意代码 x=1} } };alert(1)//'。这段代码试图关闭现有的AngularJS表达式,然后触发一个JavaScript alert弹窗,以实现攻击目的。
}}:这是为了结束AngularJS表达式。
(7)得到flag: