Webug4.0靶场通关笔记10- 第10关存储型XSS注入

article/2025/7/29 18:23:27

目录

一、存储型XSS原理

二、代码审计

三、第10关 存储型XSS注入实战

1.打开靶场

2.渗透实战


本文通过《Webug4.0通关笔记系列》来进行Webug4.0靶场的渗透实战,本文讲解Webug4.0靶场第10关存储型XSS的渗透实战。

一、存储型XSS原理

存储型XSS(Stored Cross-Site Scripting)是一种恶意脚本代码被永久存储在目标服务器上的XSS攻击类型。与反射型XSS不同,存储型XSS的攻击载荷会被持久化保存在服务器数据库中,当其他用户访问包含该恶意代码的页面时,攻击就会自动触发。存储型XSS攻击流程如下所示。

  • 攻击入口点识别:攻击者首先寻找网站中允许用户输入并存储的内容区域,常见攻击点包括:

    • 论坛帖子/评论系统
    • 用户个人资料页
    • 产品评价/留言板
  • 恶意代码植入:攻击者在可输入字段中插入XSS载荷,例如:

    <script>alert(document.cookie)</script>
    
  • 服务器端存储:网站后端未进行充分过滤和转义,将含有恶意代码的内容存入数据库。

  • 受害者访问触发:当其他用户浏览包含该恶意内容的页面时,浏览器会解析执行其中的恶意脚本,从而实现存储型XSS攻击。

二、代码审计

如下所示源码实现了一个带有安全防护机制的用户留言板功能,注释后的源码如下所示。

<?phprequire_once "../../common/common.php";// 会话验证:检查用户是否已登录,未登录则重定向到登录页面
if (!isset($_SESSION['user'])) {header("Location:../login.php");
}// 清除可能存在的xss2_flag Cookie(安全措施)
setcookie("xss2_flag", "", time() - 1);// 处理表单提交
if (isset($_POST["message"])) {if (!empty($_POST["message"])) {// 定义SQL关键词黑名单,防止SQL注入$filter = array('insert', 'update', 'select', 'delete', 'from');// 对用户输入进行预处理:转换小写并去除首尾空格$message = strtolower(trim($_POST["message"]));// 获取当前登录用户ID$userId = $_SESSION['user'];// 黑名单过滤:检测到敏感词时提示并终止if (in_array($message, $filter)) {echo "<script>alert('Please don\'t try to deposit dangerous characters')</script>";exit();} else {// XSS检测:如果输入包含"alert"字符串if (strstr($message, "alert")) {// 从数据库获取安全标志$s = "SELECT * FROM env_list WHERE id = 10";$r = $dbConnect->query($s);$w = mysqli_fetch_assoc($r);// 设置包含安全标志的Cookiesetcookie("xss2_flag", $w['envFlag']);}// 存在SQL注入的查询:直接将用户输入拼接到SQL语句中$sql = "INSERT INTO storage_xss(content, userId) VALUES('{$message}', '{$userId}')";$res = $dbConnectWidth->query($sql);}}
}// 查询当前用户存储的所有消息(存在SQL注入风险)
$sql1 = "SELECT * FROM storage_xss WHERE userId = '".$_SESSION['user']."'";
$res1 = $dbConnectWidth->query($sql1);// 引入HTML模板文件,显示用户消息
require_once TPMELATE."/xss_2.html";

代码实现了一个简单的留言存储功能,主要逻辑包括:

  • 检查用户登录状态,未登录则跳转

  • 清除名为xss2_flag的Cookie

  • 接收用户提交的message参数,进行简单的SQL关键字过滤(如select/insert等),这个过滤是为避免二次SQL注入进行filter处理(不过这个代码卡法这写的有问题,因为in_array函数的处理有问题,实际上也等于没有这个函数,基本上也无法过滤)

  • 如果message包含"alert"则设置包含敏感信息的Cookie,即当message包含alert关键字时,将flag写入到cookie中

  • 将用户输入存储到数据库(将message信息存储到数据库中)并显示历史留言

如上所示存在存储型XSS注入,并可以通过将调用获取cookie的XSS注入语句实现注入,XSS注入的主要原因包括:

  • 输入过滤不彻底:仅过滤部分SQL关键字(如select/insert)和"alert"字符串,未对HTML/JS特殊字符(如<>'")进行编码或过滤

  • 直接数据库存储:用户输入的原始message直接存入数据库,未做净化处理

  • 未输出编码:在xss_2.html模板中直接输出数据库内容时,未使用htmlspecialchars等函数进行编码

  • Cookie设置不安全setcookie未设置HttpOnly/Secure属性,易被XSS窃取

三、第10关 存储型XSS注入实战

1.打开靶场

 打开反射型靶场,如下所示此关卡有flag。

反射型XSS的网址如下所示。

http://192.168.71.1/webug4/control/xss/xss_2.php

页面打开后如下所示。

该界面具有迷惑性,鼠标一直向下滑会出现留言板界面, 根据经验这很可能是存储型XSS注入,具体如下所示。

2.渗透实战

构造包含alert的获取cookie的XSS注入命令。

<script>alert(document.cookie)</script>

在留言处进行注入并点击提交。

如下所示,通过XSS获取cookie得到了flag的值。

如上所示,flag获取成功。

xss2_flag=asdfsdfadfsdrew

将上一步获取到的flag值asdfsdfadfsdrew提交flag,效果如下所示。

如下所示提示flag正确,说明渗透成功。


http://www.hkcw.cn/article/DtiJDKYshE.shtml

相关文章

深入了解MCP基础与架构

一、引言 在人工智能技术以指数级速度渗透各行业领域的今天&#xff0c;我们正站在一个关键的技术拐点。当ChatGPT月活突破亿级、Gemini Pro实现多模态实时交互、Claude 3.5 Sonnet突破百万上下文长度&#xff0c;这些里程碑事件背后&#xff0c;一个崭新的大门逐步打开&#…

STM32F407VET6学习笔记9:编译输出固定大小.bin文件

今日学习如何输出固定大小的.bin编译文件 目录 Keil_V5 fromelf.exe 软件目录&#xff1a; 魔棒添加命令输出bin文件&#xff1a; 输出固定大小的bin文件&#xff1a; 计算bin文件大小&#xff1a; 安装 SRecord 工具集&#xff1a; 使用SRecord&#xff1a; 参考文章&#…

Spring Cloud 学习 —— 简单了解

Spring Cloud 简介 官方文档&#xff1a;https://docs.spring.io/spring-cloud-release/reference/index.html 在学习 Spring Cloud 之前&#xff0c;先了解一下什么是分布式系统&#xff1f; 分布式系统 分布式系统是由多个独立计算机&#xff08;节点&#xff09;通过网络…

FreeRTOS多任务系统①

多任务系统 回想一下我们以前在使用 51、STM32 单片机裸机(未使用实时操作系统)的时候一般都是在main 函数里面用 while(1)做一个大循环来完成所有的处理&#xff0c; 即应用程序是一个无限的循环&#xff0c; 循环中调用相应的函数完成所需的处理。 有时候我们也需要中断中完…

Celery简介

一、什么是异步任务队列 异步任务队列是指一种用于管理和调度异步执行任务的机制。具体来说&#xff0c;它允许将任务放入队列中&#xff0c;然后由后台进程异步处理这些任务&#xff0c;而不会阻塞主线程的执行。这种设计使得系统能够高效地处理耗时操作&#xff0c;同时保持…

【Livox雷达使用】

记录 目前livox雷达型号较多&#xff0c;适用范围广泛。后来出的雷达需要使用使用第二代SDK和驱动&#xff0c;如Mid360、HAP。之前在github上看有人问是否能一起安装&#xff0c;官方回答是可以的&#xff0c;我把livox SDK、livox_ros_driver和SDK2、driver2都下载了进行比较…

RS232转Profinet网关在检漏仪与西门子PLC里的应用

RS232转Profinet网关在检漏仪与西门子PLC里的应用 在工业自动化和控制领域&#xff0c;设备间的高效通信至关重要。RS232转Profinet网关作为一种关键的转换工具&#xff0c;能够将传统的RS232接口设备接入现代化的Profinet网络&#xff0c;从而实现数据的无缝传输和设备的远程…

公链地址生成曲线和算法

在区块链公链中&#xff0c;除了 ECDSA&#xff08;基于 secp256k1 曲线&#xff09; 和 EdDSA&#xff08;基于 Ed25519 曲线&#xff09; 之外&#xff0c;还有其他一些加密算法和椭圆曲线被用于生成公私钥对、签名验证或地址生成。这些算法和曲线的选择通常基于安全性、性能…

⭐ Unity AVProVideo插件自带播放器 脚本重构 实现视频激活重置功能

一、功能概述 本笔记记录直接修改插件自带的场景播放其中 原始的 MediaPlayerUI 脚本,实现激活时自动重置播放器的功能。 我用的插件版本是 AVPro Video - Ultra Edition 2.7.3 修改后的脚本将具备以下特性: 激活 GameObject 时自动重置播放位置到开头 可配置是否在重置后自…

C#命名类型前缀习惯改进

我这几天有一个疑惑&#xff0c;我之前用过一些变量命名&#xff0c;有些混乱&#xff0c;如string sql&#xff0c;string strSql&#xff0c;string sqlStr&#xff0c; string strName&#xff0c;string nameStr&#xff0c;bool boValid&#xff0c;stringbuilder sbFileN…

生成式AI如何重塑设计思维与品牌创新?从工具到认知革命的跃迁

当MidJourney生成的视觉方案出现在国际设计奖项的决赛名单&#xff0c;当Adobe Firefly成为设计师的标配工具&#xff0c;一个问题正从行业边缘走向中心&#xff1a;生成式人工智能&#xff08;GAI&#xff09;究竟在解构还是重构创意领域&#xff1f;作为深度参与AI与设计融合…

零知开源——STM32F407VET6驱动Flappy Bird游戏教程

简介 本教程使用STM32F407VET6零知增强板驱动3.5寸TFT触摸屏实现经典Flappy Bird游戏。通过触摸屏控制小鸟跳跃&#xff0c;躲避障碍物柱体&#xff0c;挑战最高分。项目涉及STM32底层驱动、图形库移植、触摸控制和游戏逻辑设计。 目录 简介 一、硬件准备 二、软件架构 三、…

超高频RFID读写器天线分类及应用场景

超高频RFID(Radio Frequency Identification,射频识别)技术作为一种先进的自动识别技术,已经在多个领域得到了广泛应用。作为RFID系统的重要组成部分,超高频RFID读写器天线不仅影响着系统的读取距离、读取速度和准确性,还决定了RFID系统的适应性和灵活性。本文将详细介绍…

第J2周:ResNet50V2算法实战与解析

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 batch_size32&#xff1a;每次训练取32张图像组成一个 batch img_size(224, 224)&#xff1a;图像输入大小匹配 ResNet50 的输入要求 epochs10&#xff1a;训练…

界面控件DevExpress WinForms中文教程:Banded Grid View - 如何固定Bands?

DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜…

安全帽检测

通过百度网盘分享的文件&#xff1a;工地项目 链接&#xff1a;https://pan.baidu.com/s/1pVxriAKKodwrcf_4Ou-OZg?pwdn2rv 提取码&#xff1a;n2rv --来自百度网盘超级会员V2的分享 YOLOv5训练自定义模型 YOLOv5需要安装pytorch、cuda、cudnn&#xff0c;可以参考我的环…

晨控CK-UR08与欧姆龙PLC配置Ethernet/IP通讯连接操作手册

晨控CK-UR08与欧姆龙PLC配置Ethernet/IP通讯连接操作手册 晨控CK-UR08系列作为晨控智能工业级别RFID读写器,支持大部分工业协议如RS232、RS485、以太网。支持工业协议Modbus RTU、Modbus TCP、Profinet、EtherNet/lP、EtherCat以及自由协议TCP/IP等。 本期主题&#xff1a;围绕…

windows无法安装到这个磁盘,选中的磁盘采用gpt分区仪式

解决办法&#xff1a; 我才用的是一个网友分享的微软官方解决办法&#xff0c;成功了&#xff0c;但是不知道会不会i有什么影响。将所有分区删掉&#xff0c;这时磁盘变成为分配的空间。我个人是两块固态&#xff0c;一块m.2&#xff0c;一块sata&#xff1b;所以我直接将500g…

JVM内存模型

JVM内存模型 说明&#xff1a; 1、JVM由装载子系统、运行时数据区&#xff08;jvm内存模型&#xff09;、字节码执行引擎&#xff1b; 2、运行时数据区包含堆、元空间、栈、本地方法栈和程序计数器&#xff1b; 3、堆、元空间是线程共享&#xff1b;方法栈、程序计数器是线程…

【Python】第一弹:对 Python 的认知

目录 一、Python 的背景 1.1. Python 的由来 1.2 Python 的作用 1.3 Python 的优缺点 1.4 Python 的开发工具 一、Python 的背景 1.1. Python 的由来 Python 由荷兰数学和计算机科学研究学会的吉多・范罗苏姆 &#xff08;Guido van Rossum&#xff09;在 20 世纪 80 年代…