Ieri ho ricevuto la versione asp.net del codice sorgente della piattaforma pubblica WeChat inviata da un amico.
Oggi voglio aprirlo e dare un'occhiata a cosa c'è dentro, prima collegare il database a SQL Server 2008,
Poi apri il progetto ed esegui crtl+F5 per eseguire il progetto web, come mostrato nella figura seguente:
Così, ho controllato immediatamente la tabella amministratore dt_manager del database e ho scoperto che l'account amministratore era quello amministratore, ma non sapevo quale fosse la password criptata, dopotutto, ero un 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 Non ti dice NULL 0
Prima lo inserisci nel sito md5 per decifrarlo
Mu L'hai trovato, hai provato alcune password comunemente usate, come 123456, admin, 123, admin888, ecc., ma comunque non riuscivi ad accedere
Purtroppo, controllo asp.net codice sorgente e scoprirò che è criptato come segue:
- 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);
- }
Copia codice
In generale, si giudica innanzitutto che nella tabella utente esista un valore di sal dell'utente e, se c'è, si utilizza la password inserita dall'utente e il valore di sale ottenuto dal database
DESEncrypt criptato, (nemmeno io).Cos'è DESEncrypt?Poi, inserisci la password criptata e l'utente nel dal. Metodo GetMode,
Per giudicare di nuovo, c'è una dichiarazione select nel metodo, e il codice è il seguente:
- /// <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;
- }
Copia codice
Non so come decriptare questa cosa, quindi sostituirò la password criptata dal database! Rattle
C# imposta un punto di interruzione nel luogo della password, come mostrato nella figura seguente:
Gack, il testo cifrato dopo aver ottenuto 123456 crittografia è EB51565598856A17, e si va decisamente al database per sostituirlo con l'istruzione update
Accesso riuscito!
|