снятие отпечатков базы данных с помощью sqlmap - PullRequest
0 голосов
/ 13 мая 2018

У меня 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 во втором?

1 Ответ

0 голосов
/ 13 мая 2018

Я нашел ответ в https://dev.mysql.com/doc/refman/8.0/en/comments.html

MySQL Server поддерживает несколько вариантов комментариев в стиле C. Они позволяют вам писать код, который включает в себя расширения MySQL, но все еще переносим, ​​используя комментарии следующей формы:

/*! MySQL-specific code */

В этом случае MySQL Server анализирует и выполняет код в комментарии, как и любой другой оператор SQL, но другие SQL-серверы игнорируют расширения. Например, MySQL Server распознает ключевое слово 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 */;
...