Capture de paquets en un clic¶
La fonctionnalité de capture de paquets Man-in-the-Middle en un clic permet d'activer automatiquement une interception globale sur l'appareil. Sa différence par rapport aux outils que vous utilisez habituellement réside dans le fait que vous n'avez pas à vous soucier de l'installation de certificats ou de la configuration du proxy, ni des différences de méthodes de capture entre les différentes versions du système. Elle s'applique de manière transparente à Android 6.0 - 14. Nous avons tout géré pour vous, vous n'avez qu'à vous concentrer sur vos tâches spécifiques. De plus, elle prend en charge la modification et l'interception de paquets en temps réel, ce qui la rend plus adaptée à une utilisation professionnelle concrète que les programmes GUI habituels, qui se limitent souvent à "jeter un œil aux paquets".
En outre, nous pouvons vous garantir qu'aucun paquet ne sera manqué (à l'exception du certificate pinning), et le taux de réussite de la capture est plus élevé que celui des méthodes logicielles conventionnelles. Vous pouvez intercepter le trafic HTTP/S des applications. Elle peut appliquer et révoquer automatiquement l'interception Man-in-the-Middle. Après avoir quitté le script, l'appareil et le réseau retrouveront leur état d'origine, vous n'avez aucune autre configuration à faire. Le script prend également en charge la capture de paquets MITM internationale (via un proxy en amont), vous permettant d'intercepter facilement le trafic des logiciels étrangers.
Attention
Prérequis¶
Assurez-vous d'abord que votre ordinateur et l'appareil sont sur le même sous-réseau, ou connectés via USB. Nous supposerons par la suite que 192.168.0.2 est l'adresse IP de l'appareil mobile exécutant FIRERPA. Ensuite, assurez-vous d'avoir correctement cloné le code du projet et installé les dépendances nécessaires. Vérifiez que mitmproxy est installé avec succès en ligne de commande (vous pouvez le vérifier en tapant mitmdump dans la ligne de commande).
Si vous n'avez pas Python et n'êtes pas familier avec le clonage et les dépendances, vous pouvez télécharger startmitm.exe depuis notre page de publications (releases). Il s'agit d'une version packagée de startmitm.py, vous pouvez exécuter la capture de paquets sans installer Python. C'est une application en console, et ses paramètres de commande sont identiques à ceux de startmitm.py (ce fichier peut être signalé comme un virus, veuillez décider vous-même de l'utiliser ou non).
Capture de base¶
Astuce
Vous pouvez rapidement commencer la capture avec la commande suivante, c'est la méthode d'utilisation la plus simple.
python3 -u startmitm.py 192.168.0.2
Important
Appuyez une fois sur la combinaison de touches CONTROL + C pour quitter la capture, veuillez ne pas appuyer plusieurs fois de suite.
Capture partagée¶
Si vous souhaitez analyser les paquets avec des collègues sur le même réseau local, exécutez la commande suivante, puis demandez à vos collègues d'ouvrir http://votre_adresse_ip:7890 dans leur navigateur pour voir la même page de capture que vous. Vous pourrez ainsi analyser les données ensemble.
python3 -u startmitm.py 192.168.0.2 --web-port 7890 --web-host 0.0.0.0
Application spécifique¶
Si vous avez besoin d'intercepter le trafic d'une application spécifique, plutôt que le trafic de l'ensemble du système, vous pouvez ajouter :nom_du_package après l'adresse IP pour capturer les données de trafic de cette application. L'exemple suivant n'interceptera que le trafic de com.some.package.
python3 -u startmitm.py 192.168.0.2:com.some.package
Modification en temps réel¶
Vous pouvez modifier les données de requête et de réponse de l'application en temps réel. Cette fonctionnalité est basée sur les hooks d'événements de mitmproxy. Vous devez écrire vous-même un script de hook en vous basant sur l'API de mitmproxy. Pour savoir comment écrire des scripts de hook, veuillez vous référer à la documentation officielle de mitmproxy docs.mitmproxy.org/stable/addons-examples ainsi qu'aux exemples de code mitmproxy/examples/contrib.
Supposons que votre script de hook s'appelle http_flow_hook.py, utilisez la commande suivante pour l'appliquer.
python3 -u startmitm.py 192.168.0.2 -s http_flow_hook.py
Réseaux différents¶
Si votre téléphone et votre ordinateur ne sont pas sur le même réseau, mais que vous avez un accès physique à l'appareil, vous pouvez également effectuer la capture via USB ADB. Assurez-vous que l'appareil est connecté à l'ordinateur via USB ADB et qu'il a été correctement autorisé.
Si un seul appareil ADB est connecté à l'ordinateur, utilisez la commande suivante pour la capture. localhost représente l'utilisation de l'appareil ADB.
python3 -u startmitm.py localhost
Si plusieurs appareils ADB sont connectés à l'ordinateur, vous devez spécifier le numéro de série adb, que vous pouvez trouver dans la sortie de la commande adb devices.
python3 -u startmitm.py localhost --serial bfde362
Si votre environnement est plus contraignant, par exemple, si le téléphone et l'ordinateur ne sont ni sur le même réseau, ni physiquement accessibles, mais que vous pouvez accéder au port de FIRERPA, vous pouvez toujours effectuer l'interception. C'est généralement le cas si vous avez utilisé le service frp intégré pour transférer FIRERPA vers un serveur distant, ou si vous avez transféré le port 65000 de FIRERPA quelque part par vos propres moyens. Dans ce cas, vous ne pouvez communiquer avec FIRERPA que via ce port unique, les autres ports étant inaccessibles. Dans cette situation, le téléphone ne peut accéder à aucun port de votre machine, et votre machine ne peut accéder qu'au port FIRERPA du téléphone (ou le téléphone a une IP publique, mais votre machine est sur un réseau interne). Il faut alors procéder de la manière suivante. (Un réseau OpenVPN où les machines communiquent entre elles ne correspond pas à ce cas de figure).
Dans ce cas, il faut utiliser la combinaison de commandes suivante. D'abord, utilisez adb_pubkey.py ou appelez l'interface vous-même pour installer votre clé publique ADB sur l'appareil. Une fois l'installation terminée, continuez avec les étapes suivantes, où x.x.x.x est l'adresse IP ou 127.0.0.1 qui peut se connecter au port 65000, à modifier selon votre situation.
adb connect x.x.x.x:65000
Enfin, procédez de la même manière que ci-dessus pour la capture via USB.
python3 -u startmitm.py localhost
Ou comme ceci, où le serial est l'adresse de adb connect et non le numéro de série hexadécimal.
python3 -u startmitm.py localhost --serial x.x.x.x:65000
Proxy en amont / Capture internationale¶
startmitm lance lui-même mitmproxy en tant que service proxy. Par défaut, le trafic est envoyé par mitmproxy depuis la carte réseau locale. Si vous avez besoin que le trafic passe par un proxy en amont plutôt que par votre machine locale, vous pouvez spécifier un proxy en amont de la manière suivante. Seuls les proxys utilisant le protocole HTTP sont pris en charge comme proxy en amont. Vous devez également spécifier un DNS en amont qui prend en charge les requêtes TCP pour éviter la pollution DNS.
Conseil
python3 -u startmitm.py 192.168.0.2 --upstream http://127.0.0.1:7890 --proxy-dns 8.8.8.8
Si le proxy HTTP en amont nécessite une authentification, veuillez utiliser la commande suivante et remplacer USER:PASSWORD.
python3 -u startmitm.py 192.168.0.2 --upstream http://USER:PASSWORD@x.x.x.x:8080 --proxy-dns 8.8.8.8
Toutes les commandes ci-dessus enverront le trafic de l'appareil via le proxy en amont (upstream), et enverront toutes les requêtes DNS de la machine locale à 8.8.8.8 via le proxy.