pikachu靶场通关笔记06 XSS关卡02-反射型POST

news2025/6/4 11:21:54

目录

一、XSS

二、反射型XSS

三、POST型报文

四、GET型与POST型区别

五、代码审计

五、渗透实战

1、渗透方法1

2、渗透方法2


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

一、XSS

XSS 全称为跨站脚本攻击(Cross - Site Scripting),它允许攻击者在受害者的浏览器中注入恶意脚本,从而获取用户的敏感信息、执行非法操作或篡改网页内容。攻击者通常会利用网站对用户输入过滤不严格的弱点,将恶意脚本伪装成正常的用户输入,例如在评论框、搜索栏等位置输入包含恶意脚本的内容。当其他用户访问包含该恶意脚本的页面时,浏览器会误认为这些脚本是合法的,并执行它们。

XSS主要分为三类,具体如下表所示。

分类简要描述
反射型 XSS恶意脚本随请求参数被服务器返回,仅在当前请求中生效
存储型 XSS恶意脚本存储于服务器端,所有访问相关页面用户均受影响
DOM 型 XSS利用 DOM 操作,修改页面结构注入恶意脚本,与服务器端处理无关

二、反射型XSS

反射型 XSS 是一种常见的跨站脚本攻击类型,攻击者通过诱使用户点击包含恶意脚本的链接,将脚本作为参数嵌入到 URL 中。用户访问该链接后,服务器将脚本反射回浏览器并执行,从而实现攻击目的。反射型 XSS 与 POST 型 XSS 的区别如下。

对比维度反射型 XSSPOST 型 XSS
数据传输方式通过 URL 参数传输恶意脚本,数据可见于 URL 中利用 POST 请求将恶意脚本放在请求体中传输,URL 中不直接显示
攻击触发方式用户点击包含恶意脚本的链接即可触发通常需要用户在表单等场景中输入恶意内容并提交 POST 请求来触发
传播性可以通过邮件、即时通讯工具等发送链接进行传播,传播相对容易传播相对较难,需要诱导用户在特定表单中输入恶意内容并提交
隐蔽性URL 中可见恶意脚本,相对容易被发现恶意脚本在请求体中,相对更隐蔽,不易被察觉

三、POST型报文

HTTP的GET型报文是HTTP协议中最基础的请求方法之一,主要用于从服务器获取资源。HTTP 的 GET 型报文主要由请求行、请求头部、空行(用于分隔头部和主体)组成,因为 GET 请求通常不包含请求主体(数据通过 URL 中的查询参数传递),以下是其结构的表格表示。

组成部分说明
请求行包含请求方法(POST)、请求的资源路径和 HTTP 版本,如 POST /upload.php HTTP/1.1
请求头部包含客户端信息和请求相关参数,如 Content-Type 表明请求主体的类型、Content-Length 指明请求主体的长度等
空行用于分隔请求头部和请求主体
请求主体存放要提交的数据,如表单数据、文件内容等

四、GET型与POST型区别

以下是 HTTP GET 与 POST 方法的对比表格,从多个维度展示二者的核心区别。

对比维度GET 方法POST 方法
主要用途请求获取资源(查询数据)提交数据到服务器(修改/创建资源)
参数位置明文附加在URL后(?key=value封装在请求体(Request Body)中
数据长度限制受URL长度限制(通常≤2048字符)理论上无限制(实际受服务器配置约束)
安全性低(参数暴露在URL、浏览器历史、日志中)较高(参数不可见,但未加密仍可被嗅探)
浏览器行为可收藏为书签,支持页面刷新刷新时会提示重新提交表单
典型应用场景搜索、分页、资源下载登录、支付、文件上传、敏感数据提交
报文示例GET /search?q=term HTTP/1.1POST /login HTTP/1.1
Body: user=admin&pass=123
SEO影响搜索引擎可索引URL参数参数不可见,不影响SEO

五、代码审计

进入pikachu靶场XSS系列关卡的02关卡-反射型POST页面,打开后发现是一个登陆页面,点击右上角的提示,发现提示账号的用户名和密码为admin/123456,具体如下所示。

http://127.0.0.1/pikachu/vul/xss/xsspost/post_login.php

输入用户名admin,密码123456,点击登录。

此时进入了一个可以查询NBA球员的页面,输入框可以输入内容,完整URL如下所示。

http://127.0.0.1/pikachu/vul/xss/xsspost/xss_reflected_post.php

查看反射型XSS关卡源码xss_reflected_post.php文件内容,很明显没有对传入的参数message进行 任何过滤,换言之本关卡直接将用户输入字符串带入特定语句并进行回显,并没有任何的过滤,有XSS风险具体如下所示。

代码直接将用户通过 POST 请求传递的 message 参数的值嵌入到 HTML 输出中,没有对其进行任何过滤和转义处理。这意味着攻击者可以构造包含恶意脚本的 message 参数值,当服务器接收到包含恶意脚本的输入并将其作为响应内容返回给浏览器时,浏览器会将其解析为 HTML 和 JavaScript 代码并执行,从而触发 XSS 攻击。攻击者可以利用此XSS风险获取用户的敏感信息、进行会话劫持等操作。接下来对源码进行详细注释,具体如下所示。

<?php
// 定义一个字符串变量 $state,用于存储提示信息
// 该信息包含一个超链接,点击链接会跳转到 xss_reflected_post.php 页面并携带 logout=1 参数,提示用户已经登录成功并提供退出登录的操作
$state = '你已经登陆成功,<a href="xss_reflected_post.php?logout=1">退出登陆</a>';

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

// 检查是否通过 POST 请求方式提交了名为 'submit' 的表单元素
// 如果提交了,说明用户触发了相关操作,进入后续处理逻辑
if (isset($_POST['submit'])) {
    // 检查 POST 请求中 'message' 参数是否为空
    if (empty($_POST['message'])) {
        // 如果 'message' 参数为空,向 $html 变量中追加一段提示信息
        // 提示用户输入 'kobe' 进行尝试
        $html .= "<p class='notice'>输入'kobe'试试-_-</p>";
    } else {
        // 如果 'message' 参数不为空
        // 此处直接将用户通过 POST 请求输入的 'message' 参数值嵌入到 HTML 输出中,未做任何过滤处理
        // 下面会根据 'message' 参数的值进行不同的输出处理
        if ($_POST['message'] == 'kobe') {
            // 如果 'message' 参数的值等于 'kobe'
            // 向 $html 变量中追加一段祝福信息,其中包含用户输入的 'kobe'
            // 同时追加一张图片,图片路径使用了预定义的常量 $PIKA_ROOT_DIR
            $html .= "<p class='notice'>愿你和{$_POST['message']}一样,永远年轻,永远热血沸腾!</p><img src='{$PIKA_ROOT_DIR}assets/images/nbaplayer/kobe.png' />";
        } else {
            // 如果 'message' 参数的值不等于 'kobe'
            // 向 $html 变量中追加一段提示信息,表示不关心输入的内容
            $html .= "<p class='notice'>who is {$_POST['message']},i don’t care!</p>";
        }
    }
}
?>

五、渗透实战

1、渗透方法1

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

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

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

2、渗透方法2

渗透方法2的注入语句<script>alert(document.cookie)</script> 是一段 JavaScript 代码,用于在浏览器中弹出一个包含当前网页 cookie 信息的提示框。

  • document.cookie 是 JavaScript 中用于操作浏览器 cookie 的属性。cookie 是服务器发送到用户浏览器并保存在本地的小段数据,可在浏览器下次向同一服务器再发起请求时被携带上并发送到服务器上。
  • alert() 是 JavaScript 的一个函数,它会创建一个模态对话框,显示传入的内容。这段代码组合起来,就是通过 alert 函数将当前页面的 cookie 信息展示给用户。不过,若被攻击者利用,他们能通过此代码获取用户的敏感信息,如登录凭证等,从而实施安全攻击。
<script>alert(document.cookie)</script>

在输入框中输入 <script>alert(document.cookie)</script>弹出了cookie值,渗透成功,如下所示。

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

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

相关文章

SQLiteStudio - 免费开源、轻量高效,跨平台的 SQLite 数据库管理工具,代替 Navicat for SQLite

管理 SQLite 数据库就用这款软件&#xff0c;真的早该摒弃破解和盗版的 Navicat 了。 SQLiteStudio 是一款专注于管理 SQLite 数据库 的桌面软件&#xff0c;用于浏览和编辑 SQLite 数据库文件。软件的作者是来自波兰的开发者 Paweł Salawa&#xff0c;他是一位拥有 20 年 Ja…

Prometheus + Grafana + Cadvisor:构建高效企业级服务监控体系

在现代软件开发和运维领域&#xff0c;容器化技术的应用越来越广泛&#xff0c;其中 Docker 作为最受欢迎的容器化解决方案之一&#xff0c;其容器的监控管理变得至关重要。本文将详细介绍如何使用 cadvisor、Prometheus 和 Grafana 来监控 Docker 容器的状态。 一、安装镜像 …

WEBSTORM前端 —— 第3章:移动 Web —— 第2节:空间转换、转化

目录 一、空间转换 1.空间转换 2.空间转换 – 平移 3.视距 perspective 4.空间 – 旋转 ③空间旋转——Z轴代码与效果视频 ④空间旋转——X轴代码与效果视频 ⑤空间旋转——Y轴代码与效果视频 5.立体呈现 – transform-style 案例 – 3D 导航 6.空间转换 – 缩放 …

Java研学-MongoDB(一)

一 MongoDB 简介 MongoDB是一种高性能、开源的NoSQL数据库&#xff0c;采用面向文档的存储模型&#xff0c;以BSON&#xff08;Binary JSON&#xff09;格式存储数据&#xff0c;具有灵活的数据模型、强大的扩展性和丰富的功能特性&#xff0c;广泛应用于各类现代应用程序的数据…

【AI面试秘籍】| 第25期:RAG的关键痛点及解决方案深度解析

今天我们来聊聊大模型领域一个非常火热的技术——RAG&#xff08;Retrieval Augmented Generation&#xff09;。RAG通过引入外部知识库&#xff0c;有效地缓解了大型语言模型&#xff08;LLM&#xff09;在处理知识密集型任务时可能出现的幻觉、知识过时等问题。然而&#xff…

服务器带宽线路的区别(GIA、CN2、BGP、CMI等)

服务器带宽线路的区别&#xff08;GIA、CN2、BGP、CMI等&#xff09; 一、BGP线路 1. 定义与技术特点 BGP&#xff08;Border Gateway Protocol&#xff0c;边界网关协议&#xff09;是一种用于不同自治系统&#xff08;AS&#xff09;之间交换路由信息的协议&#xff0c;属…

ppt一键制作:ai自动生成PPT,便捷高效超级精美!

深夜的台灯下&#xff0c;你对着杂乱的 PPT 内容反复刷新灵感&#xff0c;鼠标在字体、配色选项间来回穿梭&#xff0c;好不容易拼凑出的页面&#xff0c;却总透着浓浓的 “廉价感”&#xff1b;汇报在即&#xff0c;逻辑混乱的大纲改了又改&#xff0c;每一页感觉合适又不搭&a…

Maven(黑马)

Maven 是一个强大的项目管理和构建自动化工具&#xff0c;主要用于 Java 项目的构建、依赖管理和文档生成。它通过使用 POM&#xff08;Project Object Model&#xff09;文件来管理项目的配置和依赖关系&#xff0c;从而实现项目的自动化构建和管理。以下是 Maven 的一些核心概…

将手机网络经USB数据线和本地局域网共享给华为AP6050DN无线接入点

引言 由于最近装毕的新家所在的小区未能及时通宽带,于是家中各类无线设备如何上网就成了首要要解决的问题。 鉴于家中要联网的设备多、类型杂、支持频段也不一,总是开手机热点不是回事儿,于是就想着把手机网络引至华为AP6050DN无线接入点中,让家中所有的无线设备都能快速高…

【论文解读】Deformable DETR | Deformable Transformers for End-to-End Object Detection

论文地址&#xff1a;https://arxiv.org/pdf/2010.04159 代码地址&#xff1a;https://github.com/fundamentalvision/Deformable-DETR 摘要 DETR最近被提出&#xff0c;旨在消除物体检测中许多手工设计的组件的需求&#xff0c;同时展示出良好的性能。然而&#xff0c;由于T…

机器学习----决策树

一、决策树简介 from sklearn.tree import DecisionTreeClassifier from sklearn.tree import plot_tree 决策树是一种树形结构&#xff0c;树中每个内部节点表示一个特征上的判断&#xff0c;每个分支代表一个判断结果的输出&#xff0c;每个叶子节点代表一种分类结果。 决…

LabVIEW输血袋字符智能检测系统

针对医疗行业输血袋字符检测需求&#xff0c;基于 LabVIEW 图形化开发平台与基恩士&#xff08;KEYENCE&#xff09;机器视觉硬件&#xff0c;构建高精度、高可靠性的字符在线识别系统。通过选用基恩士工业相机、光源及 NI 数据采集设备等硬件&#xff0c;结合 LabVIEW 强大的图…

理解频域滤波

1 频域滤波基础 对一幅数字图像&#xff0c;基本的频率滤波操作包括&#xff1a; 1&#xff09;将图像变换到频率域&#xff1b; 2&#xff09;根据需要修改频率域数值&#xff1b; 3&#xff09;反变换到图像域。 使用公式表达为 &#xff0c; H(u,v) 为滤波器&#xff08;滤…

Telerik生态整合:Kendo UI for Angular组件在WinForms应用中的深度嵌入(一)

Telerik DevCraft包含一个完整的产品栈来构建您下一个Web、移动和桌面应用程序。它使用HTML和每个.NET平台的UI库&#xff0c;加快开发速度。Telerik DevCraft提供完整的工具箱&#xff0c;用于构建现代和面向未来的业务应用程序&#xff0c;目前提供UI for ASP.NET MVC、Kendo…

古老的传说(Player、Stage)是否还能在蓝桥云课ROS中重现-250601(失败)

古老的传说是否还能在蓝桥云课ROS中重现-250601 经典复现何其难&#xff0c;百分之二就凉凉&#xff01; 古老的传说 那是很久很久以前的故事……上个世纪的一个机器人项目 Player、Stage这个项目最早起源于1999年&#xff0c;由美国南加州大学机器人研究实验室开发&#xff0…

InfluxQL 数据分析实战:聚合、过滤与关联查询全解析

InfluxQL 作为时序数据库的专用查询语言&#xff0c;在处理时间序列数据时展现出独特优势。本文深入探讨 聚合计算、数据过滤和跨测量关联 三大核心操作&#xff0c;通过真实代码示例展示如何从海量时序数据中提取关键洞察。文中涵盖从基础平均值计算到复杂多维度分析的完整流程…

Qt font + ToolTip + focusPolicy + styleSheet属性(5)

文章目录 font属性API接口直接在Qt Designer编辑图形化界面通过纯代码的方式修改文字属性 ToolTip属性API接口代码演示 focusPolicy属性概念理解API接口通过编辑图形化界面演示 styleSheet属性概念理解通过编辑图形化界面展示代码 图形化界面的方式展示&#xff08;夜间/日间模…

十三: 神经网络的学习

这里所说的“学习”是指从训练数据中自动获取最优权重参数的过程。为了使神经网络能进行学习&#xff0c;将导入损失函数这一指标。而学习的目的就是以该损失函数为基准&#xff0c;找出能使它的值达到最小的权重参数。为了找出尽可能小的损失函数的值&#xff0c;我们将介绍利…

LeetCode 高频 SQL 50 题(基础版)之 【聚合函数】部分

题目&#xff1a;620. 有趣的电影 题解&#xff1a; select * from cinema where description !boring and id%21 order by rating desc题目&#xff1a;1251. 平均售价 题解&#xff1a; select p.product_id product_id,round(ifnull(sum(p.price*u.units)/sum(u.units),0)…

【AI学习】检索增强生成(Retrieval Augmented Generation,RAG)

1&#xff0c;介绍 出自论文《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》&#xff0c;RAG是权宜之计&#xff0c;通过RAG将问题简单化、精简化、剔除噪声&#xff0c;让LLM更容易理解、生成内容。RAG&#xff1a;检索增强技术检索生成&#xff08;重…