基于函数报错的sql漏洞查询

基于报错的信息获取

简单介绍函数updatexml():

updatexml(xml_document,xpath_string,new_value):
其中第一个参数的document为文件名;第二个参数前面的xpath是xml中查询语言(至于更详细的xpath语法,读者可以自行百度),简单来说就是对第一个参数中的文件进行定位的,string代表格式;第三个参数表示重新定义查找到的数据,也就是说这里填写的是要修改的新的值。
注意!!!第二个参数中xpath所定位的值必须是有效的,如果无效,那么系统会报语法错误。如果在这里我们输入的是一个表达式,系统会先执行表达式,然后将输入的的表达式作为错误结果的内容报出来。updatexml函数注入正是基于此来进行的。

那么整个函数updatexml()就起到了更换或者说修改选择到的文件中的数据的值的这样一个作用。

必须要知道的是,在使用函数报错寻找注入漏洞这个方法时,有一个前提条件。那就是系统必须会报错并展示出来,如果系统隐藏了报错内容,或者说无论什么错误都报出同样的输入错误提示的话。那么函数报错也就无从谈起。

接下来,在漏洞注入平台上给读者进行演示。
首先确定系统是否会报错在这里插入图片描述在这里插入图片描述
根据结果可以知道这个平台确实是有报错返回的。那么就有了函数报错的前提条件。

然后构造payload,在这里我输入的是
kobe’ and updatexml(1,version(),0)
当然这里面的1是错误的,因为它在后台根本不存在。第二个参数写的是bersion()(第二个参数值可以是表达式,后台会将这个表达式执行,然后再将执行结果作内容报错出来),在这里插入图片描述
报错结果在这里插入图片描述

那么为什么错误值是“.53”呢,这其实并不是完整的版本号。其实这是系统故意吃掉的,它并不会报出完整的版本号。那如何使它完整的报出来呢?

在这之前再介绍一个函数
concat():
concat(str1,str2,…)
返回结果为连接参数产生的字符串。如有任何一个参数为NULL,则返回值为NULL。如果所以参数为非二进制,则返回为非二进制。如有一个参数为二进制,则返回结果为二进制。

介绍完concat()之后,我们再进行payload,这次我们输入
kobe’ and updatexml(1,concat(0x7e,version()),0) #
(0x7e为‘~’的十六进制)
在这里插入图片描述
结果在这里插入图片描述
可以看见版本号出来了,基于这样的原理,我们看一下数据库的名称。在这里插入图片描述
结果在这里插入图片描述
得到了数据库名,根据之前说过的知识,当然可以知道数据库中的信息
这里我们输入kobe’ and updatexml(0x7e,(select table_name from information_schema.tables where table_schema=‘pikachu’),o) #
在这里插入图片描述
结果在这里插入图片描述
系统说返回超过了一行,没关系,我们可以对返回结果做限制。
在语句后添加limit 0,1
作用就是返回语句从0位置开始取,取够1行。在这里插入图片描述
结果在这里插入图片描述
如果要的到第二个表的名称,改的limit 1,1在这里插入图片描述
结果在这里插入图片描述
完成

猜你喜欢

转载自blog.csdn.net/weixin_44720762/article/details/89067875
今日推荐