• 一些服务器常见漏洞的修复方法


    目录

    漏洞名称解释

    Apache漏洞——卸载Apache2(可能不适用于大家)

    CVE-2020-15778——禁用SCP

    CVE-2020-15778、CVE-2016-2183、CVE-2021-41617、CVE-2014-0160、CVE-2020-12062、CVE-2021-28041、CVE-2016-6515——升级openssl和openssh

    安装编译环境所需的工具

    然后编译升级openssl

    之后编译升级openssh

    CVE-2018-19052和CVE-2019-11072——升级lighttpd

    CVE-2021-23017——卸载nginx(可能不适用于大家)

    卸载apache(可能不适用于大家)

    CVE-2021-21703、CVE-2021-21708、CVE-2022-31626、CVE-2022-31625——升级PHP

    检测到目标服务支持SSL弱加密算法

    目标主机showmount -e信息泄露(CVE-1999-0554)

    检测到远端X服务正在运行中(CVE-1999-0526)


    转载请注明出处:小锋学长生活大爆炸[https://blog.csdn.net/sxf1061700625]

    漏洞名称解释

    lighttpd mod_alias_physical_handler’函数路径遍历漏洞(CVE-2018-19052)
    lighttpd 输入验证错误漏洞(CVE-2019-11072)
    OpenSSH 操作系统命令注入漏洞(CVE-2020-15778)
    OpenSSH 安全漏洞(CVE-2021-41617)
    Nginx DNS解析程序漏洞(CVE-2021-23017)
    PHP 缓冲区错误漏洞(CVE-2021-21703)
    PHP 资源管理错误漏洞(CVE-2021-21708)
    PHP 安全漏洞(CVE-2022-31626)
    PHP 安全漏洞(CVE-2022-31625)

    Apache漏洞——卸载Apache2(可能不适用于大家)

    1. sudo apt-get --purge remove apache2
    2. sudo apt-get --purge remove apache2.2-common
    3. sudo apt-get autoremove
    4. sudo find /etc -name "*apache*" -exec rm -rf {} \;
    5. sudo rm -rf /var/www

    CVE-2020-15778——禁用SCP

    sudo mv /usr/bin/scp /usr/bin/no_use_scp

    CVE-2020-15778、CVE-2016-2183、CVE-2021-41617、CVE-2014-0160、CVE-2020-12062、CVE-2021-28041、CVE-2016-6515、CVE-2023-28531等——升级openssl和openssh

    温馨提示:在执行操作之前,建议使用root用户,或者登录一个root用户窗口备用,以免环境出问题导致只能重装系统!!!

    安装编译环境所需的工具

            对于centos(注意glibc不要升级,不然可能会出问题):

    1. sudo yum update
    2. sudo yum install wget tar make gcc perl pcre-devel zlib-devel

            对于ubuntu:

    1. sudo apt update
    2. sudo apt install wget tar make gcc perl libc-dev libzip-dev libssl-dev autoconf gcc libxml2 libpam0g-dev -y

    然后编译升级openssl

    1. cd ~
    2. wget https://www.openssl.org/source/openssl-1.1.1t.tar.gz --no-check-certificate
    3. tar xzvf openssl-1.1.1t.tar.gz
    4. rm openssl-1.1.1t.tar.gz -rf
    5. cd openssl-1.1.1t
    6. # ---------------------------------------------------------------------------------- #
    7. # 以下两种情况,选择一种执行即可。比较推荐“情况1”!
    8. # 情况1:
    9. # 要加上shared参数,否则在升级ssh时会出现头文件和库文件不匹配的信息。
    10. ./config shared zlib --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
    11. make clean
    12. make -j
    13. # 建议以下这一步没问题再往后执行(即显示All tests successful. 如果出错,往下面看)
    14. sudo make test
    15. sudo make install
    16. sudo mv /usr/bin/openssl /usr/bin/openssl.bak
    17. sudo ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
    18. sudo mv /usr/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1.bak
    19. sudo mv /usr/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1.bak
    20. # 以下也有可能是/usr/local/openssl/lib,通过 ls /usr/local/openssl/ 看存在哪个
    21. sudo ln -sf /usr/local/openssl/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
    22. sudo ln -sf /usr/local/openssl/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
    23. sudo mv /usr/include/openssl /usr/include/openssl.bak
    24. sudo ln -sf /usr/local/openssl/include/openssl /usr/include/openssl
    25. cat /etc/ld.so.conf
    26. sudo vim /etc/ld.so.conf
    27. # 追加:/usr/local/openssl/lib64
    28. # 跟上面一样,有可能是 /usr/local/openssl/lib,通过 ls /usr/local/openssl/ 看存在哪个
    29. # ---------------------------------------------------------------------------------- #
    30. # 情况2:
    31. # 对于不加任何参数,则默认的安装位置为:/usr/local/bin/openssl。
    32. ./config
    33. make -j64
    34. # 建议以下这一步没问题再往后执行(即显示All tests successful.)
    35. sudo make test
    36. sudo make install
    37. sudo mv /usr/bin/openssl /usr/bin/openssl.old
    38. sudo ln -s /usr/local/bin/openssl /usr/bin/openssl
    39. cat /etc/ld.so.conf
    40. sudo vim /etc/ld.so.conf
    41. # 追加:/usr/local/lib
    42. # 也有可能是/usr/local/lib64,看存在哪个
    43. # ---------------------------------------------------------------------------------- #
    44. which openssl
    45. sudo ldconfig -v
    46. openssl version
    47. ldd /usr/local/openssl/bin/openssl

    问题一:如果在make test时候报错不通过,建议先升级一下perl:

    1. cd ~
    2. # 主要不要用最新的“不稳定开发版”
    3. wget http://www.cpan.org/authors/id/S/SH/SHAY/perl-5.30.1.tar.gz --no-check-certificate
    4. tar xzvf perl-5.30.1.tar.gz
    5. cd perl-5.30.1
    6. ./Configure -des -Dprefix=/usr/local/perl -Dusethreads -Uinstalluserbinperl -Dcc=gcc
    7. make -j
    8. sudo make test
    9. sudo make install
    10. sudo mv /usr/bin/perl /usr/bin/perl.bak
    11. sudo ln -s /usr/local/perl/bin/perl /usr/bin/perl
    12. perl -v

            然后重新执行上面openssl的make test。

    问题二:如果一直显示使用的是anaconda的openssl,要么删除该openssl(不推荐):

    rm /home/sxf/anaconda3/bin/openssl # 视情况

            还有一种情况是,Conda可能在你的shell中默认是激活的,在Ubuntu上安装anaconda的情况往往如此。在你的shell提示符的开头可能有(base)

            因此简单地运行conda deactivate可以解决这个问题。

    问题三:如果报错:

    openssl: symbol lookup error: openssl: undefined symbol: EVP_mdc2, version OPENSSL_1_1_0

            就把最后openssl的路径改为写到/etc/ld.so.conf.d/libc.conf中:

    1. sudo vim /etc/ld.so.conf.d/libc.conf
    2. # 写入:/usr/local/openssl/lib64

    问题四:如果报错:

    openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

            如果ls等基础命令都不能用了,赶紧先用root用户执行下:

    /sbin/ldconfig

            然后检查一下是/usr/local/openssl/lib64还是/usr/local/openssl/lib,然后看情况重新执行:

    1. sudo ln -sf /usr/local/openssl/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
    2. sudo ln -sf /usr/local/openssl/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
    3. # 或者
    4. sudo ln -sf /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
    5. sudo ln -sf /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

    问题五:如果报错:

    error while loading shared libraries: __vdso_time

            检查一下libc版本,并回退到之前可用的版本,比如之前是2.14,那么:

    1. export LD_LIBRARY_PATH=/opt/glibc-2.14/lib:$LD_LIBRARY_PATH
    2. LD_PRELOAD=/lib64/libc-2.14.so ln -fs /lib64/libc-2.14.so /lib64/libc.so.6

    之后编译升级openssh

    (最新版openssh9.3p可能会存在sshd兼容问题,建议先别装这么新的)

    由于升级太频繁了,给个脚本吧,可能不是很完善,看情况使用:update_openssh.sh

    1. cd ~
    2. wget https://www.zlib.net/zlib-1.2.13.tar.gz --no-check-certificate
    3. tar zxvf zlib-1.2.13.tar.gz
    4. rm zlib-1.2.13.tar.gz -rf
    5. cd zlib-1.2.13/
    6. ./configure --prefix=/usr/local/zlib --shared
    7. make clean
    8. make -j
    9. sudo make install
    10. cd ~
    11. wget https://fastly.cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.3p2.tar.gz --no-check-certificate
    12. tar zxvf openssh-9.3p2.tar.gz
    13. rm openssh-9.3p2.tar.gz -rf
    14. cd openssh-9.3p2
    15. # 注意,如果上面更改了openssl的默认安装位置,那么--with-ssl-dir可能跟我不一样
    16. ./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/openssl --without-openssl-header-check --with-pam
    17. make clean
    18. make -j
    19. sudo mv /etc/ssh /etc/ssh.old
    20. sudo make install
    21. # 启动一下OpenSSH
    22. # /usr/local/openssh/sbin/sshd
    23. # 如果遇到报错,就先将以下内容写入:sudo vim /etc/passwd
    24. sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    25. sudo make install
    26. # 如果显示了“ssh_config already exists, install will not overwrite”,那可以不用执行下面这2行
    27. sudo cp -f /etc/ssh.old/sshd_config /etc/ssh/
    28. sudo sed -i 's/Type=notify/Type=simple/' /etc/systemd/system/sshd.service || sed -i 's/Type=notify/Type=simple/' /lib/systemd/system/ssh.service
    29. sudo mv /usr/sbin/sshd /usr/sbin/sshd.bk
    30. sudo mv /usr/bin/ssh /usr/bin/ssh.bk
    31. sudo mv /usr/bin/scp /usr/bin/scp.bk
    32. sudo mv /usr/bin/sftp /usr/bin/sftp.bk
    33. sudo mv /usr/bin/ssh-keygen /usr/bin/ssh-keygen.bk
    34. sudo mv /usr/bin/ssh-agent /usr/bin/ssh-agent.bk
    35. sudo mv /usr/bin/ssh-add /usr/bin/ssh-add.bk
    36. sudo mv /usr/bin/ssh-keyscan /usr/bin/ssh-keyscan.bk
    37. sudo ln -sf /usr/local/openssh/sbin/sshd /usr/sbin/sshd
    38. sudo ln -sf /usr/local/openssh/bin/ssh /usr/bin/ssh
    39. sudo ln -sf /usr/local/openssh/bin/scp /usr/bin/scp
    40. sudo ln -sf /usr/local/openssh/bin/sftp /usr/bin/sftp
    41. sudo ln -sf /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
    42. sudo ln -sf /usr/local/openssh/bin/ssh-agent /usr/bin/ssh-agent
    43. sudo ln -sf /usr/local/openssh/bin/ssh-add /usr/bin/ssh-add
    44. sudo ln -sf /usr/local/openssh/bin/ssh-keyscan /usr/bin/ssh-keyscan
    45. # sudo mv /usr/local/openssh/bin/* /usr/bin/
    46. sudo mv /usr/local/openssh/bin/scp /usr/local/openssh/bin/no_use_scp
    47. sudo ldconfig
    48. sudo /usr/sbin/sshd
    49. sudo systemctl daemon-reload
    50. sudo systemctl enable ssh
    51. sudo systemctl restart sshd
    52. ssh -V
    53. sshd -v
    54. netstat -tnlp | grep :22

    问题一:如果遇到报错:

    checking for openssl... /usr/bin/openssl
    configure: error: *** working libcrypto not found, check config.log

            检查下--with-ssl-dir=/usr/local/openssl这个路径对不对。

    问题二:如果遇到报错:

    checking OpenSSL library version... 1010111f (OpenSSL 1.1.1q  5 Jul 2022)
    checking whether OpenSSL's headers match the library... no
    configure: error: Your OpenSSL headers do not match your
            library. Check config.log for details.
            If you are sure your installation is consistent, you can disable the check
            by running "./configure --without-openssl-header-check".
            Also see contrib/findssl.sh for help identifying header/library mismatches.

            那是你的环境里openssl安装有问题,导致openssl与他的库版本不一致。

            补一下openssl中的以下操作,注意是openssl/lib64还是openssl/lib:(推荐)

    1. sudo ln -sf /usr/local/openssl/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
    2. sudo ln -sf /usr/local/openssl/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

            如果不行,可以尝试sudo apt remove openssl先卸载openssl,然后按照再上面步骤重新安装openssl。(不推荐)

            如果不行,或者直接添加--without-openssl-header-check来跳过检查。(次推荐)

    CVE-2018-19052和CVE-2019-11072——升级lighttpd

    官方已修复该漏洞

    1. sudo apt install -y gcc libpcre2-dev libpcre3 libpcre3-dev zlib1g-dev checkinstall libssl-dev
    2. cd ~
    3. wget https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.66.tar.gz
    4. tar zxvf lighttpd-1.4.66.tar.gz
    5. rm lighttpd-1.4.66.tar.gz
    6. cd lighttpd-1.4.66
    7. ./configure --with-openssl --sbindir=/usr/sbin
    8. make -j12
    9. sudo make install
    10. sudo service lighttpd restart

    CVE-2021-23017——卸载nginx(可能不适用于大家)

    将残留卸载干净

    1. dpkg --get-selections|grep nginx
    2. sudo apt-get --purge remove nginx -y
    3. sudo apt-get --purge remove nginx-common -y
    4. sudo apt-get --purge remove nginx-core -y

    卸载apache(可能不适用于大家)

    1. # 删除 Apache2 的包及相关文件:
    2. sudo apt-get --purge remove apache2* -y
    3. sudo apt-get --purge remove apache2.* -y
    4. sudo apt-get --purge remove apache2-dev -y
    5. sudo apt autoremove -y
    6. # 删除 Apache2 的配置文件:(慎重!)
    7. sudo find /etc -name "*apache2*"|xargs sudo rm -rf
    8. # 删除 Apache2 的相关目录:(慎重再慎重!)
    9. sudo rm -rf /var/www/*
    10. sudo rm -rf /etc/apache2*
    11. sudo rm -rf /etc/httpd*
    12. # 删除 Apache2 的相关注册表键:(慎重!)
    13. sudo rm -f -- /etc/httpd/conf.d/*

    CVE-2021-21703、CVE-2021-21708、CVE-2022-31626、CVE-2022-31625——升级PHP

    官方8.1.7版本已修复该漏洞。原本装的PHP7,现在升级到8,升级后漏洞虽然得到修复,但对于服务器现有web环境的影响,还需要进一步检测。

    1. sudo apt install software-properties-common
    2. sudo add-apt-repository ppa:ondrej/php
    3. sudo apt update
    4. sudo apt install php8.1
    5. sudo apt install php8.1-fpm

    检测到目标服务支持SSL弱加密算法

    对于老的openssl,可先升级。

    然后配置:

    vim /etc/ssh/sshd_config

    最后面添加:

    Ciphers aes128-ctr,aes192-ctr,aes256-ctr

    重启服务:

    sudo service sshd restart

    目标主机showmount -e信息泄露(CVE-1999-0554)

    方式一、禁用showmount命令

    sudo vim /etc/exports

    将“-v”选项从exportfs命令中删除,这将禁用showmount命令:

    /share/dir *(nohide)

    保存配置文件并退出。

    重新启动NFS服务器以使更改生效。

    方式二、隐藏目录

    编辑位于/etc/exports的NFS服务器配置文件,并在所有导出的文件系统中添加“nohide”选项。

    sudo vim /etc/exports

    添加nohide:

    /export/backup *(rw,nohide)

    重启NFS:

    sudo service nfs restart

    方式三、直接限制IP或用户

    1. NSFOCUS建议您采取以下措施以降低威胁:
    2. * 限制可以获取NFS输出列表的IP和用户。
    3. * 除非绝对必要,请关闭NFS服务、MOUNTD。
    4. # 在NFS服务器上:
    5. vim /etc/hosts.allow
    6. mountd:192.168.1.10
    7. rpcbind:192.168.1.10:allow
    8. vim /etc/hosts.deny
    9. mountd:ALL
    10. rpcbind:ALL:deny
    11. 或者
    12. vim /etc/exports
    13. /data 192.168.1.10(rw,sync)
    14. /data 192.168.1.12(rw,sync)
    15. exportfs -rv

    检测到远端X服务正在运行中(CVE-1999-0526)

    sudo vim /etc/ssh/sshd_config

    X11Forwarding设置为no,并保存文件。

    sudo service sshd restart

  • 相关阅读:
    C++二分算法:得到山形数组的最少删除次数
    英语语音篇 - 自然拼读
    Spring框架----AOP全集
    Python常见问题
    Nodejs 如何开启多进程,进程如何通讯
    CY3/CY5/CY7标记牛血清白蛋白/人血清白蛋白,CY3/CY5/CY7-BSA/HSA
    概率论基础__排列与组合
    4 Paimon数据湖之Hive Catalog的使用
    Wsl2 Ubuntu在不安装Docker Desktop情况下使用Docker
    2020年研究生数学建模竞赛E题—— 基于视频数据的能见度估计与预测——研读笔记
  • 原文地址:https://blog.csdn.net/sxf1061700625/article/details/126844812