反射型XSS、存储型XSS和DOM型XSS的简介及XSS常见payload构造及变形

2023-11-10

渗透学习

XSS跨站脚本之XSS基础



前言

本系列用于记录本人渗透学习的过程,主要内容围绕Owasp TOP 10展开。

XSS跨站脚本之XSS基础将用实验案例的形式记录学习三大常见的跨站脚本攻击:反射型XSS、存储型XSS和DOM型XSS,借此来掌握XSS攻击的基础知识。另外还会介绍到几种payload的构造以及变形来绕过一些简单的过滤。

本文只做学习用途,严禁利用本文提到的技术进行非法攻击,否则后果自负,本人不承担任何责任。

一、XSS漏洞原理

XSS指跨站脚本攻击,主要基于javascript语言完成恶意的攻击行为,因为javascript可以非常灵活的操作html、css和浏览器。XSS利用网页开发时留下的漏洞,巧妙的将恶意代码注入到网页中,因为浏览器不会判断代码是否恶意,只要代码符合语法规则,浏览器就会解析这段XSS代码,以达到攻击的效果。
XSS攻击
微博、留言板、聊天室等收集用户输入的地方,都有遭受XSS的风险。

前提条件:
1.需要向Web页面注入精心构造的恶意代码
2.对用户的输入没有做过滤,恶意代码能够被浏览器成功的执行

XSS危害:
1.盗取各种用户账号
2.窃取用户Cookie资料,冒充用户身份进入网站
3.劫持用户会话,执行任意操作
4.刷流量,执行弹窗广告
5.传播蠕虫病毒
6.攻击者能在一定限度内记录用户的键盘输入

接下来就通过几个实验分别了解和感受一下几种XSS跨站脚本

二、XSS分类

1.反射型XSS

反射型XSS是一种非持久型XSS,是最容易出现的一种XSS漏洞。用户在请求某条URL地址的时候,会携带一部分数据。当客户端进行访问某条链接时,攻击者可以将恶意代码植入到URL,如果服务端未对URL携带的参数做判断或者过滤处理,直接返回响应界面,那么XSS攻击代码就会一起被传输到用户的浏览器,从而触发反射型XSS。

流量走向:浏览器——>后端——>浏览器

实验:
在文本框中输入然后提交,在没有过滤的情况下直接被攻击。
测试结果
查看网页源代码,发现提交的payload被写进了页面的代码中
源代码
网页切换后再次进入没有触发弹窗,源码处也没有之前的语句,说明反射型注入是非持久的。

危险的PHP语句:

<?php
$XssReflex = $_GET['input'];
echo 'output:<br>'.$XssReflex;
?>

2.存储型XSS

存储型XSS是持久型XSS,它是危害最大的一种。该类型的XSS漏洞是由于恶意攻击代码被持久化保存在服务器上,然后显示到HTML页面之中。攻击者精心构造XSS代码,保存到数据库中,当其他用户再次访问这个页面,就会触发并执行恶意的XSS代码,从而达到攻击者想要的目的。

流量走向:浏览器——>后端——>数据库——>后端——>浏览器

实验:
输入和之前相同的注入语句,触发弹窗,源代码中同样有我们的恶意代码。与之前不同的是,这串代码被存储到了服务器的数据库中,当我们再次进入时还会触发弹窗,说明存储型XSS是持久型XSS。

危险的PHP语句:

if(isset($_POST['user'])&&isset($_POST['desc'])){
$log=fopen("sql.txt","a");
fwrite($log,$_POST['user']."\r\n");
fwrite($log,$_POST['desc']."\r\n");
fclose($log);
}
...

3.DOM型XSS

DOM型XSS与之前两种在原理上有本质区别,它的攻击代码并不需要服务器解析响应,触发XSS靠的是浏览器端的DOM解析。客户端上的JavaScript脚本可以直接访问浏览器的DOM并修改页面的内容。在客户端直接输出DOM内容的时候极易触发DOM型XSS漏洞。

流量走向:URL——>浏览器

在这里插入图片描述
在URL的defult值上构造payload

攻击完成后触发弹窗,但在查看源代码时并没有改攻击语句,说明这是在浏览器端实现的攻击。

危险语句:
document.getElementByld(“x”).innerHTML、document.write等
还有<img src=1 onerror=alert(1)>这样的payload,服务器返回包含上面脚本的HTML静态文本时,浏览器会把HTML文本解析成DOM。

4.XSS payload构造以及变形

1.利用【<>】构造HTML标签和标签

<h1 style="color:green;">XSS</h1>
<script>alert(/xss)</script>

2.利用HTML标签的属性值(伪协议)

<a href="javascript:alert(/xss/)">touch me!</a>

3.利用事件

img src='./smile.jpg'οnmοuseοver='alert(/xss/)'>
<input type="text" onclick="alert(/xss/)">

payload变型
1.改变大小写
2.双写关键词
3.用反引号代替单引号
4.用/代替空格
5.Tab与回车绕过关键词
6.使用HTML实体编码或URL编码

另外,还有用Burpsuite修改输入绕过前端检测、闭合标签和用注释符绕过服务端检测等方法,这些可以在自己学习碰到的时候进行尝试。


总结

以上罗列了XSS跨站脚本的三种类型,每种不同类型XSS都依据不同的PHP语句。通过这些实验案例了解到了XSS跨站脚本攻击的基础知识,在实际运用过程中会需要很多变种,可以在XSS跨站脚本的通用缺陷列表深入了解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反射型XSS、存储型XSS和DOM型XSS的简介及XSS常见payload构造及变形 的相关文章

  • Ant之build.xml详解

    Ant之build xml详解 Ant的概念 可能有些读者并不连接什么是Ant以及入可使用它 但只要使用通过Linux系统得读者 应该知道make这个命令 当编译Linux内核及一些软件的源程序时 经常要用这个命令 Make命令其实就是一个
  • 关于&&运算符的机制以及=和>的运算优先级

    今天碰到问题的代码是这样的 最开始以为会输出3 以为 和 gt 的优先级一样 后来查询发现比较运算符的优先级大于赋值运算符 于是觉得输出应该是0 结果输出2 经查询发现是 在判断前一个条件为0后就不会再去判断第二个条件了 以前没见过这个说法
  • 第九届GIS技能应用大赛试题技术文档 -上午

    1 项目概述 1 1 项目要求 如图1 1 1所示为雷尼尔山国家公园 根据题目要求 现有一份雷尼尔山国家公园地形图的一部分扫描图 需要利用该扫描图制作三维模型用来分析和展示 图1 1 1 雷尼尔山国家公园 1 具体任务要求如下 任务一 使扫
  • 递归锁(Recursive Lock)也称为可重入互斥锁(reentrant mutex)

    递归锁 Recursive Lock 也称为可重入互斥锁 reentrant mutex 是互斥锁的一种 同一线程对其多次加锁不会产生死锁 递归锁会使用引用计数机制 以便可以从同一线程多次加锁 解锁 当加锁 解锁次数相等时 锁才可以被其他线
  • response对象设置返回状态_测试开发专题:spring-boot自定义异常返回

    上文测试开发专题 spring boot统一异常捕获我们讨论了java异常以及如何使用Spring Boot捕获异常 但是没有去说捕获异常后该如何进一步处理 这篇文章我们将对这个遗留的问题进行讨论 统一错误响应定义 我们希望在程序发生异常的

随机推荐

  • Linux操作系统之进程间通信—信号量

    文章目录 一 信号量的定义 二 信号量的使用 三 ipcs的使用 一 信号量的定义 信号量是一个特殊的变量 一般取正数值 它的值代表允许访问的资源数目 获取资源时 需要对信号的值进行原子减一 该操作被称为p操作 当信号量值为0时 代表没有资
  • Java复习-20-接口(3)- 代理设计模式

    代理设计模式 Proxy 功能 可以帮助用户将所有的开发注意力只集中在核心业务功能的处理上 代理模式 Proxy Pattern 是一种结构性模式 代理模式为一个对象提供了一个替身 以控制对这个对象的访问 即通过代理对象访问目标目标对象 可
  • Mysql 查询当前时间24小时内的数据

    记录一下mysql查询24小时内的sql语句 where time gt NOW interval 24 hour
  • C++中的内存对齐介绍

    网上有很多介绍字节对齐或数据对齐或内存对齐的文章 虽然名字不一样 但是介绍的内容大致都是相同的 这里以内存对齐相称 注 以下内容主要来自网络 内存对齐 通常也称为数据对齐 是计算机对数据类型合法地址做出了一些限制 要求某种类型对象的地址必须
  • ESP32+Arduino环境搭建教程 合宙ESP32C3

    1 在arduino官网下载安装包并安装 下载地址 https www arduino cc en software 2 安装Arduino对ESP32支持 1 添加ESP32开发板管理器地址 点击文件 gt 首选项 gt 其他开发板管理器
  • Introspector内存溢出的原理解析

    JavaBeans Introspector是一个类 位置在Java bean Introspector 这个类的用途是发现java类是否符合javaBean规范 也就是这个类是不是javabean 具体用法可以参照jdk文档 上面的意思就
  • 常用音频接口:TDM,PDM,I2S,PCM

    折腾 整理 SoC CPU MEDIATEK MT8516详解 期间 看到T8516介绍中包含 麦克风语音输入控制和连接的音频产品中包含 I2Sx2 4 个频道 TDM 最多 8 个频道 和 PDM 输入 2 个频道 等广泛的接口 不太熟悉
  • 中国猎头公司排名 (前十)

    4月3日 平时能够收到不少猎头公司排名评选的邀请 但自己一直怀疑这类排名评选的可行性和公信力 人为因素在这样的评选中占了太大的成分 因为喜欢搜索这个职业 所以我一直是一个谷歌Google的粉丝 Google的成功和深入人心和它坚持自己的 搜
  • hue+oozie并发集群阻塞的调优经历

    hue oozie并发集群阻塞的调优经历 问题描述 使用hue oozie进行数据仓库开发 部署了大量workflow和并发任务 定时晚上集中时间执行时出现任务卡死状态 全部是oozie launcher的job任务 方案一 调大集群资源
  • keras ANN 分类实战

    import pandas as pd import numpy as np from sklearn model selection import train test split from keras utils import np u
  • Javascript: hash tables in javascript

    Copyright 2010 Tim Down Licensed under the Apache License Version 2 0 the License you may not use this file except in co
  • 软件授权注册码_授权码授予

    OAuth是一种开放的授权标准 可让客户端代表资源所有者访问受保护的服务器资源 资源所有者可以是其他客户端或最终用户 OAuth还可以帮助最终用户授权第三方访问其服务器资源 而无需共享其凭据 例如用户名和密码 本系列文章遵循RFC6749中
  • mysql开启事件调度失败_MySQL事件调度器无效的问题原因以及解决方法

    最近写了个定时事件 发现无法执行 先在my ini中加了配置event scheduler ON 重启MySQL无效 在navicat中直接执行 SET GLOBAL EVENT SCHEDULER ON 会报错 错误信息是 Error C
  • https://app.hackthebox.com/machines/Soccer

    https app hackthebox com machines Soccer kwkl kwkl cat etc hosts 1 127 0 0 1 localhost 127 0 1 1 kwkl kwkl kwkl The foll
  • 基本术语(告诉你西瓜书为什么叫西瓜书)

    为什么这本 机器学习 封面会有很多西瓜 为什么要叫他西瓜书 就因为封面是西瓜 因为所有的这些个基本术语的理解和后续一些问题的解释以及比喻 周大大都是用西瓜来做比喻滴 通俗易懂 恰到好处 注意 下面只做我归纳的简单介绍 如有不全 可以去百度一
  • 算法设计与分析—贪心法求解背包问题C++(学习笔记)

    用贪心法求解如下背包问题的最优解 有7个物品 重量分别为 2 3 5 7 1 4 1 价值分别为 10 5 15 7 6 18 3 背包容量W 15 写出求解过程 include
  • 关于自研maven依赖在idea中导入失败

    Could not find artifact cn bugstack middleware db router spring boot starter jar 1 0 1 SNAPSHOT 解决方法 先下载 GitHub Adzc zh
  • js中import报错Uncaught SyntaxError: Unexpected identifier

    不管导入什么都说 意外的标识符 网上有解释说仔细看标点的就是说你不细心 这确实是方法 不过import那个错基本上并不是 先说解决方法 你需要babel编译一下 webpack打包然后就没有这个错了 然而我今天一不小心做了死 一直在报那个错
  • Java原生代码连接MySQL数据库

    本章我们介绍 如何用java原生代码实现连接MySQL数据库并实现基本的增 删 改 查操作 为了便于演示 首先我们使用Navicat Premium新建一个user表并添加如下数据 我们需要导入连接MySQL所需要的jar包 jdbc驱动包
  • 反射型XSS、存储型XSS和DOM型XSS的简介及XSS常见payload构造及变形

    渗透学习 XSS跨站脚本之XSS基础 文章目录 渗透学习 前言 本文只做学习用途 严禁利用本文提到的技术进行非法攻击 否则后果自负 本人不承担任何责任 一 XSS漏洞原理 二 XSS分类 1 反射型XSS 2 存储型XSS 3 DOM型XS