Χθες, έλαβα την asp.net έκδοση του πηγαίου κώδικα της δημόσιας πλατφόρμας WeChat που μου έστειλε ένας φίλος.
Σήμερα θέλω να το ανοίξω και να ρίξω μια ματιά, τι περιέχει, πρώτα να επισυνάψω τη βάση δεδομένων στον SQL Server 2008,
Στη συνέχεια, ανοίξτε το έργο και εκτελέστε crtl+F5 για να εκτελέσετε το έργο web, όπως φαίνεται στην παρακάτω εικόνα:
Έτσι, έλεγξα αμέσως τον πίνακα διαχειριστή dt_manager της βάσης δεδομένων και διαπίστωσα ότι ο λογαριασμός διαχειριστή ήταν διαχειριστής, αλλά δεν ήξερα τι ήταν κρυπτογραφημένος ο κωδικός πρόσβασης, άλλωστε ήμουν αρχάριος
1 1 1 διαχειριστής 77F992940A0EFD8025F5571B133BA6D5 28LH48 Σούπερ διαχειριστής 13800138000 123@qq.com 0 2013-12-04 01:53:36.000 1000000 0 888 12 186 Δεν σας λέει NULL 0
Πρώτα ρίξτε το στον ιστότοπο md5 για να το αποκρυπτογραφήσετε
Mu Το βρήκατε, δοκιμάσατε μερικούς κωδικούς πρόσβασης που χρησιμοποιούνται συνήθως, όπως 123456, admin, 123, admin888 κ.λπ., αλλά και πάλι δεν μπορέσατε να συνδεθείτε
Δυστυχώς, πηγαίνοντας να ελέγξω τον πηγαίο κώδικα asp.net και να διαπιστώσω ότι είναι κρυπτογραφημένος ως εξής:
- 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);
- }
Αντιγραφή κώδικα
Σε γενικές γραμμές, κρίνεται πρώτα ότι υπάρχει τιμή αλατιού του χρήστη στον πίνακα χρήστη και εάν υπάρχει, χρησιμοποιείται ο κωδικός πρόσβασης που εισάγει ο χρήστης και η τιμή αλατιού που λαμβάνεται από τη βάση δεδομένων
DESEncrypt κρυπτογραφημένο, (ούτε εγώ ξέρω.)Τι είναι το DESEncrypt;Στη συνέχεια, ρίξτε τον κρυπτογραφημένο κωδικό πρόσβασης και τον χρήστη στο dal. Μέθοδος GetMode,
Για να κρίνουμε ξανά, υπάρχει μια δήλωση επιλογής στη μέθοδο και ο κωδικός έχει ως εξής:
- /// <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;
- }
Αντιγραφή κώδικα
Δεν ξέρω πώς να αποκρυπτογραφήσω αυτό το πράγμα, οπότε θα αντικαταστήσω τον κρυπτογραφημένο κωδικό πρόσβασης από τη βάση δεδομένων! Κουδουνίστρα
Η C# ορίζει ένα σημείο διακοπής στη θέση του κωδικού πρόσβασης, όπως φαίνεται στην παρακάτω εικόνα:
Gack, το κρυπτογραφημένο κείμενο αφού λάβετε 123456 κρυπτογράφηση είναι EB51565598856A17 και πηγαίνετε αποφασιστικά στη βάση δεδομένων για να το αντικαταστήσετε με τη δήλωση ενημέρωσης
Επιτυχής σύνδεση!
|