pikachu靶场通关笔记07 XSS关卡03-存储型XSS
目录
一、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脚本删除。
相关文章:

pikachu靶场通关笔记07 XSS关卡03-存储型XSS
目录 一、XSS 二、存储型XSS 三、源码分析 四、渗透实战 1、输入mooyuan试一试 2、注入Payload 3、查看数据库 4、再次进入留言板页面 本系列为通过《pikachu靶场通关笔记》的XSS关卡(共10关)渗透集合,通过对XSS关卡源码的代码审计找到XSS风险的…...
GitLab CI、GitHub Actions和Jenkins进行比较
特性/工具JenkinsGitLab CIGitHub Actions架构设计哲学Master/Agent分布式架构,通过插件扩展功能代码与CI/CD强耦合,内置Git仓库,基于Runner注册机制事件驱动,与GitHub深度集成,基于虚拟机的Job执行单元核心运行机制支…...
strcat及其模拟实现
#define _CRT_SECURE_NO_WARNINGS strcat 追加字符串 str "string"(字符串) cat "concatenate"(连接 / 追加) char* strcat(char* destination, const char* source); strcat的应用 方法一ÿ…...

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

华为OD机试真题——矩形绘制(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
2025 A卷 200分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…...
通义开源视觉感知多模态 RAG 推理框架 VRAG-RL:开启多模态推理新时代
通义实验室的自然语言智能团队,凭借深厚的技术积累与创新精神,成功研发并开源了视觉感知多模态 RAG 推理框架 VRAG-RL,为 AI 在复杂视觉信息处理领域带来了重大突破。 传统 RAG 方法的局限 传统的检索增强型生成(RAG࿰…...
爬虫入门:从基础到实战全攻略
🧠 一、爬虫基础概念 1.1 爬虫定义 爬虫(Web Crawler)是模拟浏览器行为,自动向服务器发送请求并获取响应数据的一种程序。主要用于从网页中提取结构化数据,供后续分析、展示或存储使用。 1.2 爬虫特点 数据碎片化&…...
qemu安装risc-V 64
参考这篇文章https://developer.aliyun.com/article/1323996,其中在wsl下面安装可能会报错环境变量中有空格。 # clean_path.sh#!/bin/bash# 备份旧 PATH OLD_PATH"$PATH"# 过滤掉包含空格、制表符、换行的路径 CLEAN_PATH"" IFS: read -ra PA…...

JDBC连不上mysql:Unable to load authentication plugin ‘caching_sha2_password‘.
最近为一个spring-boot项目下了mysql-9.3.0,结果因为mysql版本太新一直报错连不上。 错误如下: 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…...
AsyncIOScheduler与BackgroundScheduler的线程模型对比
1. BackgroundScheduler的线程机制 多线程模型:BackgroundScheduler基于线程池执行任务,默认通过ThreadPoolExecutor创建独立线程处理任务,每个任务运行在单独的线程中,主线程不会被阻塞。适用场景:适合同步…...
Python+MongoDb使用手册(精简)
这里是学了下面链接的内容,加上一些自己学习的内容综合的,大家也可以去看看这篇文章,写的特别好 【python】在Python中操作MongoDB的详细用法教程与实战案例分享_python轻松入门,基础语法到高阶实战教学-CSDN专栏 1 库࿱…...
前端面经 协商缓存和强缓存
HHTTPTTP缓存 协商缓存和强缓存 核心区别是否向服务器发起请求验证资源过期 强缓存 浏览器直接读取本地缓存,不发请求 HTTP响应头 Cache-Control:max-age3600资源有效期 Expires优先级低 如果有效浏览器返回200(浏览器换伪造的200) 应用静态资源 协商缓存 OK如果 1强缓…...

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

Centos系统搭建主备DNS服务
目录 一、主DNS服务器配置 1.安装 BIND 软件包 2.配置主配置文件 3.创建正向区域文件 4.创建区域数据文件 5.检查配置语法并重启服务 二、从DNS服务配置 1.安装 BIND 软件包 2.配置主配置文件 3.创建缓存目录 4.启动并设置开机自启 一、主DNS服务器配置 1.安装 BIN…...
VUE项目部署IIS服务器手册
IIS部署Vue项目完整手册 📋 目录 基础概念准备工作Vue项目构建web.config详解IIS部署步骤不同场景配置常见问题实用配置模板 基础概念 Vue单页应用(SPA)工作原理 重要理解:Vue项目是单页应用,这意味着:…...

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

谷歌工作自动化——仙盟大衍灵机——仙盟创梦IDE
下载地址 https://chromewebstore.google.com/detail/selenium-ide/mooikfkahbdckldjjndioackbalphokd https://chrome.zzzmh.cn/info/mooikfkahbdckldjjndioackbalphokd...
嵌入式(C语言篇)Day13
嵌入式Day13 一段话总结 文档主要介绍带有头指针和尾指针的单链表的实现及操作,涵盖创建、销毁、头插、尾插、按索引/数据增删查、遍历等核心操作,强调头插/尾插时间复杂度为O(1),按索引/数据操作需遍历链表、时间复杂度为O(n),并…...
Oracle 的V$LOCK 视图详解
Oracle 的V$LOCK 视图详解 V$LOCK 是 Oracle 数据库中最重要的动态性能视图之一,用于显示当前数据库中锁的持有和等待情况。 一、V$LOCK 视图结构 列名数据类型描述SIDNUMBER持有或等待锁的会话标识符TYPEVARCHAR2(2)锁类型标识符ID1NUMBER锁标识符1(…...

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

基于FashionMnist数据集的自监督学习(生成式自监督学习AE算法)
目录 一,生成式自监督学习 1.1 简介 1.2 核心思想 1.3 常见算法 1.3.1 自动编码器(Autoencoder) 1.3.2 生成对抗网络(GANs) 1.3.3 变分自编码器(VAE) 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 灵活告…...
AUTOSAR图解==>AUTOSAR_EXP_AIADASAndVMC
AUTOSAR高级驾驶辅助系统与车辆运动控制接口详解 基于AUTOSAR R22-11标准的ADAS与VMC接口规范解析 目录 1. 引言2. 术语和概念说明 2.1 坐标系统2.2 定义 2.2.1 乘用车重心2.2.2 极坐标系统2.2.3 车辆加速度/推进力方向2.2.4 倾斜方向2.2.5 方向盘角度2.2.6 道路变量2.2.7 曲率…...

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 项目创建完成,VS自动打开 GUI用户界面,格式是 .xaml文件,跟xm…...

macOS 风格番茄计时器:设计与实现详解
macOS 风格番茄计时器:设计与实现详解 概述 本文介绍一款采用 macOS 设计语言的网页版番茄计时器实现。该计时器完全遵循苹果的人机界面指南(HIG),提供原汁原味的 macOS 使用体验,同时具备响应式设计和深色模式支持。 核心特性 原生 macOS…...
中文NLP with fastai - Fastai Part4
使用fastai进行自然语言处理 在之前的教程中,我们已经了解了如何利用预训练模型并对其进行微调,以执行图像分类任务(MNIST)。应用于图像的迁移学习原理同样也可以应用于NLP任务。在本教程中,我们将使用名为AWD_LSTM的预训练模型来对中文电影评论进行分类。AWD_LSTM是LSTM…...

oracle goldengate实现远程抽取postgresql 到 postgresql的实时同步【绝对无坑版,亲测流程验证】
oracle goldengate实现postgresql 到 postgresql的实时同步 源端:postgresql1 -> postgresql2 流复制主备同步 目标端:postgresql 数据库版本:postgresql 12.14 ogg版本:21.3 架构图: 数据库安装以及流复制主备…...
【MYSQL】索引篇(一)
1.为什么要有索引 索引的本质是一种数据结构,她的作用其实就是更好更快的帮我们找到数据库中存储的数据,就好比一本书,你想要找到指定的内容,但是如果在没有目录的情况下,你只能一页页的进行寻找,这样效率…...

ISCC-2025-web-wp
web 校赛 校赛靠着ENOCH师傅发力,也是一路躺进了区域赛,E师傅不好意思发这抽象比赛的wp(这比赛确实啥必到让人大开眼界,反正明年我是肯定不会打了),我就顺手要过来连着区域赛的一起发了 web 150分 按照提示进入/includes/fla…...
鸿蒙分辨率
鸿蒙手机App界面开发,UI元素应该以什么哪种屏幕尺寸为基准?换言之,做鸿蒙手机APP UI设计时,应该以哪种屏 PX转VP 华为开发者问答 | 华为开发者联盟 各单位换算API 华为开发者问答 | 华为开发者联盟 开源鸿蒙更改DPI 如何在Op…...