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

目录

一、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漏洞通常要结合检查页面源代码来进行注入。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构之顺序表及其实现!

目录 ​编辑 1. 顺序表的概念及结构 2. 接口的实现 2.1 顺序表的初始化 2.2 检查顺序表容量是否已满 2.3 顺序表的尾插 ​编辑 2.4 顺序表的尾删 2.5 顺序表的头插 2.6 顺序表的头删 2.7 顺序表在pos位置插入 2.8 顺序表在pos位置删除 2.9 顺序表的查找 2.10 顺…

喜报|3DCAT成为国内首批适配Vision Pro内容开发者

近日&#xff0c;苹果在上海总部举办了国内首场 Apple Vision Pro 开发者实验室活动&#xff0c;3DCAT作为国内领先的实时渲染云平台参与了此次活动&#xff0c;成为国内首批适配 Vision Pro 的内容开发者之一。 Vision Pro是苹果于2023年6月发布的首个空间计算设备&#xff0…

Vue+SpringBoot打造超市账单管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 总体设计3.2 前端设计3.3 后端设计在这里插入图片描述 四、系统展示五、核心代码5.1 查询供应商5.2 查询商品5.3 新增超市账单5.4 编辑超市账单5.5 查询超市账单 六、免责说明 一、摘要 1.1 项目介绍 基于…

Redis的三种集群模式(图解)

主从复制模式 一个主节点和多个从节点。主节点提供写入和读取功能&#xff0c;但是从属节点只提供读取功能。 主从复制的数据同步过程如下&#xff1a; &#xff08;1&#xff09;首先主节点启动&#xff0c;然后从属节点启动&#xff0c;从属节点会连接主节点并发送SYNC命令以…

JAVA WEB案例-登录校验-日志记录

一 前言 在现代社会中&#xff0c;随着互联网的快速发展&#xff0c;WEB应用的安全性问题变得越来越突出。作为一名程序员&#xff0c;我们不仅要注重WEB应用的功能实现&#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 使用按…

【论文精读】Attention Bottlenecks for Multimodal Fusion 视频分类任务

本文并非逐句翻译&#xff0c;添加个人理解与疑惑&#xff0c;如有需要&#xff0c;请自行阅读原文。 Attention Bottlenecks for Multimodal Fusion 多模态融合的注意力瓶颈 会议&#xff1a;NIPS2021 Benchmark&#xff1a;Audioset、Epic Kitchens和VGGSound等 Backbone&…

数组常见算法

一、数组排序 冒泡排序 本篇我们介绍最基本的排序方法&#xff1a;冒泡排序。 实现步骤 1、比较两个相邻元素&#xff0c;如果第一个比第二个大&#xff0c;就交换位置 2、对每一对相邻元素进行同样的操作&#xff0c;除了最后一个元素 特点 每一轮循环后都会把最大的一个…

2024/3/6打卡最短编辑距离---线性DP

题目&#xff1a; 给定两个字符串 A 和 B&#xff0c;现在要将 A 经过若干操作变为 B&#xff0c;可进行的操作有&#xff1a; 删除–将字符串 A 中的某个字符删除。插入–在字符串 A 的某个位置插入某个字符。替换–将字符串 A 中的某个字符替换为另一个字符。 现在请你求出&a…

蓝桥杯练习题——前缀和

1.壁画 思路 1.求最坏情况下&#xff0c;画的墙总和是多少 2.画的墙在中间连续一段&#xff0c;画了的墙长度是 n / 2 向上取整 3.取最大的 n / 2 向上取整区间和 #include<iostream> using namespace std; const int N 5e6 10; char s[N]; int a[N]; int t, n;int m…

重磅:2024广州国际酒店工程照明展览会

2024广州国际酒店工程照明展览会 Guangzhou international hotel engineering lighting exhibition 2024 时间&#xff1a;2024年12月19-21日 地点&#xff1a;广州.中国进出口商品交易会展馆 承办单位&#xff1a;广州佛兴英耀展览服务有限公司 上海昶文展览服务有限公司…

【详识C语言】自定义类型之二:枚举

本章重点 枚举 枚举类型的定义 枚举的优点 枚举的使用 枚举 枚举顾名思义就是一一列举。 把可能的取值一一列举。 比如我们现实生活中&#xff1a; 一周的星期一到星期日是有限的7天&#xff0c;可以一一列举。 性别有&#xff1a;男、女、保密&#xff0c;也可以一一列举。…

【深度学习笔记】5_8 网络中的网络NiN

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 5.8 网络中的网络&#xff08;NiN&#xff09; 前几节介绍的LeNet、AlexNet和VGG在设计上的共同之处是&#xff1a;先以由卷积层构成的…

Vue.js+SpringBoot开发森林火灾预警系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 系统基础模块2.3 烟雾传感器模块2.4 温度传感器模块2.5 历史记录模块2.6 园区数据模块 三、系统设计3.1 用例设计3.1.1 森林园区基础系统用例设计3.1.2 森林预警数据用例设计 3.2 数据库设计3.2.1 烟雾…

[PyQt5]PyQt5连接MYSQL时显示Driver not loaded解决方案

在第一次用PyQt5的 QSqlDatabase.addDatabase 连接mysql的时候&#xff0c;可能会出现Driver not loaded的情况&#xff0c;如下&#xff1a; from PyQt5.QtSql import QSqlQuery, QSqlDatabase from PyQt5.QtWidgets import QApplication import sysapp QApplication(sys.ar…

2024.3.6

#include<myhead.h>int do_add(sqlite3* ppDb) {int numb;char name[10];int salary;printf("请输入员工的信息&#xff1a;");scanf("%d %s %d",&numb, name, &salary);//将员工的信息存储到数组char sql_add[128] "";sprintf(s…

【K哥爬虫普法】二十五岁 人大本硕 腾讯在职 爬虫被捕!

我国目前并未出台专门针对网络爬虫技术的法律规范&#xff0c;但在司法实践中&#xff0c;相关判决已屡见不鲜&#xff0c;K 哥特设了“K哥爬虫普法”专栏&#xff0c;本栏目通过对真实案例的分析&#xff0c;旨在提高广大爬虫工程师的法律意识&#xff0c;知晓如何合法合规利用…

你知道katalon studio 如何完成 get/post 请求发送吗?

katalon studio作为目前最火的自动化测试工具之一&#xff0c;不仅仅只能完成webUI自动化&#xff0c;更是能完成api、app以及桌面应用程序的自动化测试。 本文将讲解一下katalon studio是如果完成接口测试的。 请求发送 get请求 1、先在object repository里new一个请求 2、…

CSS盒子模型笔记

尚硅谷学习视频链接&#xff1a;117_CSS_盒子模型的组成部分_哔哩哔哩_bilibili 1、盒子组成 盒子组成 content内容 padding border &#xff08;margin不包含在盒子内&#xff09; 2、div样式width、height 当css3属性box-sizingcontent-box&#xff08;默认&#xff0…

64位Office API声明语句第116讲

跟我学VBA&#xff0c;我这里专注VBA, 授人以渔。我98年开始&#xff0c;从源码接触VBA已经20余年了&#xff0c;随着年龄的增长&#xff0c;越来越觉得有必要把这项技能传递给需要这项技术的职场人员。希望职场和数据打交道的朋友&#xff0c;都来学习VBA,利用VBA,起码可以提高…