Ieri am primit versiunea asp.net a codului sursă al platformei publice WeChat, trimisă de un prieten.
Astăzi vreau să o deschid și să arunc o privire la ce conține, mai întâi să atașez baza de date la SQL Server 2008,
Apoi deschideți proiectul și rulați crtl+F5 pentru a rula proiectul web, așa cum este ilustrat în figura următoare:
Așa că am verificat imediat tabelul de administrator dt_manager din baza de date și am descoperit că contul de administrator era de administrator, dar nu știam care era parola criptată, până la urmă, eram începător
1 1 1 admin 77F992940A0EFD8025F5571B133BA6D5 28LH48 Super admin 13800138000 123@qq.com 0 2013-12-04 01:53:36.000 1000000 0 888 12 186 Nu îți spune NULL 0
Mai întâi aruncă-l pe site-ul md5 pentru a-l decripta
Mu L-ai găsit, ai încercat câteva parole folosite frecvent, cum ar fi 123456, admin, 123, admin888 etc., dar tot nu ai reușit să te conectezi
Din păcate, voi verifica codul sursă asp.net descoperind că este criptat astfel:
- public Model.manager GetModel(string user_name, string password, bool is_encrypt)
- {
- //检查一下是否需要加密
- if (is_encrypt)
- {
- //先取得该用户的随机密钥
- string salt = dal.GetSalt(user_name);
- if (string.IsNullOrEmpty(salt))
- {
- return null;
- }
- //把明文进行加密重新赋值
- password = DESEncrypt.Encrypt(password, salt);
- }
- return dal.GetModel(user_name, password);
- }
Cod de copiere
În general, se consideră mai întâi că există o valoare de salt a utilizatorului în tabelul utilizatorului, iar dacă există, parola introdusă de utilizator și valoarea salt obținută din baza de date sunt folosite
DESEncrypt criptat, (nici eu nu știu.)Ce este DESEncrypt?Apoi, aruncă parola criptată și utilizatorul în dal. Metoda GetMode,
Pentru a judeca din nou, există o afirmație select în metodă, iar codul este următorul:
- /// <summary>
- /// 根据用户名密码返回一个实体
- /// </summary>
- public Model.manager GetModel(string user_name, string password)
- {
- StringBuilder strSql = new StringBuilder();
- strSql.Append("select id from " + databaseprefix + "manager");
- strSql.Append(" where user_name=@user_name and password=@password and is_lock=0");
- SqlParameter[] parameters = {
- new SqlParameter("@user_name", SqlDbType.NVarChar,100),
- new SqlParameter("@password", SqlDbType.NVarChar,100)};
- parameters[0].Value = user_name;
- parameters[1].Value = password;
- object obj = DbHelperSQL.GetSingle(strSql.ToString(), parameters);
- if (obj != null)
- {
- return GetModel(Convert.ToInt32(obj));
- }
- return null;
- }
Cod de copiere
Nu știu cum să decriptez chestia asta, așa că voi înlocui parola criptată din baza de date! Zornăit
C# setează un punct de întrerupere în locul parolei, așa cum se arată în figura următoare:
Gack, textul cifrat după ce primești criptarea 123456 este EB51565598856A17 și mergi decisiv la baza de date pentru a-l înlocui cu instrucțiunea update
Autentificare reușită!
|