Як дізнатися пароль mysql, не "штурмуючи» чужих парканів
Немає нічого простіше!
Що являє собою сервер СУБД? Це звичайна база даних, що містить в собі всю потрібну для роботи MySQL інформацію. Тут зберігаються всі настройки сервера, баз, відомості про плагіни, дату і час, призначені для користувача облікові записи, їх привілеї і паролі. У контексті даної статті нас цікавить значення останніх.
Щоб дізнатися пароль MySQL, потрібно зайти на сервер під своєю учеткой адміністратора. Потім відкрити системну базу даних з ім'ям «mysql» і зробити вибірку значень з таблиці user. Для наочності всі відомості, що цікавлять (значення паролів) ми отримаємо за допомогою php MyAdmin.
Відкриємо системну БД, і подивимося на вміст потрібної нам таблиці «зблизити»: в одному з її стовпців прописані всі паролі. Як бачите, нічого складного і для цього нам знадобилося всього кілька хвилин. Але що це таке? Хто «поцупив» з таблиці зрозумілі значення паролів і замінив їх якийсь «абракадаброю»!

Спокій, і тільки спокій! Ніхто нічого «Не поцупив», просто в таблиці вказуються вже хешировать паролі. А що у вас очі такі здивовані? Зараз все розкладемо «по поличках».
Як відбувається шифрування в MySQL
Справа в тому, що дана СУБД використовує власний алгоритм шифрування паролів. Точніше, не шифрування, а хешування. Через це поки ніхто не придумав способу, як розшифрувати паролі в MySQL.
Існують різні алгоритми хешування, але якщо при цьому буде використовуватися криптографічний толь, то шансів отримати значення пароля зводиться майже до 0. Криптографічна сіль - це додатковий рядок, яка приєднується до початкового значення. В результаті на виході (після хеширования) виходить майже «невзламиваемий» пароль.
Для установки пароля СУБД використовує функцію PASSWORD (). Вона не повертає значення, яке було послано їй на обробку. Тому використовувати цю функцію для отримання «читаного» пароля не вийде. Єдине, що можна зробити - це отримати хешировать рядок за первісним значенням. Синтаксис запиту:

Це ж значення можна знайти в системній таблиці user (службова база даних mysql), куди заносяться всі облікові записи користувачів СУБД і хешировать значення паролів.

Шляхом перебору (якщо знати хоча б приблизну структуру значення) можна спробувати згадати забутий пароль. Але відновити таким чином повністю невідоме значення практично неможливо. Пам'ятайте, що всі описані вище операції проводяться під обліковим записом адміністратора (root).
Використання оборотного шифрування
Дізнатися пароль MySQL, заданий системою за замовчуванням для облікових записів сервера не вдасться. Але це можна реалізувати на рівні баз даних або навіть таблиць. Багато движки і CMS, що працюють на основі MySQL, мають власну (вбудовану) систему аутентифікації.
Наприклад, якщо відкрити таблицю БД WordPress, де движок зберігає всі дані про користувачів, то в стовпці user_pass ви побачите таку ж «абракадабру», як і в системній базі MySQL. Це говорить про те, що дана CMS також використовує один з алгоритмів незворотного шифрування паролів (md5).

Але можна реалізувати схему аутентифікації на основі оборотних методів шифрування. Цим і займемося. Не будемо сьогодні засмучувати себе «чорним» кольором, і всі запити SQL виконані не через командний рядок, а в phpMyAdmin. Для експериментів я скористаюся тестової БД «db1», в якій зберігається одна таблиця з «звірятками» (animal). Додамо нову таблицю з іменами господарів звірів і паролем для входу в їх «клітки»
Запустіть програму, зліва в списку виберіть потрібну БД. Після цього перейдіть у вкладку SQL і запустіть на виконання наступний код:

Тепер перед тим, як дізнатися пароль MySQL, давайте заповнимо створену таблицю даними. Для цього ми знову використовуємо запити SQL, як роблять справжні розробники. Код запиту:

Змінюючи значення в дужках після оператора VALUES, додайте в таблицю ще кілька рядків. Тепер зробимо з неї вибірку даних:

Взагалі-то непорядок виходить! Значення паролів всіх користувачів видно «як на долоні». Зараз ми їх злегка «хешанем» за допомогою вбудованої функції AES_ENCRYPT. Вона приймає 2 параметра: стовпець для хешування і значення «солі»:

Тепер давайте ще раз зробимо вибірку з таблиці і подивимося на її результати:

Як бачите, одні «БЛОБ» вийшли замість паролів. Це говорить про те, що значення надійно хешировані, і без «солі» зламати їх практично неможливо. Але ми з вами знаємо, в чому «сіль». Зараз я вам покажу, як дізнатися паролі до бази даних MySQL, точніше повернути їх в більш «читається» вигляді. Для цього використовується інша функція - AES_DECRYPT (). Код запиту з її «участю»:
Результати цієї вибірки:

Як бачите, щоб дізнатися пароль MySQL, потрібно правильно розуміти, в чому «сіль» проблеми. А якщо лазити по чужих парканів, то можна запросто отримати заряд солі (з рушниці) в те місце, на яке не варто зайвий раз шукати пригод. Краще цей час витратити на вивчення MySQL.
Найсвіжіші новини IT і веб-розробки на нашому Telegram-каналі