Méthodes pour masquer la version de MySQL : 1. Vérifiez la version actuelle de MySQL via la commande "mysql -uroot -p> select version();" 2. Démarrez le service MySQL et ajoutez une politique de pare-feu ; fichier « mysqld.bak » ; 4. Ouvrez le fichier « /usr/sbin/mysqld » et remplacez-y les informations de version.
L'environnement d'exploitation de ce tutoriel : système CentOS 7.6, MySQL version 5.7, ordinateur Dell G3.
Dans le projet, la partie A a effectué une analyse de sécurité sur le serveur et a découvert qu'il existait de nombreuses vulnérabilités de la version basse de MySQL et a nécessité leur réparation. Cependant, compte tenu de l'impact sur l'entreprise, il n'est pas pratique de mettre à niveau directement la version actuelle, et notre entreprise est déployée dans un environnement intranet et dispose de restrictions d'accès au réseau, de sorte que les risques de sécurité réels sont relativement faibles. Ici, nous essayons de trouver d'autres moyens de le contourner, c'est-à-dire de modifier le numéro de version de MySQL et de masquer ses véritables informations de version.
Le processus de test est enregistré comme suit, Opérations à risque, à titre de référence uniquement.
Il existe de nombreuses façons de vérifier la version actuelle, les plus courantes sont :
mysql -V
mysql -uroot -p> select version();
Sans autorisations de connexion, vous pouvez également utiliser les outils telnet ou nmap pour la détection et l'analyse afin d'obtenir les informations de version de MySQL :
telnet [host] [port]
nmap -T4 -sC -sV -p [port] [ip]
Numéro de série | Nom | Version | Remarques |
---|---|---|---|
1 | Système d'exploitation Linux | CentOS 7.6 | IP 192. 168.64.147 |
2 | Base de données MySQL | 5.7.22 | rpm Installation |
yum -y install wget telnet nmap net-toolswget -P /opt/mysql https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.22-1.el7.x86_64.rpm-bundle.tartar -xf /opt/mysql/mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar -C /opt/mysqlcd /opt/mysqlls -lh /opt/mysql/ yum -y remove mariadb* yum -y install \ mysql-community-common-5.7.22-1.el7.x86_64.rpm \ mysql-community-libs-5.7.22-1.el7.x86_64.rpm \ mysql-community-client-5.7.22-1.el7.x86_64.rpm \ mysql-community-server-5.7.22-1.el7.x86_64.rpm
2. 开启 MySQL 服务,添加防火墙策略
systemctl start mysqld && systemctl status mysqld firewall-cmd --permanent --add-port=3306/tcp firewall-cmd --reload firewall-cmd --list-all
3. 设置密码
passwd=`grep 'password' /var/log/mysqld.log|awk '{print $NF}'`mysqladmin -u root -p$passwd password Aa123456.
4. 设置远程连接
mysql -uroot -pAa123456. mysql> use mysql;mysql> select user,host from user;mysql> update user set host='%' where user='root';mysql> flush privileges;mysql> select user,host from user;
5. 查看当前版本
mysql> select version();mysql> \q mysql -V
telnet 192.168.64.147 3306 nmap -T4 -sC -sV -p 3306 192.168.64.147
cp /usr/bin/mysql /usr/bin/mysql.bakcp /usr/sbin/mysqld /usr/sbin/mysqld.bak
2. 编辑二进制文件,替换其中的版本信息
如果只想对外部探测 MySQL 的真实版本信息进行隐藏,只需改 /usr/sbin/mysqld 文件。
❗️❗️❗️注意:版本号不可为空或删减其他信息,否则可能导致服务无法启用!
vi /usr/bin/mysql# 搜索关键字“Linux”快速定位,修改版本号,建议改为官网最新的稳定版本^@fwrite^@\0^@\t^@\n^@\\^@ERROR^@ %d (%s)^@ at line %lu^@ in file: '%s'^@ERROR %d (%s): ^@ERROR %d: ^@ERROR: ^@UNKNOWN USER^@MysqlClient^@LOGNAME^@LOGIN^@SUDO_USER^@Linux^@5.7.22^@x86_64^@Show warnings enabled.^@Show warnings disabled.^@Aborted^@Bye^@Writing history-file %s# 参考案例:^@fwrite^@\0^@\t^@\n^@\\^@ERROR^@ %d (%s)^@ at line %lu^@ in file: '%s'^@ERROR %d (%s): ^@ERROR %d: ^@ERROR: ^@UNKNOWN USER^@MysqlClient^@LOGNAME^@LOGIN^@SUDO_USER^@Linux^@5.7.37^@x86_64^@Show warnings enabled.^@Show warnings disabled.^@Aborted^@Bye^@Writing history-file %s
vi /usr/sbin/mysqld # 搜索关键字“--language”快速定位,修改版本号,建议改为官网最新的稳定版本 H^P1öéz¬,ÿ1Òëõ^@^@Hì^HHÄ^HÃ^@^@^@^@^@^@^@^@^@^@^@^A^@^B^@^@^@^@^@^@^@^@^@^@^@^@^@%s: %s^@MYSQL_AUDIT_GENERAL_ERROR^@OFF^@BOTH^@NO_AUTO_CLEAR^@NO_INTERNAL_LOOKUP^@Unknown^@tcp^@MYSQL_TCP_PORT^@/var/lib/mysql/mysql.sock^@MYSQL_UNIX_PORT^@Unable to delete pid file: %s^@%.3f^@.lower-test^@.LOWER-TEST^@Can't create test file %s^@Shutting down slave threads^@'--lc-messages-dir'^@--language/-l^@--binlog_max_flush_queue_time^@5.7.22^@Linux^@%s Ver %s for %s on %s (%s) # 参考案例: H^P1öéz¬,ÿ1Òëõ^@^@Hì^HHÄ^HÃ^@^@^@^@^@^@^@^@^@^@^@^A^@^B^@^@^@^@^@^@^@^@^@^@^@^@^@%s: %s^@MYSQL_AUDIT_GENERAL_ERROR^@OFF^@BOTH^@NO_AUTO_CLEAR^@NO_INTERNAL_LOOKUP^@Unknown^@tcp^@MYSQL_TCP_PORT^@/var/lib/mysql/mysql.sock^@MYSQL_UNIX_PORT^@Unable to delete pid file: %s^@%.3f^@.lower-test^@.LOWER-TEST^@Can't create test file %s^@Shutting down slave threads^@'--lc-messages-dir'^@--language/-l^@--binlog_max_flush_queue_time^@5.7.37^@Linux^@%s Ver %s for %s on %s (%s)
3. 重启服务
systemctl restart mysqld systemctl status mysqldnetstat -nplt |grep mysqld
4. 确认版本
mysql -V mysql -h 192.168.64.147 -uroot -pAa123456. mysql> select version();mysql> \q
5. 其他业务相关的测试
telnet 192.168.64.147 3306 nmap -T4 -sC -sV -p 3306 192.168.64.147
序号 | 名称 | 版本 | 备注 |
---|---|---|---|
1 | Linux操作系统 | CentOS 7.6 | IP:192.168.64.147 |
2 | MariaDB数据库 | 5.5.68 | rpm安装 |
yum -y install mariadb-server telnet nmap net-tools
2. 开启 MySQL 服务,添加防火墙策略
systemctl start mariadb && systemctl status mariadb firewall-cmd --permanent --add-port=3306/tcp firewall-cmd --reload firewall-cmd --list-all
3. 设置密码和远程连接
mysqladmin -u root password "Aa123456."mysql -uroot -pAa123456. MariaDB [(none)]> use mysql;MariaDB [mysql]> select user,host from user;MariaDB [mysql]> update user set host='%' where user='root';MariaDB [mysql]> flush privileges;MariaDB [mysql]> select user,host from user;
4. 查看当前版本
MariaDB [mysql]> select version();MariaDB [mysql]> \q mysql -V
telnet 192.168.64.147 3306 nmap -T4 -sC -sV -p 3306 192.168.64.147
cp /usr/bin/mysql /usr/bin/mysql.bakcp /usr/libexec/mysqld /usr/libexec/mysqld.bak
2. 编辑二进制文件,替换其中的版本信息
如果只想对外部探测 MariaDB 的真实版本信息进行隐藏,只需改 /usr/libexec/mysqld 文件。
❗️❗️❗️注意:版本号不可为空或删减其他信息,否则可能导致服务无法启用!
vi /usr/bin/mysql# 搜索关键字“-MariaDB”快速定位,修改版本号,建议改为官网最新的稳定版本^@KILL %s%lu^@ERROR^@ at line %lu^@ in file: '%s'^@ERROR %d (%s)^@ERROR %d^@Linux^@5.5.68-MariaDB^@readline^@x86_64^@vi^@EDITOR^@VISUAL^@Command '%.40s' failed^@Show warnings disabled.^@Show warnings enabled.^@Usage: \! shell-command^@Charset changed^@Charset is not found^@show databases^@show tables^@%.64s.%.64s^@*** NONE ***^@Connection id: %lu^@Current database: %.128s# 参考案例:^@KILL %s%lu^@ERROR^@ at line %lu^@ in file: '%s'^@ERROR %d (%s)^@ERROR %d^@Linux^@10.7.3-MariaDB^@readline^@x86_64^@vi^@EDITOR^@VISUAL^@Command '%.40s' failed^@Show warnings disabled.^@Show warnings enabled.^@Usage: \! shell-command^@Charset changed^@Charset is not found^@show databases^@show tables^@%.64s.%.64s^@*** NONE ***^@Connection id: %lu^@Current database: %.128s
vi /usr/libexec/mysqld # 同样通过搜索关键字“-MariaDB”快速定位,修改版本号,建议改为官网最新的稳定版本^@CLOSE_CONNECTION^@unauthenticated^@unconnected^@Error in accept^@5.5.68-MariaDB^@x86_64^@Linux^@%s Ver %s for %s on %s (%s)# 参考案例:^@CLOSE_CONNECTION^@unauthenticated^@unconnected^@Error in accept^@10.7.3-MariaDB^@x86_64^@Linux^@%s Ver %s for %s on %s (%s)
3. 重启服务
systemctl restart mariadb systemctl status mariadbnetstat -nplt |grep mysqld
4. 确认版本
mysql -V mysql -h 192.168.64.147 -uroot -pAa123456. MariaDB [(none)]> select version();MariaDB [(none)]> \q
5. 其他业务相关的测试
为防止探测过程中出现错误连接次数太多导致IP被锁定,建议先提高允许的max_connection_errors数量;
或使用清楚缓存的方法,把计数清理掉
mysql -h 127.0.0.1 -uroot MariaDB [(none)]> show global variables like '%max_connect_errors%';MariaDB [(none)]> set global max_connect_errors=1000;MariaDB [(none)]> show global variables like '%max_connect_errors%';MariaDB [(none)]> flush hosts;MariaDB [(none)]> \q
复测结果
telnet 192.168.64.147 3306 nmap -T4 -sC -sV -p 3306 192.168.64.147
推荐学习:《MySQL视频教程》
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!