Dans les TDs et CTFs suivants, nous aurons besoins de pouvoir forger des requêtes HTTP.
Nous vous proposons pour clea de vous familiariser avec la librairie requests
de Python.
La page suivante vous permettra de réaliser des tests :
pour information, code source php
Cette page affiche toutes les informations qui lui sont transmises par la requête HTTP (méthode, données GET/POST, cookies, un compteur stocké dans une session, etc.).
Le code minimal en Python pour envoyer une requête HTTP est le suivant :
import requests
url = 'https://gregwar.com/security/apps/echo/'
r = requests.get(url)
print(r.text)
requests
Pour changer la méthode, appeler la fonction correspondante :
r = requests.post(url)
r = requests.put(url)
r = requests.delete(url)
r = requests.head(url)
...
GET
Vous pouvez passer des paramètres GET
(dans la query string) en utilisant le paramètre
params
:
# Passera ?hello=world
r = requests.get(url, params={'hello': 'world'})
POST
Pour passer des paramètres POST
, utilisez le paramètre data
:
# Passera le paramètre POST hello=world
r = requests.post(url, data={'hello': 'world'})
Pour passer des cookies, utilisez le paramètre cookies
:
# Passera le cookie hello=world
r = requests.get(url, cookies={'hello': 'world'})
Pour passer des en-têtes, utilisez le paramètre headers
:
# Passera l'en-tête X-Hello: world
r = requests.get(url, headers={'X-Hello': 'world'})
Pour enregistrer les cookies automatiquement, il est possible de créer une session :
s = requests.Session()
s.get(url)
r = s.get(url)
print(r.text) # Les cookies sont enregistrés entre les deux appels
Avec la page echo ci-dessus, vous verrez que le cookie de session PHP aura été enregistré, et que la valeur du compteur en session aura augmenté.
Pour un des challenges, vous aurez besoin de générer des images en Python. Voici un exemple de code pour générer une image de 25x25 pixels, et mettre un pixel noir en (5, 5) :
from PIL import Image
# Create a 25x25 image
img = Image.new('RGB', (25, 25), "white")
# Définit en noir la couleur du pixel (5, 5)
img.putpixel((5, 5), (0, 0, 0))
# Show the image
img.show()