Manipuler les requêtes HTTP avec Mitmproxy

Mitmproxy est un outil en ligne de commande permettant d’effectuer de l’interception de requêtes HTTP et HTTPS dans le but de contrôler les informations transmises. Il est également possible de modifier les éléments entrant et sortant à la volée.

Installation

Mitmproxy est disponible ici. Pour l’utiliser, il faut configurer le navigateur pour que celui ci passe par le proxy.

Sous Firefox

il faut aller dans l’onglet options, puis dans l’onglet réseau comme ci dessous.

option firefox

Une fois dans ce menu, cliquer sur paramètre et une fenêtre s’ouvrira. Il faudra alors préciser le proxy manuellement comme dans l’exemple ci dessous :

Conf proxy

Une fois ces configurations effectuées, nous lançons mitmproxy à l’aide de la commande suivante.

mitmproxy no option

Un écran apparait alors :

ecran mitmproxy

Utilisation basique

Interception et inspection des requêtes

Une fois mitmproxy démarré et nous pouvons commencer à naviguer sur le net. Chaque requête transitant par le proxy est affichée :

tracerequeteExtrait des requêtes tracées. On peut y voir le curseur jaune sur le premier GET. Sous chaque requête se trouve le code de réponse du serveur.

Pour voir le détail d’une requête il suffit de placer le curseur dessus et d’appuyer sur entrée. Nous avons alors l’ensemble des éléments (headers, paramètres, cookies etc…) affichés.

reqgooglePour voir la réponse correspondant à la requête, il suffit de presser la touche TAB. On y voit également un bon nombre d’éléments.

ans google

Altération de paramètre

Lorsque l’on veut faire de l’altération de paramètres à la volée, il faut que mitmproxy bloque la requête avant de l’envoyer. Pour cela, on précise l’option i suivie d’une expression qui permettra de cibler quelles requêtes doivent être retenues. Pour intercepter l’ensemble des requêtes on utilise l’expression « .* »  qui peut se traduire par « arrêter n’importe quel chaine de caractère quelque soit sa taille »:

mitmproxi option i Les requêtes bloquées sont inscrites en orange par mitmproxy : intercept req Ce système de filtre est extrêmement efficace. Par exemple, pour n’intercepter que les requêtes que notre ordinateur envoie à Google on peut utiliser remplacer « .* » par « www.google » :

block google

Pour modifier les paramètre, on entre dans le détail de la requête puis l’on presse la touche « e » pour se mettre en mode édition. mitmproxy nous demande quelle partie de la requête nous souhaitons modifier :

Choix modifChoix proposés par mitmproxy. pour sélectionner une option, il suffit d’entrer la lettre en surbrillance bleue

On peut alors sélectionner le champs à modifier et lui insérer une nouvelle valeur.

édition

Menu d’édition : modification du User-agent en cours

Une fois la requête modifiée, on revient sur la fenêtre principale à l’aide de la touche « q » puis nous pouvons l’envoyer en appuyant sur la touche « a ».  Vous devrez utiliser cette touche pour envoyer une à une chaque requête bloquée par mitmproxy. Si vous souhaitez envoyer l’ensemble des requêtes interceptées d’un seul  coup il faut utiliser le « A » (majuscule).

Scripts

Le gros avantage de mitmproxy par rapport à des solutions similaires telles que burpsuite, c’est la possibilité de créer des scripts en python qui appliquerons divers transformations sur les requêtes et ce, en fonction de condition ou « event » :

  • request( ScriptContext, HTTPFlow) : l’action sera exécutée à chaque fois qu’une requête client est interceptée par le proxy
  • reponseheaders(ScriptContext, HTTPFlow) : l’action sera exécutée à chaque fois que le proxy recevra les headers d’une réponse du serveur.
  • reponse(ScriptContext, HTTPFlow) : l’action sera exécutée à chaque fois que le proxy recevra une réponse du serveur.
  • error : appelé lorsqu’une erreur se produit au sein d’un flux intercepté par le proxy.

Cette fonctionnalité est extrêmement utile pour automatiser certaines tâches répétitives ou pour créer un filtrage entièrement personnalisé. voici un exemple de script remplaçant automatiquement la valeur des champs comportant la chaine « name » dans les requêtes POST :

scriptexampleVoila l’effet du script lors de la connexion.

login scriptscriptloginlogin inter script

                          Avant   ————————> mitmproxy  ————————–> Après

Il est possible d’utiliser l’option ‘–script’ autant de fois qu’on le souhaite : scriptscript

Options

Mitmproxy possède un grand nombre d’options qui permet une grande adaptabilité en fonction des situations. Il est difficile d’être exhaustive Pour consulter la liste des options, on peut utiliser ‘–help’.

Chainage de proxy

Il est possible de rediriger les requêtes interceptées par mitmproxy vers un second proxy en précisant l’option U.

option U

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s