
Имплант для Windows, который крадет учетные данные RDP с помощью перехвата API (Detours) и внедрения DLL, сохраняя имена пользователей и пароли в файл для постэксплуатации в рамках red-team.
RDPCredentialStealer — это имплант, который перехватывает учетные данные, предоставленные пользователями в RDP, с использованием перехвата API (API Hooking) с помощью Detours на C++
Попробуем это:
Сначала я переношу DLL из репозитория GitHub в путь C:\Users\Public\Music:

Теперь я открываю оконное приложение RDP Connector Windows Application:

И теперь я выполняю EXE из репозитория GitHub:

И когда я пытаюсь подключиться к RDP-серверу:

Я ввожу пользователя: s12User и пароль: passwdtest
И теперь я проверяю файл: C:\Users\Public\Music\RDPCreds.txt

RDPCredStealerDLL:
Этот код представляет собой реализацию техники перехвата (hooking) на C++ с использованием библиотеки Detours. Он целенаправленно перехватывает функцию CredUnPackAuthenticationBufferW из библиотеки credui.dll, которая отвечает за распаковку буферов аутентификации, используемых в операциях с учетными данными. Давайте разберём код шаг за шагом: Включаются необходимые заголовочные файлы, такие как windows.h, wincred.h, detours.h и другие. Определяется тип указателя на функцию CredUnPackAuthenticationBufferW_t, представляющий сигнатуру оригинальной функции CredUnPackAuthenticationBufferW. Объявляется указатель на функцию pCredUnPackAuthenticationBufferW, который будет использоваться для хранения адреса оригинальной функции.
Реализуется функция MyCredUnPackAuthenticationBufferW, которая выступает в роли перехватчика оригинальной функции. Она вызывается, когда вызывается перехваченная функция. Эта функция сначала вызывает оригинальную функцию с помощью сохраненного указателя pCredUnPackAuthenticationBufferW. Затем она преобразует полученные имя пользователя и пароль из широких строк (LPWSTR) в строки в кодировке UTF-8 (std::string).
Наконец, она открывает файл в режиме добавления и записывает в него имя пользователя и пароль. Функция DllMain служит точкой входа для DLL-перехватчика. Она вызывается при загрузке или выгрузке DLL. Когда ul_reason_for_call равно DLL_PROCESS_ATTACH, что означает загрузку DLL, она загружает библиотеку credui.dll с помощью LoadLibraryA.
Затем она получает адрес оригинальной функции CredUnPackAuthenticationBufferW с помощью GetProcAddress. В случае успеха запускается процесс перехвата вызовом DetourTransactionBegin, DetourUpdateThread и DetourAttach. Когда ul_reason_for_call равно DLL_PROCESS_DETACH, что означает выгрузку DLL, процесс перехвата отменяется вызовами DetourTransactionBegin, DetourUpdateThread и DetourDetach.
Назначение этого кода — перехватить функцию CredUnPackAuthenticationBufferW и перехватить переданные ей учетные данные, что позволит извлекать и записывать имя пользователя и пароль в файл. Эта техника может быть использована злонамеренно для захвата конфиденциальной информации, такой как учетные данные RDP, что представляет собой серьёзную угрозу безопасности.
Inject.h
Этот код предоставляет функции для внедрения DLL (динамически подключаемой библиотеки) в целевой процесс в операционной системе Windows. Давайте разберём код и поймём его функциональность:
Включаются необходимые заголовочные файлы, такие как windows.h, stdio.h и tlhelp32.h. Эти заголовки предоставляют требуемые функции и типы данных для взаимодействия с Windows API.
Функция getPIDbyProcName принимает имя процесса в качестве входных данных и возвращает соответствующий идентификатор процесса (PID). Она использует функцию CreateToolhelp32Snapshot для создания снимка текущих процессов, а затем перебирает снимок с помощью функций Process32FirstW и Process32NextW, чтобы найти процесс с совпадающим именем. Если процесс найден, возвращается его PID; в противном случае возвращается 0.
Функция DLLinjector принимает идентификатор процесса (pid) и путь к DLL в качестве входных данных. Она внедряет указанную DLL в целевой процесс. Вот как это работает: a. Открывается целевой процесс с помощью OpenProcess с флагом PROCESS_ALL_ACCESS. b. Получается дескриптор модуля Kernel32 с помощью GetModuleHandleW. c. Получается адрес функции LoadLibraryW внутри Kernel32 с помощью GetProcAddress. d. В целевом процессе выделяется память с помощью VirtualAllocEx. e. Путь к DLL записывается в выделенную память целевого процесса с помощью WriteProcessMemory. f. В целевом процессе создаётся удалённый поток с помощью CreateRemoteThread, в который передаётся адрес LoadLibraryW и выделенная память в качестве параметров. g. Если создание потока прошло успешно, возвращается true, что указывает на успешное внедрение DLL. Функция main не предоставлена в этом фрагменте кода. Вы можете использовать эти функции в своём приложении для внедрения DLL в целевой процесс, указав имя процесса и путь к DLL.
Обратите внимание: внедрение DLL — это техника, имеющая различные применения, как легитимные (например, отладка и расширение функциональности), так и вредоносные (например, внедрение вредоносного ПО или изменение поведения процесса без разрешения). Проявляйте осторожность и убедитесь, что у вас есть соответствующие разрешения и законные права перед использованием таких техник.