HTB Trick. Используем Fail2ban, чтобы закрепиться на хосте
the Matrix
Упражняться мы будем на тренировочной машине Trick с площадки Hack The Box. По уровню сложности она оценена как легкая.
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Добавляем IP-адрес машины в /etc/hosts:
И запускаем сканирование портов.
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).

Мы нашли четыре открытых порта:
Так как на 53-м порте активна служба DNS, начнем с нее. Трансфер зоны DNS может существенно увеличить поверхность атаки, раскрыв новые записи DNS. Выгрузить зону можно одним запросом AXFR:

Раскрываем новые доменные имена и сразу добавляем их в файл /etc/hosts.
Теперь перейдем к веб‑серверу. Так как у нас много адресов, стоит заглянуть по каждому.


Есть форма логина, и никакой защиты от брутфорса, поэтому попробуем разные словари с техниками обхода авторизации. Обычно для перебора я использую Burp Suite Professional. Перебирать стоит как поле логина, так и поле пароля.


Некоторые нагрузки, нацеленные на эксплуатацию SQL-инъекции, дали не такой же результат, что основная масса. В коде страницы видим ошибку SQL. Несмотря на то что выполнить байпас авторизации не вышло, можно проэксплуатировать саму SQL-инъекцию.
Запустим sqlmap без специальных параметров, чтобы он определил рабочую нагрузку. Указываем URL (параметр --url), данные POST (параметр --data) и говорим принимать рекомендуемый дефолтный вариант ответа, если у sqlmap будут вопросы (параметр --batch).

Рабочая нагрузка определена, теперь перейдем к эксплуатации.
Для начала посмотрим, какие есть базы данных (параметр --dbs).

База information_schema служебная и неинтересна нам, а вот в пользовательскую базу payroll_db стоит заглянуть. Получим таблицы (--tables) из интересующей нас базы (параметр -D).

Первым делом под прицел должна попасть таблица с пользователями, в данном случае rs. Задав параметр -T, получим из нее имена столбцов (параметр --columns), чтобы не дампить всю таблицу.

Теперь при помощи параметра --dump получим из таблицы только имя пользователя, логин и пароль (названия столбцов передаются в параметре -C).

Найденные данные никуда пристроить не вышло, поэтому попробуем читать файлы через эту же уязвимость. К примеру, прочитаем файл /etc/hosts.

Так как мы можем читать файлы, давай найдем на хосте что‑нибудь интересное и заберем!
Попробуем поискать новые поддомены, пройдясь сканером ffuf.
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде dirsearch и DIRB.
Я предпочитаю легкий и очень быстрый ffuf. При запуске указываем следующие параметры:
Место перебора помечается словом FUZZ.
Так как в выводе ffuf мы увидим абсолютно все варианты, нам нужно их отфильтровать по размеру контента, в данном случае по количеству строк.
К сожалению, ничего найти не удалось. Однако у нас есть домен с приставкой preprod-. Давай попробуем перебрать еще раз, но добавив эту приставку.

Находим новый поддомен, поэтому дополним запись в файле /etc/hosts и просмотрим новый сайт.

Сразу отмечаем, что при переходе с одной страницы на другую передается параметр page. Правда, запросить файл /etc/passwd таким образом не получилось.

Но мы можем прочитать файл через SQL-инъекцию и посмотреть используемый здесь фильтр, чтобы понять, как его обойти. Пробуем разные пути к файлу и подбираем нужный: /var/www/marketing/index.php и /var/www/market/index.php.

Файл был прочитан и сохранен на локальный хост. Смотрим, что там.

В переданном пути к файлу удаляются все подстроки ../. Обойти такой фильтр очень легко. Если в последовательности ..././ удалить подстроку ../, то результатом будет строка ../. Таким способом мы можем прочитать /etc/passwd.

Так же читаем приватный ключ SSH пользователя, назначаем права (chmod 0600 id_rsa) и подключаемся к удаленному хосту.


Одна из первых вещей, которые стоит проверять, когда нужно повысить привилегии, — это настройки sudoers.

Видим, что мы можем выполнить команду /etc/init.d/fail2ban restart от имени пользователя root без ввода пароля (NOPASSWD).
Fail2ban — простой локальный сервис, который отслеживает log-файлы запущенных программ и после нескольких неудачных попыток авторизации блокирует запросы с определенного IP-адреса. Просмотрим файлы конфигураций службы fail2ban.

Каталог action.d доступен группе security, а как показала команда id, мы входим в эту группу. Если мы создадим свое правило в файле iptables-multiport.conf, то сможем добиться выполнения определенного действия при срабатывании триггера fail2ban. Этот файл уже существует, а значит, мы не можем его перезаписать. Зато можем переместить и создать такой файл заново со следующим содержимым.
Если произойдет бан хоста, то выполнится команда chmod u+s /bin/bash, которая добавит S-атрибут командной оболочке. Так как владелец файла bash — root, мы сможем получить шелл в привилегированном контексте.
Когда у файла установлен атрибут setuid (S-атрибут), обычный пользователь, запускающий этот файл, получает повышение прав до пользователя — владельца файла в рамках запущенного процесса. После получения повышенных прав приложение может выполнять задачи, которые недоступны обычному пользователю. Из‑за возможности состояния гонки многие операционные системы игнорируют S-атрибут, установленный shell-скриптам.
После создания конфига перезапустим службу fail2ban под sudo.

Теперь «нагрузим» службу SSH и проверим права файла командной оболочки /bin/bash.

Как можно видеть, S-бит установлен, поэтому повышаем контекст и забираем флаг.

Машина захвачена!
Источник
Наши проекты:
- Кибер новости: the Matrix
- Хакинг: /me Hacker
- Кодинг: Minor Code
👁 Пробить человека? Легко через нашего бота: Мистер Пробиватор