Выполнение команд операционной системы с помощью sqlmap

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

Введение

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

Подтверждение предварительных условий для выполнения команд ОС

На этом этапе вы убедитесь, что sqlmap установлен, и у вас есть базовое понимание того, как выявлять уязвимости SQL-инъекций. Выполнение команд ОС через sqlmap обычно зависит от возможности записи файлов в целевую систему (например, веб-оболочки) или использования специфических функций базы данных, позволяющих выполнять команды.

Сначала проверьте, установлен ли sqlmap в вашей системе. Откройте терминал и введите:

sqlmap --version

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

sqlmap version 1.x.x.x ## Замените x.x.x.x на фактическую версию

Далее мы будем использовать sqlmap для обнаружения уязвимости SQL-инъекции в локальном тестовом веб-приложении. Это приложение настроено так, чтобы быть уязвимым к SQL-инъекциям.

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

Флаг --batch указывает sqlmap работать в неинтерактивном режиме, принимая значения по умолчанию. --risk=3 и --level=3 увеличивают глубину тестов, выполняемых sqlmap, что часто необходимо для обнаружения более сложных уязвимостей, включая те, которые могут позволить выполнять команды ОС.

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

---
[INFO] testing connection to the target URL
[INFO] checking if the target is stable
[INFO] target URL is stable
[INFO] testing if GET parameter 'id' is vulnerable to SQL injection
...
[INFO] GET parameter 'id' is vulnerable.
...
---

Это подтверждает, что sqlmap успешно выявил уязвимость SQL-инъекции, что является предварительным условием для попытки выполнения команд ОС.

Использование флага --os-cmd для одной команды

На этом этапе вы научитесь использовать флаг --os-cmd в sqlmap для выполнения одной команды операционной системы на целевом сервере. Этот флаг используется, когда sqlmap обнаружил способ выполнения команд, как правило, путем загрузки веб-оболочки (web shell) или использования специфических функций базы данных.

Базовый синтаксис для использования --os-cmd следующий:

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-cmd="<command>" --batch

Замените <command> на фактическую команду ОС, которую вы хотите выполнить. sqlmap попытается выполнить эту команду и вернуть ее вывод.

Попробуем выполнить простую команду, такую как ls, чтобы перечислить файлы в текущем каталоге, где запущено веб-приложение.

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

Затем sqlmap выполнит следующие действия:

  1. Обнаружит уязвимость SQL-инъекции.
  2. Попытается найти подходящий метод для выполнения команд ОС (например, путем загрузки веб-оболочки).
  3. Выполнит команду ls.
  4. Получит и отобразит вывод команды.

Вы увидите различные сообщения sqlmap, указывающие на его прогресс, например:

...
[INFO] trying to upload a web shell for OS command execution
[INFO] web shell uploaded to '/tmp/web_app/tmpbxxxx.php'
[INFO] executing OS command 'ls'
...

Вывод команды ls будет отображен sqlmap после ее успешного выполнения. Это демонстрирует возможность запуска произвольных команд на сервере.

Выполнение простой команды, такой как whoami или id

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

Сначала выполним команду whoami:

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

После завершения работы sqlmap отобразит вывод команды whoami. Обычно это будет имя пользователя, под которым работает веб-сервер (например, www-data, apache или labex в нашей лабораторной среде).

...
[INFO] retrieved OS command output:
labex
...

Далее выполним команду id. Эта команда предоставляет более подробную информацию, включая идентификатор пользователя (UID), идентификатор группы (GID) и все группы, к которым принадлежит пользователь.

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

Вывод команды id будет выглядеть примерно так:

...
[INFO] retrieved OS command output:
uid=1000(labex) gid=1000(labex) groups=1000(labex),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare)
...

Анализ этого вывода поможет вам понять доступные вам разрешения. Например, если пользователь входит в группу sudo, возможно повышение привилегий.

Анализ вывода команд, возвращаемого sqlmap

На этом этапе вы сосредоточитесь на понимании того, как sqlmap представляет вывод выполненных команд ОС и на что следует обращать внимание. sqlmap получает вывод команды из веб-оболочки, которую он загружает (или использует другие методы выполнения), и отображает его в своей консоли.

При выполнении команды с использованием --os-cmd sqlmap обычно показывает строку, похожую на:

[INFO] retrieved OS command output:

За которой следует фактический вывод команды. Например, если вы выполнили ls -l /tmp, вывод может выглядеть так:

[INFO] retrieved OS command output:
total 8
-rw-r--r-- 1 labex labex 1234 Jan 1 10:00 somefile.txt
drwxr-xr-x 2 labex labex 4096 Jan 1 10:05 somedir

Важно внимательно читать этот вывод. Он предоставляет прямую информацию о целевой системе. Например:

  • Списки файлов (ls, dir): Раскрывают структуру каталогов, имена файлов и разрешения.
  • Системная информация (uname -a, cat /etc/os-release): Предоставляют сведения об операционной системе, версии ядра и дистрибутиве.
  • Сетевая конфигурация (ip a, ifconfig): Отображают сетевые интерфейсы, IP-адреса и сетевые настройки.
  • Списки процессов (ps aux): Перечисляют запущенные процессы, что может указывать на другие службы или приложения.

Попробуйте выполнить cat /etc/passwd, чтобы увидеть, сможете ли вы получить доступ к конфиденциальным системным файлам.

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-cmd="cat /etc/passwd" --batch

Вы увидите содержимое файла /etc/passwd в выводе sqlmap. Этот файл содержит информацию об учетных записях пользователей и является распространенной целью для разведки.

...
[INFO] retrieved OS command output:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...
labex:x:1000:1000:LabEx User,,,:/home/labex:/bin/zsh
...

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

Понимание ограничений неинтерактивного выполнения команд

На этом этапе вы поймете присущие ограничения выполнения команд ОС с помощью флага --os-cmd в sqlmap, в частности его неинтерактивный характер.

Флаг --os-cmd выполняет одну команду и возвращает ее вывод. Он не предоставляет интерактивную оболочку (как обычный сеанс SSH или терминала). Это означает:

  1. Отсутствие постоянного сеанса: Каждое выполнение --os-cmd является новым, независимым запросом. Вы не можете выполнить команду, а затем использовать ее вывод для информирования следующей команды в том же "сеансе".
  2. Отсутствие интерактивных программ: Вы не можете запускать программы, требующие ввода пользователя или постоянного взаимодействия (например, nano, vi, top, passwd).
  3. Ограниченные сложные операции: Соединение команд с помощью конвейеров (|) или точек с запятой (;) возможно, но управление сложными рабочими процессами или условной логикой становится громоздким. Например, ls -l /tmp | grep "file" будет работать, но многошаговый скрипт, требующий взаимодействия с пользователем, не будет.
  4. Обработка ошибок: Ошибки обычно возвращаются как часть вывода команды, но отладка сложных проблем может быть затруднена без интерактивной оболочки.

Для преодоления этих ограничений пентестеры часто используют --os-shell или --os-pwn в sqlmap (если это поддерживается базой данных и конфигурацией веб-сервера). Эти флаги пытаются установить полуинтерактивную или полностью интерактивную оболочку, позволяя выполнять более сложные операции. Однако --os-cmd полезен для быстрой разведки или выполнения одиночных, атомарных команд.

Например, попробуйте выполнить команду, которая обычно требует взаимодействия, например nano.

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

Вы, вероятно, увидите ошибку или не получите осмысленного вывода, поскольку nano ожидает терминал и ввод пользователя, которые sqlmap не может предоставить в этом неинтерактивном режиме.

...
[INFO] retrieved OS command output:
Error opening terminal: unknown.
...

Это демонстрирует, что, хотя --os-cmd мощный для одиночных команд, он не является заменой полноценной интерактивной оболочки.

Резюме

В этой лабораторной работе вы успешно научились выполнять команды операционной системы на целевом сервере с помощью флага --os-cmd в sqlmap. Вы начали с подтверждения предварительных условий, затем практиковались в выполнении простых команд, таких как ls, whoami, id и cat /etc/passwd. Вы также получили представление о том, как анализировать вывод команд, возвращаемый sqlmap, и, что важно, осознали ограничения неинтерактивного выполнения команд. Этот навык является фундаментальным для этапов пост-эксплуатации при тестировании на проникновение веб-приложений.