Low等级的SQL注入:
输入:1' union select 1,group_concat(table_name) from information_schema.tables where table_schema = 'dvwa' #
解释(下面的和作业没有任何关系,只是我个人对这个东西的理解):
这里其实是一种SQL注释,当我们输入1的时候会出现
这里我们查看数据库中发生了什么
首先我们下载NAVICAT,这个有14天的试用期,我们可以不注册直接先试用
下载链接:Navicat | 产品
然后链接到我们的phpstudy的数据库中,注意选择mysql,因为phpstudy里面的数据库是MYSQL类型的,输入自己的密码,链接名称可以随便写,密码是之前我们注册DVWA是弄的,我这边是改成了root。
接下来我们新建查询,在新建的查询里面输入两个命令
SHOW VARIABLES LIKE "general_log%"
SET GLOBAL general_log = 'ON'
我们先选中SET GLOBAL general_log = 'ON' 点击运行来运行这个命令打开我们的日志
接下来我们和上面一样先选中然后运行SHOW VARIABLES LIKE "general_log%"
可以看到我们的日志已经成功打开了
然后我们打开日志文件我这边是CHENXUANDIANNAO.log,这个CHENXUANDIANNAO是我电脑名称。
可以看到它里面有怎么一段话 SELECT first_name, last_name FROM users WHERE user_id = '1'
这里我们需要明白 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#这段代码
union select开始一个新的SQL查询。union操作符允许将两个结果集合并起来,所以攻击者可以将他们的查询结果插入到原始查询的结果中。
1,group_concat(table_name): 这部分是攻击者的查询,选择了两个字段:
- 第一个字段是1,这是为了匹配原始查询的字段数量。
- 第二个字段是group_concat(table_name),这个函数会将所有表名连接成一个字符串,使用逗号分隔。
from information_schema.tables: 这部分指定了数据来源。information_schema.tables是一个系统表,包含了当前数据库中所有表的信息。
where table_schema=database(): 这个条件确保只获取当前数据库的表名。database()函数返回当前数据库的名称。
#: 这是SQL注释符号,用于注释掉之后的SQL代码,防止语法错误
所以我们输入
1' union select 1,group_concat(table_name) from information_schema.tables where table_schema = 'dvwa' #
便可以完成目标了,这就是一个简单的SQL注入,完成一些开发者没想到的操作