浅谈SQL注入注释符#和--+的运用场景和区别
在之前打DVWA靶场的时候我们就说明和运用过sql注入的注释符,但是最近我在打一个靶场的时候遇到了一个问题,后面经过查找资料和学习,也是增长了一点小知识。
这是一个针对sql注入的靶场,有很多等级划分,等于越高难度就越高,当时也是按着之前的经验,对地址栏进行sql语句的注入,测试是否存在注入点,因为之前注入语句的最后我都习惯使用#符号对后面的内容进行注释,但是在这就出现了报错,我细查了语句也没有语法错误,后面看了一下其他网友的分享,他们后面使用的是–+的符号,我尝试了一下也是能够顺利得出我要的信息。
#和–+虽然在sql语法中都是作为注释的作用,但是在sql注入的使用中也是存在区别和不同的应用场景,因此下面我们讲解一下。
一、作用与差别
符号 | - -+或- - | # |
---|---|---|
注释类型 | SQL 标准注释 | MySQL 特有注释 |
URL 编码 | - -%20(空格编码) | %23 |
适用数据库 | MySQL、Oracle、SQL Server、PostgreSQL | 主要 MySQL |
浏览器处理 | 无特殊含义 | # 可能被当作 URL 锚点 |
二:总结
从上面的表格我们能够清楚的对两种注释符号进行对比,#符号是mysql数据库特有的注释符,而- -则可以被大部分的数据库都可以进行识别,且- -与语句本体之间需要通过空格进行间隔,因此在我们构造注入语句时一般会采用- -+或- - %20对后面的语句进行注释。在往后进行sql手工注入时应该要习惯采用- -+,假如在- -+失效且数据库版本是mysql的情况下,我们再尝试使用#或者其他的注释符号进行测试。