我有MySQL 5.1.58,并且执行了以下命令以使用sqlmap对数据库进行指纹识别
python sqlmap.py -d "mysql://root:password@localhost:3306/northwind" --fingerprint'
输出是
[12:26:35] [INFO] the back-end DBMS is MySQL
[12:26:35] [INFO] actively fingerprinting MySQL
[12:26:35] [INFO] executing MySQL comment injection fingerprint
back-end DBMS: active fingerprint: MySQL >= 5.1.12 and < 5.5.0
comment injection fingerprint: MySQL 5.1.58
首先,什么是评论注入?
然后,我还打印了包含此类查询的有效负载
SELECT (CASE WHEN (9427=9427/*!50158 AND 7430=2815*/) THEN 1 ELSE 0 END)
为我返回0,并且
SELECT (CASE WHEN (9427=9427/*!50159 AND 7430=2815*/) THEN 1 ELSE 0 END)
返回1。
我知道50158与我的数据库版本相对应,但是为什么我在第一种情况下得到0,而在第二种情况下得到1?
我在https://dev.mysql.com/doc/refman/8.0/en/comments.html中找到了答案
MySQL Server支持C样式注释的某些变体。这些使您能够通过使用以下形式的注释来编写包含MySQL扩展但仍可移植的代码:
/*! MySQL-specific code */
在这种情况下,MySQL Server会像处理其他任何SQL语句一样解析并执行注释中的代码,但是其他SQL Server将忽略这些扩展。例如,MySQL服务器在以下语句中识别出STRAIGHT_JOIN关键字,而其他服务器则不能:
SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...
如果在!之后添加版本号!字符,仅当MySQL版本大于或等于指定的版本号时,才执行注释中的语法。以下注释中的KEY_BLOCK_SIZE关键字仅由MySQL 5.1.10或更高版本的服务器执行:
CREATE TABLE t1(a INT, KEY (a)) /*!50110 KEY_BLOCK_SIZE=1024 */;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句