谈谈对于XSS跨站脚本攻击的学习(1)

2023-11-02

前言

最近学完XXE之后,对于这种恶意代码注入的漏洞提起来兴趣,想着现在正好趁热打铁,学习一下XSS,之前做题的时候看大师傅的wp一愣一愣的,不明白个所以然,这次系统的学习一下,在本文中将介绍有关XSS的知识点以及原理,也会介绍XSS的绕过姿势(这里参考了别的大师傅的思路,也给出了我自己的理解),希望给正在学习XSS的你有帮助。

1.概念

跨站脚本攻击(Cross-Site Scripting,XSS)是一种常见的Web安全漏洞,攻击者通过在受害者的浏览器中注入恶意脚本来执行恶意行为。这种攻击通常利用Web应用程序没有对用户输入的数据进行足够的过滤和验证。

2.攻击原理

XSS跨站脚本攻击的原理是利用Web应用程序对用户输入数据的不足过滤和验证,将恶意脚本注入到受害者的浏览器中,使其在浏览器中执行。
攻击者通常会将恶意脚本嵌入到Web页面中的某个位置,比如输入框、评论框、搜索框等等,然后诱使用户访问这个被注入了恶意脚本的页面。当用户访问页面时,恶意脚本就会在用户的浏览器中被执行,从而执行攻击者预先设定好的恶意行为,比如窃取用户的Cookie信息、伪造用户的网站行为等等。

3.XSS的分类

存储型XSS:

持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie

一般是将恶意代码通过交互界面上传到后端,然后从而上传到数据库中,当管理员admin查询数据库的信息时,恶意脚本又从后端到了前端,这也就是存储型XSS的数据流通。

这种XSS攻击方式相比于反射型XSS更加容易进行攻击,它可以把恶意脚本存储在数据库,实现自动化攻击

一般在做CTF题目中的具体思路就是利用GET、POST或者抓包在Referer,Cookie的地方植入我们的恶意脚本
源码示例

存储型XSS示例

欢迎使用我们的网站

请输入您的评论:

提交 <?php // 处理评论表单的提交 if ($_SERVER['REQUEST_METHOD'] === 'POST') { $comment = $_POST['comment']; // 将评论存储到数据库中 $sql = "INSERT INTO comments (content) VALUES ('$comment')"; mysqli_query($conn, $sql); } ?>

评论区

  • <?php // 显示所有评论 $result = mysqli_query($conn, "SELECT * FROM comments"); while ($row = mysqli_fetch_assoc($result)) { echo "
  • " . $row['content'] . "
  • "; } ?>

如果我们在评论区尝试最基础的JavaScript代码,

会成功弹窗
在这里插入图片描述
在这里插入图片描述

反射型XSS:

非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。反射型XSS大多数是用来盗取用户的Cookie信息。

一般就是题目给一个标签形成的输入框,然后我们在输入框里输入我们的恶意脚本,需要用户进行触发才能进行攻击,在前端输入恶意脚本,后端接受,然后再在前端显示,这也就是反射型XSS的数据流通。

这种XSS攻击方式是最简单的一种XSS攻击方式,它需要用户手动触发才能执行。

在CTF中,反射型XSS算是比较常见的一种XSS攻击方式了,题目会给一个输入框,然后绕过过滤,执行恶意脚本
源码示例

反射型XSS示例

欢迎使用我们的网站!

请输入您的姓名:

提交

您好,<?php echo $_GET['name']; ?>!

在接受name传参的值时,html页面是没有任何保护措施的,用户如果在这里执行了JavaScript代码,也会直接输出,从而进行XSS攻击
在这里插入图片描述在这里插入图片描述

DOM型XSS:

不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS。

这种XSS攻击是不经过后端的,它也算是一种反射型XSS,但是它的数据流通过程比较简单,就是在前端url添加我们的恶意脚本,然后直接在页面输出了
源码示例

DOM-based XSS

欢迎来到我的blog!

在这里插入图片描述

可以发现我们通过name传参的JavaScript代码已经嵌入到HTML页面中了,也就

完成了DOM型XSS攻击

题外话

介绍一下我最近发现的一个比较罕见的XSS攻击方式
JSONP XSS:

这个其实也是反射型XSS的一种攻击方式。

这是一种比较罕见的一种XSS的攻击方式,它利用JSONP协议实现,一般浏览器都会设置CSP同源策略限制,不允许直接调用其他域名的API,这就出现了JSONP协议,JSONP协议通过利用浏览器对

如果我们有一个API端口为"http://Evi1s7.com/api",它返回一个JSONP响应,其中包含一个名为callback的函数,该函数将数据作为参数传递。

callback({ “name”: “John”, “age”: 30 });

攻击者可以构造一个恶意URL,以便在受害者浏览器中执行恶意脚本:

https://Evi1s7.com/api?callback=attackerFunction

这会导致我们之前的API端口返回的JSON发生了修改

attacjerFunction({ “name”: “John”, “age”: 30 });

攻击者可以在页面中定义attackerFunction,然后注入恶意脚本:

利用上述恶意脚本,我们可以获得John的sessionID值,窃取Cookie从而实现无密码登录,实现XSS攻击

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

谈谈对于XSS跨站脚本攻击的学习(1) 的相关文章

随机推荐

  • 27、oauth2四种授权模式认证流程

    重点 授权服务器如果同时存在WebSecurityConfigurerAdapter和ResourceServer 那么如下授权模式部分是无法使用的 所以保留WebSecurityConfigurerAdapter 假设具体参数如下 1 请
  • 【iOS】—— 离屏渲染

    文章目录 离屏渲染 UIView和CALayer关系 GPU屏幕渲染有两种方式 产生离屏渲染的原因 既然离屏渲染这么耗性能 为什么有这套机制呢 什么情况会离屏渲染 既然离屏渲染这么不好 为什么我们还要强制开启呢 如何避免离屏渲染 1 圆角的
  • 利用qt实现截图窗体或者某个控件

    一 需要添加头文件 include
  • 还原网站上压缩的js代码

    还原网站上压缩的js代码 我们经常可以看到一些网站 把所需的javascript代码压缩成一行 就像下图这样 这种代码浏览器能读懂 但正常人是没法阅读的 既然浏览器能读 浏览器当然也能还原这段代码 其实很简单 这里我使用的是chrome浏览
  • 接口幂等性-订单提交

    目录 一 什么是幂等性 二 哪些情况需要防止 三 什么情况下需要幂等 四 幂等解决方案 1 token 机制 2 各种锁机制 1 数据库悲观锁 2 数据库乐观锁 3 业务层分布式锁 3 各种唯一约束 1 数据库唯一约束 2 redis se
  • java有abc三边求周长语句_java 给定三个点由三个点求三角形周长和面积

    3 先创建一个Point类 然后定义Trianglele类 在Trianglele类中定义三个Point的实体来表示一个三角形的三个点 再定义一个方法setTri对这三个点进行初始化 然后定义两个方法求三角形 3 先创建一个Point类 然
  • (个人)自媒体快传号注册入驻流程

    快传号是360推出的自媒体平台 支持手机号注册 简单便捷 目前支持入驻的账号类型有 个人 媒体 企业 政府和其他组织 个人 适合个人创作者 垂直领域专家 意见领袖及自媒体人士申请 媒体 适合通讯社 报刊杂志 电视台 电台等传统媒体及有新闻资
  • Python智力问答小游戏

    Python智力问答小游戏 在这个Python智力问答小游戏中 我们将提供一系列问题 并编写代码来实现一个简单的问答游戏 玩家将被要求回答一些与Python编程相关的问题 并根据他们的回答来获得得分 让我们一起来创建这个有趣的游戏吧 首先
  • python: Call SQL Server Stored Procedure in Python

    sql script DROP TABLE InsuranceMoney GO create table InsuranceMoney ID INT IDENTITY 1 1 PRIMARY KEY InsuranceName nvarch
  • PCB中常用快捷键

    网络搜集 备份一份方便查看 PCB快速挖孔 T V B 绘制闭合区域后 直接选中所有线条 然后T V B 挖孔 AD布线 选定器件 框定到指定区域的快捷键 原理图框定指定模块后 按T S后跳到PCB自动回选中相关器件 然后按T O L划定一
  • 什么是面向对象编程?

    所有编程语言都提供抽象机制 汇编是语言是对底层机器的轻微抽象 命令式语言 FORTRAN BASIC C 是对底层机器的轻微抽象 他们所做的主要抽象仍然要求在解决问题基于计算机的结构 而不是所要解决问题的结构 程序员必须建立起机器模型和待解
  • 第三周 Python基本数据类型

    1 数字类型及操作 1 1整数类型 与数学中整数的概念一致 可正可负 没有取值范围限制 pow x y 函数 计算xy 想算多大算多大 gt gt gt 1267650600228229401496703205376 4种进制表示形式 十进
  • npm ERR network Invalid response body while trying to fetch

    问题描述 安装 vue cli 的时候持续报错 npm notice npm notice New minor version of npm available 8 5 0 gt 8 7 0 npm notice Changelog htt
  • 出现undefined reference to `forkpty' 错误解决方法

    出现undefined reference to forkpty 错误解决方法 2009 02 04 09 14 23 分类 C 举报 字号 订阅 下载LOFTER客户端 出错提示如下 usr lib lib libpython2 5 so
  • C语言是一种非结构化的程序设计语言,C语言程序设计——姜恒远 第一章 C程序设计概述.ppt...

    C语言程序设计 姜恒远 第一章 C程序设计概述 姜 恒 远 第1章 C程序设计概述 1 1 程序设计语言 程序与程序设计 1 1 1 程序设计语言 CPU能理解且能直接执行的指令集合 用机器语言编写的程序形式 用机器语言编写的程序优点 质量
  • 三、mock与umi-plugin-react插件

    一 Mock 数据 umi 里约定 mock 文件夹下的文件或者 page s 文件夹下的 mock 文件即 mock 文件 这个mock数据 默认导出的结果 前面为请求方式和请求的url 后面的为返回前端的结果 结果可以是函数 也可以是对
  • 在centos7上部署ZeroTier实现内网穿透

    https my zerotier com 登录账户后在ttps my zerotier com network创建网络 配置centos yum源 vi etc yum repos d zerotier repo zerotier nam
  • c++tuple和bitset

    tuple tuple是类似pair的模板 一个tuple可以有任意数量的成员 类型也可以不相同 make tuple 返回一个用给定初始值初始化的tuple 返回的tuple类型从初始值推断 可以使用 初始化但不能使用 tuple
  • Visual Studo Code & Anaconda环境配置

    在使用VScode的过程中 遇到如下问题 通过Anaconda安装的库文件在VScode中无法import 提示找不到该module 但在window的cmd中是可以import该库文件的 原因 环境配置问题 1 选择了错误的python解
  • 谈谈对于XSS跨站脚本攻击的学习(1)

    前言 最近学完XXE之后 对于这种恶意代码注入的漏洞提起来兴趣 想着现在正好趁热打铁 学习一下XSS 之前做题的时候看大师傅的wp一愣一愣的 不明白个所以然 这次系统的学习一下 在本文中将介绍有关XSS的知识点以及原理 也会介绍XSS的绕过