SQL报错注入

原理

一些网页在后台执行用户传入的参数时会对SQL语句进行检测,如果发现语句出现问题,就像MySQL环境的报错信息一样,会提示错误点回显到页面上,我们就可以构造错误的SQL语句,触发数据库报错,从而使我们需要的回显在报错信息中

报错注入核心函数:updatexml()

语法格式:
UPDATEXML (XML_document,XPath_string,new_value);
第一个参数XML_document是字符串string格式,为XML文档对象的名称
第二个参数XPath_string(Xpath格式字符串)
第三个参数new_value,string格式,替换查找到的符合条件的数据
作用
将xml对象中找到符合xpath语法要求的内容替换成第三个参数的内容
并且当第二个参数xpath语法出现错误的时候,将会在报错中回显出查询的内容

如果要获取数据库名称可以构造

?id=1 and updatexml(1,concat(0x7e,database()),3)

0x7e 等价于 ~,也可以换成其他的十六进制数代替,只要不符合xpath格式就行,我们就可以利用这个特性,将查询语句和0x7e拼接在一起,造成报错,将需要的结果回显到页面上

函数限制

updatexml函数的报错内容长度不能超过32个字符,常用的解决方式有:

  1. limit分页查询

  1. substr截取字符

SELECT SUBSTR(需要提取字符的字段,起始位置,需要返回的字符长度)
如省略返回字符数则视为返回剩余全部文本
当第二个参数为正数则从指定位置开始
负数就从字符串结尾的指定位置开始
  1. mid截取字符

SELECT MID(需要提取字符的字段,起始位置,需要返回的字符数)如省略返回字符数则视为返回剩余全部文本

CTFHUB技能树——SQL报错注入 解题步骤

  1. 判断注入点发现页面会回显报错信息,判断为报错注入(目前知识欠缺只知道靠这种方法判断),用updatexml函数获取当前数据库信息。

  1. 利用concat函数拼接字符串,构造updatexml函数第二个参数值错误格式,造成报错回显信息

(这里使用union select联合查询可以查询出数据,使用and连接也可以查询出数据,但是大多数文章中都是使用的 and其中有什么区别现在并不知晓。)

  1. 下一步构造的语句就跟以往没什么区别,利用语句爆出数据表名利用两个0x7e其实也有好处,因为updatexml函数长度只有32,数据多了会出现显示不完全的情况,利用两个0x7e(字符编码)就可以判断数据是否完整。

  1. 构造语句,查询可疑表flag中包含的字段

  1. 查询flag字段中包含的数据,发现显示不完全,可以利用函数substr,mid或者limit

  1. 这里选择substr函数截取字符串,从第3个字符开始截取,后面随便输入,自行补齐获取完整flag

参考文献

https://blog.csdn.net/wangyuxiang946/article/details/123416521

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值