記一次mysql數據庫被勒索(下)


背景:

nextcloud的mysql數據庫被黑,刪庫勒索。參考:記一次mysql數據庫被勒索(上)

mysql數據庫恢復成功,nextcloud還是無法連接。參考:記一次mysql數據庫被勒索(中)

正文:

經過一番研究,發現nextcloud在第一次數據庫配置成功后,會創建一個oc_root的帳號,之后就會使用oc_root帳號來連接數據庫。

而oc_root的密碼,並不是在配置的時候設置的管理員root的密碼,貌似是nextcloud自己生成的。

 

 加密算法應該跟這里面的passwordsalt 有關系,重新配置數據庫,這個鹽值就會變化。

而之前手賤,想通過配置新數據庫,來恢復nextcloud,又沒有把config.php文件備份下來。

結果,現在的nextcloud所用的密碼,無法連接原來的mysql數據庫了。。T_T

以上結論是經過反復試驗得出的,不一定嚴謹~~

 於是,就想到一個方法:

1, 使用nextcloud連接新的數據庫,重新生成oc_root帳號和config.php文件;

2,從新的數據庫里面,獲取oc_root創建的SQL,導入到舊數據庫里面;

3,手動修改config.php文件,將dbhost指向舊數據庫;

 ※ 這個方法能行的通,前提就是加鹽算法,只用於oc_root連接數據庫,其他數據表里面沒有使用這個鹽,賭一把了~~

試驗過程:

1,啟動新mysql的docker容器;

2,刪除nextcloud的config.php文件,並在configh目錄下touch CAN_INSTALL 文件;

3,瀏覽器刷新nextcloud,輸入新的mysql容器IP,其他配置保持與舊數據庫一致;

     ※ 需要提前將nextcloud管理員帳號對應的目錄重命名,否則會提示用戶名已經存在。

4,等nextcloud的數據庫配置完成,查看創建oc_root用戶的SQL文:

   還是通過binlog來:

  # mysqlbinlog /var/lib/mysql/binlog.000002 > /var/lib/mysql/2.sql

找到創建帳號、設置權限的SQL語句

5, 在舊的數據庫中執行以下操作

   刪除原來的oc_root帳號:delete from user where user='oc_root';

   創建新的oc_root帳號:

 在創建oc_root@%時,會報 ERROR 1396 (HY000): Operation CREATE USER failed for 'oc_root'@'%' 的錯誤。

 需要,先進行drop user 操作:

mysql> drop user 'oc_root'@'%';
Query OK, 0 rows affected (0.14 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.03 sec)

 再進行權限設置(也是從binlog里面拷貝出來的):

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `nextcloud`.* TO 'oc_root'@'%';

改完權限,記得要flush privileges,才可以生效。

 6,修改nextcloud 的config.php文件,將dbhost改為舊數據的IP

瀏覽器中刷新一下nextcloud頁面,終於出現久違的登陸框。

  用之前的帳號登陸,也可以顯示之前的文件內容了,大功告成!

========================================================================

這次勒索事件,給我上了很重要一課:

1,公網是很危險的地方,隨時有各種人用各種工具在掃描你的機器;

2,密碼設置復雜一些,防火牆不能關閉,端口能不開放就不開放;

3,數據庫、重要文件,及時做備份;


免責聲明!

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



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