Hacker Challenge

Hackvens 2023 - Write Up PWN - Random

Parviendrez vous à deviner le code secret ? Défi relevé !

Par :

Bdenneu

November 28, 2023

Enoncé

Parviendrez vous à deviner le code secret ?

nc 13.237.218.78 1337

‍

Random ?

‍

Reconnaissance

Le binaire « random.elf » qui est fourni est un exécutable linux x86-64.

‍

file random.elf

‍

En termes de protections:

  • Full RELRO: La Global Offset Table (GOT) n’est pas réinscriptible.
  • No canary: Pas de protections contre les buffers overflow
  • NX: La stack n’est pas exécutable
  • PIE: Les adresses du programme seront aléatoires (à un offset près)

checksec random.elf

‍

Reverse

‍

Fonction main

‍

Le programme va lire 0x1d bytes dans /dev/random.

‍

call à/dev/random

‍

Ensuite, le programme va lire 0x1d bytes depuis stdin.

‍

call à strcmp et getFlag

‍

Enfin, le programme va appeler strcmp pour comparer les deux chaînes de caractères. Si les deux sont égales, la fonction getFlag, qui affiche le flag est appelée.

‍

La vulnérabilité

‍

Comparé à strncmp, qui spécifie une taille précisée en argument, strcmp s’arrête aux null bytes.

Ainsi, avec une chance sur 256, la chaine de caractère aléatoire commencera par un null byte, et notre entrée sera comparé avec la chaine de caractère vide.
Plus qu’à bruteforce!

‍

man strcmp

Solve.py

‍

from pwn import *
data = b''
while data == b'':
r = remote('15.237.218.78', 1337, level='error')
print(r.recvuntil(b'\n\n'))
print(r.recvuntil(b'\n\n'))
r.send(b'\x00')
data = r.recvrepeat(0.1)
print(data)
r.close()

‍

Flag

‍

J’ai oublié de faire un screen du flag ^^

Que savent les hackers sur votre entreprise ?
Faire le test