От автора: вы куда полезли через ограду, гражданин! На заборе написали пароль, чтоб не забыть. Так может вы с этой стороны написали? Да нет – это не мой написан. Ну, удачных поисков, а всем остальным я расскажу, как узнать пароль MySQL, не перелезая через чужие заборы.
Нет ничего проще!
Если у вас есть элементарные знания и навыки обращения с СУБД MySQL, и (главное) учетная запись администратора, то узнать пароли всех пользователей можно в два счета. Для этого можно использовать как программные оболочки, так и команды SQL.
Что представляет собой сервер СУБД? Это обычная база данных, содержащая в себе всю нужную для работы MySQL информацию. Здесь хранятся все настройки сервера, баз, сведения о плагинах, дате и времени, пользовательские учетные записи, их привилегиях и паролях. В контексте данной статьи нас интересует значения последних.
Чтобы узнать пароль MySQL, нужно зайти на сервер под своей учеткой администратора. Затем открыть системную базу данных с именем «mysql» и сделать выборку значений из таблицы user. Для наглядности все интересующие сведения (значения паролей) мы получим с помощью php MyAdmin.
Откроем системную БД, и посмотрим на содержимое нужной нам таблицы «сблизи»: в одном из ее столбцов прописаны все пароли. Как видите, ничего сложного и для этого нам понадобилось всего несколько минут. Но что это такое? Кто «стибрил» из таблицы понятные значения паролей и заменил их какой-то «абракадаброй»!
Спокойствие, и только спокойствие! Никто ничего «не стибрил», просто в таблице указываются уже хешированные пароли. А что у вас глаза такие удивленные? Сейчас все разложим «по полочкам».
Как происходит шифрование в MySQL
Дело в том, что данная СУБД использует собственный алгоритм шифрования паролей. Точнее, не шифрования, а хеширования. Из-за этого пока никто не придумал способа, как расшифровать пароли в MySQL.
Существуют различные алгоритмы хеширования, но если при этом будет использоваться криптографическая толь, то шансов получить значение пароля сводится почти к 0. Криптографическая соль – это дополнительная строка, которая присоединяется к первоначальному значению. В результате на выходе (после хеширования) получается почти «невзламываемый» пароль.
Для установки пароля СУБД использует функцию PASSWORD(). Она не возвращает значения, которое было послано ей на обработку. Поэтому использовать данную функцию для получения «читаемого» пароля не получится. Единственное, что можно сделать – это получить хешированную строку по первоначальному значению. Синтаксис запроса:
1 |
SELECT PASSWORD('значение_пароля'); |
Это же значение можно найти в системной таблице user (служебная база данных mysql), куда заносятся все учетные записи пользователей СУБД и хешированные значения паролей.
Путем перебора (если знать хотя бы примерную структуру значения) можно попытаться вспомнить забытый пароль. Но восстановить таким образом полностью неизвестное значение практически невозможно. Помните, что все описанные выше операции производятся под учетной записью администратора (root).
Использование обратимого шифрования
Узнать пароль MySQL, заданный системой по умолчанию для учетных записей сервера не удастся. Но это можно реализовать на уровне баз данных или даже таблиц. Многие движки и CMS, работающие на основе MySQL, имеют собственную (встроенную) систему аутентификации.
Например, если открыть таблицу БД WordPress, где движок сохраняет все данные о пользователях, то в столбце user_pass вы увидите такую же «абракадабру», как и в системной базе MySQL. Это говорит о том, что данная CMS также использует один из алгоритмов необратимого шифрования паролей (md5).
Но можно реализовать схему аутентификации на основе обратимых методов шифрования. Этим и займемся. Не будем сегодня огорчать себя «черным» цветом, и все запросы SQL выполним не через командную строку, а в phpMyAdmin. Для экспериментов я воспользуюсь тестовой БД «db1», в которой хранится одна таблица со «зверюшками» (animal). Добавим новую таблицу с именами хозяев зверей и паролем для входа в их «клетки» 🙂
Запустите программу, слева в списке выберите нужную БД. После этого перейдите во вкладку SQL и запустите на выполнение следующий код:
1 2 |
CREATE TABLE user_animal (id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(15) NOT NULL, pasword BLOB NOT NULL, PRIMARY KEY (id)); |
Теперь перед тем, как узнать пароль MySQL, давайте заполним созданную таблицу данными. Для этого мы снова используем запросы SQL, как поступают настоящие разработчики. Код запроса:
1 |
INSERT INTO user_animal (`name`,`pasword`) VALUES ('holms','dog'); |
Меняя значения в скобках после оператора VALUES, добавьте в таблицу еще несколько строк. Теперь сделаем из нее выборку данных:
1 |
SELECT * FROM user_animal; |
Вообще-то непорядок получается! Значение паролей всех пользователей видны «как на ладони». Сейчас мы их слегка «хешанем» с помощью встроенной функции AES_ENCRYPT. Она принимает 2 параметра: столбец для хеширования и значение «соли»:
1 |
UPDATE user_animal SET pasword=AES_ENCRYPT(pasword,'animal'); |
Теперь давайте еще раз сделаем выборку из таблицы и посмотрим на ее результаты:
Как видите, одни «блобы» получились вместо паролей. Это говорит о том, что значения надежно хешированы, и без «соли» взломать их практически невозможно. Но мы с вами знаем, в чем «соль». Сейчас я вам покажу, как узнать пароли к базе данных MySQL, точнее вернуть их в более «читаемом» виде. Для этого используется другая функция — AES_DECRYPT(). Код запроса с ее «участием»:
1 |
SELECT AES_DECRYPT( pasword, 'animal' ) FROM user_animal; |
Результаты этой выборки:
Как видите, чтобы узнать пароль MySQL, нужно правильно понимать, в чем «соль» проблемы. А если лазить по чужим заборам, то можно запросто получить заряд соли (из ружья) в то место, на которое не стоит лишний раз искать приключений. Лучше это время потратить на изучение MySQL.
Комментарии (1)