
Dấu hiệu ban đầu là có những post, comment lạ…
Cần áp dụng các biện pháp khẩn cấp như:
- Xóa các tài khoản admin lạ
- Thay đổi mật khẩu admin thường dùng
- Thay đổi mật khẩu email dùng trong wordpress
- Thay đổi mật khẩu ftp nếu có dùng
- Kiểm tra các file của wordpress bị thay đổi
- Xóa các plugin lạ
- Kiểm tra các file data mới được upload
- Kiểm tra các store procedure của CSDL wordpress
- Thay đổi mật khẩu user có quyền trên CSDL wordpress
- Quét virus web server nếu có thể
Trước hết đăng nhập vào trang admin:
- Vào phần Users – All Users xem có user lạ nào có quyền admin hay không, nếu có thì xóa
- Trong phần chẩn đoán sức khỏe Site Health Status có mục Tools, tìm đến mục File Integrity để chạy tiện ích Check the File Integrity. Kết quả sẽ cho biết file nào bị thay đổi. Thông thường hacker sẽ thêm một đoạn mã PHP được giấu ở dòng đầu <?php. Đoạn mã này bắt đầu bằng nhiều khoản trắng để đẩy đoạn mã ra khỏi vùng nhìn thấy trên màn hình. Thay file bằng file backup nếu có.
Một khi thấy file có thay đổi, có thể dùng cách khác triệt để hơn là đổi tên thư mục wordpress đang dùng thành wordpress.old rồi tải về bản wordpress mới từ https://wordpress.org, giải nén vào thư mục www. Sau đó nhớ chép file wp-config.php từ thư mục wordpress.old sang. Ngoài ra còn phải chép thư mục wp-content/uploads sang.
Sau đó phải cài lại theme, plugins. Nếu không, có thể chép toàn bộ thư mục wp-content sang wordpress mới, tuy cách này không được an toàn. - Xóa tất cả plugin File Manager nếu có
- Các file data lạ có thể được dấu trong thư mục wp-content/uploads. Đây là thư mục chứa hình ành, tài liệu đính kèm trong bài viết của wordpress, không thể xóa cả thư mục.
- Nếu có file backup CSDL thì phục hồi CSDL wordpress
- Nếu thay đổi mật khẩu user có quyền trên CSDL wordpress thì cần cập nhật vào file wp-config.php
Script backup/restore CSDL
### backup.sh db_name ###
#!/bin/bash
[ $# -eq 0 ] && db='dbname' || db=$1
if [ $# -eq 0 ]; then
echo "Export mysql database to /backup/${db}.sql.gz"
echo "Syntax: $(basename $0) ${db}"
exit 1
fi
echo "Export mysql database to /backup/${b}.sql.gz"
/usr/bin/mysqldump $b -u root | /usr/bin/pigz > /backup/${b}.sql.gz
### restore.sh db_name ###
#!/bin/bash
[ $# -eq 0 ] && db='dbname' || db=$1
echo -e "Restore database ${db}\n"
if [ $# -eq 0 ]; then
echo -e "Syntax: $(basename $0) ${db}"
exit 1
fi
if [ ! -f "${db}.sql.gz" ] && [ ! -f "${db}.sql" ]; then
echo -e "Error: data file not found!"
exit 1
fi
echo ">> WARNING: All current data will be lost!"
read -n 1 -p ">> Continue (y/N)? " ans
echo
if [ "${ans,}" = 'y' ]; then
read -s -p "Enter mysql password: " pw
[ ! -z "$pw" ] && pw="-p $pw"
mysql -u root $pw -e "CREATE DATABASE IF NOT EXISTS $db;"
if [ -e "${db}.sql.gz" ]; then
gzip -dc < ${db}.sql.gz | mysql -u root $pw ${db}
else
mysql -u root $pw ${db} < $db.sql
fi
fi