I går mottok jeg den asp.net versjonen av kildekoden til WeChats offentlige plattform, sendt til meg av en venn.
I dag vil jeg åpne den og ta en titt, hva som er i den, først koble databasen til SQL Server 2008,
Åpne deretter prosjektet og kjør crtl+F5 for å kjøre webprosjektet, som vist i følgende figur:
Så jeg sjekket umiddelbart administratortabellen dt_manager databasen og fant ut at administratorkontoen var admin, men jeg visste ikke hva passordet var kryptert, tross alt var jeg nybegynner
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 Forteller deg ikke NULL 0
Først kast den inn på md5-nettsiden for å dekryptere den
Mu You fant det, prøvde noen vanlige passord, som 123456, admin, 123, admin888, osv., men klarte fortsatt ikke å logge inn
Dessverre skal jeg sjekke kildekoden asp.net og finne ut at den er kryptert som følger:
- 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);
- }
Kopier koden
Generelt vurderes det først at det finnes en saltverdi for brukeren i brukertabellen, og hvis det er det, brukes passordet som er oppgitt av brukeren og saltverdien hentet fra databasen
DESEncrypt kryptert, (jeg vet heller ikke.)Hva er DESEncrypt?Deretter kaster du det krypterte passordet og brukeren inn i dalen. GetMode-metoden,
For å dømme igjen, finnes det en select-setning i metoden, og koden er som følger:
- /// <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;
- }
Kopier koden
Jeg vet ikke hvordan jeg skal dekryptere dette, så jeg bytter ut det krypterte passordet fra databasen! Rassel
C# setter et bruddpunkt på passordplassen, som vist i følgende figur:
Gack, chifferteksten etter å ha fått krypteringen 123456 er EB51565598856A17, og gå bestemt til databasen for å erstatte den med oppdateringssetningen
Innlogging vellykket!
|