HackTheBox. Прохождение Forwardslash. LFI, backup и шифрованный том

4qaljko1gd4fr9wnsavgdn6eu1m.png


Продолжаю публикацию решений отправленных на дорешивание машин с площадки HackTheBox.

В данной статье перечисляем директории и поддомены на сайте, эксплуатируем LFI, делаем бэкап недоступного файла, а также монтируем шифрованный том.

Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ.

Организационная информация
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.


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


kr7j5gu3t0alnt4j9tqmrrq6dkg.png

Теперь для получения более подробной информации о сервисах, которые работают на портах, запустим сканирование с опцией -А.

nmap -A forwardslash.htb -p22,80


xenynzr9wj81xrevgyyxj0njd2a.png

На сервере работают служба SSH и веб-сервер. Заходим на веб-сервер, и смотрим, что нам могут предложить.

oaf-izc15ykyabirie2sd6kmuwk.png

Так нам сообщают о взломе хоста, упоминают 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


ad_jd9czrobgnwdb7tmvmt1yup0.png

И находим note.txt. Давайте прочитаем.

2p9_0azizl5kndloe_7ghrpcdb8.png

Сообщается о группе, взломавшей сайт и о том, что есть бэкап. Давайте поищем поддомены. В качестве фильтра установим количество символов не равно 0.

wfuzz -H 'HOST:FUZZ.forwardslash.htb' -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u forwardslash.htb --hh 0


7zbsbt-v7uwvnpdla39uyctsi0u.png

И на ходим поддомен 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


xxfq0vas2ichubwsets78cdsbsa.png

И переходим по данному адресу.

Entry Point


Нас встречает форма авторизации.

2jliq4clsrsxzx3z5jmx9dm2ykc.png

Также есть возможность регистрации. Давайте зарегистрируемся, а потом войдем.

ey9t_rpk2uzsmbsedy3wtk8vbuq.png

Гуляя по ссылкам, находим формы смены имени, пароля, а также можно задать изображение профиля. Пожалуй остановимся на нем.

0wc7b2uxjqrk-sf3yg3xbkff4vw.png

Сообщают, что в связи со взломом данная функция отключена. При этом поле ввода не доступно, скорее всего disabled в HTML.

8jilt46vmf6lsebzi2adrfu8vaw.png

Удаляем данное свойство у обоих элементов. Я запустил на локальной машине веб-сервер, и указал в поле ссылку на файл test.txt.

vmprpjrrneiz5k2c4tajgc874jw.png

Так как не никаких фильтров, давайте попробуем вектор LFI. Для удобства делам это в Burp Suite.

vu6un2qpjybrj6ucgmwuxo-oapo.png

И есть LFI!

USER


Давайте проверим конфигурации apache.

cq17a_cgyj8hcpyjtvbptlififc.png

Но если попробовать прочитать файл php, то он не будет представлен вам как текст. Вместо этого он будет выполнен.

nonivkmtytxnpxnbhsstlozlzqm.png

Но мы можем использовать php фильтры, к примеру base64. Так файл php сначала кодируется, а потом отображается на странице. Таким образом он не будет выполнен.
php://filter/convert.base64-encode/resource=../../../../var/www/backup.forwardslash.htb/index.php
ae3qerdck5wllpyk2s6zuirckv0.png

Выделим нужный фрагмент и нажмем Ctrl+Shift+B.

wwcwrbnxf70gjfuq55k1g37v4ry.png

Получаем декодированный код. Давайте этим способом прочитаем все найденные во время сканирования файлы. В файле config.php находим пароль для подключения к базе данных.

1bumreov44x-_sadsellrgdscsc.png

Давайте так же взглянем на /dev/index.php. И там находим аутентификационные данные пользователя chiv.

kzvtvfkgpoa0iqss6gbz9uczmeg.png

Данный пользователь есть в в системе, это мы узнаем из /etc/passwd. Попробуем эти данные для подключения по SSH.

rnehtkf3ieobqra2emdeihrwh_4.png

USER2


Для сбора данных в системе используем скрипт LinPEAS. И находим в бэкапах какую-то записку.

q7e8xc-gvdwrdhrosqdxjhb770o.png

cwru5vldjzcxq1fp4lrpmm6mydc.png

Таким образом в бэкапах есть старый конфиг с паролем. Он принадлежит pain«у.

oaejbkce9zuo7ajqi_ppi1q7a6c.png

Так на программу backup стоит SUID бит. То есть мы можем выполнить программу от имени пользователя pain.

pwh-rrehjzvfzrso0vtkczkjg-e.png

Мы можем сделать backup, но только определенного рандомного файла.

0ochdlidvtmagk35ndfedb2m9rq.png

Мы можем сделать ссылку на бэкап конфига, назвав ее как представлено из программы backup. Но мы должны успеть в течение нескольких секунд. Поэтому сделаем скрипт. Сначала получим имя файла.

bmswyshw55zp21al__m-juu2xmg.png

Теперь добавим создание ссылки и повторный бэкап.

tsjirtrpq0qlgs2njchp7jfcjnq.png

Запустим из домашней директории пользователя и получим файл.

c11yqhc_hcd-czn8o7oz_cqypn0.png

Сменим пользователя введя данный пароль.

r6r6_p9gxfzk4v-mco7jny_bcnc.png

ROOT


Давайте глянем настройки суда на выполнение команд без пароля.

cf3nnxxgiml2sr0okr-dpmgyoyg.png

Таким образом, мы имеем шифрованный том. Чтобы расшифровать и монтировать его, нам нужен пароль.

3j73cejs0-w_4wvmfjzbueeddd0.png

Мы имеем шифртекст и программу.

iumgqfdmgljhl-qjt593wvni0ra.png

Для дешифрования используем следующий код.

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()


И успешно дешифруем сообщение.

ho7mxwd0qhucpstfhms5rxodfma.png

Посмотрим, что у нас по указанному пути.

qu_zalp6rrcqeohyzkq5fqxnsdq.png

Расшифруем том.

vs5w1jxssighz7x2ws155trjnvu.png

И примонтируем его.

czx4vsuwlomjnom4tcmq1rcsqjm.png

Там расположен ключ SSH.

mqx7g41iwh5_o8w6xi1xnjvch_e.png

Подключаемся и забираем флаг.

4l-iljla5hb9nklqmnv7ep6fm3i.png

Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.

© Habrahabr.ru