
Framework d’exploitation réseau et MITM basé sur Go pour les tests d’intrusion autorisés, la reconnaissance réseau, l’interception de trafic, les tests de sécurité sans fil et la recherche sur les attaques des couches 2/3/7.
Un framework d'évaluation de sécurité locale et réseau écrit en Go. C'est un outil de recherche et de test d'intrusion autorisé qui couvre la chaîne d'évaluation réseau — découverte d'hôtes et de services, énumération, audit d'identifiants, identification de vulnérabilités et exploitation autorisée. Ses dix catégories de modules couvrent la reconnaissance, l'énumération, l'OSINT, le MITM (empoisonnement ARP/DHCP/DNS/IPv6 et interception HTTP/HTTPS en ligne), le sans-fil, la couche commutateur, le web, l'authentification, l'espionnage et la post-exploitation — le tout piloté depuis un REPL interactif, un assistant guidé, ou des séquences de commandes en une seule passe.
MITM n'est qu'une capacité parmi ce domaine plus large : toha3ee n'est pas limité aux scénarios d'homme du milieu.
AVERTISSEMENT : toha3ee redirige, empoisonne, déchiffre et intercepte activement le trafic réseau. Utilisez-le uniquement sur des réseaux dont vous êtes propriétaire ou pour lesquels vous êtes explicitement autorisé à tester. Exécuter ces modules contre des tiers est illégal dans la plupart des juridictions. Lisez
docs/security.mdd'abord.
Les installateurs en une ligne récupèrent le binaire précompilé pour votre plateforme depuis la dernière version, vérifient sa somme de contrôle SHA-256 et l'ajoutent à votre PATH. Si aucun binaire précompilé n'existe encore, ils compilent depuis les sources à la place.
Linux / macOS :
curl -fsSL https://raw.githubusercontent.com/qyvora/qyvora-toha3ee/main/scripts/install.sh | sh
Windows (PowerShell) :
irm https://raw.githubusercontent.com/qyvora/qyvora-toha3ee/main/scripts/install.ps1 | iex
Ou depuis un dépôt cloné :
make install # installs ~/.local/bin/toha3ee and adds it to PATH
Options d'installation (Unix) : --prefix <dir> (défaut : /usr/local/bin en
root, sinon ~/.local/bin), --no-path pour ne pas modifier votre fichier rc
shell, --from-source pour compiler au lieu de télécharger, et
TOHA3EE_VERSION=<tag> pour épingler une version. Exécutez avec sudo sh ...
pour une installation à l'échelle du système. L'installeur Windows place le
binaire dans %LOCALAPPDATA%\Programs\toha3ee\bin et met à jour votre PATH
utilisateur ; Windows-on-ARM64 exécute la build x64.
Sous Linux, l'installeur enregistre également l'application auprès de
l'environnement de bureau : il installe le logo dans le thème d'icônes hicolor
et dépose une entrée .desktop à côté du préfixe d'installation (par exemple
/usr/local/share ou ~/.local/share), de sorte que toha3ee apparaît dans
la recherche de GNOME avec son icône. Sous Windows, il copie le .ico et crée
un raccourci dans le menu Démarrer. L'archive tarball/zip contient l'icône afin
que l'installeur puisse l'enregistrer depuis le même artefact vérifié.
Désinstallation : supprimez le binaire et la ligne PATH que l'installeur a
ajoutée à votre rc shell (ou %LOCALAPPDATA%\Programs\toha3ee sous Windows).
Nécessite Go 1.26+ et libpcap.
# Debian/Ubuntu
sudo apt install libpcap-dev
# then
go build ./cmd/toha3ee
Les builds Linux nécessitent les en-têtes libpcap (le repli de compilation depuis les sources de l'installeur les vérifie et affiche la commande apt/dnf appropriée s'ils manquent). macOS fournit libpcap avec Xcode Command Line Tools.
# Interactive console (bare command drops straight in)
sudo ./toha3ee --iface eth0
# Interactive console (explicit subcommand)
sudo ./toha3ee interactive --iface eth0
# Guided wizard
sudo ./toha3ee wizard --iface eth0
# One-shot: scan the subnet, then show what was found
sudo ./toha3ee --eval "net.scan; net.show" --iface eth0
# Non-interactive caplet script
sudo ./toha3ee run --iface eth0 caplets/basic.cap
# Dry-run a .toha3ee script (validates it, prints the plan, sends no packets)
./toha3ee --no-sudo build scripts/full-pipeline.toha3ee
# Execute a .toha3ee script non-interactively
sudo ./toha3ee script --iface eth0 scripts/full-pipeline.toha3ee
La plupart des modules d'attaque nécessitent root (sockets brutes, capture de
paquets et transfert IP). Exécutez en root ou avec
CAP_NET_ADMIN/CAP_NET_RAW lorsque c'est possible. Ajoutez --no-color pour
désactiver la sortie colorée, -v pour des journaux verbeux.
L'outil s'exécute avec les privilèges administrateur par défaut : sous
Linux/macOS, il se ré-exécute via sudo et demande le mot de passe
administrateur (root) à chaque invocation. Passez --no-sudo (ou définissez
TOHA3EE_NO_SUDO=1) pour une exécution sans privilèges, par ex. pour un rapide
toha3ee --no-sudo version.
Tout est un module. Les modules s'enregistrent eux-mêmes dans le init()
de leur package et sont exposés automatiquement par le registre ; ajouter une
attaque revient à ajouter un package sous internal/attacks/ qui implémente le
contrat attacks.Module (voir internal/attacks/attacks.go) :
Meta() — ID, catégorie, risque, cibles, description, limitesPreflight(ctx) — vérifie les préconditions avant l'exécutionRun(ctx, opts) — la boucle d'attaque (doit respecter ctx.Done)Verify(ctx) — rapporte ce qui s'est passéCleanup(ctx) — annule tout, restaure le réseauUn cycle de vie central safety (internal/safety) suit les nettoyages et les
heartbeats enregistrés, afin que chaque attaque soit démontée même en cas de
panic ou de SIGINT, et un store partagé conserve l'inventaire des hôtes, les
identifiants capturés, les sessions et le journal d'événements qui alimente le
générateur de rapports.
Exécutez toha3ee modules pour obtenir le catalogue complet et actuel. Points
forts :
toha3ee nu (ou toha3ee interactive) ouvre une console de style
bettercap/metasploit : la bannière @@@, une invite toha3eeλ > avec accent
rouge et complétion par tabulation, et un HUD de statut persistant sur une
ligne au-dessus de l'invite, qui affiche l'interface, les modules en cours
d'exécution et les compteurs en direct d'hôtes/ports/identifiants/événements.
La sortie est regroupée et alignée dans une palette verte/ambre/blanche — le
rouge est utilisé délibérément, pour l'accent de l'invite, les erreurs fatales
([x]), le bord du HUD et les modules à risque critique (le risque élevé est en
ambre). La sortie de chaque commande est sectionnée (─── modules ───), les
tableaux sont alignés par colonnes (les couleurs sont ignorées lors du calcul
de l'alignement), et les messages des modules sont colorisés centralement, de
sorte que chaque module obtient des glyphes de statut cohérents sans travail
supplémentaire par module. La sortie revient automatiquement en texte brut
lorsqu'elle est redirigée, et l'invite reste visible et active pendant qu'un
module s'exécute, comme bettercap.
$ sudo ./toha3ee --iface eth0
@@@@@@@@
@@@@@@@@@@@@@
@@@@@@@@ @@@@@@@
@@@@@@@@ @@@@@@@@
@@@@@@@@ @@@@@@@@
@@@@@@@ @ @@@@@@@
@@@@@@@@ @@@@@@@@@ @@@@@@@
@@@@@@@@ @@@ @ @@@@@@@
@@@@@@@ @@ @@@@@@@@@@ @@@@@@@
@@@@@@ @@ @ @@@@@@@@@@@@@@@@@@ @@@@@@
@@@ @@@ @@@@@@@ @@@@@@@@@@@@@@@@@@@@@@ @@@
@@@ @@@@@ @ @@@@@@@@@@@@@@@@@@@@@@@ @@@
@@@ @@@@@@ @ @@@@@@@@@@@@@@@@@@ @@@ @@@
@@@ @@@@@@ @ @@@@@@@@@@@@@@@@@ @@@ @@@
@@@ @@@@@@ @@@@@@@@@@@@@@@@@@@@@@ @@@
@@@ @@@@@ @@@@@@@@@@@@@@@ @@@ @@@
@@@ @@@@@ @@@@@@@@@@@@@@ @@@ @@@
@@@ @@@ @@@@@@@@@@@@@ @@@@ @@@
@@@ @@ @@@@ @@@@@ @@@@@@@@@ @@@
@@@ @@@@@@@@@@@@@ @@@@@@ @@@ @@@
@@@ @@@@@@@@@@@@@@@@@@@ @@@@@@@ @@@ @@@
@@@ @@@@@@@@@@@@@@@@@@@@@@@ @@@ @@@@@@ @@@
@@@ @@@@@@@@@@@@@@@@@@@@@@ @@@ @@@@@@@@@@ @@@
@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @@@
@@@ @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@ @@@
@@@ @@@@@@@@@@@@@@@ @@@@@@@@@@@@@ @@@@@@@@@@@ @@@
@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@ @@@@@
@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@ @@@@ @@@@@@@ @@@@@@@@
@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ @@@@@@@
@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@
@@@@@@@ @@@@@@@@@@@@@@@@@@@ @@@@@@@
@@@@@@@ @@@@@@@@@@@@@ @@@@@@@
@@@@@@@ @@@@@@@ @@@@@@
@@@@@@ @@@@@@@
@@@@@@@@ @@@@@@@
@@@@@@@@
@@@
local & network security assessment framework
[>] iface wlan0 (10.135.199.31, 8c:c8:4b:30:bf:91)
[>] v 0.1.0
type 'help' for commands, 'modules' for the catalogue, 'quit' to exit
[*] session ready. type 'help' for commands.
toha3eeλ> help
Les glyphes de statut suivent la convention de bettercap :
Le bloc rouge ▮ sur le bord gauche du HUD marque la bande de statut ; le HUD
est réaffiché après chaque commande afin que les compteurs restent à jour sans
saisie supplémentaire.
Exemple de session :
toha3eeλ> modules recon # module catalogue filtered by category
toha3eeλ> on net.scan # run a module (preflight checks shown first)
toha3eeλ> net.show # discovered hosts
toha3eeλ> net.profile # profile + ranked attack vectors
toha3eeλ> help # grouped command reference
toha3eeλ> quit
set <module.key> <value> stocke les réglages par module (les ID de modules
sont en notation pointée, la séparation se fait donc au dernier point :
set arp.spoof.targets 10.0.0.5) ; config affiche tout ce qui a été défini
jusqu'ici. Les sessions conservent les données capturées entre les exécutions
de modules ; report.generate produit un rapport d'évaluation Markdown à
partir du store en mémoire.
Les fichiers .toha3ee pilotent l'ensemble du pipeline recon → exploit →
rapport avec un langage proche de Python dont la syntaxe se lit comme de
l'anglais. Exécutez-en un avec toha3ee script <file>, depuis le REPL avec
script <file>, ou lancez n'importe quel fichier .toha3ee avec
run <file>. toha3ee build <file> (ou build <file> dans le REPL) valide le
fichier et affiche un plan à blanc sans toucher au réseau.
scripts/full-pipeline.toha3ee est un exemple complet de bout en bout.
# comment (or //)
set net.scan.targets -> "192.168.8.0/24" # configure a module
on net.scan # start a module (run/start)
wait for net.scan # block until it finishes
_hosts -> [$(net.hosts)] # capture a list (or =, >>)
echo -> "found $(_hosts.size) hosts" # print (say/print)
if $(hosts.count) > 1 # conditions
on arp.spoof targets "192.168.8.0/24"
sleep -> 30
off arp.spoof
end
for each _h in $(_hosts) # loops
repeat 3 times
exec -> net.show # run any REPL command once
break
end
end
get net.scan.timeout -> _t # read a config value
report -> "assessment.md" # write the session report
Notes sur le langage :
set, get, on/start/run, off/stop,
wait for <module> [max <secs>], sleep <secs>, echo/say/print,
show <module>, report <file>, exec <command>, if/else/end,
, , , ,
, et un seul interrompt le script.La configuration utilise par défaut toha3ee.json (--config pour la
remplacer). Les réglages par module sont lus par chaque module dans son propre
espace de noms, par ex. report.generate.out, switch.portsteal.victim_mac,
http.harvest.pcap.
La furtivité est toujours active, à chaque phase, jusqu'au paquet individuel.
Chaque module qui envoie des paquets est livré avec un profil aléatoire et à
gigue (jitter) par défaut ; il n'y a rien à activer, et sa désactivation
(set <module>.stealth false) est explicitement non prise en charge par
l'intention de conception.
stealth_shuffle) afin que
les balayages ne parcourent pas le sous-réseau dans l'ordre croissant
prévisible par lequel les scanners sont identifiés.stealth_jitter, stealth_burst, stealth_pause), de sorte que le trafic
ne soit ni un flux uniforme plat ni une inondation synchronisée unique.stealth_pad) au lieu des trames à zéros que la plupart des scanners
émettent, et le balayage actif net.scan est collecté par une boucle de
capture unique pendant que l'écoute passive continue d'ingérer le trafic.stealth_ports),
le TTL IP et l'identification (stealth_ttl, stealth_id), le numéro de
séquence TCP et la fenêtre, et efface parfois le bit DF, de sorte que le flux
de sondes ne correspond pas à une signature d'outil unique.Les paramètres réglables sont lus par module, par ex.
set net.scan.stealth_jitter 5ms, set service.synscan.stealth_burst 128.
L'invite du REPL reste visible et active pendant qu'un module s'exécute, comme
bettercap.
go test ./...
La suite couvre les constructeurs de trames (DHCP, NDP, 802.11, STP/CDP/LLDP), le store et le rendu de rapports, ainsi qu'un test de contrat du registre qui fige le catalogue complet des modules.
Le CI (.github/workflows/ci.yml) exécute gofmt, go vet, go build et
go test -race sous Linux ainsi que des tests sous Windows et macOS pour
chaque push/PR ; CodeQL effectue une analyse de
sécurité statique. Les mises à jour de dépendances sont gérées par Dependabot.
Voir CONTRIBUTING.md, docs/contributing.md et CODE_OF_CONDUCT.md. Signalez les problèmes de sécurité via SECURITY.md — pas comme des issues publiques.
| Chemin | Rôle |
|---|
cmd/toha3ee | CLI : console, assistant, --eval, exécuteur de caplets, script/build |
internal/ui | rendu console : bannière, palette, sections, tableaux, glyphes de statut, HUD |
internal/script | le langage de script .toha3ee : lexer, parser, moteur |
internal/attacks/ | tous les modules d'attaque par catégorie |
internal/netx/ | primitives de protocoles (ARP, DHCP, DNS, NDP, 802.11, SMB/NTLM, proxy, …) |
internal/hijack | proxy MITM HTTP/HTTPS et interception d'identifiants/sessions |
internal/phish | hameçonnage par portail captif et clones de pages de connexion |
internal/store | magasin de données partagé et bus d'événements |
internal/safety | cycle de vie cleanup/heartbeat |
internal/config | chargement de la configuration JSON |
internal/oui | base de données des fournisseurs MAC |
pkg/certutil | CA du framework et certificats TLS par hôte |
| Catégorie | Modules |
|---|
| mitm | arp.spoof, dns.spoof, dns.rebind, dhcp.rogue, dhcp.starve, dhcp6.spoof, icmp.redirect, ipv6.ra, ipv6.ndp, llmnr.poison, wpad.poison |
| espionage | http.harvest, http.proxy, https.proxy, ssl.strip, phish.inject |
| auth | default.creds, ntlm.relay, smb.signing, smb.kerberoast, auth.spray, auth.brute, auth.userenum, auth.asrep |
| recon | net.scan, net.ping, net.traceroute, net.osdetect, service.synscan, service.tcpconnect, service.udpscan, service.finxmas, service.ack, service.protoscan, service.idle, service.fingerprint, service.tls, web.dir, cve.suggest |
| osint | osint.dns, osint.whois, osint.ct, osint.asn, osint.shodan, osint.bucket, osint.wayback, osint.github, osint.hibp, osint.metadata, osint.dork, osint.harvest |
| enum | smtp.enum, snmp.enum, ldap.enum, nfs.enum, smb.enum, net.ip6sweep |
| web | web.misconfig |
| switch | switch.flood, switch.portsteal, switch.vlanhop, switch.cdp, switch.stp |
| wireless | wlan.scan, wlan.deauth, wlan.handshake, wlan.eviltwin, wlan.pmkid, wlan.beaconflood, wlan.karma |
| post | report.generate, session.replay, pcap.export |
| Glyphe | Signification |
|---|
[*] | info / en cours (blanc) |
[+] | succès (vert) |
[!] | avertissement (ambre) |
[>] | système (blanc gras) |
[-] | neutre (atténué) |
[x] | erreur fatale (rouge) |
[OK] | vérifié / réussi (vert) |
for each _x in <list>repeat N timeswhile <cond>breakcontinuestop_name -> value, _name = value ou _name >> value ;
[...] construit une liste à partir d'une propriété, $(_name.size) et
$(_list.size) en sont les longueurs.$(...) résout l'état de session en direct :
$(hosts.count), $(net.hosts), $(creds.count), $(sessions.count),
$(running.list), $(iface.ip), $(iface.cidr), $(iface.mac),
$(iface.gateway), $(config.<module.key>) ; les chemins préfixés par un
underscore lisent les variables du script.== != < > <= >=, &&, ||, !, les nombres se
comparent numériquement. Les boucles while sont plafonnées afin qu'une
mauvaise condition ne puisse jamais bloquer le script.