Eile sain sõbralt saatnud WeChat'i avaliku platvormi lähtekoodi asp.net versiooni.
Täna tahan selle avada ja vaadata, mis seal sees on, esmalt ühendan andmebaasi SQL Server 2008-ga,
Seejärel ava projekt ja käivita crtl+F5, et käivitada veebiprojekt, nagu näidatud järgmisel joonisel:
Nii et kontrollisin kohe andmebaasi administraatori tabelit dt_manager ja leidsin, et administraatori konto oli admin, kuid ma ei teadnud, mis parool oli krüpteeritud, sest olin ju algaja
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 Ei ütle sulle NULL 0
Esmalt viska see md5 veebilehele, et dekrüpteerida
Mu Sa leidsid selle, proovisin mõningaid sageli kasutatavaid paroole, nagu 123456, admin, 123, admin888 jne, aga ikka ei saanud sisse logida
Kahjuks lähen kontrollima asp.net lähtekoodi ja leian, et see on krüpteeritud järgmiselt:
- 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);
- }
Kopeeri kood
Üldiselt hinnatakse esmalt, et kasutaja tabelis on kasutaja soolaväärtus, ja kui on, siis kasutatakse kasutaja sisestatud parooli ja andmebaasist saadud soolaväärtust
DESEncrypt krüpteeritud, (ma ei tea ka.)Mis on DESEncrypt?Seejärel pane krüpteeritud parool ja kasutaja dalisse. GetMode meetod,
Et taas hinnata, meetodis on select-lause ja kood on järgmine:
- /// <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;
- }
Kopeeri kood
Ma ei tea, kuidas seda asja dekrüpteerida, nii et vahetan krüpteeritud parooli andmebaasist välja! Kõrin
C# seab parooli kohale katkestuspunkti, nagu näidatud järgmisel joonisel:
Gack, šifritekst on pärast 123456 krüpteerimise saamist EB51565598856A17 ja otsustavalt mine andmebaasi, et asendada see update lausega
Sisselogimine õnnestus!
|