使用 sqlmap 对数据库进行指纹识别
fingerprinting the database with sqlmap
我有 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)
对我来说 returns 0,并且
SELECT (CASE WHEN (9427=9427/*!50159 AND 7430=2815*/) THEN 1 ELSE 0 END)
那 returns 1.
我知道 50158 对应于我的数据库版本,但为什么我在第一种情况下得到 0 而在第二种情况下得到 1?
我在 https://dev.mysql.com/doc/refman/8.0/en/comments.html
中找到了答案
MySQL 服务器支持一些 C 风格注释的变体。这些使您能够编写包含 MySQL 扩展但仍然可移植的代码,方法是使用以下形式的注释:
/*! MySQL-specific code */
在这种情况下,MySQL 服务器像对待任何其他 SQL 语句一样解析和执行注释中的代码,但其他 SQL 服务器将忽略扩展。例如,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 */;
我有 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)
对我来说 returns 0,并且
SELECT (CASE WHEN (9427=9427/*!50159 AND 7430=2815*/) THEN 1 ELSE 0 END)
那 returns 1.
我知道 50158 对应于我的数据库版本,但为什么我在第一种情况下得到 0 而在第二种情况下得到 1?
我在 https://dev.mysql.com/doc/refman/8.0/en/comments.html
中找到了答案MySQL 服务器支持一些 C 风格注释的变体。这些使您能够编写包含 MySQL 扩展但仍然可移植的代码,方法是使用以下形式的注释:
/*! MySQL-specific code */
在这种情况下,MySQL 服务器像对待任何其他 SQL 语句一样解析和执行注释中的代码,但其他 SQL 服务器将忽略扩展。例如,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 */;