Wczoraj otrzymałem asp.net wersję kodu źródłowego platformy WeChat przesłaną mi przez przyjaciela.
Dziś chcę ją otworzyć i zobaczyć, co się w niej znajduje, najpierw dołączyć bazę danych do SQL Server 2008,
Następnie otwórz projekt i uruchom crtl+F5, aby uruchomić projekt webowy, jak pokazano na poniższym rysunku:
Od razu sprawdziłem tabelę administratorów dt_manager bazie danych i okazało się, że konto administratora jest administratorem, ale nie wiedziałem, jakie jest hasło zaszyfrowane, w końcu byłem początkujący
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 Nie mówi ci NULL 0
Najpierw wrzuć go na stronę md5, żeby go odszyfrować
Mu Znalazłeś go, próbowałeś kilku powszechnie używanych haseł, takich jak 123456, admin, 123, admin888 itd., ale nadal nie mogłeś się zalogować
Niestety, sprawdziłem kod źródłowy asp.net i okazało się, że jest zaszyfrowany w następujący sposób:
- 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);
- }
Skopiuj kod
Ogólnie rzecz biorąc, najpierw ocenia się, że w tabeli użytkownika istnieje wartość soli użytkownika, a jeśli tak, używa się hasła wpisanego przez użytkownika oraz wartości soli uzyskanej z bazy danych
DESEncrypt zaszyfrowany (ja też nie wiem).Czym jest DESEncrypt?Następnie wrzuć zaszyfrowane hasło i użytkownika do dal. Metoda GetMode,
Aby ponownie ocenić, w metodzie znajduje się instrukcja select, a kod wygląda następująco:
- /// <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;
- }
Skopiuj kod
Nie wiem, jak to odszyfrować, więc zastąpię zaszyfrowane hasło z bazy danych! Grzechot
C# wyznacza punkt przerwy w miejscu hasła, jak pokazano na poniższym rysunku:
Ojej, po uzyskaniu szyfrowania 123456 szyfr jest EB51565598856A17 i zdecydowanie idź do bazy danych, by zastąpić go poleceniem aktualizacji
Logowanie zakończone!
|