sql注入中关于注释的一点探索

Posted 老夏家的云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql注入中关于注释的一点探索相关的知识,希望对你有一定的参考价值。

在sql-labs游戏中,经常使用--+放在最后注释多余部分,而mysql中的注释符为#-- 却不能直接使用,以前没学过mysql,一直不理解,也不知道+号的作用,今天有时间特地探索了一下,算是搞明白了其中的原因。

sql-labs闯关游戏资源及介绍见此:https://github.com/Audi-1/sqli-labs


第一关示例:

在源代码中加入下面两行,使网页能回显我们输入的有效输入和执行的mysql语句,方便分析:

技术分享图片
技术分享图片
第一关正常地址栏传参如下:
技术分享图片
技术分享图片

猜列数时的使用payload:
技术分享图片
屏幕显示有效输入为:
技术分享图片
这里尝试使用#号或者--
使用#号
技术分享图片
技术分享图片
发现执行的sql语句中没有#

原因是url中#号是用来指导浏览器动作的(例如锚点),对服务器端完全无用。所以,HTTP请求中不包括#

将#号改成url的编码%23就可以了
技术分享图片
技术分享图片
使用--
技术分享图片
技术分享图片
使用--+
技术分享图片
技术分享图片

对比上面--的效果,这里发现号在语句中变成了空格。用来和后面的单引号分隔开,将后面的语句注释。

了解原理后便知道了--无法使用的原因,是因为--与后面的单引号连接在一起,无法形成有效的mysql语句。

在mysql中使用这个语句分析原因,输入后回车显示分号没有闭合
技术分享图片
技术分享图片

所以在注入时我们可以使用--‘来完成sql语句
技术分享图片

成功执行!
技术分享图片

























以上是关于sql注入中关于注释的一点探索的主要内容,如果未能解决你的问题,请参考以下文章

CAPL脚本中关于 局部变量 容易忽略的一点

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?

sql注入的一点学习

SQL注入-基础

回头探索JDBC及PreparedStatement防SQL注入原理

SQL注入bypass学习