![](https://habrastorage.org/getpro/habr/upload_files/159/966/b9f/159966b9fdab6262881a01fd1efb7144.png)
Исследование nmap -sV -sC показало:
port 22: OpenSSH
port 80: ngingx 1.23.1: redirects to http://shoppy.htb
![](https://habrastorage.org/getpro/habr/upload_files/740/6d6/d3a/7406d6d3acdb2d8230bbe655d3f73dff.png)
Пропишем ip адрес машинки и shoppy.htb, для отображения, в /etc/hosts.
Vhost через gobuster:
Пока сканируем nmap, используем gobuster, чтоб найти потенциальные субдомены и расширить возможности проникновения.
gobuster vhost -w /home/hell59/SecLists/Discovery/DNS/bitquark-subdomains-top100000.txt -t 50 -u shoppy.htb
![](https://habrastorage.org/getpro/habr/upload_files/b38/18b/5f8/b3818b5f8e8fcac00c46e2674b183195.png)
Вручную исследуем веб приложение:
Исследуем вручную исходный код приложения.
![](https://habrastorage.org/getpro/habr/upload_files/141/2f3/9d5/1412f39d5a10e7f88a4244a52aa2cf88.png)
Не находим ничего, кроме таймера.
Поиск файлов и директорий
Давайте поищем директории и файлы, может найдём что-то интересное.
wfuzz -c -z file,/hell59/SecLists/Discovery/Web-Content/raft-large-directories.txt --hc 404 "http://shoppy.htb/FUZZ/"
Видим, что есть /admin префикс, через который попадаем на /login:
![](https://habrastorage.org/getpro/habr/upload_files/484/743/274/4847432740ce3cb1304472882a9041ce.png)
MongoDB NoSQL
Посмотрев на авторизацию понимаем, что тут MongoDB NoSQL база данных.
![](https://habrastorage.org/getpro/habr/upload_files/481/ef6/4a9/481ef64a932fc36bff015a2f700ce9ce.png)
Можем войти используя следующую логику NoSQL инъекции:
login: admin'||'1==1
password: admin
Получилось!
Про NoSQL инъекции можно почитать тут: https://book.hacktricks.xyz/pentesting-web/nosql-injection .
![](https://habrastorage.org/getpro/habr/upload_files/fe4/846/b2e/fe4846b2e95a41ae62fe8e40ad664a3a.png)
Введём admin'||'1==1 и получим список пользователей и хэш.
![](https://habrastorage.org/getpro/habr/upload_files/e9e/901/306/e9e90130675a868bbb08cd298f7df59d.png)
Используем hashcat, чтоб взломать полученный md5 hash
Используем hashcat, со словарём rockyou.txt и посмотрим на результаты:
![](https://habrastorage.org/getpro/habr/upload_files/6f4/ef7/584/6f4ef7584c10a580c8675816d978f6aa.png)
Логинимся в субдомен.
Теперь заходим в субдомен mattermost, предварительно добавив его в /etc/hosts ,
http://www.mattermost.shoppy.htb с добытым паролем.
![](https://habrastorage.org/getpro/habr/upload_files/577/b73/89b/577b7389b76bb078d0b55b13d1925cd5.png)
Тут история чата пользователя, и мы обнаружим важную информацию о machine deploy:
![](https://habrastorage.org/getpro/habr/upload_files/6f8/4b5/e83/6f84b5e832fb488153a4974272cf6a67.png)
Получаем юзер флаг
С полученными данными логинимся через SSH, находим user.txt flag, делаем cat user.txt.
![](https://habrastorage.org/getpro/habr/upload_files/031/4fa/b19/0314fab199847e7bf19190d97601e45e.png)
Sudo -l
![](https://habrastorage.org/getpro/habr/upload_files/854/cdd/602/854cdd602392a5deb46fbe926b6e0919.png)
Если покопаться в окрестностях и обратить внимание на все файлы в password-manager, то можно выудить и подставить пароль Sample.
Таким образом получаем данные username и password:
![](https://habrastorage.org/getpro/habr/upload_files/f0b/3cf/dbe/f0b3cfdbe02145489105b0f90823c9da.png)
Логинимся через SSH как deploy пользователь.
Получаем root flag
Используем docker уязвимость, описанную тут.
docker run -v /:/mnt --rm -it alpine chroot /mnt sh
![](https://habrastorage.org/getpro/habr/upload_files/064/988/02f/06498802ffca5a3544e3b95b130dc977.png)
Ура, мы получили root!
ZimM
Как?.. Не вижу в этой форме авторизации ничего, намекающего на конкретную БД...
mvyazov Автор
Опустил в статье для краткости. Используем инструменты разработчика. Wappalyzer. Буду давать более подробные пояснения впредь.
ZimM
Я просто не очень понимаю даже, как это в теории должно работать. Ну окей, допустим, смотрим, что там шлется через инструменты разработчика. Но явно ведь логин/пароль уходит на некий бекенд, который уже логинится в БД. Не может ведь браузер напрямую с БД общаться?
mvyazov Автор
Конкретно в этой ситуации смотрел через BURP suite и wapplyazer. Совершенно верно говорите, что не напрямую, всё именно так, как вы описали. Просто обнаружив, что тут MongoDB , погуглил и обнаружил такую уязвимость, что и протестировал и оно сработало в данной конкретной ситуации.