Igår fick jag den asp.net versionen av WeChats offentliga plattformskällkod som skickades till mig av en vän.
Idag vill jag öppna den och titta på vad som finns i den, först koppla databasen till SQL Server 2008,
Öppna sedan projektet och kör crtl+F5 för att köra webbprojektet, som visas i följande figur:
Så jag kollade genast administratörstabellen dt_manager i databasen och upptäckte att administratörskontot var admin, men jag visste inte vilket lösenord som var krypterat, jag var ju nybörjare
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 Säger inte NULL 0
Först kastar du in den på md5:s webbplats för att dekryptera den
Mu You hittade det, testade några vanliga lösenord, som 123456, admin, 123, admin888, etc., men kunde ändå inte logga in
Ack, jag ska kolla asp.net källkoden och upptäcka att den är krypterad enligt följande:
- 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);
- }
Kopiera koden
Generellt sett bedöms först att det finns ett saltvärde för användaren i användartabellen, och om det finns det används lösenordet som användaren anger och saltvärdet från databasen
DESEncrypt krypterat, (jag vet inte heller.)Vad är DESEncrypt?Släng sedan in det krypterade lösenordet och användaren i dalen. GetMode-metoden,
För att bedöma igen finns det en select-sats i metoden, och koden är följande:
- /// <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;
- }
Kopiera koden
Jag vet inte hur man dekrypterar den här saken, så jag byter ut det krypterade lösenordet från databasen! Rattle
C# sätter en brytpunkt på lösenordsplatsen, som visas i följande figur:
Gack, chiffertexten efter att ha fått 123456 kryptering är EB51565598856A17, och gå beslutsamt till databasen för att ersätta den med update-satsen
Inloggning lyckades!
|