初识XSS漏洞

目录

一、XSS的原理和分类

二、Xss漏洞分类

1. 反射性xss

简单的演示:

2.基于DOM的XSS

简单的演示:

3.存储型XSS

​编辑简单的演示

4、self xss

三、XSS漏洞的危害

四、XSS漏洞的验证

五、XSS漏洞的黑盒测试

六、XSS漏洞的白盒测试

七、XSS防御


xss的产生原因:编写的代码没有对用户输入的内容进行危险字符的过滤和检测,导致用户输入恶意内容,导致不安全事件。

一、XSS的原理和分类

跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS

。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击!

二、Xss漏洞分类

1. 反射性xss

危害比较小

反射型XSS 是非持久性(进入不到数据库中)、参数型的跨站脚本。

反射型XSS 的JS 代码在Web 应用的参数(变量)中,如搜索框的反射型XSS。

在搜索框中,提交PoC[scriptalert(/xss/)/script],点击搜索,即可触发反射型XSS。

下面这幅图片展示了反射型XSS的攻击流程:

简单的演示:

验证环境:DVWA

我们查看low状态下的反射型xss的源码

<?php
header ("X-XSS-Protection: 0");
#关闭了浏览器的防御机制
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Feedback for end user
    $html .= '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}
?>

将等级修改为low后构造这样的script弹窗代码 ,点击submit

然后就会看到这样的弹窗

2.基于DOM的XSS

DOM XSS 比较特殊。

owasp 关于DOM 型号XSS 的定义是基于DOM 的XSS 是一种XSS 攻击,其中攻击的payload由于修改受害者浏览器页面的DOM 树而执行的。

其特殊的地方就是payload 在浏览器本地修改DOM 树而执行, 并不会传到服务器上,这也就使得DOM XSS 比较难以检测。

简单的演示:

在dvwa中我们点击DOMXSS这里然后在url框中的get传参中default传入下面的弹窗代码

回车后可以看到进行了弹窗

3.存储型XSS

存储型XSS 是持久性跨站脚本。

持久性体现在XSS 代码不是在某个参数(变量)中,而是写进数据库或文件等可以永久保存数据的介质中。

存储型XSS 通常发生在留言板等地方。我们在留言板位置留言,将恶意代码写进数据库中。此时,我们只完成了第一步,将恶意代码写入数据库。因为XSS 使用的JS 代码,JS 代码的运行环境是浏览器,所以需要浏览器从服务器载入恶意的XSS 代码,才能真正触发XSS。

此时,需要我们模拟网站后台管理员的身份,查看留言。

下面这幅图片是存储型xss的攻击流程:

简单的演示

(1)在DVWA平台中选择存储型xss,然后在message中输入恶意内容,尝试进行弹窗

可以看到提交完成后,确实进行了弹窗

(2)查看数据库

从这里可以看出刚才输入的数据确实已经存储到数据库中了

(3)也可以刷新页面,就会每次刷新都会弹窗,说明这个恶意代码是存储在数据库中了

4、self xss

严格意义上来说,self-xss不算是web应用漏洞,因为攻击者没有办法直接将恶意代码注入页面,而是利用社会工程学欺骗用户,让它自己去复制恶意代码并且粘贴到浏览器中

三、XSS漏洞的危害

四、XSS漏洞的验证

我们可以使用一段简单的代码,验证和检测漏洞的存在,这样的代码叫做Poc(Proof of concept)。验证XSS漏洞的Poc如下

(1)scriptalert(/xss/)/script
(2)scriptconfirm('xss')/script
(3)scriptprompt('xss')/script

五、XSS漏洞的黑盒测试

尽可能的找到一切用户可控并且能够输出在页面代码的地方,比如下面这些:

URL的每一个参数、URL本身、表单、搜索框、常见业务场景
重灾区:评论区、留言区、个人信息、订单信息等
针对型:站内信、网页即时通讯、私信、意见反馈
存在风险:搜索框、当前目录、图片属性等

六、XSS漏洞的白盒测试

关于XSS的代码审计主要就是从接收参数的地方和一些关键词入手。

PHP中常见的接收参数的方式有$GET$POST、$_REQUEST等等,可以搜索所有接收参数的地方。然后对接收到的数据进行跟踪,看看有没有输出到页面中,然后看输出到页面中的数据是否进行了过滤和html编码等处理。

也可以搜索类似echo这样的输出语句,跟踪输出的变量是从哪里来的,我们是否能控制,如果从数据库中取的,是否能控制存到数据库中的数据,存到数据库之前有没有进行过滤等等。

大多数程序会对接收参数封装在公共文件的函数中统一调用,我们就需要审计这些公共函数看有没有过滤,能否绕过等等

七、XSS防御

目的:

  1. 阻止恶意代码注入

  2. 阻止恶意操作执行

不管是反射型还是存储型xss,都鞥够通过服务端进行过滤进行防御:

  • 黑名单:对用户的输入过滤特殊符号及字符

    • 如:< > % / " ' ; ( ) script svg object on事件等
  • 白名单:只允许用户输入特定类型或者符号

    • 即,根据输入的数据特征限制使用的类型,如年龄就限制为数字类型;输入类型字符串限制为仅可以使用大小写的26个字母及其数字-和_;等

  • 编码及转义

    • 输出在标签或者属性中进行HTML编码;

    • 输出在script标签或者事件中进行JavaScript编码;

    • 输出在URL中进行URL编码

  • Cookie中设置httponly

    • setcookie将httponly选项设置为true,就可以防范cookie劫持

  • 确保执行脚本源可信

    • 开发者明确告诉客户端,那些外部资源可以加载和执行(CSP策略)

  • 不使用有缺陷的第三方库

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

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

相关文章

漏洞复现--Likeshop任意文件上传(CVE-2024-0352)

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

有序矩阵中第 K 小的元素

题目链接 有序矩阵中第 K 小的元素 题目描述 注意点 每行和每列元素均按升序排序找到一个内存复杂度优于 O(n) 的解决方案 解答思路 使用二分查找&#xff0c;思路为&#xff1a; &#xff08;1&#xff09;因为左上角的元素值更小&#xff0c;右下角的元素值更大&#xf…

Kafka集群与可靠性

Kafka集群与可靠性 1.Kafka集群搭建实战 使用两台Linux服务器&#xff1a;一台192.168.182.137 一台192.168.182.138 安装kafka首先&#xff0c;我们需要配置java环境变量&#xff08;这里就略过了&#xff09; mkdir /opt/kafka #上传压缩包kafka_2.13-3.3.1.tgz并解压 ta…

Spring高手之路-Spring的AOP失效场景详解

目录 前言 1.非Spring管理的对象 2.同一个Bean内部方法调用 3.静态方法 4.final方法 5.异步方法 总结 前言 Spring的AOP&#xff08;面向切面编程&#xff09;是一种强大的技术&#xff0c;用于在应用程序中实现横切关注点的模块化。虽然Spring的AOP在大多数情况下都是…

Spring Boot - Application Events 的发布顺序_ApplicationFailedEvent

文章目录 Pre概述Code源码分析 Pre Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEvent 概述 Spring Boot 的广播机制是基于观察者模式实现的&#xff0c;它允许在 Spring 应用程序中发布和监听事件。这种机制的主要目的是为了实现解耦&#…

MySQL进阶45讲【1】基础架构:一条SQL查询语句是如何执行的?

1 前言 我们经常说&#xff0c;看一个事儿千万不要直接陷入细节里&#xff0c;应该先鸟瞰其全貌&#xff0c;这样能够帮助你从高维度理解问题。同样&#xff0c;对于MySQL的学习也是这样。平时我们使用数据库&#xff0c;看到的通常都是一个整体。比如&#xff0c;有个最简单的…

浅谈敏捷开发的思维

什么是敏捷 Agile&#xff08;敏捷&#xff09;来源于敏捷宣言&#xff0c;宣言明确指出&#xff0c;“敏捷”&#xff1a; 不是一种方法论也不是开发软件的具体方法更不是一个框架或者过程 “敏捷”是一套价值观&#xff08;理念&#xff09;和原则&#xff0c;帮助团队在软…

PVE虚拟机配置文件恢复(qm list不显示虚拟机,web控制台看不到虚拟机)

本文章的目的是故障后复盘&#xff1a; 故障现象在命令行执行qm list不显示虚拟机&#xff0c;web控制台看不到虚拟机&#xff0c;网上查不到相关现象的处理办法。 处理思路&#xff1a;虚拟机还在正常工作&#xff0c;通过查看kvm进程ps aux | grep kvm&#xff0c;百度查看…

产品百度百科怎么创建?产品如何上百度百科?

百度百科作为一个权威的信息平台&#xff0c;承载着巨大的流量和曝光度。对于一个产品来说&#xff0c;能够在百度百科上拥有一席之地&#xff0c;无疑是一种极高的荣誉&#xff0c;同时也是提升品牌知名度、增加信任度的重要手段。产品百度百科不仅能够详细、全面地介绍产品信…

【学习iOS高质量开发】——熟悉Objective-C

文章目录 一、Objective-C的起源1.OC和其它面向对象语言2.OC和C语言3.要点 二、在类的头文件中尽量少引用其他头文件1.OC的文件2.向前声明的好处3.如何正确引入头文件4.要点 三、多用字面量语法&#xff0c;少用与之等价的方法1.何为字面量语法2.字面数值3.字面量数组4.字面量字…

跟着cherno手搓游戏引擎【6】ImGui和ImGui事件

导入ImGui&#xff1a; 下载链接&#xff1a; GitHub - TheCherno/imgui: Dear ImGui: Bloat-free Immediate Mode Graphical User interface for C with minimal dependencies 新建文件夹&#xff0c;把下载好的文件放入对应路径&#xff1a; SRC下的premake5.lua文件&#…

算法通关村番外篇-LeetCode编程从0到1系列四

大家好我是苏麟 , 今天带来算法通关村番外篇-LeetCode编程从0到1系列四 . 矩阵 1672. 最富有客户的资产总量 描述 : 给你一个 m x n 的整数网格 accounts &#xff0c;其中 accounts[i][j] 是第 i​​​​​ 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产…

书客Sun立式护眼台灯正式上市,技术优势全面领跑,革新行业的护眼养眼!

在当今智能化的社会&#xff0c;我们与电子屏幕的接触日益增多&#xff0c;同时&#xff0c;无需离开家门即可享受各种便捷服务。由于过度使用电子设备、与阳光的接触机会逐渐减少或其他不合理的用眼习惯导致近视问题不断加剧。 作为专业的护眼品牌&#xff0c;SUKER书客深刻认…

Python画球面投影图

天文学研究中&#xff0c;有时候需要画的并不是传统的XYZ坐标系&#xff0c;而是需要画一个形如这样子的球面投影图&#xff1a; 下面讲一下这种图怎么画 1. 首先要安装healpy包 pip install healpy 2. 然后导入包 如果之前安装过healpy&#xff0c;有的会提示不存在healpy…

matlab串口数据交互的使用

一、matlab将串口数据读取并储存到position中 delete(instrfindall);%注销系统之前已经打开的串口资源 clear s %清空s的数据 s serial(COM6,BaudRate,115200);%定义串口及波特率 fopen(s)%打开串口 fwrite(s,00AB,)%向串口写入读取电机位置指令 for i1:8 %共8个电机position…

IPv6隧道--GRE隧道

GRE隧道 通用路由封装协议GRE(Generic Routing Encapsulation)可以对某些网络层协议(如IPX、ATM、IPv6、AppleTalk等)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IPv4)中传输。 GRE提供了将一种协议的报文封装在另一种协议报文中的机制,是一…

【UE Niagara 喷射火焰系列】06 - 制作火焰喷射过程中飞舞的火星

在上一篇博客&#xff08;【UE Niagara学习笔记】05 - 喷射火焰顶部的蓝色火焰&#xff09;的基础上继续实现喷射火焰的火星的效果。 目录 效果 步骤 一、创建材质实例 二、添加新的发射器 2.1 设置粒子材质 2.2 设置发射器持续生成粒子 2.3 设置粒子生成数量 2.4 设…

day19【LeetCode力扣】160.相交链表

day19【LeetCode力扣】160.相交链表 1.题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交**&#xff1a;** 题目数据 保证 整个链…

是时候丢掉 DDE 了

有人问我这样一个问题&#xff1a; “作为一名应用程序开发者&#xff0c;如果希望和外壳(Explorer/Shell)打交道&#xff0c;我可以直接忽略掉 DDE 吗&#xff1f;” 此问题的答案是&#xff1a;是的&#xff0c;完全没有任何问题。虽然在发明它的 16 位 Windows 协作多任务…

HubSpot电子邮件自动回复怎么设置?附注意事项!

HubSpot 提供了电子邮件自动回复的功能&#xff0c;使得企业能够更高效地管理和处理电子邮件通信。以下是关于 HubSpot 电子邮件自动回复的一些重要信息和步骤&#xff1a; 设置电子邮件自动回复的步骤&#xff1a; 登录HubSpot账户&#xff1a; 打开 HubSpot 平台并登录你的账…