![](https://habrastorage.org/webt/4q/al/jk/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
![](https://habrastorage.org/webt/kr/7j/5g/kr7j5gu3t0alnt4j9tqmrrq6dkg.png)
Теперь для получения более подробной информации о сервисах, которые работают на портах, запустим сканирование с опцией -А.
nmap -A forwardslash.htb -p22,80
![](https://habrastorage.org/webt/xe/ny/nz/xenynzr9wj81xrevgyyxj0njd2a.png)
На сервере работают служба SSH и веб-сервер. Заходим на веб-сервер, и смотрим, что нам могут предложить.
![](https://habrastorage.org/webt/oa/f-/iz/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
![](https://habrastorage.org/webt/ad/_j/d9/ad_jd9czrobgnwdb7tmvmt1yup0.png)
И находим note.txt. Давайте прочитаем.
![](https://habrastorage.org/webt/2p/9_/0a/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
![](https://habrastorage.org/webt/7z/bs/bt/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
![](https://habrastorage.org/webt/xx/fq/0v/xxfq0vas2ichubwsets78cdsbsa.png)
И переходим по данному адресу.
Entry Point
Нас встречает форма авторизации.
![](https://habrastorage.org/webt/2j/li/q4/2jliq4clsrsxzx3z5jmx9dm2ykc.png)
Также есть возможность регистрации. Давайте зарегистрируемся, а потом войдем.
![](https://habrastorage.org/webt/ey/9t/_r/ey9t_rpk2uzsmbsedy3wtk8vbuq.png)
Гуляя по ссылкам, находим формы смены имени, пароля, а также можно задать изображение профиля. Пожалуй остановимся на нем.
![](https://habrastorage.org/webt/0w/c7/b2/0wc7b2uxjqrk-sf3yg3xbkff4vw.png)
Сообщают, что в связи со взломом данная функция отключена. При этом поле ввода не доступно, скорее всего disabled в HTML.
![](https://habrastorage.org/webt/8j/il/t4/8jilt46vmf6lsebzi2adrfu8vaw.png)
Удаляем данное свойство у обоих элементов. Я запустил на локальной машине веб-сервер, и указал в поле ссылку на файл test.txt.
![](https://habrastorage.org/webt/vm/pr/pj/vmprpjrrneiz5k2c4tajgc874jw.png)
Так как не никаких фильтров, давайте попробуем вектор LFI. Для удобства делам это в Burp Suite.
![](https://habrastorage.org/webt/vu/6u/n2/vu6un2qpjybrj6ucgmwuxo-oapo.png)
И есть LFI!
USER
Давайте проверим конфигурации apache.
![](https://habrastorage.org/webt/cq/17/a_/cq17a_cgyj8hcpyjtvbptlififc.png)
Но если попробовать прочитать файл php, то он не будет представлен вам как текст. Вместо этого он будет выполнен.
![](https://habrastorage.org/webt/no/ni/vk/nonivkmtytxnpxnbhsstlozlzqm.png)
Но мы можем использовать php фильтры, к примеру base64. Так файл php сначала кодируется, а потом отображается на странице. Таким образом он не будет выполнен.
php://filter/convert.base64-encode/resource=../../../../var/www/backup.forwardslash.htb/index.php
![](https://habrastorage.org/webt/ae/3q/er/ae3qerdck5wllpyk2s6zuirckv0.png)
Выделим нужный фрагмент и нажмем Ctrl+Shift+B.
![](https://habrastorage.org/webt/ww/cw/rb/wwcwrbnxf70gjfuq55k1g37v4ry.png)
Получаем декодированный код. Давайте этим способом прочитаем все найденные во время сканирования файлы. В файле config.php находим пароль для подключения к базе данных.
![](https://habrastorage.org/webt/1b/um/re/1bumreov44x-_sadsellrgdscsc.png)
Давайте так же взглянем на /dev/index.php. И там находим аутентификационные данные пользователя chiv.
![](https://habrastorage.org/webt/kz/vt/vf/kzvtvfkgpoa0iqss6gbz9uczmeg.png)
Данный пользователь есть в в системе, это мы узнаем из /etc/passwd. Попробуем эти данные для подключения по SSH.
![](https://habrastorage.org/webt/rn/eh/tk/rnehtkf3ieobqra2emdeihrwh_4.png)
USER2
Для сбора данных в системе используем скрипт LinPEAS. И находим в бэкапах какую-то записку.
![](https://habrastorage.org/webt/q7/e8/xc/q7e8xc-gvdwrdhrosqdxjhb770o.png)
![](https://habrastorage.org/webt/cw/ru/5v/cwru5vldjzcxq1fp4lrpmm6mydc.png)
Таким образом в бэкапах есть старый конфиг с паролем. Он принадлежит pain’у.
![](https://habrastorage.org/webt/oa/ej/bk/oaejbkce9zuo7ajqi_ppi1q7a6c.png)
Так на программу backup стоит SUID бит. То есть мы можем выполнить программу от имени пользователя pain.
![](https://habrastorage.org/webt/pw/h-/rr/pwh-rrehjzvfzrso0vtkczkjg-e.png)
Мы можем сделать backup, но только определенного рандомного файла.
![](https://habrastorage.org/webt/0o/ch/dl/0ochdlidvtmagk35ndfedb2m9rq.png)
Мы можем сделать ссылку на бэкап конфига, назвав ее как представлено из программы backup. Но мы должны успеть в течение нескольких секунд. Поэтому сделаем скрипт. Сначала получим имя файла.
![](https://habrastorage.org/webt/bm/sw/ys/bmswyshw55zp21al__m-juu2xmg.png)
Теперь добавим создание ссылки и повторный бэкап.
![](https://habrastorage.org/webt/ts/ji/rt/tsjirtrpq0qlgs2njchp7jfcjnq.png)
Запустим из домашней директории пользователя и получим файл.
![](https://habrastorage.org/webt/c1/1y/qh/c11yqhc_hcd-czn8o7oz_cqypn0.png)
Сменим пользователя введя данный пароль.
![](https://habrastorage.org/webt/r6/r6/_p/r6r6_p9gxfzk4v-mco7jny_bcnc.png)
ROOT
Давайте глянем настройки суда на выполнение команд без пароля.
![](https://habrastorage.org/webt/cf/3n/nx/cf3nnxxgiml2sr0okr-dpmgyoyg.png)
Таким образом, мы имеем шифрованный том. Чтобы расшифровать и монтировать его, нам нужен пароль.
![](https://habrastorage.org/webt/3j/73/ce/3j73cejs0-w_4wvmfjzbueeddd0.png)
Мы имеем шифртекст и программу.
![](https://habrastorage.org/webt/iu/mg/qf/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()
И успешно дешифруем сообщение.
![](https://habrastorage.org/webt/ho/7m/xw/ho7mxwd0qhucpstfhms5rxodfma.png)
Посмотрим, что у нас по указанному пути.
![](https://habrastorage.org/webt/qu/_z/al/qu_zalp6rrcqeohyzkq5fqxnsdq.png)
Расшифруем том.
![](https://habrastorage.org/webt/vs/5w/1j/vs5w1jxssighz7x2ws155trjnvu.png)
И примонтируем его.
![](https://habrastorage.org/webt/cz/x4/vs/czx4vsuwlomjnom4tcmq1rcsqjm.png)
Там расположен ключ SSH.
![](https://habrastorage.org/webt/mq/x7/g4/mqx7g41iwh5_o8w6xi1xnjvch_e.png)
Подключаемся и забираем флаг.
![](https://habrastorage.org/webt/4l/-i/lj/4l-iljla5hb9nklqmnv7ep6fm3i.png)
Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.