Вчера получих asp.net версия на изходния код на публичната платформа WeChat, изпратен ми от приятел.
Днес искам да го отворя и да видя какво има вътре, първо да свържа базата данни към SQL Server 2008,
След това отворете проекта и стартирайте crtl+F5, за да стартирате уеб проекта, както е показано на следната фигура:
Веднага проверих администраторската таблица dt_manager на базата данни и открих, че администраторският акаунт е администраторски, но не знаех каква е паролата, все пак бях начинаещ
1 1 1 администратор 77F992940A0EFD8025F5571B133BA6D5 28LH48 Супер администратор 13800138000 123@qq.com 0 2013-12-04 01:53:36.000 10000000 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,
За да преценим отново, в метода има изявление select, а кодът е следният:
- /// <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 и решително отиди в базата данни, за да го замениш с актуализацията
Входът е успешен!
|