Včeraj sem prejel asp.net različico izvorne kode javne platforme WeChat, ki mi jo je poslal prijatelj.
Danes ga želim odpreti in pogledati, kaj je v njem, najprej povezati bazo podatkov s SQL Server 2008,
Nato odprite projekt in zaženite crtl+F5 za zagon spletnega projekta, kot je prikazano na naslednji sliki:
Tako sem takoj preveril administratorsko tabelo dt_manager baze podatkov in ugotovil, da je skrbniški račun administratorski, vendar nisem vedel, katero geslo je šifrirano, saj sem bil navsezadnje začetnik
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 Ne pove ti NULL 0
Najprej ga vrzi na spletno stran md5, da ga dešifriraš
Našli ste ga, preizkusili nekaj pogosto uporabljenih gesel, kot so 123456, admin, 123, admin888 itd., a se še vedno niste mogli prijaviti
Žal bom preveril asp.net izvorno kodo in ugotovil, da je šifrirana takole:
- 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);
- }
Kopiraj kodo
Na splošno se najprej presodi, da v uporabniški tabeli obstaja vrednost soli uporabnika, in če je, se uporabita geslo, ki ga je vnesel uporabnik, in vrednost soli, pridobljeno iz baze podatkov
DESEncrypt šifriran (tudi sam ne vem).Kaj je DESEncrypt?Nato vstavite šifrirano geslo in uporabnika v dal. GetMode metoda,
Za ponovno presojo: v metodi je ukaz select, koda pa je naslednja:
- /// <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;
- }
Kopiraj kodo
Ne vem, kako to dešifrirati, zato bom zamenjal šifrirano geslo iz baze podatkov! Ropotanje
C# določi prelomno točko na mestu gesla, kot je prikazano na naslednji sliki:
Gack, šifrirano besedilo po pridobitvi 123456 šifriranja je EB51565598856A17 in odločno gre v bazo podatkov, da ga nadomesti z izrekom za posodobitev
Prijava uspešna!
|