Ayer recibí la versión asp.net del código fuente de la plataforma pública WeChat enviada por un amigo.
Hoy quiero abrirlo y ver qué hay dentro, primero adjuntar la base de datos a SQL Server 2008,
Luego abre el proyecto y ejecuta crtl+F5 para ejecutar el proyecto web, como se muestra en la siguiente figura:
Así que inmediatamente revisé la tabla de administrador dt_manager de la base de datos y vi que la cuenta de administrador era de administrador, pero no sabía cuál era la contraseña cifrada, al fin y al cabo, era principiante
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 No te dice NULL 0
Primero mételo en la web de md5 para descifrarlo
Mu Lo encontraste, probaste algunas contraseñas que se usan comúnmente, como 123456, admin, 123, admin888, etc., pero aún así no podías iniciar sesión
Por desgracia, voy a comprobar asp.net código fuente y descubro que está cifrado de la siguiente manera:
- 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);
- }
Copiar código
En términos generales, primero se juzga que existe un valor de sal del usuario en la tabla de usuario y, si lo hay, se utiliza la contraseña introducida por el usuario y el valor de sal obtenido de la base de datos
Cifrado con DESEncrypt (yo tampoco lo sé).¿Qué es DESEncrypt?Luego, introduce la contraseña cifrada y el usuario en el dal. Método GetMode,
Para juzgar de nuevo, hay una instrucción select en el método, y el código es el siguiente:
- /// <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;
- }
Copiar código
No sé cómo descifrar esto, así que reemplazaré la contraseña cifrada de la base de datos. Rattle
C# establece un punto de interrupción en el lugar de contraseña, como se muestra en la siguiente figura:
Gack, el texto cifrado tras obtener 123456 cifrado está EB51565598856A17, y decididamente ir a la base de datos para reemplazarlo por la instrucción update
¡Inicio de sesión exitoso!
|