記一次Tomcat一句話木馬修復


起因

近期,網絡中心反饋,這邊有一個服務器發現了一句話木馬,我想着應該是我的服務,因為之前這個服務就中過一次毒,后來升級了tomcat,刪除了無用的文件和配置。但是這次還是中毒了,查了一些資料,修改了配置,Tomcat也升級到最新版本,這次應該不會再有問題了,再有問題的話,我再來繼續更新😂

版本信息

Tomcat:9.0.34

配置過程

刪除管理及示例項目

進入Tomcat安裝目錄

cd %tomcat_home% 

刪除webapps下所有內容(當然自己的項目如果已經部署過了,別刪除)

rm -rf *

為什么要刪除,因為tomcat默認部署了項目管理服務和示例項目,特別是管理模塊,很可能被非法利用

配置server.xml

文件路徑:

%tomcat_home%/config/server.xml
1、修改服務器端口

下面是默認配置,改成你自己的端口號:

 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

比如

 <Connector port="9999" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
2、修改服務器關閉命令及端口

下面是默認配置,改成你自己的端口號和命令:

<Server port="8005" shutdown="SHUTDOWN">

比如

<Server port="9995" shutdown="AFADSLFJKDFJALSDF887676">
3、關閉熱部署

默認:

 <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

關閉:

 <Host name="localhost"  appBase="webapps"
            unpackWARs="false" autoDeploy="false">

我覺得,這里應該是很重要很關鍵的,之前我一直是啟用熱部署的,感覺很方便,但如果有人把惡意代碼傳到webapps下面,同樣也會自動部署,這是很危險的。還有需要注意的是,如果unpackWARs="false"就意味着你要自己手動解壓war包,tomcat不會自動解壓,這樣更安全,但是也有很多不變。linux環境的話,可以通過unzip解壓:

unzip -op *.war 
4、關閉用戶配置

將如下配置注釋掉即可

 <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

修改web.xml

文件路徑:

%tomcat_home%/config/web.xml
1、增加錯誤處理頁面
    <error-page>
	    <error-code>404</error-code>
		<location>/404.html</location>
	</error-page>
	<error-page>
	    <error-code>403</error-code>
		<location>/403.html</location>
	</error-page>
	<error-page>
	    <error-code>500</error-code>
		<location>/500.html</location>
	</error-page>
    ...

為什么要增加錯誤處理頁面,我覺得第一個原因是避免泄露太多的錯誤信息,比如Tomcat的版本信息,以及不想暴露的錯誤信息;另一個原因是出於美觀考慮,自帶的錯誤頁面太丑了

2、修改tomcat版本信息

為什么要修改呢,因為如果你暴漏了自己的tomcat版本信息,而且你恰好有好多漏洞沒修復,對方根據你的版本信息就能查到你可能有哪些潛在漏洞,但如果你隱藏了版本信息,想要發掘你的容器漏洞還是有很多難度的。下來,我們看下如何修改:

首先,進入Tomcat的lib目錄:

cd %tomcat_home%/lib

找到catalina.jar,用壓縮軟件打開,在jar包的如下路徑找到版本配置文件:ServerInfo.properties

org.apache.catalia.util

修改前的內容如下:

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

server.info=Apache Tomcat/9.0.33
server.number=9.0.33.0
server.built=Mar 11 2020 09:31:38 UTC

然后自己可以隨意修改,比如:

server.info=Apache Tomcat/999999999999999
server.number=999999999999999999
server.built=999999999999999999999 UTC

然后再替換重新打包,當然如果用的是壓縮軟件的話直接保存就好了。linux環境的話,可以將對應的jar包拉下來,替換后再上傳。

當你修改完版本信息,tomcat的錯誤頁再也看不到正確的版本信息了。

3、屏蔽jsp

之前項目有用到jsp,現在已經改成html了,所以我可以屏蔽jsp文件。但是本次我沒有配置這個,如果后面還有問題的話,我會考慮這個方法。這次就不說了,我也還沒查相關資料

總結

希望這次過后,服務不會再出現問題。這次的問題可能和三個月前剛發布的Tomcat漏洞有關系,因為說的是AJP服務,我看服務器的配置,沒有開啟這個配置,所以也就沒有升級服務器。

漏洞編號:

  • CVE-2020-1938
  • CNVD-202-1048

受影響的版本如下:

  • Apache Tomcat6
  • Apache Tomcat7 < 7.0.100
  • Apache Tomcat8 < 8.5.51
  • Apache Tomcat9< 9.0.31

如果哪個小伙伴的服務器版本不幸在列的話,趕緊抓緊時間修復吧,被存在僥幸心理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM