Berasal dari

Windows C# Apakah ada cara untuk membuat proses baru dengan tiket Kerberos dari proses induk?

mendukung delegasi terbatas kerberos menggunakan SSPI untuk multiproses

Saya mencoba menyalin kredensial Kerberos dari satu proses ke proses lainnya untuk menjalankan perintah jarak jauh. Steve sangat membantu, tetapi saya sedikit bingung tentang cara membuat proses anak, memuatnya dengan pegangan kredensial yang tepat, dan peniruan identitas, kemudian mendapatkan proses anak yang sama untuk menjalankan perintah yang sebenarnya sejak panggilan ke DuplicateHandles membutuhkan proses anak terlebih dahulu.

Pertanyaan saya adalah, bagaimana saya membuat Proses Anak untuk menjalankan perintah yang awalnya saya maksudkan untuk dilakukan sebagai CreateProcessAsUser dengan peniruan identitas?

Kode sejauh ini:

var CurrentIdentity = ((WindowsIdentity)User.Identity).Token;

IntPtr parentHandle = IntPtr.Zero;

CloneParentProcessToken.QuerySecurityContextToken(ref CurrentIdentity, out parentHandle);
IntPtr parentProcessHandle = Process.GetCurrentProcess().Handle;

currentUser = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

//Create Child Process as User
IntPtr childProcessHandle = CreateProcessAsUser();

IntPtr lpTargetHandle = IntPtr.Zero;

//Duplicate parent security handle into child
if (CloneParentProcessToken.DuplicateHandle(parentProcessHandle, parentHandle, childProcessHandle, out lpTargetHandle,
    ProcessUtility.TOKEN_IMPERSONATE, true, (uint)0x00000002))
{
    int childHandleProcessID = CloneParentProcessToken.GetProcessId(lpTargetHandle);

    IntPtr newChildProcess = ProcessUtility.OpenProcess(ProcessUtility.ProcessAccessFlags.All, true, childHandleProcessID);
    IntPtr newProcessAccessTokenHandle = IntPtr.Zero;
    if (ProcessUtility.OpenProcessToken(newChildProcess, ProcessUtility.TOKEN_IMPERSONATE, out newProcessAccessTokenHandle))
    {
        //Impersonate the user in the new child process
        if (CloneParentProcessToken.ImpersonateLoggedOnUser(newProcessAccessTokenHandle))
        {
            //newChildProcess is pointer to child process with token and impersonation
            Process child = Process.GetProcessById(childHandleProcessID);

            //Have child process execute???
        }
    }
1
jangooni 8 Agustus 2019, 17:17

1 menjawab

Jawaban Terbaik

karena panggilan ke DuplicateHandle membutuhkan proses anak terlebih dahulu.

Anda dapat menetapkan hTargetProcessHandle sebagai proses saat ini, dan bInheritHandle sebagai true, sehingga pegangan duplikat dapat diwarisi oleh proses baru yang dibuat oleh proses target. Kemudian berikan token baru ke proses anak melalui IPC.

1
Drake Wu 9 Agustus 2019, 09:34