Cara menyembunyikan versi mysql: 1. Semak versi mysql semasa melalui "mysql -uroot -p> pilih versi();" 2. Mulakan perkhidmatan MySQL dan tambahkan dasar firewall; . Sandarkan fail "mysqld .bak"; 4. Buka fail "/usr/sbin/mysqld" dan gantikan maklumat versi di dalamnya.
Persekitaran pengendalian tutorial ini: sistem CentOS 7.6, MySQL5. 7 versi, komputer Dell G3.
Dalam projek itu, Party A menjalankan imbasan keselamatan pada pelayan dan menemui banyak kelemahan versi rendah MySQL dan memerlukannya untuk diperbaiki. Walau bagaimanapun, memandangkan kesan ke atas perniagaan, adalah menyusahkan untuk menaik taraf versi semasa secara langsung, dan perniagaan kami digunakan dalam persekitaran intranet dan mempunyai sekatan akses rangkaian, jadi risiko keselamatan sebenar adalah agak kecil. Di sini kami cuba mencari cara lain untuk memintasnya, iaitu, mengubah suai nombor versi MySQL dan menyembunyikan maklumat versi sebenar.
Proses ujian direkodkan seperti berikut, operasi berisiko, untuk rujukan sahaja .
Terdapat banyak cara untuk menyemak versi semasa, yang biasa ialah:
mysql -V
mysql -uroot -p> select version();
Jika anda tidak mempunyai kebenaran log masuk, anda juga boleh menggunakan alat telnet atau nmap untuk melaksanakan imbasan pengesanan dan dapatkan maklumat versi mysql:
telnet [host] [port]
nmap -T4 -sC -sV -p [port] [ip]
序号 | 名称 | 版本 | 备注 |
---|---|---|---|
1 | Linux操作系统 | CentOS 7.6 | IP:192.168.64.147 |
2 | MySQL数据库 | 5.7.22 | rpm安装 |
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视频教程》
Atas ialah kandungan terperinci Bagaimana untuk menyembunyikan versi mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!