pikachu靶场通关笔记07 XSS关卡03-存储型XSS

news2025/7/21 12:21:16

目录

一、XSS

二、存储型XSS

三、源码分析

四、渗透实战

1、输入mooyuan试一试

2、注入Payload

3、查看数据库

4、再次进入留言板页面


本系列为通过《pikachu靶场通关笔记》的XSS关卡(共10关)渗透集合,通过对XSS关卡源码的代码审计找到XSS风险的真实原因,讲解XSS的原理并进行渗透实践,本文为XSS关卡03-存储型XSS的渗透部分。

一、XSS

XSS 全称为跨站脚本攻击(Cross - Site Scripting),因其高危害性长期位列OWASP Top 10安全威胁。攻击者通过注入恶意脚本(通常为JavaScript)到网页中,脚本在其浏览器执行。XSS主要分为3种类别,具体如下表所示。

类型存储方式触发条件危害范围典型场景防御重点
存储型XSS恶意脚本永久存储在服务器用户访问包含恶意脚本的页面所有访问用户论坛评论区、用户资料页输入过滤+输出编码
反射型XSS不存储,通过URL参数传递用户点击特制恶意链接单个点击用户搜索框、错误页面URL参数消毒+CSP策略
DOM型XSS不经过服务器,纯前端风险前端JS动态解析恶意构造的输入执行恶意代码的用户单页应用(SPA)、URL哈希值安全的DOM操作+前端过滤

二、存储型XSS

存储型XSS(持久性跨站脚本攻击)是XSS风险中最严重的一种类型,其特点是恶意脚本被永久存储在目标服务器上(如数据库、文件系统等),当其他用户访问包含该恶意脚本的页面时,脚本会自动在其浏览器中执行,造成持续性的安全威胁。

这类攻击常见于用户提交内容可被重复展示的场景,如论坛评论区、用户资料页、商品评价区等Web交互功能,攻击者只需提交一次恶意代码(如包含JavaScript的评论),所有后续访问该页面的用户都会成为受害者。

分类存储型XSS
别名持久型XSS
存储位置服务器端(数据库、文件系统等)
触发方式用户访问被注入的页面时自动执行
攻击场景论坛评论、用户资料、商品评价等可存储用户输入的交互功能
危害范围所有访问被污染页面的用户
攻击特点长期存在,无需诱导点击(与反射型XSS不同)
修复难度高(需清理数据库中已存储的恶意脚本)

存储型XSS的危害性极大,可导致大规模用户数据泄露(如窃取登录凭证、会话Cookie)、网页内容篡改(如植入钓鱼表单),甚至传播恶意软件。由于恶意脚本存储在服务器,其影响会持续存在,直到被人工清除。

三、源码分析

进入pikachu靶场XSS系列种的第03关卡-存储型XSS页面,打开后发现是一个留言板,如下所示。

http://127.0.0.1/pikachu/vul/xss/xss_stored.php

查看存储型XSS关卡源码xss_stored.php文件内容,通过POST传入的参数message会被存储到数据库,且没有对message参数进行转义HTML特殊字符的过滤,说明有XSS存储型风险,具体如下所示。

接下来对源码进行详细注释,具体如下所示。

// 调用 connect 函数,建立与数据库的连接,并将返回的连接对象赋值给变量 $link
// 这个函数应该是自定义的,用于封装数据库连接的逻辑
$link = connect();

// 初始化一个空字符串变量 $html,用于存储后续要输出的提示信息
$html = '';

// 检查 $_POST 数组中是否存在键为 "message" 的元素,并且该元素的值不为 null
// 即判断用户是否通过 POST 请求提交了名为 "message" 的数据
if (array_key_exists("message", $_POST) && $_POST['message'] != null) {
    // 调用 escape 函数,对用户输入的 "message" 数据进行转义处理
    // 该函数可能是自定义的,用于防止 SQL 注入攻击,将特殊字符进行转义
    // 传入数据库连接对象 $link 和用户输入的 "message" 数据作为参数
    $message = escape($link, $_POST['message']);

    // 构建一个 SQL 插入语句,将用户输入的 "message" 数据插入到名为 "message" 的数据库表中
    // 插入的数据包含两个字段:content 存储用户输入的消息内容,time 存储当前时间
    // 使用 now() 函数获取当前时间
    $query = "insert into message(content,time) values('$message',now())";

    // 调用 execute 函数,执行上述构建好的 SQL 插入语句
    // 该函数应该是自定义的,用于封装执行 SQL 语句的逻辑
    // 传入数据库连接对象 $link 和 SQL 语句 $query 作为参数
    $result = execute($link, $query);

    // 检查执行 SQL 语句后受影响的行数是否不等于 1
    // 如果不等于 1,说明插入操作可能没有成功,数据库出现异常
    if (mysqli_affected_rows($link) != 1) {
        // 如果插入操作失败,向 $html 变量中追加一段提示信息
        // 提示用户数据库出现异常,提交失败
        $html .= "<p>数据库出现异常,提交失败!</p>";
    }
}

这段代码存在存储型 XSS风险,具体原因如下。

  • 仅进行 SQL 转义,未对 XSS 攻击进行防护:虽然代码调用了 escape 函数对用户输入进行处理,其目的可能是为了防止 SQL 注入,但这个处理并没有考虑到 XSS 攻击的情况。escape 函数可能只是对 SQL 语句中的特殊字符进行转义,而没有对可能的 HTML 标签和 JavaScript 代码进行处理。
  • 未对输出内容进行过滤和转义:当这些包含恶意脚本的内容从数据库中取出并显示在网页上时,由于没有对输出内容进行过滤和转义,浏览器会将其中的脚本代码解析并执行,从而导致 XSS 攻击。任何访问该页面的用户都会受到影响,因为恶意脚本会被存储在数据库中并持续影响后续的页面访问。  

其中escape函数为自定义函数,在mysql.inc.php文件中定义,具体如下所示。

/**
 * 对数据进行转义处理,防止 SQL 注入攻击
 *
 * 该函数可以处理字符串和数组类型的数据。对于字符串,使用 mysqli_real_escape_string 函数进行转义;
 * 对于数组,会递归调用自身对数组中的每个元素进行转义处理。
 *
 * @param mysqli $link 数据库连接对象,用于 mysqli_real_escape_string 函数
 * @param mixed $data 需要进行转义处理的数据,可以是字符串或数组
 * @return mixed 转义后的数据,保持与输入数据相同的类型(字符串或数组)
 */
function escape($link, $data) {
    // 检查传入的数据是否为字符串类型
    if (is_string($data)) {
        // 如果是字符串,使用 mysqli_real_escape_string 函数对字符串进行转义
        // 该函数会对字符串中的特殊字符(如单引号、双引号、反斜杠等)进行转义,防止 SQL 注入
        // 返回转义后的字符串
        return mysqli_real_escape_string($link, $data);
    }
    // 检查传入的数据是否为数组类型
    if (is_array($data)) {
        // 如果是数组,遍历数组中的每个元素
        foreach ($data as $key => $val) {
            // 递归调用 escape 函数,对数组中的每个元素进行转义处理
            // 将转义后的元素重新赋值给数组中对应的键
            $data[$key] = escape($link, $val);
        }
    }
    // 如果数据既不是字符串也不是数组,直接返回原始数据
    return $data;
}

    四、渗透实战

    1、输入mooyuan试一试

    进入靶场的xss存储型关卡,如下所示是一个留言板页面,尝试输入mooyuan。

    此时可以通过数据库管理软件,查看pikachu的message表,如下所示表中有一条为mooyuan的内容,说明留言板写入内容mooyuan被存储到数据库中。

    2、注入Payload

    XSS注入语句<script>alert("mooyuan")</script>的含义如下所示。

    • <script> 标签:HTML 中定义 JavaScript 代码块的标记。
    • alert("mooyuan"):调用浏览器的弹窗函数,显示内容为 mooyuan 的警告框。
    • 整体作用:当该脚本被浏览器解析时,会立即弹出警示框。
    <script>alert("mooyuan")</script>
    

    输入<script>alert("mooyuan")</script>,弹框显示mooyuan说明渗透成功,如下所示。

    3、查看数据库

     查看数据库,如下所示XSS脚本被写入数据库。

    4、再次进入留言板页面

    更换浏览器访问存储型XSS页面,进入页面即弹框mooyuan,触发了XSS脚本的执行,渗透成功。

    http://127.0.0.1/pikachu/vul/xss/xss_stored.php

    点击确定后,页面如下所示。


     
    可以通过点击最下面的删除,将注入的恶意XSS脚本删除。 

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

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

    相关文章

    OpenCV CUDA模块直方图计算------用于在 GPU 上执行对比度受限的自适应直方图均衡类cv::cuda::CLAHE

    操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::CLAHE 是 OpenCV 的 CUDA 模块中提供的一个类&#xff0c;用于在 GPU 上执行对比度受限的自适应直方图均衡&#xff08;Contrast Limi…

    华为OD机试真题——矩形绘制(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

    2025 A卷 200分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

    JDBC连不上mysql:Unable to load authentication plugin ‘caching_sha2_password‘.

    最近为一个spring-boot项目下了mysql-9.3.0&#xff0c;结果因为mysql版本太新一直报错连不上。 错误如下&#xff1a; 2025-06-01 16:19:43.516 ERROR 22088 --- [http-nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispat…

    MacOS安装Docker Desktop并汉化

    1. 安装Docker Desktop 到Docker Desktop For Mac下载对应系统的Docker Desktop 安装包&#xff0c;下载后安装&#xff0c;没有账号需要注册&#xff0c;然后登陆即可。 2. 汉化 前往汉化包下载链接下载对应系统的.asar文件 然后将安装好的文件覆盖原先的文件app.asar文件…

    Centos系统搭建主备DNS服务

    目录 一、主DNS服务器配置 1.安装 BIND 软件包 2.配置主配置文件 3.创建正向区域文件 4.创建区域数据文件 5.检查配置语法并重启服务 二、从DNS服务配置 1.安装 BIND 软件包 2.配置主配置文件 3.创建缓存目录 4.启动并设置开机自启 一、主DNS服务器配置 1.安装 BIN…

    使用 HTML + JavaScript 实现在线考试系统

    在现代的在线教育平台中&#xff0c;在线考试系统是不可或缺的一部分。本文将通过一个完整的示例&#xff0c;演示如何使用 HTML、CSS 和 JavaScript 构建一个支持多种题型的在线考试系统。 效果演示 项目概述 本项目主要包含以下核心功能&#xff1a; 支持4种常见题型&…

    谷歌工作自动化——仙盟大衍灵机——仙盟创梦IDE

    下载地址 https://chromewebstore.google.com/detail/selenium-ide/mooikfkahbdckldjjndioackbalphokd https://chrome.zzzmh.cn/info/mooikfkahbdckldjjndioackbalphokd

    秒杀系统—1.架构设计和方案简介

    大纲 1.秒杀系统的方案设计要点 2.秒杀系统的数据 页面 接口的处理方案 3.秒杀系统的负载均衡方案底层相关 4.秒杀系统的限流机制和超卖问题处理 5.秒杀系统的异步下单和高可用方案 1.秒杀系统的方案设计要点 (1)秒杀促销活动的数据处理 (2)秒杀促销活动的页面处理 (…

    基于FashionMnist数据集的自监督学习(生成式自监督学习AE算法)

    目录 一&#xff0c;生成式自监督学习 1.1 简介 1.2 核心思想 1.3 常见算法 1.3.1 自动编码器&#xff08;Autoencoder&#xff09; 1.3.2 生成对抗网络&#xff08;GANs&#xff09; 1.3.3 变分自编码器&#xff08;VAE&#xff09; 1.3.4 Transformer-based 模型&…

    从监控到告警:Prometheus+Grafana+Alertmanager+告警通知服务全链路落地实践

    文章目录 一、引言1.1 监控告警的必要性1.2 监控告警的基本原理1.2.1 指标采集与存储1.2.2 告警规则与触发机制1.2.3 多渠道通知与闭环 二、技术选型与架构设计2.1 为什么选择 Prometheus 及其生态2.1.1 Prometheus 优势分析2.1.2 Grafana 可视化能力2.1.3 Alertmanager 灵活告…

    WPF【09】WPF基础入门 (三层架构与MVC架构)

    9-2 【操作】WPF 基础入门 新建一项目 Create a new project - WPF Application (A project for creating a .NET Core WPF Application) - Next - .NET 5.0 (Current) - Create 项目创建完成&#xff0c;VS自动打开 GUI用户界面&#xff0c;格式是 .xaml文件&#xff0c;跟xm…

    macOS 风格番茄计时器:设计与实现详解

    macOS 风格番茄计时器&#xff1a;设计与实现详解 概述 本文介绍一款采用 macOS 设计语言的网页版番茄计时器实现。该计时器完全遵循苹果的人机界面指南(HIG)&#xff0c;提供原汁原味的 macOS 使用体验&#xff0c;同时具备响应式设计和深色模式支持。 核心特性 原生 macOS…

    oracle goldengate实现远程抽取postgresql 到 postgresql的实时同步【绝对无坑版,亲测流程验证】

    oracle goldengate实现postgresql 到 postgresql的实时同步 源端&#xff1a;postgresql1 -> postgresql2 流复制主备同步 目标端&#xff1a;postgresql 数据库版本&#xff1a;postgresql 12.14 ogg版本&#xff1a;21.3 架构图&#xff1a; 数据库安装以及流复制主备…

    ISCC-2025-web-wp

    web 校赛 校赛靠着ENOCH师傅发力&#xff0c;也是一路躺进了区域赛&#xff0c;E师傅不好意思发这抽象比赛的wp(这比赛确实啥必到让人大开眼界&#xff0c;反正明年我是肯定不会打了)&#xff0c;我就顺手要过来连着区域赛的一起发了 web 150分 按照提示进入/includes/fla…

    King3399(ubuntu文件系统)iic(i2c)功能测试

    0 引言 前面两篇博文简要介绍了板子上uart部分的内容&#xff0c;但在驱动开发时&#xff0c;我们遇到的外设更多的是以i2c或spi进行通信&#xff0c;本文将对king3399的i2c进行测试并对硬件电路、设备树与驱动程序进行分析 如果使用的i2c设备不是mma8452&#xff0c;建议先看…

    德思特新闻 | 德思特与es:saar正式建立合作伙伴关系

    德思特新闻 2025年5月9日&#xff0c;德思特科技有限公司&#xff08;以下简称“德思特”&#xff09;与德国嵌入式系统专家es:saar GmbH正式达成合作伙伴关系。此次合作旨在将 es:saar 的先进嵌入式开发与测试工具引入中国及亚太市场&#xff0c;助力本地客户提升产品开发效率…

    基于原生JavaScript前端和 Flask 后端的Todo 应用

    Demo地址&#xff1a;https://gitcode.com/rmbnetlife/todo-app-js-flask.git Python Todo 应用 这是一个使用Python Flask框架开发的简单待办事项(Todo)应用&#xff0c;采用前后端分离架构。本项目实现了待办事项的添加、删除、状态切换等基本功能&#xff0c;并提供了直观…

    MIT 6.S081 2020 Lab6 Copy-on-Write Fork for xv6 个人全流程

    文章目录 零、写在前面一、Implement copy-on write1.1 说明1.2 实现1.2.1 延迟复制与释放1.2.2 写时复制 零、写在前面 可以阅读下 《xv6 book》 的第五章中断和设备驱动。 问题 在 xv6 中&#xff0c;fork() 系统调用会将父进程的整个用户空间内存复制到子进程中。**如果父…

    第304个Vulnhub靶场演练攻略:digital world.local:FALL

    digital world.local&#xff1a;FALL Vulnhub 演练 FALL (digitalworld.local: FALL) 是 Donavan 为 Vulnhub 打造的一款中型机器。这款实验室非常适合经验丰富的 CTF 玩家&#xff0c;他们希望在这类环境中检验自己的技能。那么&#xff0c;让我们开始吧&#xff0c;看看如何…

    Unity 模拟高度尺系统开发详解——实现拖动、范围限制、碰撞吸附与本地坐标轴选择

    内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity 模拟高度尺系统开发详解——实现拖动、范围限制、碰撞吸附与本地坐标轴选择 TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不…