首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >进程迁移在Meterpreter中的工作原理

进程迁移在Meterpreter中的工作原理
EN

Security用户
提问于 2015-06-01 08:45:19
回答 2查看 27K关注 0票数 20

有人想知道进程迁移是如何在Windows环境下的Meterpreter中工作的吗?我想自己写剧本来学习这一点,但我没有找到一个起点。嗯,我有一个想法使用NtQuerySystemInformation库和它的SystemHandleInformation函数,因为它可以返回操作系统中线程的句柄,并且使用这些句柄我可以更改它的父函数,但是我怀疑它是否能工作(因为TEB)。我有种感觉,应该有一个比NtQuerySystemInformation更简单的方法。有人能建议使用DLL或算法吗?

EN

回答 2

Security用户

回答已采纳

发布于 2015-07-01 18:46:24

这就是meterpreter中迁移的工作方式:

  1. 获取用户想要迁移到的PID。这是目标过程。
  2. 检查目标进程的体系结构,无论是32位还是64位。它对内存对齐很重要。
  3. 检查计量器进程是否有SeDebugPrivilege。这用于获取目标进程的句柄。关于http://support.microsoft.com/kb/131065的更多细节
  4. 从要注入目标进程的处理程序中获取实际有效负载。计算它的长度。
  5. 调用OpenProcess() API来访问目标进程的虚拟内存。
  6. 调用VirtualAllocEx() API在目标进程中分配RWX (读、写、执行)内存
  7. 调用WriteProcessMemory() API在目标内存虚拟内存空间中写入有效负载。
  8. 调用CreateRemoteThread() API来执行新创建的内存存根,在新线程中具有注入的有效负载。
  9. 关闭在旧进程中运行初始计量器的前一个线程。
票数 22
EN

Security用户

发布于 2015-06-01 14:25:00

在github的最深处中,我找到了这段代码,它完成了所有必要的工作,所以那些查找这些信息的人可以在下面的API函数中找到答案:

代码语言:javascript
复制
def injectshellcode(self, shellcode):
    """This function merely executes what it is given"""
    shellcodeaddress = self.kernel32.VirtualAllocEx(
                                                    self.handle,
                                                    None,
                                                    len(shellcode),
                                                    0x1000,
                                                    0x40
                                                    )
    self.kernel32.WriteProcessMemory(
                                    self.handle,
                                    shellcodeaddress,
                                    shellcode,
                                    len(shellcode),
                                    None
                                    )
    thread = self.kernel32.CreateRemoteThread(
                                    self.handle,
                                    None,
                                    0,
                                    shellcodeaddress,
                                    None,
                                    0,
                                    None
                                    )
票数 2
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/90578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档