XSS漏洞--概念、类型、实战--分析与详解[结合靶场pikachu]

news2024/10/7 13:21:19

目录

一、XSS概念简述

1、XSS简介:

2、XSS基本原理:

3、XSS攻击流程:

4、XSS漏洞危害:

二、XSS类型:

1、反射型XSS:

2、存储型XSS:

3、DOM型XSS:

三、靶场漏洞复现(pikachu):

1、靶场来源:

2、反射型XSS(get)复现:

3、反射型XSS(post)复现:

4、存储型XSS复现:

5、DOM型XSS复现:

四、总结:


一、XSS概念简述

1、XSS简介:

XSS(Cross Site Scripting),译做:跨站脚本攻击。


2、XSS基本原理:

XSS漏洞的基本原理是恶意攻击者将一段恶意代码,通常是客户端脚本如JavaScript,注入到Web页面中。当其他用户浏览这个被篡改的网页时,这段脚本会在他们的浏览器上执行,从而可能导致各种安全事件。

XSS常常存在于评论区功能处,攻击者往往会在评论区编写恶意代码,通过评论功能将恶意代码发往后台,从而与后台代码形成某种程度上的闭合,导致后台代码中被植入恶意代码。


3、XSS攻击流程:

攻击者从评论区上传恶意代码 ---> 注入代码的网页代码部分过滤不完全或无过滤操作 ---> 恶意代码植入网页代码 ---> 某用户A对网页此处进行了访问操作 ---> 用户A的浏览器对网页注入的恶意代码进行解析 ---> 用户A遭到攻击。


4、XSS漏洞危害:

(1)盗取各种用户账号;

(2)窃取用户Cookie资料,冒充用户身份进入网站;

(3)劫持用户会话,执行任意操作;指操作用户浏览器;

(4)刷流量,执行弹窗广告;传播蠕虫病毒。


二、XSS类型:

1、反射型XSS:

(1)攻击流程:

当攻击者将带有恶意脚本的URL发送给用户时,如果用户点击了这个URL,恶意脚本就会被发送到服务器,然后服务器会将这个脚本作为响应的一部分返回给用户的浏览器。浏览器在收到响应后会执行这段脚本,从而可能导致敏感信息如cookies被窃取。

这种攻击之所以被称为“反射型”,是因为恶意脚本是通过用户的浏览器“反射”回服务器,然后再由服务器“反射”回更多用户的浏览器来传播的。这种攻击方式通常是一次性的,因为恶意脚本不会存储在服务器上,而是通过URL参数直接传递给服务器。

(2)流程图:


2、存储型XSS:

(1)攻击流程:

攻击者通过 评论区、论坛等功能将 XSS代码上传,服务器接收并进行存储,XSS代码就成功植入了网页代码中,当其他用户对包含XSS代码的网页时,XSS代码就会被用户的浏览器进行解析并执行。

(2)流程图:


3、DOM型XSS:

DOM型XSS漏洞是一种基于文档对象模型(Document Object Model,简称DOM)的漏洞,它允许攻击者通过修改DOM元素的属性来注入并执行恶意脚本

这种攻击方式不需要通过URL传递恶意代码,而是直接在用户的浏览器端执行。攻击者可能会利用JavaScript代码,通过改变页面的DOM结构,插入恶意脚本。由于这个过程是在客户端完成的,因此DOM型XSS攻击更加隐蔽,与传统的反射型XSS相比,它不依赖于服务器的响应,使得检测和防御更加困难。

简单来说:DOM型XSS漏洞地原理是利用前端代码漏洞。


三、靶场漏洞复现(pikachu):

1、靶场来源:

BUUCTF -- pikachu靶场 -- Cross--Site Scripting 模块。

跳转BUUCTF -- pikachu 靶场


2、反射型XSS(get)复现:

页面如图所示:

我们首先输入kobe,观察页面和URL的变化:

发现页面内容显示正常,URL中出现 message=kobe,我们已知 反射型XSS 是针对URL来进行操作的,我们修改URL中的 message 的值:

message = <script>alert(document.cookie)</script>

修改后提交,显示如下:


 

页面成功显示 cookie信息,复现成功。


3、反射型XSS(post)复现:

(1)get 和 post 型的XSS反射型漏洞的区别:

---数据提交方式不同:

反射型XSS(GET):攻击载荷(payload)直接附加在URL中,用户通过点击含有恶意代码的链接即可触发攻击。这种方式下,恶意脚本会随着URL传递,不需要用户进行任何提交动作。

反射型XSS(POST):攻击载荷通常不会直接出现在URL中,而是通过表单提交的方式发送到服务器。在这种情况下,攻击者可能需要诱使用户点击一个按钮或提交一个表单,使得恶意数据作为POST请求的一部分发送出去。

(2)漏洞复现:

进入靶场,页面如图所示:

我们利用 F12 中的查看器,查看当前页面源代码:

观察到表单<form>的数据提交方式为 POST,这就是XSS反射型(post)的特点。

我们在输入栏中同样尝试输入kobe,页面如下:

页面显示内容正常,但是发现,post提交与get提交的不同之处在于,post的message=消失了,这就是post提交中攻击载荷(payload)通常不会出现在URL中的特点。

我们尝试在输入栏中输入XSS代码并进行提交:

<script>alert(document.cookie)</script>

提交后页面如下:

页面中显示了cookie、账号和密码,漏洞复现成功。


4、存储型XSS复现:

进入靶场,页面如图所示:

前面已经介绍过存储型XSS的特性,在这里不做赘述。

查看评论区页面源代码:

可以发现明显存在XSS漏洞,可以在<p>标签中插入javascript代码并一直存储在那里。

我们在评论区写入XSS代码,并提交:

<script>alert(document.cookie)</script>

提交后页面如下:

cookie值显示,漏洞复现成功。


5、DOM型XSS复现:

进入靶场,页面如图所示:

我们依然尝试输入 kobe,发现页面回显一段英文 what do you see? ,其他无内容显示。我们查看页面源代码,内容如下:

观察源代码,发现kobe在<a>标签中的 href 处显示想要进行XSS攻击,我们需要构造一段合适的payload,来将此处的 html 语句闭合并且执行我们自己的 javascript语句。

我们构造以下payload:

#' onclick="alert(document.cookie)">

提交后,源代码的html语句变成了这样,如下图:

我们发现payload提交后,与源代码中的旧html语句联合构造出了一个新的html语句,代码意为:点击 '>what do you see? 就会执行 onclick中的语句,即执行我们注入的XSS语句。

注入XSS语句后,页面如下:

我们点击 '>what do you see? ,显示如下:

cookie值正常显示,漏洞复现成功。


四、总结:

XSS漏洞通常要结合检查页面源代码来进行注入。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1494397.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++(13)——string类

string类的由来 C语言中&#xff0c;字符串是以 \0‘ 结尾的一些字符的集合&#xff0c;为例操作方便&#xff0c;C标准库中提供了一些str 系列的库函数&#xff0c;但是这些库函数与字符串是分开的&#xff0c;不太符合OOP&#xff08;封装、继承和多态&#xff09;的思想&am…

云原生基础知识:容器技术的历史

容器化的定义&#xff1a; 容器化是一种轻量级的虚拟化技术&#xff0c;将应用程序及其所有依赖项&#xff08;包括运行时、系统工具、系统库等&#xff09;打包到一个称为容器的单独单元中。容器提供了一种隔离的执行环境&#xff0c;使得应用程序可以在不同的环境中运行&…

splay学习笔记重制版

以前写的学习笔记&#xff1a;传送门 但是之前写的比较杂乱&#xff0c;这里重制一下 问题背景 假设我们要维护一个数据结构&#xff0c;支持插入、删除、查询某个值的排名&#xff0c;查询第 k k k大的值等操作。 最直接的想法是用二叉搜索树&#xff0c;也就是左子树权值&l…

Java | 在消息对话框中显示文本

首先需要导入JOptionPane类&#xff0c;JOptionPane类属于Swing组件中的一种&#xff0c;其导入方式如下&#xff1a; import javax.swing.JOptionPane;可以使用JOptionPane的showMessageDialog方法显示消息文本。 参数格式&#xff1a; JOptionPane.showMessageDialog(paren…

jdk安装,配置path系统变量

直接点击安装 不要包含空格&#xff0c;中文字符 3.找到刚刚的路径&#xff0c;看一下&#xff0c;有东西就说明安装对了 配置path winr输入sysdm.cpl点击确定 全部依次点击 确定 即可。 验证jdk是否安装成功 看java、javac是否可用看java、javac版本号是否无问题 win…

解密程序员的“藏宝图”:我的祖传代码大公开

程序员是如何看待“祖传代码”的&#xff1f; 大家好&#xff0c;我是小明&#xff0c;一位充满好奇心和分享热情的程序员。今天&#xff0c;我要为大家揭开我心中的“藏宝图”——那些我认为值得传世的祖传代码。让我们一同踏上这场奇妙的代码冒险之旅吧&#xff01; 宝物一…

【广度优先搜索】【堆】【C++算法】407. 接雨水 II

作者推荐 【二分查找】【C算法】378. 有序矩阵中第 K 小的元素 本文涉及知识点 广度优先搜索 堆 LeetCoce407. 接雨水 II 给你一个 m x n 的矩阵&#xff0c;其中的值均为非负整数&#xff0c;代表二维高度图每个单元的高度&#xff0c;请计算图中形状最多能接多少体积的雨…

kerberos学习系列一:原理

1、简介 Kerberos 一词来源于古希腊神话中的 Cerberus —— 守护地狱之门的三头犬。 Kerberos 是一种基于加密 Ticket 的身份认证协议。Kerberos 主要由三个部分组成&#xff1a;Key Distribution Center (即KDC)、Client 和 Service。 优势&#xff1a; 密码无需进行网络传…

Tkinter实现聊天气泡对话框

功能展示&#xff1a; 运行环境&#xff1a; Python: 3.10.4 64-bit 操作系统&#xff1a;win10 64-bit 源码文件列表&#xff1a; 部分代码说明&#xff1a; 调用该接口将消息显示在聊天框中。role参数控制消息显示的位置&#xff1a;0位于对话框左边&#xff0c;1位于右边…

批次大小对ES写入性能影响初探

问题背景 ES使用bulk写入时每批次的大小对性能有什么影响&#xff1f;设置每批次多大为好&#xff1f; 一般来说&#xff0c;在Elasticsearch中&#xff0c;使用bulk API进行批量写入时&#xff0c;每批次的大小对性能有着显著的影响。具体来说&#xff0c;当批量请求的大小增…

LLM(十一)| Claude 3:Anthropic发布最新超越GPT-4大模型

2024年3月4日&#xff0c;Anthropic发布最新多模态大模型&#xff1a;Claude 3系列&#xff0c;共有Haiku、Sonnet和Opus三个版本。 Opus在研究生水平专家推理、基础数学、本科水平专家知识、代码等10个维度&#xff0c;超过OpenAI的GPT-4。 Haiku模型更注重效率&#xff0c;能…

Figma 最新版下载:无需激活码,轻松安装!

从事设计工作&#xff0c;怎么能没有设计工具呢&#xff1f;我相信许多设计师也必须使用Figma这样的软件&#xff0c;真的可以让我们的设计工作更有效率&#xff0c;但我相信你也发现Figma属于外国软件&#xff0c;自然语言也是英语&#xff0c;直到现在没有中文版本&#xff0…

论文解读:Hints for Thin Deep Nets

这篇论文是在Hinton的那篇开山之作《Distilling the Knowledge in a Neural Network》为背景提出来的&#xff0c;主要思想是使用一个宽而浅的教师模型来训练一个窄而深的学生模型。之前的知识蒸馏方法主要是训练教师网络到更浅更宽的网络&#xff0c;没有充分利用深度。而该文…

IntelliJ IDEA 下载安装及配置使用教程

一、IDEA下载 1、打开游览器输入IntelliJ IDEA – the Leading Java and Kotlin IDE (jetbrains.com) 2、点击Download&#xff0c;进入IDEA下载界面 3、 有两个版本&#xff0c;一个是Ultimate 版本为旗舰版&#xff0c;需要付费&#xff0c;包括完整的功能&#xff0c;下载后…

element-ui配置

全局配置 完整引入 Element&#xff1a; import Vue from vue; import Element from element-ui; Vue.use(Element, { size: small, zIndex: 3000 });按需引入 Element Vue.prototype.$ELEMENT { size: small, zIndex: 3000 };如果是vue.config.js中配置了externals 使用按…

设计师成长之路1

. 学习的书籍: 1.写给大家看的设计书 2,设计师要懂心理学 3,平面设计完全手册 4.去日本上设计课2:配色设计原理

【C++】102.二叉树的层序遍历

题目描述 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]示例 2&#xff1…

fatal: unable to access ‘***‘: OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 0解决方案

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 大家好&#xff0c;我是水滴~~ 本文主要介绍在从 GitHub 上克隆 stable-diffusion-webui 项目时出现的 fatal: unable to access https://github.com/AUTOMATIC1111/stable-diffusion-webui.…

报错:module ‘collections‘ has no attribute ‘Iterable‘

使用python 高版本&#xff0c;在使用collections遇到报错&#xff1a;module ‘collections’ has no attribute ‘Iterable’ 查了资料 在python3.9 之后collections.Iterable被弃用了。 添加修改语句 collections.Iterable collections.abc.Iterable

【C++】String常用的函数总结

目录 一、string的构造函数方式&#xff1a; 二、常用的大小/容量相关操作&#xff1a; 三、string的常用修改操作&#xff1a; 四、string的遍历&#xff1a; 五、string的任意位置插入 / 删除&#xff1a; 六&#xff1a;补充&#xff1a; 一、string的构造函数方式&a…