SQL字符型注入

臭大佬 2021-08-22 18:13:20 397
简介 SQL字符型注入

SQL字符型注入

以pikachu靶场上的字符型注入漏洞为例,根据上一篇《SQL漏洞注入》的思路,我们直接构造如下sql:

select 字段1,字段2 from 表名 where username= 's' or 1=1;

为了方便查看,这边直接在源代码加了一句打印sql,

我们输入s or 1=1,


这里直接把s or 1=1用引号引起来作为一个参数了,这不是我们想要的结果,再次尝试输入 s' or 1=1 ,查看结果

mysql数据库对于单引号的规则如下:

单引号必须成对出现,否则数据库就会报错。
如果两个单引号之间内容为空,数据库自动忽略。

这时候报错了,由这个提示可以看出,是sql语句单引号没有闭合,可以猜想语句大致如下:

select 字段1,字段2 from 表名 where username= 's' or 1=1 ';

我们可以巧用注释来把最后那个单引号注释掉,输入s' or 1=1#,sql语句如下:

select 字段1,字段2 from 表名 where username= 's' or 1=1#;

执行查看结果:

判断输入是否参与数据库的逻辑运算

方式一

测试单引号或者双引号,查看是否有报错信息。如出现类似如下提示,表明存在攻击点。

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''''' at line 1

方式二

1=1为真,1=2为假,我们在我们输入中拼接上这两个字符串,如果结果有变化,说明输入参与了数据库逻辑运算,那就存在攻击的可能,

测试

以上面的栗子,我们分别输入s or 1=1#'s or 1=2#,发现1=2不出结果,说明输入有参加逻辑运算。

总而言之,不管是哪个一种类型的SQL,我们的做法就是对SQL中的各种类型的输入进行闭合测试,构造合法SQL,欺骗后台执行。