記一次mysql資料庫被勒索(下)

誰也不要跟我搶發表於2020-08-16

背景:

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,資料庫、重要檔案,及時做備份;

相關文章