Повышение привилегий Windows с помощью C++

Повышение привилегий

Мы уже рассказывали про повышение привилегий в Windows с помощью WinPEAS. Сегодня я покажу способ повышения привилегий с помощью C++ и функции UpdateProcThreadAttribute из Windows API.

Повышение привилегий с UpdateProcThreadAttribute

Повышение привилегий Windows с помощью UpdateProcThreadAttribute — это метод, используемый для повышения привилегий процесса в системе Windows путем использования уязвимости в функции UpdateProcThreadAttribute.

Эта функция используется для обновления атрибута процесса или потока и может использоваться для установки дескриптора родительского процесса, который используется для запуска нового процесса. Манипулируя дескриптором родительского процесса, злоумышленник может создать новый процесс с повышенными привилегиями.

Уязвимость возникает из-за того, что функция UpdateProcThreadAttribute не проверяет допустимость дескриптора родительского процесса, что позволяет злоумышленнику предоставить дескриптор привилегированного процесса вместо ожидаемого дескриптора непривилегированного процесса. В случае успеха вновь созданный процесс унаследует повышенные привилегии привилегированного родительского процесса.

Этот метод обычно используется в вредоносных программах и эксплойтах для получения повышенных привилегий и выполнения вредоносного кода в системе.

Код на Gist.

Код определяет две функции:

  • setPrivilege устанавливает указанную привилегию для текущего процесса. Функция принимает имя привилегии в качестве параметра и возвращает логическое значение, указывающее на успех или неудачу. Функция использует LookupPrivilegeValue, чтобы получить LUID (локальный уникальный идентификатор) привилегии, а затем AdjustTokenPrivileges, чтобы активировать привилегию для процесса.
  • createProcess создает новый процесс, который наследует атрибуты безопасности указанного процесса. В качестве параметров функция принимает PID (идентификатор процесса) целевого процесса и путь к исполняемому файлу, который необходимо запустить. Функция сначала вызывает OpenProcess, чтобы получить дескриптор целевого процесса, а затем создает новый процесс с помощью CreateProcessW, передавая путь к исполняемому файлу и структуру STARTUPINFOEXW, содержащую дескриптор целевого процесса.

Основная функция вызывает функцию setPrivilege, чтобы включить привилегию SE_DEBUG_NAME для текущего процесса. Эта привилегия требуется для управления или отладки процессов с более высокими привилегиями. Затем функция извлекает PID целевого процесса из аргумента командной строки и вызывает функцию createProcess, передавая PID и путь к исполняемому файлу cmd.exe в каталоге System32. Это эффективно создает новый процесс командной строки с теми же привилегиями, что и целевой процесс.

Таким образом, этот код демонстрирует базовую технику повышения привилегий с помощью инжекта путем создания нового процесса с более высокими привилегиями. Однако следует отметить, что этот метод часто используется злонамеренно и может быть обнаружен.

Повышение привилегий Windows с помощью C++

Прежде всего, компилируем этот код.

Команда выглядит следующим образом:

Повышение привилегий Windows C++

 

Чтобы внедрить код, найдем процесс lssas.exe.

Повысить привилегии Windows C++

Он работает под управлением NT AUTHORITY SYSTEM, учетной записи пользователя Windows.

Повысить привилегии Windows UpdateProcThreadAttribute

И теперь я запускаю вредоносное ПО, используя PID 652 (lsass).

Повысить привилегии Windows API

И давайте проверим, с каким пользователем он запущен:

Привилегии Windows API

Теперь давайте посмотрим родительский процесс:

Повышение привилегий Windows 10 API

Заключение

Я думаю, что это хорошая альтернатива другим способам повышения привилегий Windows. Я также рекомендую статью «Как повысить привилегии в Windows с помощью binPath».

ПОЛЕЗНЫЕ ССЫЛКИ:

QUASAR

Этичный хакер: компьютерный ниндзя и мастер цифровых тайн.

Добавить комментарий