Kemarin, saya menerima kode sumber platform publik WeChat versi asp.net yang dikirimkan kepada saya oleh seorang teman.
Hari ini saya ingin membukanya dan melihat, apa yang ada di dalamnya, pertama-tama lampirkan database ke SQL Server 2008,
Kemudian buka proyek dan jalankan crtl+F5 untuk menjalankan proyek web, seperti yang ditunjukkan pada gambar berikut:
Jadi, saya segera memeriksa tabel administrator dt_manager database dan menemukan bahwa akun administrator adalah admin, tetapi saya tidak tahu apa kata sandi yang dienkripsi, lagipula, saya adalah seorang pemula
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 Tidak memberi tahu Anda NULL 0
Pertama-tama lemparkan ke situs web md5 untuk mendekripsinya
Mu Anda menemukannya, mencoba beberapa kata sandi yang umum digunakan, seperti 123456, admin, 123, admin888, dll., tetapi masih tidak dapat masuk
Sayangnya, akan memeriksa kode sumber asp.net dan menemukan bahwa kode tersebut dienkripsi sebagai berikut:
- 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);
- }
Salin kode
Secara umum, pertama-tama dinilai bahwa ada nilai garam pengguna dalam tabel pengguna, dan jika ada, kata sandi yang dimasukkan oleh pengguna dan nilai garam yang diperoleh dari database digunakan
DESEncrypt dienkripsi, (saya juga tidak tahu.)Apa itu DESEncrypt?Kemudian, lemparkan kata sandi terenkripsi dan pengguna ke dalam dal. Metode GetMode,
Untuk menilai lagi, ada pernyataan select dalam metode, dan kodenya adalah sebagai berikut:
- /// <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;
- }
Salin kode
Saya tidak tahu cara mendekripsi benda ini, jadi saya akan mengganti kata sandi terenkripsi dari database! Mainan
C# menetapkan titik henti di tempat kata sandi, seperti yang ditunjukkan pada gambar berikut:
Gack, ciphertext setelah mendapatkan enkripsi 123456 EB51565598856A17, dan dengan tegas pergi ke database untuk menggantinya dengan pernyataan update
Login berhasil!
|