Webug3.0通关笔记14 第十四关:存储型XSS

目录

第十四关:存储型XSS

1.打开靶场

2.源码分析

3.渗透实战


第十四关:存储型XSS

本文通过《webug3靶场第十四关 存储型XSS》来进行存储型XSS关卡的渗透实战。

存储型 XSS(Stored Cross - Site Scripting),也被称为持久型 XSS,是跨站脚本攻击(XSS)的一种类型。它的特点是攻击者将恶意脚本存储在目标网站的服务器端数据库、文件系统等持久化存储介质中。当其他用户访问包含该恶意脚本的页面时,恶意脚本会被浏览器执行,从而导致攻击发生。

存储型XSS漏洞对比上一关卡的反射型XSS漏洞,,最主要的区别如下所示。

  • 存储型 XSS:攻击者把恶意脚本提交到目标网站的服务器,这些脚本会被持久化保存,像存储在数据库、文件系统里。当其他用户访问包含此恶意脚本的页面时,脚本就会在其浏览器中执行。比如在论坛的留言板、评论区,攻击者输入恶意脚本,若网站未对输入进行严格过滤,脚本就会被保存,之后其他用户浏览该留言或评论时,恶意脚本就会执行。
  • 反射型 XSS:攻击者通过诱导用户点击包含恶意脚本的链接来发动攻击。用户点击链接后,服务器会接收链接中的恶意脚本,并将其原样反射到响应页面中,随后在用户浏览器里执行。例如在搜索框中,若网站对输入过滤不严格,攻击者可构造包含恶意脚本的搜索链接,诱导用户点击,服务器返回的搜索结果页面就会包含该恶意脚本。

整理来讲,两者区别如下所示。

对比维度存储型 XSS反射型 XSS
攻击方式攻击者提交恶意脚本至服务器并持久保存,用户访问含该脚本页面时执行攻击者诱导用户点击含恶意脚本链接,服务器将脚本反射到响应页面执行
数据存储恶意脚本存于服务器端,持久存在恶意脚本不存于服务器,仅临时包含在响应中
影响范围影响所有访问含脚本页面的用户,范围广、持续久仅影响点击恶意链接的用户
检测难度相对容易,可扫描服务器数据发现较困难,脚本临时存在于响应中
防范难度需严格过滤验证输入、清理检查存储数据,难度大对输入输出严格过滤编码,避免脚本注入执行

1.打开靶场

如下所示打开靶场,第14关卡如下图红框所示。

点击第十四关,完整的URL地址如下所示。

http://192.168.71.1/webug3/pentest/test/10/

 很明显这是一个留言区,页面显示了已有的多条留言信息。

这个留言板可能存在存储型XSS漏洞。

2.源码分析

如下所示对传入的留言参数并未进行任何检查过滤,而是直接存储到数据库中,很明显可以通过注入XSS语句形成XSS存储型漏洞。

<?php
//禁用错误报告error_reporting(0);
header("Content-Type: text/html;charset=utf-8");
require_once 'conn.php';
include'./key/config/sql.php';if(isset($_POST["comment"]))
{#$comment=$_POST["comment"];</script>中等级别
$date=date('y-m-d h:i:s',time());$query = "insert into comment(content, time) values('".$_POST['comment']."', '".$date."') ";//构建查询语句$result = mysql_query($query);//执行查询
if (!$result) {die("could not to the database\n" . mysql_error());
}
if (mysql_numrows($result)<=0) {echo "<script type='text/javascript'>alert('提交成功!');location.href='index.php'</script>";
}else{echo "<script type='text/javascript'>alert('提交失败,请重新提交!');location.href='index.php'</script>";
}
}
?>
<!DOCTYPE html>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<title>评论区</title>
<meta name="description" content="Test">
<meta name="author" content="MRYE+">
</head>
<body>
你觉得学好渗透需要自学哪几本书?
<form action="" method="post">
<input type="text" id="comment" name="comment" /><input type="submit" id="submit" name="submit" value="留言"/>
</form>
<hr/>
<?php$query = "select * from comment ";//构建查询语句$result = mysql_query($query);//执行查询
while($result_row=mysql_fetch_row(($result)))//取出结果并显示
{
$id=$result_row[0];
$content=$result_row[1];
$time=$result_row[2];
echo "序号为:".$id."</br>";
echo "评论为:".$content."</br>";
echo "评论时间:".$time."</br>";
echo "<hr/>";
echo "<hr/>";
}?>
</body>
</html>

这个漏洞是因为XSS内容未经过滤,并直接存入数据库,导致出现异常。

$query = "insert into comment(content, time) values('".$_POST['comment']."', '".$date."') ";

3.渗透实战

获取cookie的XSS注入命令如下所示。

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

向留言板中输入如上语句。

点击留言,接下来弹框获取到cookie信息,如下所示渗透成功。

这之后,每次再进入到留言板界面,都会有弹出cookie的弹框,存储型XSS获取成功

4.存储型XSS漏洞防范

防御层面具体防御方法原理
输入验证白名单验证只允许符合特定规则的字符(如字母、数字、部分特定符号)输入,阻止恶意脚本代码中的特殊字符(如<script>等)进入系统,从源头防止恶意脚本注入。
长度限制限制用户输入内容的长度,避免攻击者利用长串恶意代码绕过过滤机制,减少恶意脚本成功注入的可能性。
输出编码HTML 实体编码将用户输入内容中的特殊字符(如<编码为&lt;>编码为&gt;等)转换为 HTML 实体,使浏览器将其作为普通文本显示,而不是解析为可执行的脚本代码。
JavaScript 编码对输出到 JavaScript 环境中的内容进行编码,如对单引号(')、双引号(")等进行转义处理,防止恶意脚本破坏 JavaScript 代码结构并执行。
服务器端安全策略定期漏洞扫描使用专业安全工具定期扫描服务器,检查是否存在存储型 XSS 漏洞,及时发现并修复潜在的安全隐患。
权限控制严格控制用户对服务器资源的访问权限,避免未授权用户上传恶意脚本,降低存储型 XSS 攻击风险。
更新系统和应用及时更新服务器操作系统、Web 应用程序及相关组件,修复已知的安全漏洞,防止攻击者利用旧版本漏洞进行攻击。
设置 HTTP 安全头Content - Security - Policy(CSP)通过设置 CSP 头,明确指定页面允许加载的资源来源,阻止浏览器从非信任源加载脚本,限制恶意脚本的执行环境。
开发规范与意识安全编码培训对开发人员进行安全编码培训,使其了解存储型 XSS 的原理和危害,掌握正确的输入验证、输出编码等安全开发技巧。
代码审查在开发过程中,对代码进行严格审查,检查是否存在可能导致存储型 XSS 漏洞的代码逻辑错误,如未对用户输入进行过滤就直接存储和使用。

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

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

相关文章

Java父类、子类实例初始化顺序详解

1、完整的初始化顺序&#xff08;含继承&#xff09; 1、父类的静态初始化 父类静态变量默认值 → 父类静态变量显式赋值 父类静态代码块&#xff08;按代码顺序执行&#xff09;。 2、子类的静态初始化 子类静态变量默认值 → 子类静态变量显式赋值 子类静态代码块&…

13.组合模式:思考与解读

原文地址:组合模式&#xff1a;思考与解读 更多内容请关注&#xff1a;7.深入思考与解读设计模式 引言 在软件开发中&#xff0c;是否曾经遇到过这样一种情况&#xff1a;你有一个对象&#xff0c;它本身很简单&#xff0c;但是它包含了其他类似的对象。随着系统变得越来越复…

OpenCV实战教程 第一部分:基础入门

第一部分&#xff1a;基础入门 1. OpenCV简介 什么是OpenCV及其应用领域 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库&#xff0c;于1999年由Intel公司发起&#xff0c;现在由非营利组织OpenCV.org维护。Ope…

虚幻商城 Quixel 免费资产自动化入库(2025年版)

文章目录 一、背景二、问题讲解1. Quixel 免费资产是否还能一键入库?2. 是不是使用了一键入库功能 Quixel 的所有资产就能入库了?3. 一键入库会入库哪些资产?三、实现效果展示四、实现自动化入库五、常见问题1. 出现401报错2. 出现429报错3. 入库过于缓慢4. 入库 0 个资产一…

uni-app - 小程序使用高德地图完整版

文章目录 🍉功能描述🍉效果🍉开发环境🍉代码部分🍉功能描述 页面自动通过定位获取用户位置并展示周边POI数据,同时支持关键词输入实时联想推荐关联地点信息, 实现精准智能的地点发现与检索功能。 🍉效果 🍉开发环境 unibest2.5.4nodev18.20.5pnpm9.14.2wot-des…

牛客:AB4 逆波兰表达式求值

链接&#xff1a;逆波兰表达式求值_牛客题霸_牛客网 题解&#xff1a; 利用栈&#xff0c;遍历字符串数组&#xff0c;遇到运算数则入栈&#xff0c;遇到运算符则取出栈顶两个运算数进行运算&#xff0c;并将运算结果入栈。 class Solution { public:/*** 代码中的类名、方法…

Ant(Ubuntu 18.04.6 LTS)安装笔记

一、前言 本文与【MySQL 8&#xff08;Ubuntu 18.04.6 LTS&#xff09;安装笔记】同批次&#xff1a;先搭建数据库&#xff0c;再安装JDK&#xff0c;后面肯定就是部署Web应用。其中Web应用的部署使用 Ant 方式&#xff0c;善始善终&#xff0c;特以笔记。 二、准备 &#xf…

ultralytics 目标检测 混淆矩阵 背景图像 没被记录

修改 utils/metrics.py ConfusionMatrix def process_batch(self, detections, gt_bboxes, gt_cls):"""Update confusion matrix for object detection task.Args:detections (Array[N, 6] | Array[N, 7]): Detected bounding boxes and their associated inf…

iview 如何设置sider宽度

iview layout组件中&#xff0c;sider设置了默认宽度和最大宽度&#xff0c;在css样式文件中修改无效&#xff0c;原因是iview默认样式设置在了element.style中&#xff0c;只能通过行内样式修改 样式如下&#xff1a; image.png image.png 修改方式&#xff1a; 1.官方文档中写…

go-zero(十七)结合DTM :实现分布式事务

1. 基础概念介绍 1.1 什么是分布式事务 在微服务架构中&#xff0c;一个业务操作常常需要调用多个服务来完成。例如&#xff0c;在电商系统中下单时&#xff0c;需要同时操作订单服务和库存服务。这种跨服务的操作就需要分布式事务来保证数据一致性。 分布式事务面临以下挑战…

2025 简易Scrum指南(简体中文版)

Scrum是一个轻量级的、以团队为中心的框架&#xff0c;用于解决复杂的问题并创造价值。Scrum有意保持非完整性&#xff0c;Scrum的设计初衷旨在依靠使用者的集体智慧来不断演进构建。 Scrum建立在实验主义和精益思想的基础上&#xff0c;它赋能团队灵活巧妙地工作&#xff0c;…

2025最新福昕PDF编辑器,PDF万能处理工具

软件介绍 Foxit PDF Editor Pro 2025 中文特别版&#xff08;以前称为 Foxit PhantomPDF Business&#xff09;是一款专为满足各种办公需求而设计的业务就绪的PDF工具包。 软件特点 1. 强大的PDF编辑能力 创建新文档&#xff1a;用户可以从无到有地构建PDF文档&#xff0c;添…

ollama的若干实践

1. 本地ollama 1.1 本地安装ollama 方法 1&#xff1a;手动检查最新版本并下载 访问 Ollama 的 GitHub Releases 页面&#xff1a; 打开 https://github.com/ollama/ollama/releases 查看最新的稳定版本&#xff08;如 v0.7.0 或更高&#xff09; 手动下载最新版本&#xff08…

Spring Security源码解析

秒懂SpringBoot之全网最易懂的Spring Security教程 SpringBoot整合Spring-Security 认证篇&#xff08;保姆级教程&#xff09; SpringBoot整合Spring Security【超详细教程】 spring security 超详细使用教程&#xff08;接入springboot、前后端分离&#xff09; Security 自…

LeetCode 3392.统计符合条件长度为 3 的子数组数目:一次遍历模拟

【LetMeFly】3392.统计符合条件长度为 3 的子数组数目&#xff1a;一次遍历模拟 力扣题目链接&#xff1a;https://leetcode.cn/problems/count-subarrays-of-length-three-with-a-condition/ 给你一个整数数组 nums &#xff0c;请你返回长度为 3 的 子数组&#xff0c;满足…

读论文笔记-CoOp:对CLIP的handcrafted改进

读论文笔记-Learning to Prompt for Vision-Language Models Problems 现有基于prompt engineering的多模态模型在设计合适的prompt时有很大困难&#xff0c;从而设计了一种更简单的方法来制作prompt。 Motivations prompt engineering虽然促进了视觉表示的学习&#xff0c…

从零构建 MCP Server 与 Client:打造你的第一个 AI 工具集成应用

目录 &#x1f680; 从零构建 MCP Server 与 Client&#xff1a;打造你的第一个 AI 工具集成应用 &#x1f9f1; 1. 准备工作 &#x1f6e0;️ 2. 构建 MCP Server&#xff08;服务端&#xff09; 2.1 初始化服务器 &#x1f9e9; 3. 添加自定义工具&#xff08;Tools&…

Django 自定义celery-beat调度器,查询自定义表的Cron表达式进行任务调度

学习目标&#xff1a; 通过自定义的CronScheduler调度器在兼容标准的调度器的情况下&#xff0c;查询自定义任务表去生成调度任务并分配给celery worker进行执行 不了解Celery框架的小伙伴可以先看一下我的上一篇文章&#xff1a;Celery框架组件分析及使用 学习内容&#xff…

蓝桥杯 1. 确定字符串是否包含唯一字符

确定字符串是否包含唯一字符 原题目链接 题目描述 实现一个算法来识别一个字符串的字符是否是唯一的&#xff08;忽略字母大小写&#xff09;。 若唯一&#xff0c;则输出 YES&#xff0c;否则输出 NO。 输入描述 输入一行字符串&#xff0c;长度不超过 100。 输出描述 输…

a-upload组件实现文件的上传——.pdf,.ppt,.pptx,.doc,.docx,.xls,.xlsx,.txt

实现下面的上传/下载/删除功能&#xff1a;要求支持&#xff1a;【.pdf,.ppt,.pptx,.doc,.docx,.xls,.xlsx,.txt】 分析上面的效果图&#xff0c;分为【上传】按钮和【文件列表】功能&#xff1a; 解决步骤1&#xff1a;上传按钮 直接上代码&#xff1a; <a-uploadmultip…