pikachu靶场通关笔记06 XSS关卡02-反射型POST
目录
一、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 的区别如下。
对比维度 | 反射型 XSS | POST 型 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.1 | POST /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值,渗透成功,如下所示。
相关文章:

pikachu靶场通关笔记06 XSS关卡02-反射型POST
目录 一、XSS 二、反射型XSS 三、POST型报文 四、GET型与POST型区别 五、代码审计 五、渗透实战 1、渗透方法1 2、渗透方法2 本系列为通过《pikachu靶场通关笔记》的XSS关卡(共10关)渗透集合,通过对XSS关卡源码的代码审计找到XSS风险的真实原因&…...

SQLiteStudio - 免费开源、轻量高效,跨平台的 SQLite 数据库管理工具,代替 Navicat for SQLite
管理 SQLite 数据库就用这款软件,真的早该摒弃破解和盗版的 Navicat 了。 SQLiteStudio 是一款专注于管理 SQLite 数据库 的桌面软件,用于浏览和编辑 SQLite 数据库文件。软件的作者是来自波兰的开发者 Paweł Salawa,他是一位拥有 20 年 Ja…...

Prometheus + Grafana + Cadvisor:构建高效企业级服务监控体系
在现代软件开发和运维领域,容器化技术的应用越来越广泛,其中 Docker 作为最受欢迎的容器化解决方案之一,其容器的监控管理变得至关重要。本文将详细介绍如何使用 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数据库,采用面向文档的存储模型,以BSON(Binary JSON)格式存储数据,具有灵活的数据模型、强大的扩展性和丰富的功能特性,广泛应用于各类现代应用程序的数据…...

【AI面试秘籍】| 第25期:RAG的关键痛点及解决方案深度解析
今天我们来聊聊大模型领域一个非常火热的技术——RAG(Retrieval Augmented Generation)。RAG通过引入外部知识库,有效地缓解了大型语言模型(LLM)在处理知识密集型任务时可能出现的幻觉、知识过时等问题。然而ÿ…...
OpenGL、GLUT、freeGLUT 与 GLFW 的区别
在图形编程中,OpenGL 是最核心的渲染 API,但仅靠它本身无法完成窗口创建、事件处理等任务。因此,开发者通常会借助一些辅助库来简化开发流程。常见的库包括 GLUT、freeGLUT 和 GLFW。 本文将详细讲解这些技术之间的区别,并提供每…...

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

ppt一键制作:ai自动生成PPT,便捷高效超级精美!
深夜的台灯下,你对着杂乱的 PPT 内容反复刷新灵感,鼠标在字体、配色选项间来回穿梭,好不容易拼凑出的页面,却总透着浓浓的 “廉价感”;汇报在即,逻辑混乱的大纲改了又改,每一页感觉合适又不搭&a…...
多方法解决MNIST数字识别
全连接层 import torch from torchvision import datasets, transforms import torch.nn as nn import torch.optim as optim from tqdm import tqdm # 用于进度条显示 import os# 定义数据预处理(标准化+Tensor转换) transform = transforms.Compose([transforms.ToTensor…...

Maven(黑马)
Maven 是一个强大的项目管理和构建自动化工具,主要用于 Java 项目的构建、依赖管理和文档生成。它通过使用 POM(Project Object Model)文件来管理项目的配置和依赖关系,从而实现项目的自动化构建和管理。以下是 Maven 的一些核心概…...
CppCon 2014 学习:ODB, Advanced Weapons and Tactics
#Schema Evolution 是数据库持久化技术中的一个重要概念,特别是在使用像 ODB 这样的 C ORM 框架时。 展示的代码片段正是 ODB 支持的**模式演化(Schema Evolution)**语法示例。 什么是 Schema Evolution? Schema Evolution 指的…...

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

【论文解读】Deformable DETR | Deformable Transformers for End-to-End Object Detection
论文地址:https://arxiv.org/pdf/2010.04159 代码地址:https://github.com/fundamentalvision/Deformable-DETR 摘要 DETR最近被提出,旨在消除物体检测中许多手工设计的组件的需求,同时展示出良好的性能。然而,由于T…...
android 图片背景毛玻璃效果实现
图片背景毛玻璃效果实现 1 依赖 // Glide implementation("com.github.bumptech.glide:glide:4.16.0") kapt("com.github.bumptech.glide:compiler:4.16.0") implementation("jp.wasabeef:glide-transformations:4.3.0") 2 布局<com.googl…...

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

LabVIEW输血袋字符智能检测系统
针对医疗行业输血袋字符检测需求,基于 LabVIEW 图形化开发平台与基恩士(KEYENCE)机器视觉硬件,构建高精度、高可靠性的字符在线识别系统。通过选用基恩士工业相机、光源及 NI 数据采集设备等硬件,结合 LabVIEW 强大的图…...
数据结构测试模拟题(3)
1、两个有序链表序列的合并 #include<bits/stdc.h> using namespace std;struct node{int num;node* next; };// 创建链表 node* CreatList(){int x;node *head new node(); // 创建头节点head->next NULL;node *tail head; // 尾指针初始指向头节点while…...

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

Telerik生态整合:Kendo UI for Angular组件在WinForms应用中的深度嵌入(一)
Telerik DevCraft包含一个完整的产品栈来构建您下一个Web、移动和桌面应用程序。它使用HTML和每个.NET平台的UI库,加快开发速度。Telerik DevCraft提供完整的工具箱,用于构建现代和面向未来的业务应用程序,目前提供UI for ASP.NET MVC、Kendo…...

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

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

Qt font + ToolTip + focusPolicy + styleSheet属性(5)
文章目录 font属性API接口直接在Qt Designer编辑图形化界面通过纯代码的方式修改文字属性 ToolTip属性API接口代码演示 focusPolicy属性概念理解API接口通过编辑图形化界面演示 styleSheet属性概念理解通过编辑图形化界面展示代码 图形化界面的方式展示(夜间/日间模…...
APM32主控键盘全功能开发实战教程:软件部分
APM32主控键盘全功能开发实战教程:从零基础到RGB矩阵高级玩法 🔥 前言:随着机械键盘DIY风潮兴起,国产APM32芯片因其高性价比和与STM32的完美兼容性,正逐渐成为键盘开发主控的新宠。本文将手把手带你从最基础的环境搭建…...
docker 部署 gin
编译与执行 ✅「静态编译语言 生成原生二进制文件 操作系统直接执行」 Go 语言之所以在工程部署场景中大受欢迎的核心优势:它直接编译成原生二进制可执行文件(binary executable)。 🔧 Go 是“静态编译语言”(编译型…...

十三: 神经网络的学习
这里所说的“学习”是指从训练数据中自动获取最优权重参数的过程。为了使神经网络能进行学习,将导入损失函数这一指标。而学习的目的就是以该损失函数为基准,找出能使它的值达到最小的权重参数。为了找出尽可能小的损失函数的值,我们将介绍利…...
Qt OpenGL编程常用类
Qt提供了丰富的类来支持OpenGL编程,以下是常用的Qt OpenGL相关类: 一、QOpenGLWidget 功能:用于在 Qt 应用程序中嵌入 OpenGL 渲染的窗口部件。替代了旧版的QGLWidget。提供了OpenGL上下文和渲染表面。 继承关系:QWidget → QOpenGLWidget 属性与方法: QOpenGLWidget 属…...
数据结构 --- 顺序表
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组上完成数据的增删查改 顺序表分为:静态顺序表、动态顺序表 一.静态顺序表 #define N 7 typedef int SLDataType;typedef struct Seqlist {…...
MySQL高级查询技巧:分组、聚合、子查询与分页【MySQL系列】
本文将深入探讨 MySQL 高级查询技巧,重点讲解 GROUP BY、HAVING、各种聚合函数、子查询以及分页查询(LIMIT 语法)的使用。文章内容涵盖实际应用中最常见的报表需求和分页实现技巧,适合有一定 SQL 基础的开发者进一步提升技能。 一…...
无人机多旋翼倾转动力测试系统-适用于(eVTOL开发、缩比模型测试、科研教育)
在倾转旋翼无人机、垂直起降(VTOL)及混合动力飞行器的研发中,动力系统在垂直-水平模式切换时的动态性能至关重要。LY-QZ-F4多旋翼倾转动力测试系统是全球首款专为倾转四旋翼设计的多自由度动力测试平台,融合高精度传感、动态倾转模…...