SQL字符型注入
简介
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,欺骗后台执行。