Вчора я отримав asp.net версію вихідного коду публічної платформи WeChat, яку мені надіслав друг.
Сьогодні я хочу відкрити її і подивитися, що в ній є, спочатку приєднати базу даних до SQL Server 2008,
Потім відкрийте проєкт і запустіть crtl+F5, щоб запустити веб-проєкт, як показано на наступному рисунку:
Тож я одразу перевірив таблицю адміністратора dt_manager бази даних і виявив, що обліковий запис адміністратора — адміністративний, але я не знав, який пароль зашифрований, адже я був початківцем
1 1 1 admin 77F992940A0EFD8025F5571B133BA6D5 28LH48 Суперадмін 13800138000 123@qq.com 0 2013-12-04 01:53:36.000 1000000 0 888 12 186 Не каже NULL 0
Спочатку вставте його на сайт md5, щоб розшифрувати
Му: Ти знайшов його, спробував кілька поширених паролів, таких як 123456, admin, 123, admin888 тощо, але все одно не зміг увійти
На жаль, перевіряю asp.net вихідний код і виявляю, що він зашифрований таким чином:
- 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);
- }
Копія коду
Загалом, спочатку оцінюють, що в таблиці користувача є значення солі, і якщо воно є, використовується пароль, введений користувачем, і значення солі, отримане з бази даних
DESEncrypt зашифровано (я теж не знаю).Що таке DESEncrypt?Потім введіть зашифрований пароль і користувача у dal. Метод GetMode,
Щоб судити, у методі є вибірковий оператор, код якого виглядає так:
- /// <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;
- }
Копія коду
Я не знаю, як розшифрувати цю річ, тому заміню зашифрований пароль із бази даних! Брязкіт
C# встановлює точку зупину в місці пароля, як показано на наступному рисунку:
Гак, шифротекст після отримання 123456 шифрування EB51565598856A17, і рішуче йди до бази даних, щоб замінити його на оператор оновлення.
Вхід успішно!
|