XSS跨站脚本攻击漏洞练习

news/2024/12/26 3:18:49 标签: xss, 前端

一、XSS(跨站脚本攻击)漏洞介绍

1、漏洞原理

XSS 是跨站脚本攻击(Cross-Site Scripting)的缩写,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。XSS 漏洞主要是因为 Web 应用程序没有对用户输入的数据进行充分的验证和过滤,或者没有正确地对输出内容进行编码,从而导致攻击者可以将恶意脚本注入到网页中,这些恶意脚本能够在受害者的浏览器中执行。

2、XSS的几种类型

(1)反射型XSS

  • 用户输入的利用:攻击者精心构造一个包含恶意脚本的请求,通常是通过 URL 参数、表单数据等方式。
  • 服务器反射行为:服务器接收到这个请求后,没有对输入内容进行合适的处理,直接将其包含在响应页面中返回给用户。
  • 浏览器执行脚本:当用户的浏览器接收到这个包含恶意脚本的响应时,由于浏览器无法分辨这是恶意脚本,就会按照正常的 JavaScript 代码执行流程来执行这个脚本。攻击者可以利用这种方式窃取用户的登录信息等敏感数据,如通过将用户的登录凭证发送到攻击者控制的服务器。

(2)存储型XSS

  • 数据存储阶段:攻击者将恶意脚本作为用户输入的数据存储到目标 Web 应用程序的数据库、文件系统或其他存储介质中。
  • 数据读取与页面渲染阶段:当其他用户访问包含恶意脚本的页面时,Web 应用程序会从存储介质中读取数据(包括恶意脚本),将其渲染到网页中。
  • 脚本执行与危害产生:用户的浏览器在渲染页面过程中,会执行这个恶意脚本。比如用户的浏览器会将用户的 Cookie 信息发送到攻击者指定的网站,从而使攻击者能够获取用户的敏感信息。

(3)DOM型XSS

  • DOM 操作引入:现代 Web 应用程序大量使用 JavaScript 来动态地操作文档对象模型(DOM),以实现丰富的用户交互功能。
  • 恶意利用方式:攻击者通过构造特殊的 URL 或者其他用户输入的方式,将恶意脚本注入到 DOM 操作的过程中。
  • 脚本执行机制:当用户访问这个特殊构造的 URL 时,浏览器会解析 URL 中的哈希值(# 后面的部分),并将其作为数据传递给上述的 JavaScript 代码。由于没有对这个数据进行安全处理,代码会将恶意脚本插入到 DOM 中,浏览器就会执行这个脚本,从而产生与其他类型 XSS 类似的危害。

二、XSS漏洞练习

靶场环境:Pikachu靶场

因篇幅有限,所以本文只练习以下3个,后续会通过视频讲解的方式进行详细讲解。

1、反射型XSS(get)练习

(1)查看一下这个功能

(2)在输入框输入

发现输入框限制了输入字符长度,这个限制代码做在前端,可以用Burp绕过或者改前端代码

光标停在输入框,右键-检查查看代码

这里可以看到,长度限制在20以内,直接在代码里把这长度限制改掉

输入,弹窗成功,说明js代码被执行了

2、存储型XSS练习

(1)查看一下功能

发现会把留言内容展示在留言列表

(2)在留言框输入

发现弹窗了,不同于反射型XSS,多次打开页面都会弹窗

3、DOM型XSS练习

(1)在输入框输入

发现没有效果

(2)查看前端代码

发现了关键的JS代码

代码如下:

function domxss(){
var str = document.getElementById("text").value;
document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
                 }

(3)分析代码并构造语句

var str = document.getElementById(“text”).value;

获取输入的文本,赋值给str变量

"发现了一个语句拼接

可以构造一个如下的语句

’ οnclick=“alert(‘xss’)”>

这样的效果就是

'>

(4)输入’ οnclick=“alert(‘xss’)”>

点击click me,再点击蓝色字符what do you see

触发弹窗,当然构造的语句不只有这一个,其他的方法可以去自己尝试一下


http://www.niftyadmin.cn/n/5799710.html

相关文章

Spring Boot 应用开发入门(一)

Spring Boot 应用开发入门 1. Spring Boot 开发环境配置 1.1 安装 Java 开发环境 Spring Boot 是基于 Java 的开发框架&#xff0c;因此首先需要安装 Java Development Kit (JDK)。建议使用 JDK 11 或以上版本。 安装 JDK&#xff1a; bash 复制代码 brew install openjdk1…

5-2 LED特定图标显示

这段代码的目的是在LED矩阵显示缓冲区中设置或清除一个特定的图标&#xff08;在这个例子中可能是重量图标&#xff09;&#xff0c;具体取决于 isDisplay 参数的值。让我们逐步解析这段代码&#xff0c;理解其作用和逻辑。 显示指定图标和隐藏指定图标的代码 esp_err_t led_ma…

网络安全研究中的网络攻击

网络安全研究中的网络攻击 在网络安全研究中,多种网络攻击场景可用于测试系统的安全性,以下是一些常见的网络攻击场景、模拟方法、相关软件及其使用示例: 分布式拒绝服务(DDoS)攻击 模拟方法:利用工具向目标系统发送大量的请求流量,耗尽其网络带宽、系统资源(如 CPU、…

招投标:使用AI快速编写行业投标文件

使用AI大模型工具&#xff08;如GPT-4&#xff09;可以显著加速智慧农业投标书的编写过程。以下是基于您提供的流程&#xff0c;详细说明如何在各个阶段应用AI大模型工具以提升效率和质量&#xff1a; 前期准备阶段 明确招标要求 AI辅助理解&#xff1a;将招标文件的关键部分输…

[创业之路-206]:《华为战略管理法-DSTE实战体系》- 6-关键成功因素法CSF

目录 一、概述 1、定义与起源 2、关键成功因素的定义 3、关键成功因素的来源 4、关键成功因素的确认方法 5、关键成功因素法的步骤 6、关键成功因素法的应用 7、关键成功因素法的优势与局限性 二、 关键成功因素法CSF的应用 1、企业战略管理 2、项目管理 3、绩效管…

数据库安全-redisCouchdb

1.redis未授权访问 默认端口:6379 1.1 Redis沙盒逃逸漏洞RCE-CVE-2022-0543 介绍&#xff1a;Redis 是一套开源的使用 ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库&#xff0c;并提供多种语言的API。Redis 如果在没有开启认证的情况下&#xff0c;…

C++ 指针进阶:动态内存与复杂应用

1. 动态内存分配&#xff1a;new 与 delete 运算符 在 C 编程中&#xff0c;动态内存分配是一项至关重要的技术&#xff0c;它允许我们在程序运行时根据实际需求分配和释放内存。new运算符用于在堆内存中分配内存&#xff0c;delete运算符则用于释放通过new分配的内存。 当我…

计算机网络:IP地址相关知识总结

目录 一、IP地址的表现形式 1.1 十进制表示形式 1.2 二进制表示形式 1.3 转换示例介绍 二、IP地址的组成 2.1 网络ID 2.2 主机ID 2.3 示例 三、IP地址的分类 3.1 A类地址 3.2 B类地址 3.3 C类地址 3.4 D类地址 3.5 E类地址 四、常见的特殊IP地址 五、IP地址二进…