Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
TeamsPhisher — Envoyer des messages et pièces jointes de phishing aux utilisateurs de Microsoft Teams | Kitploit
Outils/GitHubGitHub/octoberfest7/teamsphisher
Outils de PhishingReconnaissanceCollecte d'InformationsHameçonnageTests d'IntrusionIngénierie SocialeRed Teaming
GitHuboctoberfest7/teamsphisher

TeamsPhisher

Envoyer des messages et pièces jointes de phishing aux utilisateurs de Microsoft Teams

Voir le dépôt
1.1k142il y a 2 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
root@kitploit:~
                            ...                                               
                        :-++++++=-.                                           
                      .=+++++++++++-                                          
                     .++++++++++++++=     :------:                            :-:--.                 
                     :+++++++++++++++.  .----------                           #= .-+.                
                     :+++++++++++++++.  -----------:                         :#=  :#.                   
:--------------------------=++++++++-  .------------                          .=+  ++                
----------------------------+++++*+-.   :+=-----===:                          -+-.+:                 
:---------------------------++++=-.      .=+++++=-.                           .=+:.                    
:------=%%%%%%%%%%%%--------:...           .:::..                              -*=-:                
:------=****#@@#****--------=++++++++++++++-----------.                        -#++-                   
:----------:+@@+:-----------+++++++++++++++=-----------                        -#++-                  
:-----------+@@*------------+++++++++++++++=-----------.                       -*+*-                  
:-----------+@@*------------+++++++++++++++=-----------.                   .   -*++-                    
:-----------+@@*------------+++++++++++++++=-----------.                   --  -*++-                  
:-----------+@@*------------+++++++++++++++=-----------.           .       ==  -*++-                .=
:-----------+@@+------------+++++++++++++++=-----------.          .+       -=  :+==-                .*
:---------------------------+++++++++++++++=-----------.          =*       -=  -+=+=                .::
----------------------------+++++++++++++++=-----------           **       -+  -+=++.               .*=
.:-------------------------=+++++++++++++++=---------=:           #+       :=  ++-:*=                ==
                -++++++++++++++++++++++++++=-------=+=:          :#=       .:. *=: -*-               ==
                .=+++++++++++++++++++++++++*+++++++=-.           -#-        ::++=   :+=.            .==
                :++++++++++++++++++++++++=:.:::::.               -*:        .=+-.    .=+-.          -+:
                .=+*+++++++++++++++++++-                         -+-      .:-=.        .-====----:-==:
                    .-+**+++++++++++**+-.                        .++:   .-=-:             .:-====-:.
                    :-=++******+=-:                               .=+===--.                  
                        ..:::..                                      ...                     
                                    
                   _____                            ______  _      _       _                 
                  |_   _|                           | ___ \| |    (_)     | |                
                    | |  ___   __ _  _ __ ___   ___ | |_/ /| |__   _  ___ | |__    ___  _ __ 
                    | | / _ \ / _` || '_ ` _ \ / __||  __/ | '_ \ | |/ __|| '_ \  / _ \| '__|
                    | ||  __/| (_| || | | | | |\__ \| |    | | | || |\__ \| | | ||  __/| |   
                    \_  \___| \__,_||_| |_| |_||___/\_|    |_| |_||_||___/|_| |_| \___||_|   
                  
                    v1.2 developed by @Octoberfest73 (https://github.com/Octoberfest7)

Présentation

TeamsPhisher est un programme Python3 qui facilite l'envoi de messages et pièces jointes de phishing aux utilisateurs de Microsoft Teams dont les organisations autorisent les communications externes.

Il n'est normalement pas possible d'envoyer des fichiers aux utilisateurs Teams en dehors de son organisation. Max Corbridge (@CorbridgeMax) et Tom Ellson (@tde_sec) de JUMPSEC ont récemment divulgué un moyen de contourner cette restriction en manipulant les requêtes web Teams afin de modifier le destinataire d'un message avec une pièce jointe.

TeamsPhisher intègre cette technique en plus de quelques techniques antérieures divulguées par Andrea Santese (@Medu554).

Il s'appuie également fortement sur TeamsEnum, un excellent travail de Bastian Kanbach (@bka) de SSE, pour la partie authentification du flux d'attaque ainsi que pour certaines fonctions d'assistance générales.

TeamsPhisher cherche à tirer le meilleur de tous ces projets et à fournir un moyen robuste, personnalisable et efficace pour que les opérations autorisées de Red Team puissent utiliser Microsoft Teams pour le phishing dans des scénarios d'accès.

Voir la fin de ce README pour les recommandations d'atténuation.

Fonctionnalités et démonstration

Donnez à TeamsPhisher une pièce jointe, un message et une liste d'utilisateurs Teams cibles. Il téléchargera la pièce jointe sur le Sharepoint de l'expéditeur, puis parcourra la liste des cibles.

TeamsPhisher va d'abord énumérer l'utilisateur cible et s'assurer que l'utilisateur existe et peut recevoir des messages externes. Il créera ensuite un nouveau fil de discussion avec l'utilisateur cible. Notez qu'il s'agit techniquement d'un chat de "groupe" car TeamsPhisher inclut deux fois l'email de la cible ; c'est une astuce sympa de @Medu554 qui permet de contourner l'écran de démarrage "Quelqu'un en dehors de votre organisation vous a envoyé un message, êtes-vous sûr de vouloir le voir ?" qui pourrait faire hésiter nos cibles. (v1.2) Remarque : ce contournement de l'écran de démarrage a été corrigé, mais l'ajout de l'utilisateur cible à un chat de groupe est toujours pertinent pour le contournement actuel de l'écran de démarrage.

Une fois le nouveau fil créé entre notre expéditeur et la cible, le message spécifié sera envoyé à l'utilisateur avec un lien vers la pièce jointe dans Sharepoint.

Une fois ce message initial envoyé, l'utilisateur cible sera retiré du chat de groupe créé. Cela supprime la capacité de l'expéditeur à envoyer d'autres messages à la cible, mais cela supprime également l'écran de démarrage "Cette personne est extérieure à votre organisation" et augmente considérablement les chances de succès. Ce contournement actuel a été publié par @pfiatde dans un de ses nombreux blogs concernant Teams et les comportements non intentionnels et intégré dans TeamsPhisher par Steve Nelson (@stevesec128) et Alex Martirosyan (@almartiros) de DenSecure.

Mode opérationnel

Exécutez TeamsPhisher en réel. Envoyez des messages de phishing aux cibles.

Commande :
alt text

Targets.txt:
alt text

Message.txt: alt text

Sortie de TeamsPhisher:
alt text

Vue de l'expéditeur:
alt text

Vue de la cible:
alt text

Fichier joint:
alt text

Mode aperçu

Exécutez TeamsPhisher en mode aperçu afin de vérifier votre liste de cibles, prévisualiser leurs "noms conviviaux" (si TeamsPhisher peut les résoudre à l'aide du commutateur --personalize), et envoyer un message test à votre propre compte d'expéditeur pour vérifier que tout semble comme vous le souhaitez.

Sortie de TeamsPhisher:
alt text

Vue de l'expéditeur:
alt text

Configuration et prérequis

TeamsPhisher nécessite que les utilisateurs aient un compte Microsoft Business (par opposition à un compte personnel, par exemple @hotmail, @outlook, etc.) avec une licence Teams et Sharepoint valide.

Cela signifie que vous aurez besoin d'un locataire AAD et d'au moins un utilisateur disposant d'une licence correspondante. Au moment de la publication, certaines licences d'essai gratuites sont disponibles dans le centre de licences AAD qui répondent aux exigences de cet outil.

Vous devrez vous connecter au Sharepoint personnel de l'utilisateur avec lequel vous allez envoyer des messages au moins une fois avant d'utiliser le compte avec TeamsPhisher. Cela devrait ressembler à quelque chose comme tenantname-my.sharepoint.com/personal/myusername_mytenantname_onmicrosoft_com ou tenantname-my.sharepoint.com/personal/myusername_mytenantname_mycustomdomain_tld.

En ce qui concerne les exigences locales, je recommande de mettre à jour vers la dernière version de Python3. Vous aurez également besoin de la bibliothèque d'authentification de Microsoft :``` pip3 install msal

root@kitploit:~
# Utilisation```
usage: teamsphisher.py [-h] -u USERNAME -p PASSWORD -a ATTACHMENT -m MESSAGE (-e EMAIL | -l LIST) [--greeting GREETING] [--securelink] [--personalize]
                       [--preview] [--delay DELAY] [--nogreeting] [--log] [--sharepoint SHAREPOINT]

options:
  -h, --help            show this help message and exit
  -u USERNAME, --username USERNAME
                        Username for authentication
  -p PASSWORD, --password PASSWORD
                        Password for authentication
  -a ATTACHMENT, --attachment ATTACHMENT
                        Full path to the attachment to send to targets.
  -m MESSAGE, --message MESSAGE
                        A file containing a message to send with attached file.
  -e EMAIL, --targetemail EMAIL
                        Single target email address
  -s SHAREPOINT, --sharepoint SHAREPOINT
                        Manually specify sharepoint name (e.g. mytenant.sharepoint.com would be --sharepoint mytenant)
  -l LIST, --list LIST  Full path to a file containing target emails. One per line.
  --greeting GREETING   Override default greeting with a custom one. Use double quotes if including spaces!
  --securelink          Send link to file only viewable by the individual target recipient.
  --personalize         Try and use targets names in greeting when sending messages.
  --preview             Run in preview mode. See personalized names for targets and send test message to sender's Teams.
  --delay DELAY         Delay in [s] between each attempt. Default: 0
  --nogreeting          Do not use built in greeting or personalized names, only send message specified with --message
  --log                 Write TeamsPhisher output to logfile

Required arguments

Nom d'utilisateur

Le nom d'utilisateur du compte Microsoft à partir duquel vous enverrez des messages (par ex. [email protected])

Mot de passe

Le mot de passe du compte susmentionné. S'il contient des caractères spéciaux, il peut être utile de l'entourer de guillemets simples.

Pièce jointe

Le fichier que vous souhaitez envoyer aux utilisateurs cibles. Celui-ci sera téléchargé sur le sharepoint du compte expéditeur et un lien sera partagé via Teams.

Message

Un fichier contenant le message texte qui doit accompagner la pièce jointe et être envoyé aux cibles

Email / Liste

Soit un email cible unique (par ex. [email protected]) soit un fichier contenant une liste d'emails cibles, un par ligne.

Arguments et fonctionnalités optionnels

Sharepoint

Spécifiez manuellement le nom du site sharepoint sur lequel télécharger la pièce jointe. Cela sera probablement nécessaire si le locataire de votre expéditeur utilise un nom de domaine personnalisé (par exemple, ne suit pas la convention xxx.onmicrosoft.com). Spécifiez uniquement le nom unique, par exemple si votre site sharepoint est mytest.sharepoint.com, vous utiliserez --sharepoint mytest

Salutation

Remplacez la salutation par défaut de TeamPhisher ("Hi, ") par une salutation personnalisée qui sera ajoutée au message spécifié par --message. Par exemple, "Good afternoon, " ou "Sales team, "

Securelink

Par défaut, le lien sharepoint envoyé aux cibles peut être consulté par toute personne disposant du lien ; utilisez --securelink pour que le fichier sharepoint ne soit visible que par la cible qui l'a reçu. Peut aider à protéger votre malware de l'équipe Blue.

Personnalisation

TeamsPhisher tentera d'identifier le prénom de chaque utilisateur cible et de l'utiliser avec la salutation. Par exemple, [email protected] recevrait un message commençant par "Hi Tom, ". Ce n'est pas parfait et dépend du format des emails cibles ; utilisez --preview pour voir si cela convient à votre liste de cibles.

Aperçu

TeamsPhisher s'exécutera en mode aperçu. Cela n'enverra PAS de messages aux utilisateurs cibles, mais affichera le nom "convivial" qui serait utilisé par l'option --personalize. De plus, un message test représentatif de ce que les cibles recevraient avec les paramètres actuels sera envoyé au Teams de l'expéditeur ; connectez-vous et voyez à quoi ressemble votre message et révisez-le si nécessaire.

Délai

Spécifiez un délai de x secondes entre les messages aux cibles. Peut aider à résoudre d'éventuels problèmes de limitation de débit.

Pas de salutation

Désactive la salutation intégrée utilisée par TeamsPhisher. Désactive également la fonctionnalité --personalize. Utilisez cette option si vous incluez votre salutation dans le message spécifié par --message.

Journal

Écrire la sortie de TeamsPhisher dans un fichier journal (écrit dans le répertoire personnel de l'utilisateur).

Exemples```

python3 teamsphisher.py -u [email protected] -p 'xxxxxxxxxxxx' -l /root/targets.txt -a /root/attachment.zip -m /root/message.txt --log

root@kitploit:~
Cette commande récupérera les jetons d'accès pour le compte testuser et téléversera la pièce jointe '/root/attachment.zip' vers le Sharepoint de testuser.  

Il créera ensuite un fil Teams unique avec chaque cible listée dans '/root/targets.txt' et leur enverra le message spécifié dans '/root/message.txt' ainsi qu'un lien vers la pièce jointe dans Sharepoint.  

Toute la sortie terminal de TeamsPhisher sera enregistrée dans un fichier qui est produit dans le répertoire personnel de l'utilisateur.```
python3 teamsphisher.py -u [email protected] -p 'xxxxxxxxxxxx' -l /root/targets.txt -a /root/attachment.zip -m /root/message.txt --greeting "Good afternoon" --personalize --securelink

Cette commande récupérera les jetons d'accès pour le compte testuser et téléchargera la pièce jointe '/root/attachment.zip' vers le Sharepoint de testuser.

Ensuite, il créera un fil Teams unique pour chaque cible listée dans '/root/targets.txt' et leur enverra le message spécifié dans '/root/message.txt' ainsi qu'un lien vers la pièce jointe dans Sharepoint.

Le message sera précédé de la formule de salutation "Good afternoon , ".

TeamsPhisher essaiera d'utiliser des noms « conviviaux » dans la salutation. Désormais, la salutation sera « Good afternoon , ».

Chaque lien SharePoint envoyé est unique et valide uniquement pour cette cible spécifique.

Fonctionnalités supplémentaires et commentaires

Énumération des comptes

TeamsPhisher identifiera les comptes qui ne peuvent pas recevoir de messages d'organisations externes, les comptes qui n'existent pas et les comptes dont le plan d'abonnement n'est pas compatible avec ce vecteur d'attaque :

alt text

Comptes avec MFA activé

Grâce au code du projet TeamsEnum, TeamsPhisher prend en charge la connexion avec des comptes expéditeurs utilisant MFA :

alt text

Liens SharePoint sécurisés

L'utilisation du commutateur --securelink amènera les cibles à s'authentifier pour voir la pièce jointe dans Sharepoint. Vous pouvez décider si cela ajoute trop d'étapes supplémentaires, ou si cela ajoute une « légitimité » en les envoyant via une véritable fonctionnalité de connexion Microsoft.

alt text

alt text

Variables globales

En modifiant TeamsPhisher.py, vous pouvez modifier quelques variables globales pour les exécutions suivantes :```

Global Options and Variables

Greeting: The greeting to use in messages sent to targets. Will be joined with the targets name if the --personalize flag is used

Examples: "Hi" "Good Morning" "Greetings"

Greeting = "Hi"

useragent: The user-agent string to use for web requests

useragent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)"

root@kitploit:~
## Personnalisation et noms « amicaux »

Les indicateurs --personalize tenteront de résoudre un nom « amical » pour chaque cible ; ils le font en examinant les données renvoyées par la fonction enumUser et en vérifiant d'abord le champ « displayName ».  

Si le champ displayName contient un espace (par exemple « Tom Jones »), TeamsPhisher divisera à l'espace et prendra le premier segment comme nom « amical ».

S'il n'y a pas d'espace dans le champ displayName (par exemple, certaines organisations peuvent mettre l'UPN dans le champ displayName comme [email protected]), TeamsPhisher tentera d'analyser l'UPN lui-même.

Avec un exemple d'UPN comme [email protected], TeamsPhisher divisera au caractère '@', puis dans le premier segment divisera au caractère '.' et prendra le premier segment. Cela donnerait un nom « amical » de « Tom » dans ce cas.

C'est l'étendue de la façon dont TeamsPhisher tentera d'identifier les noms « amicaux ». Les cibles comme « [email protected] » et « [email protected] » n'auront PAS de noms « amicaux » identifiés si leurs champs displayName ne correspondent pas à la convention d'analyse décrite ci-dessus.

# Atténuation

Les organisations peuvent atténuer le risque posé par cette vulnérabilité en gérant les options relatives à l'accès externe via le centre d'administration Microsoft Teams sous Utilisateurs -> Accès externe.

![alt text](https://assets.kitploit.com/production/public/readmes/6252/cc6c2bbf7e6c11997a47b0b38259fea96278543ae5477ed1367caf5a88479850.jpg)

Microsoft offre une flexibilité aux organisations pour choisir les meilleures autorisations adaptées à leurs besoins, y compris un bloc universel ainsi qu'une liste blanche de locataires externes spécifiques pour les communications.

![alt text](https://assets.kitploit.com/production/public/readmes/6252/dcaf730f7c522bfcf4e11800631f663550315079570778aee78784164e22aabe.jpg)

# Journal des modifications  
## v1.2
Fusionne une demande d'extraction de l'équipe de DenSecure qui inclut un contournement fonctionnel (à compter du 02/07/24) de l'écran d'accueil des utilisateurs externes.

La modification du flux de travail de TeamsPhisher est heureusement très mineure et facile à intégrer. Après la création du chat de groupe avec un utilisateur cible et l'envoi du message, une demande supplémentaire est faite pour retirer l'utilisateur cible du chat de groupe. Cela fait que l'utilisateur reçoit le message sans écran d'accueil d'utilisateur externe.  

Mise à jour du README avec des informations plus récentes concernant la technique actuellement utilisée par TeamsPhisher.  

## v1.1.2
Correction d'une erreur signalée par les utilisateurs concernant le téléchargement de la pièce jointe vers Sharepoint ; cela provenait des conventions de nommage/renommage qui se produisent lorsque les utilisateurs utilisent un domaine personnalisé avec leurs locataires. 

Ajout d'une vérification pour s'assurer que si les utilisateurs utilisent un domaine NON @domain.onmicrosoft.com, ils utilisent également l'option -s afin de spécifier manuellement leur site Sharepoint pour éviter des problèmes.

Mise à jour de la section de configuration pour inclure la connexion à Sharepoint au moins une fois avant d'utiliser TeamsPhisher, car un utilisateur a identifié que ne pas s'être connecté auparavant avec le compte ferait échouer TeamsPhisher.

Ajout du paramètre &top=999 à la requête web getSenderInfo pour augmenter le nombre d'utilisateurs récupérés par page/réduire le nombre de requêtes nécessaires pour trouver notre utilisateur. 

### Inversion du changement concernant l'analyse des '.' dans les noms d'utilisateur lors de l'assemblage de l'URI Sharepoint
v1.1 a modifié la façon dont les noms d'utilisateur contenant le caractère '.' étaient analysés pour créer les URI Sharepoint nécessaires. Il y avait plusieurs problèmes distincts et j'ai identifié par erreur celui-ci comme la cause de l'un d'eux. Ce changement a été annulé. Le résultat est qu'un nom d'utilisateur comme [email protected] aura désormais un URI Sharepoint assemblé comme « tom_jones_mytest_onmicrosoft_com » plutôt que « tom.jones_mytest_onmicrosoft_com ».  

## v1.1.1
Corrections mineures  

## v1.1
Quelques commits ont été effectués pour résoudre divers petits problèmes sans incrémenter le numéro de version ; désolé pour le manque de rigueur. 

v1.1 apporte quelques modifications visant à résoudre certains problèmes courants rencontrés par les utilisateurs.

### -s, --sharepoint argument
Cette option facultative a été ajoutée pour permettre aux utilisateurs de spécifier manuellement leur nom racine Sharepoint. Un problème courant est survenu lorsque les utilisateurs avaient changé le nom de domaine de leur locataire pour un domaine personnalisé ; par exemple, plutôt que leur nom d'utilisateur soit [email protected], il pourrait être [email protected]. La version originale de TeamsPhisher assemblait l'adresse Sharepoint et les chemins URI nécessaires en analysant le nom d'utilisateur principal (UPN) de l'expéditeur à partir de ses informations utilisateur. Lorsque le domaine d'un locataire est modifié en un domaine personnalisé, les UPN des utilisateurs changent pour refléter cela. Cependant, l'adresse Sharepoint du locataire reste toujours la même/ce qu'elle était lors de la création initiale du locataire.

Je n'ai pas trouvé de bon moyen de résoudre l'adresse Sharepoint actuelle d'un locataire ; cela peut être fait facilement avec l'API Graph, mais implémenter Graph dans cet outil nécessiterait beaucoup plus de configuration de la part des utilisateurs pour utiliser TeamsPhisher. J'ai opté pour fournir l'option de spécifier manuellement le nom Sharepoint comme la solution la plus simple.

### Analyse améliorée de l'adresse Sharepoint et de l'URI nécessaire lorsque l'option manuelle N'est PAS utilisée
Un utilisateur qui n'utilisait PAS de domaine personnalisé avec son locataire a signalé qu'il recevait toujours l'erreur 404 non trouvé concernant Sharepoint. Je pense que cela était lié au fait que son nom d'utilisateur contenait un '.' par exemple [email protected]. La version précédente de TeamsPhisher avait une fonctionnalité de recherche + remplacement plus simple pour l'UPN de l'utilisateur afin d'assembler les URI Sharepoint nécessaires ; v1.1 cible désormais spécifiquement les caractères '.' qui doivent être remplacés et laissera les autres '.' dans le champ du nom d'utilisateur intacts.

### Les caractères spéciaux (par exemple 'ö') dans le corps du message n'entraînent plus d'erreur serveur
C'était une correction très simple qui a pris beaucoup trop de temps à identifier. Ajout de l'encodage utf-8 à la requête POST sendFile. Les caractères spéciaux peuvent désormais être utilisés dans les messages.

### Nettoyage mineur du code
Correction de quelques commentaires et réorganisation de certaines étapes dans main pour vérifier maintenant les fichiers requis avant de tenter de s'authentifier.  

## v1.0 - Version initiale

# Crédits et remerciements 

1. Max Corbridge (@CorbridgeMax) et Tom Ellson (@tde_sec) de JUMPSEC pour [cet article](https://labs.jumpsec.com/advisory-idor-in-microsoft-teams-allows-for-external-tenants-to-introduce-malware/). Mention spéciale à Max pour sa grande réactivité et sa volonté de discuter en privé de ses recherches.

2. Andrea Santese (@Medu554) [pour ces recherches](https://posts.inthecyber.com/leveraging-microsoft-teams-for-initial-access-42beb07f12c4). Encore une mention spéciale pour sa réactivité et sa volonté de discuter de son travail en privé.

3. Bastian Kanbach (@_bka_) de SSE pour [TeamsEnum](https://github.com/sse-secure-systems/TeamsEnum). Ce projet a servi de point de départ pour récupérer les jetons Bearer et s'authentifier via différentes méthodes. J'avais utilisé l'API Graph à ces fins, mais son projet (et celui-ci) utilise les points de terminaison normaux, donc c'était génial d'avoir quelqu'un qui avait déjà combattu cela et avait des fonctions fiables pour y parvenir.

4. @pfiatde qui a une [série en plusieurs parties sur le phishing Teams](https://badoption.eu/blog/2024/01/12/teams5.html). Ses blogs ont été référencés lors du développement original de TeamsPhisher, et la version actuelle de l'outil utilise un nouveau contournement d'écran d'accueil issu de recherches ultérieures qu'il a publiées.  

5. Steve Nelson (@stevesec128) et Alex Martirosyan (@almartiros) de DenSecure pour leur mise à jour de Teamsphisher (02/07/24) qui a intégré le contournement d'écran d'accueil toujours fonctionnel de @pfiatde.  

6. [Ce site pour générer du texte ASCII](https://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type%20Something%20)

7. [Ce projet fou pour convertir des images en art ASCII](https://github.com/TheZoraiz/ascii-image-converter)
Télécharger l’outil