MySQL注入类型的判断方法与原理解析(演示sql语句执行命令)

文章目录

在进行SQL注入的时候,我们在确定注入点之后,第一步要做的事情就是判断注入类型,注入类型分为字符型与数字型,确定好注入类型之后,才能继续接下来的sql注入。

以下口诀适用于具有数据回显的情况,如果只有页面变化,没有数据回显,就需要使用布尔盲注,如果页面没有任何变化就需要利用时间盲注判断,这里不对布尔盲注与时间盲注进行讲解,只讲述最基础的具有数据回显的情况。

结论

牢记以下结论,三步即可判断出注入类型,具体原理后面会分析:

  1. 判断是数字型还是字符型:通过?id=1 and 1=2判断,如果显示不正常,说明是数字型,如果显示正常,就是字符串型,就需要进行下面的步骤继续判断。
  2. 判断是什么符号的字符型:
    • 单引号测试:通过?id=1'观察回显
    • 双引号测试:通过?id=1"观察回显
  3. 判断出字符型:如果哪个符号回显是报错信息,则表示是哪个符号的字符型,接着使用对应符号闭合之后进行SQL注入即可

原理

1.假设是数字型注入

输入?id=33 and 1=2之后,在sql语句中是这样显示的

select * from cms_article where id=33 and 1=2;

id=33的条件是可以查到正常内容的,但是加上 and 1=2 之后,就不会显示正常内容,说明我们的加上的and 1=2被mysql解析了,才不会显示正常的内容。所以可以通过输入?id=1 and 1=2观察显示情况,从而反推出是否是数字型注入,如果不是数字型注入,那必定是字符型注入了,所以就需要进行下一步判断:究竟是单引号还是双引号的字符。

2.假设是双引号字符型注入

1.我们输入?id=1'进行单引号测试之后,在sql语句中是这样显示的

select * from cms_article where id="33'";

image-20230824104018918

通过结果我们可以知道,mysql将我们输入的单引号忽略了,只取了我们传入的33,从而查出了数据。经过多次尝试,我将单引号换成其他标点符号,都能正常查出数据。

因此可以得出结论:mysql在查询条件为字符串的时候,遇到第一个符号就会停止搜索,只会取第一个符号之前的内容,并且正常显示,如果查询条件为数字,那么遇到符号就会报错了,如图:

image-20230824104539604

所以我们可以借助这个特性,直接判断出字符型注入。

2.我们输入?id=1"进行双引号测试之后,在sql语句中是这样显示的:

select * from cms_article where id="33"";

可以看到我们输入的双引号闭合了sql语句中的第一个引号,然后引发了如下图报错:

image-20230824104757351

最终结论:如果我们在确定这是字符型注入的时候,使用双引号如果引发了报错,说明就是双引号的字符型。

3.单引号字符的原理和双引号字符原理是一模一样的

猜你喜欢

转载自blog.csdn.net/weixin_46367450/article/details/132470165
今日推荐