SQL注入二
0x00 GET注入
0000 找出合适的闭合SQL语句
1、确定传入参数的SQL语句包裹符号
找出闭合的方法,以sqli_labs中的less1-less4为例子
less1中的报错提示语句为
less2中的报错语句为
less3中的报错语句为
less4中的报错语句为
最左边与最右边的两个单引号是报错语句引用SQL语句的部分不属于SQL语句里的一部分,单引号里面的内容分别是
less1: '1'' LIMIT 0,1 |
去掉输入的内容,得出大概的SQL语句
less1: select ...... where id = 'id' LIMIT 0,1 |
2、得出闭合语句
less1: 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() --+ |
通过查询可知在该数据库下有四个表分别为emails
、referers
、uagents
、users
,现在查询users
表中的字段名
id=0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+ |
查询到users
表中的字段有三个,下一步查询username
与password
中的信息,在这之前的查询都是在汇总的
数据库information_schema
中查询的,现在目标明确是要users
表中的usrename
与password
字段里的数据,可以直接进行查询而不用到information_schema
中查询(该数据库也不会存储字段的数据内容)
id=0' union select 1,group_concat(username,':',password),3 from users --+ |
less1-less4的注入就此结束,数据库中的所有信息都能获取到!