我们依然用pikachu测试平台来练习SQL字符型漏洞的测试
上图我们随便输入了一个名字,网页会显示UID为3,和邮箱信息,那我们输入一个不存在的username,会发现
网页会显示“您输入的username不存在,请重新输入”,而且我们会发现它的请求是在uil中提交的,我们依然按照上次的逻辑判断它对数据库提交的请求应该是这样的
select 字段1,字段2 from 表名 where username='kobe'
这时候我们发现,我们提交的请求被双引号括起来了,顺便提一下,基于字符型的SQL注入即存在SQL注入漏洞的URL参数为字符串类型(需要使用单引号表示)。
字符型SQL注入的关键—–单引号的闭合
mysql数据库对于单引号的规则如下:
- 单引号必须成对出现,否则数据库就会报错。
- 如果两个单引号之间内容为空,数据库自动忽略。
在这里如果我们还想用kobe or 1=1 它是不会成立的因为,字符型SQL是带有单引号的,or 1=1会被当成username被一起处理掉,而这个用户名显然是不存在的,所以他还是会显示“您输入的username不存在,请重新输入”,并没有得到我们想要的结果
select 字段1,字段2 from 表名 where username='kobe or 1=1'
解决办法很简单,前面的双引号我们用一个双引号给解决掉,后面的双引号我们用#给注释掉
kobe' or 1=1#
它整段代码就会变成select 字段1,字段2 from 表名 where username='kobe' or 1=1#'
接下来我们用提交一下试试。
发现我们成功地将所有信息套了出来。