注释符
MYSQL注释符介绍:
MYSQL有三种注释符,分别是单行注释符:#、–空格(就是横杠横杠空格),和多行注释符:/**/
MYSQL注释符测试:
执行的SQL语句:
select name from usertest where id=1 – 注释测试
执行的sql语句:
select name from usertest where id=1 #注释测试
执行的sql语句:
select name from usertest where id=1 /注释测试/
测试结果:三种注释符都达到了注释的目的,使得注释符后面的字符不参与SQL语句,仅做到注解的作用。
\
下面展示,在Sqli-Labs靶场上实际操作时的注释符与MYSQL数据库内部执行时的注释符的不同。
1、首先在将phpstudy_pro\WWW\sqllab\Less-1\index.php靶场第一关的源码改一下,添加如下图内容。
目的:展示出靶场后台实际执行的SQL语句,方便我们分析。
2.1、从下图中可以看到,当我们使用#做注释符时,界面报错了,从报错信息中得到,后台执行的SQL语句中并没有#注释符的出现,我们再利用burpsuit拦截上传的数据,也能看到,上传的SQL语句中并没有#注释符。
造成原因:#注释符,在URL中通常用于表示书签或者锚点,#号连接着的后面的字符都不会被解析。
Less-1/?id=-1' union select 1,database(),3
2.2、若想要在URL中要使用#注释符,可以使用其编码值%23来代替。结果如下图所示。
Less-1/?id=-1' union select 1,database(),3 %23
3、从下图中可以看到,当我们使用–空格做注释符时,界面报错了,从报错信息中得到,后台执行的SQL语句中只有–后面并没有跟着一个空格的,我们再利用burpsuit拦截上传的数据,也能看到,上传的SQL语句中只有–后面并没有跟着一个空格。
造成原因:空格:URL在编码的过程中,不会编码末端的空格,个人认为可能是防止用户误操作输入了无意义的空格。在URL中末端要使用空格符的话,可以使用+号或者编码值%20来代替。在URL中+号就表示空格。
Less-1/?id=-1' union select 1,database(),3 -- (就是横杠横杠空格)
3.1、若想要在URL中要使用–空格作为注释符,可以使用–+来代替。结果如下图所示。
Less-1/?id=-1' union select 1,database(),3 --+
3.2、若想要在URL中要使用–空格作为注释符,可以使用–%20来代替。结果如下图所示。
Less-1/?id=-1' union select 1,database(),3 --%20
分析与总结:
#:在URL中通常用于表示书签或者锚点,#号连接着的后面的字符都不会被解析。在URL中要使用#号,可以使用编码值%23来代替。
空格:URL在编码的过程中,不会编码末端的空格,个人认为可能是防止用户误操作输入了无意义的空格。在URL中末端要使用空格符的话,可以使用+号或者编码值%20来代替。在URL中+号就表示空格。
参考链接:
https://www.cnblogs.com/impulse-/p/13184023.html