在sql-labs游戏中,经常使用
--+放在最后注释多余部分,而mysql中的注释符为#和--却不能直接使用,以前没学过mysql,一直不理解,也不知道+号的作用,今天有时间特地探索了一下,算是搞明白了其中的原因。
sql-labs闯关游戏资源及介绍见此:https://github.com/Audi-1/sqli-labs
第一关示例:
在源代码中加入下面两行,使网页能回显我们输入的有效输入和执行的mysql语句,方便分析:


第一关正常地址栏传参如下:

猜列数时的使用payload:
屏幕显示有效输入为:
这里尝试使用#号或者–
使用#号

发现执行的sql语句中没有#号
原因是url中#号是用来指导浏览器动作的(例如锚点),对服务器端完全无用。所以,HTTP请求中不包括#
将#号改成url的编码%23就可以了

使用--

使用--+

对比上面–的效果,这里发现+号在语句中变成了空格。用来和后面的单引号分隔开,将后面的语句注释。
了解原理后便知道了--无法使用的原因,是因为--与后面的这个单引号连接在一起,无法形成有效的mysql语句。
在mysql中使用这个语句分析原因,输入后回车显示分号没有闭合

所以在注入时我们除了--+外,也可以使用--'来完成注入语句
成功执行!
版权声明:本文为xiayun1995原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。