Behemoth5

Recordamos deshabilitar ASLR con: $ echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

__libc_start_main(0x804872b, 1, 0xffffd774, 0x8048920 <unfinished ...>
fopen("/etc/behemoth_pass/behemoth6", "r")                                                                                                         = 0
perror("fopen"fopen: Permission denied
)                                                                                                                                    = <void>
exit(1 <no return ...>
+++ exited (status 1) +++
void main(void) {
  long lVar1;
  size_t __n;
  int iVar2;
  sa_family_t local_38;
  uint16_t local_36;
  undefined4 local_34;
  undefined auStack48 [8];
  ssize_t local_28;
  int local_24;
  hostent *local_20;
  char *local_1c;
  FILE *local_18;
  size_t local_14;
  undefined *puStack12;

  puStack12 = &stack0x00000004;
  local_14 = 0;
  local_18 = fopen("/etc/behemoth_pass/behemoth6","r");
  if (local_18 == (FILE *)0x0) {
    perror("fopen");
                    /* WARNING: Subroutine does not return */
    exit(1);
  }
  fseek(local_18,0,2);
  lVar1 = ftell(local_18);
  local_14 = lVar1 + 1;
  rewind(local_18);
  local_1c = (char *)malloc(local_14);
  fgets(local_1c,local_14,local_18);
  __n = strlen(local_1c);
  local_1c[__n] = '\0';
  fclose(local_18);
  local_20 = gethostbyname("localhost");
  if (local_20 == (hostent *)0x0) {
    perror("gethostbyname");
                    /* WARNING: Subroutine does not return */
    exit(1);
  }
  local_24 = socket(2,2,0);
  if (local_24 == -1) {
    perror("socket");
                    /* WARNING: Subroutine does not return */
    exit(1);
  }
  local_38 = 2;
  iVar2 = atoi("1337");
  local_36 = htons((uint16_t)iVar2);
  local_34 = *(undefined4 *)*local_20->h_addr_list;
  memset(auStack48,0,8);
  __n = strlen(local_1c);
  local_28 = sendto(local_24,local_1c,__n,0,(sockaddr *)&local_38,0x10);
  if (local_28 == -1) {
    perror("sendto");
                    /* WARNING: Subroutine does not return */
    exit(1);
  }
  close(local_24);
                    /* WARNING: Subroutine does not return */
  exit(0);
}

En el pseudo-código se puede ver en la línea 54 la cual corresponde al envío del error en caso de no poder escribir en el socket que se usa la función sendto. Busco dicha función y me encuentro que solo es compatible con UDP. https://linux.die.net/man/2/sendto

Por lo tanto, abro dos conexiones SSH, una con un listener en el puerto 1337 y en la otra ejecuto el binario.

behemoth5@behemoth:/behemoth$ ./behemoth5
behemoth5@behemoth:~$ nc -ulp 1337
mayiroeche