
Un outil d'attaque par dictionnaire SSH multithreadé en python3
Un script Python 3 pour exécuter des attaques par dictionnaire/liste de mots sur un serveur SSH cible en utilisant deux fichiers texte en entrée. Écrit dans le cadre de mon évaluation technique Intel.
Ce script dépend de Paramiko et de Colorama.
Installez les dépendances via pip install -r requirements.txt ou pip3 install -r requirements.txt.
Port 22 sans limite de tentatives ni période de verrouillage
python3 buffalo.py localhost users.txt passwords.txt
Le nombre de threads par défaut est 100, cette valeur peut être augmentée ou diminuée à l'aide de l'option thread.
python3 buffalo.py localhost users.txt passwords.txt --threads 200
Spécifiez le service sur le port 2222
python3 buffalo.py localhost users.txt passwords.txt --port 2222
La plupart des systèmes ont une certaine limite de tentatives par compte dans un laps de temps donné. Pour rester sous cette limite, le nombre de tentatives par compte peut être limité via les options --max_attempts et --lockout_period. Par exemple, pour limiter 3 tentatives par compte sur une période de 15 minutes.
python3 buffalo.py localhost users.txt passwords.txt --max_attempts 3 --lockout_period 15
[$] python3 buffalo.py -h [12:39:53]
usage: buffalo.py [-h] [--port [PORT]] [--max_attempts [MAX_ATTEMPTS]] [--lockout_period [LOCKOUT_PERIOD]]
[--threads [THREADS]]
target users passwords
Quick SSH brute force script for Red Team @Intel.
positional arguments:
target Target IP or hostname.
users Username file, one username per line.
passwords Password file, one password per line.
optional arguments:
-h, --help show this help message and exit
--port [PORT] SSH port. DEFAULT 22.
--max_attempts [MAX_ATTEMPTS]
Max attempts per account within the lockout window. DEFAULT unlimited.
--lockout_period [LOCKOUT_PERIOD]
Length of the lockout window in minutes. DEFAULT 0.
--threads [THREADS] Thread count. DEFAULT 100.
Voici une brève liste de choses que je pense qu'il serait intéressant d'implémenter à l'avenir.
invoke_shell du client Paramiko.exec_command si des identifiants valides sont trouvés. Idées issues d'un brainstorming ci-dessous.