Včera jsem obdržel asp.net verzi zdrojového kódu veřejné platformy WeChat, kterou mi poslal přítel.
Dnes ji chci otevřít a podívat se, co v ní je, nejprve připojit databázi k SQL Server 2008,
Poté otevřete projekt a spusťte crtl+F5 pro spuštění webového projektu, jak je znázorněno na následujícím obrázku:
Takže jsem okamžitě zkontroloval administrátorskou tabulku dt_manager databázi a zjistil, že administrátorský účet je administrátor, ale nevěděl jsem, jaké heslo je zašifrované, koneckonců jsem byl začátečník
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 Neříká ti NUL 0
Nejprve to vložte na web MD5, abyste to dešifrovali
Mu Našli jste to, zkusili jste několik běžně používaných hesel, jako 123456, admin, 123, admin888 atd., ale stále jste se nemohli přihlásit
Bohužel jsem zkontroloval asp.net zdrojový kód a zjistil jsem, že je zašifrovaný následovně:
- 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);
- }
Kopírovat kód
Obecně se nejprve posuzuje, že v uživatelské tabulce je hodnota soli uživatele, a pokud ano, použijí se heslo zadané uživatelem a hodnota soli získaná z databáze
DESEncrypt šifrovaný (taky nevím.)Co je DESEncrypt?Pak zadejte zašifrované heslo a uživatele do dalu. Metoda GetMode,
Pro opětovné posouzení je v metodě příkaz select, který je následující:
- /// <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;
- }
Kopírovat kód
Nevím, jak to dešifrovat, tak nahradím zašifrované heslo z databáze! Chrastění
C# nastavuje bod přerušení na místě hesla, jak je znázorněno na následujícím obrázku:
Ach jo, šifrovaný text po získání 123456 šifrování je EB51565598856A17 a rozhodně jdu do databáze, aby ho nahradil příkazem aktualizace
Přihlášení úspěšné!
|