SSH Connection C# (Brute force spielerei) mit SharpSsh

Hallo Leute,
mir ist die letzten tage vor langer Weile in den Sinn gekommen, dass ich ja mal ein Brute-force-Tool schreiben könnte.

Nachdem ich mich im WWW ein wenig belesen hatte, ist mir aufgefallen dass es für SSH und SFTP kaum "bekannte" Tools gibt. Hydra war da so das erste was mir in meine Augen sprang.

Nun muss ich ja das Rad nicht neu erfinden und hab mir kurzerhand mal angeschaut was Hydra so kann. Dabei ist mir aufgefallen, das Hydra nur mit Dicts arbeitet und keinen Permutations-Algorithmus in der Hinterhand hat. Das hab ich mir also auch noch vorgenommen :)

Die Frage die sich mir danach noch stellte war : In welcher Sprache machste das denn nun ? Da ich sonst nur in Java progge und neues lernen nie schlcht ist entschied ich mich für C#

Ich bin also, von der Syntax her, C# Anfänger.

Nun es läuft soweit ganz gut. Die Permutationen laufen, auch mit einer vorgegebenen länge. Files zeilenweise einlesn und die Strings zu verwenden ist auch nicht das Problem.

Mein grundsätzliches Problem besteht nun darin, dass ich andauernd eine Fehlermeldung erhalte und zwar :
Code:
SSH_MSG_DISCONNECT : 2 Too many authentication failures for username
Kurzerhand hab ich gegoogled und bekamm die Antwort, dass es was mit den PublicKeys zu tun habe.

Daraufhin wollte ich alle Keys mit dem Command
Code:
ssh-add -D
löschen. Das hat aber auch nicht funktioniert.

Die Fehlermeldung:
Code:
Der Objektverweis wurde nicht auf eine Objectinstanz festgelegt.
Ich arbeite mit den DLL's von Tamir ( SharpSsh). Folgender Code kümmert sich um den "Loginversuch":

Code:
   public bool connectionStream(string host, string username, string passwd)
        {
            bool test = false;
            try
            {
                SshExec exc = new SshExec(host, username, passwd);
                //exc.RunCommand("ssh-add -D");
                Console.WriteLine("ich verbinde mit dem Passwort "+passwd);
                exc.Connect(66);
                Console.WriteLine("ich bin verbunden");
                test = exc.Connected;
                
            }
            catch (Exception e)
            {
                Console.WriteLine("Verbindung nicht erfolgt");
                Console.WriteLine(e.Message);
            }

            return test;
            
        }
Hat jemand einen Tipp für mich was ich da falsch mache ?


Danke schon mal im voraus :)

LG

WhiTeY
 
Also zum Code kann ich dir leider nicht helfen, aber wenn der Bruteforcer später mal "professionell" eingesetzt werden soll dann wähle eine systemnahere Sprache als C# mit seiner Laufzeitumgebung, Garbage Collector und den ganzen Performance-Bremsen.
Am besten geeignet wäre C, wobei dich das als Java-Coder vllt. mehr Einarbeitungszeit als C# kostet.

Das soll jetzt keine Kritik an deinem Projekt sein, ich finde es sogar sehr kreativ und nützlich. :)
Das soll lediglich ein Tipp für dich sein, aber wenn das Projekt nur um des Lernens Willen ist, ist Performance ja eher zweitrangig. ;)
 
Hey Ho,

erstmal danke für die Anregungen. Allerdings muss ich sagen dass ich für reines C derzeit zu faul bin.

Wenn ich mir die Strucktur zurecht gelegt habe und sie erstmal OO umgesetzt ist werde ich das sicherlich nochmal in Angrif nehmem.
Deine Argumente sind gut und richtg bedeuten aber im gegenzug auch das ich selber aufräumen muss. Da ist wirklich mehr Einarbeitung nötig.
Derzeit beschränt sich mein Denken in sachen Speicherverwaltung auf Rekursionen, Komplexitäten und unnötige Redundanzen. Ich glaube in C bedarf es ein wenig mehr :)

LG

WhiTeY
 
Hallo Leute,

ich schmeiß mich gerade voll wech. Zum testen und analysieren hab ich mich per console an meinen auth-Logfile gehangen.

OFFTOPIC
Kleiner Tipp für interessierte und noch nicht so versierte User unter Linux:
Life-Logfile-Beobachtungen mach man am besten mit
Code:
tail -f logfilename.log
/OFFTOPIC

Ich beobachte fleißig und schau mir den immer wiederkehrenden Fehler an und lese dann zwischendurch folgenden Abschnitt:

Code:
Oct 26 16:59:55 XXXX sshd[31941]: PAM 5 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=XXXXXX  user=test

Oct 26 16:59:55 XXXX sshd[31941]: PAM service(sshd) ignoring max retries; 6 > 3

Oct 26 16:59:55 XXXX sshd[31943]: Accepted password for test from XXXXXXXXXX port 50537 ssh2
Momentmal? Accepted? Wie geil ist dass denn! Bei allen Fehlern die ich ausgegeben bekomme funktioniert es doch.
Ich hab die nette Zeile , "ich bin Verbunden", bei all dem Exceptiongedönse einfach nicht gesehen.

Doch das resultierende Problem bei der ganzen sache mit den Exceptions:

Jeder loginversuch dauert mehr als 5 Sec. Das stellt mich auch irgendwie nicht zufrieden. Ich dachte eher an was im ms bereich und nicht 25 Sec. bei 5 Permutationen...

Naja ich fummel mal weiter und lass mir was einfallen.

Bis dahin

LG

WhiTeY
 
Zuletzt bearbeitet:
Hi,

vielleicht solltest du mit ein paar Threads arbeiten, die parallel die Lister deiner Permutationen abarbeiten. Das würde das ganze sicher etwas beschleunigen.

ciao
serow
 
Hey Ho,

ja Threads würden durch "Paralelisierung" einen Geschwindigkeitsvorteil erzeugen. Aber das eigentliche Problem wäre damit nicht gelößt.

Die Permutation als solches ist im ms-Bereich, lediglich die Verbindungsversuche als solche dauern mehrere Sekunden. Daraus folgt, dass auch jeder Therad mehre Sekunden braucht um den Versuch abzuschließen.

Mein Fokus liegt daher darin, meine SSH-Verbindung zu optimieren. Ich denke ich muss da eine andere Lib oder gar einen ganz anderen Ansatz wählen.

Vilt. mache ich mir auch die heiden arbeit eine eigene DLL für SSH zu schreiben. Da bin ich allerdings noch nicht ganz grün mit mir selbst, denn das bedeutet wirlich Arbeit.

LG

WhiTeY
 
Vllt ist es aber auch Prinzipbedingt bei SSH, ich hab nicht im Kopf was alles beim Verbindungsaufbau passieren muss. Evtl erlaubt die dir API irgendein Timeout runterzusetzen?

ciao
serow
 
Hey Ho,

das habe ich noch garnicht rausfinden können. Ich werd mal schauen, dass ich die Tage dazu komme mir die API-Doc mal richtig von forn bis hinten durch zulesen.

Bin gerade ein wenig gestresst, weshalb meine Projekt ein wenig in den Hintergrund gedrängt wird.

Dafür darf ich mich mit J2EE Datenbakanwendungen rumprügeln. Naja Gott sei dank gibt es JSF und die JPA :D

Bis Dahin

LG

WhiTeY
 
Zurück
Oben