HackTheBox. Прохождение Forwardslash. LFI, backup и шифрованный том
Продолжаю публикацию решений отправленных на дорешивание машин с площадки HackTheBox.
В данной статье перечисляем директории и поддомены на сайте, эксплуатируем LFI, делаем бэкап недоступного файла, а также монтируем шифрованный том.
Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Recon
Данная машина имеет IP адрес 10.10.10.183, который я добавляю в /etc/hosts.
10.10.10.183 forwardslash.htb
Первым делом сканируем открытые порты. Так как сканировать все порты nmap«ом долго, то я сначала сделаю это с помощью masscan. Мы сканируем все TCP и UDP порты с интерфейса tun0 со скоростью 500 пакетов в секунду.
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.183 --rate=500
Теперь для получения более подробной информации о сервисах, которые работают на портах, запустим сканирование с опцией -А.
nmap -A forwardslash.htb -p22,80
На сервере работают служба SSH и веб-сервер. Заходим на веб-сервер, и смотрим, что нам могут предложить.
Так нам сообщают о взломе хоста, упоминают XML и FTP. Давайте переберем директории с помощью gobuster. В параметрах указываем количество потоков 128 (-t), URL (-u), словарь (-w) и расширения, которые нас интересуют (-x).
gobuster dir -t 128 -u http://forwardslash.htb/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php,xml,txt
И находим note.txt. Давайте прочитаем.
Сообщается о группе, взломавшей сайт и о том, что есть бэкап. Давайте поищем поддомены. В качестве фильтра установим количество символов не равно 0.
wfuzz -H 'HOST:FUZZ.forwardslash.htb' -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u forwardslash.htb --hh 0
И на ходим поддомен backup. Добавим его в файл /etc/hosts.10.10.10.183 backup.forwardslash.htb
Переберем директории и для этого домена.
gobuster dir -t 128 -u http://backup.forwardslash.htb/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php,xml,txt
И переходим по данному адресу.
Entry Point
Нас встречает форма авторизации.
Также есть возможность регистрации. Давайте зарегистрируемся, а потом войдем.
Гуляя по ссылкам, находим формы смены имени, пароля, а также можно задать изображение профиля. Пожалуй остановимся на нем.
Сообщают, что в связи со взломом данная функция отключена. При этом поле ввода не доступно, скорее всего disabled в HTML.
Удаляем данное свойство у обоих элементов. Я запустил на локальной машине веб-сервер, и указал в поле ссылку на файл test.txt.
Так как не никаких фильтров, давайте попробуем вектор LFI. Для удобства делам это в Burp Suite.
И есть LFI!
USER
Давайте проверим конфигурации apache.
Но если попробовать прочитать файл php, то он не будет представлен вам как текст. Вместо этого он будет выполнен.
Но мы можем использовать php фильтры, к примеру base64. Так файл php сначала кодируется, а потом отображается на странице. Таким образом он не будет выполнен.php://filter/convert.base64-encode/resource=../../../../var/www/backup.forwardslash.htb/index.php
Выделим нужный фрагмент и нажмем Ctrl+Shift+B.
Получаем декодированный код. Давайте этим способом прочитаем все найденные во время сканирования файлы. В файле config.php находим пароль для подключения к базе данных.
Давайте так же взглянем на /dev/index.php. И там находим аутентификационные данные пользователя chiv.
Данный пользователь есть в в системе, это мы узнаем из /etc/passwd. Попробуем эти данные для подключения по SSH.
USER2
Для сбора данных в системе используем скрипт LinPEAS. И находим в бэкапах какую-то записку.
Таким образом в бэкапах есть старый конфиг с паролем. Он принадлежит pain«у.
Так на программу backup стоит SUID бит. То есть мы можем выполнить программу от имени пользователя pain.
Мы можем сделать backup, но только определенного рандомного файла.
Мы можем сделать ссылку на бэкап конфига, назвав ее как представлено из программы backup. Но мы должны успеть в течение нескольких секунд. Поэтому сделаем скрипт. Сначала получим имя файла.
Теперь добавим создание ссылки и повторный бэкап.
Запустим из домашней директории пользователя и получим файл.
Сменим пользователя введя данный пароль.
ROOT
Давайте глянем настройки суда на выполнение команд без пароля.
Таким образом, мы имеем шифрованный том. Чтобы расшифровать и монтировать его, нам нужен пароль.
Мы имеем шифртекст и программу.
Для дешифрования используем следующий код.
def decrypt(key, msg):
key = list(key)
msg = list(msg)
for char_key in reversed(key):
for i in reversed(range(len(msg))):
if i == 0:
tmp = ord(msg[i]) - (ord(char_key) + ord(msg[-1]))
else:
tmp = ord(msg[i]) - (ord(char_key) + ord(msg[i-1]))
while tmp < 0:
tmp += 256
msg[i] = chr(tmp)
return ''.join(msg)
ciphertext = open('ciphertext', 'r').read().rstrip()
for i in range(1, len(ciphertext)):
for j in range(256):
key = chr(j) * i
text = decrypt(key, ciphertext)
if ' the ' in text or ' to ' in text:
print(key)
print(text)
exit()
И успешно дешифруем сообщение.
Посмотрим, что у нас по указанному пути.
Расшифруем том.
И примонтируем его.
Там расположен ключ SSH.
Подключаемся и забираем флаг.
Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.