Một ngày đẹp trời, website của bạn xuất hiện các dấu hiệu bất thường: lượng truy cập tự nhiên sụt giảm đột ngột, khách hàng phản hồi họ bị chuyển hướng sang các trang web cá cược lạ, hoặc xuất hiện một vài tài khoản quản trị lạ hoắc trong trang cấu hình admin. Nếu bạn đang đối mặt với những vấn đề này, rõ ràng website của bạn đã dính mã độc. Việc nhanh chóng tìm ra cách handle wordpress hacked là điều tối quan trọng để bảo vệ dữ liệu khách hàng, giữ vững uy tín thương hiệu và tránh bị Google đưa vào danh sách đen.
Vừa qua, đội ngũ kỹ thuật tại DPS.MEDIA đã hỗ trợ khôi phục thành công một hệ thống website doanh nghiệp bị nhiễm mã độc nặng (đường dẫn lưu trữ trên server tại `/home/yourdomain.com/public_html/`). Phân tích kỹ thuật từ file log Wordfence CLI cho thấy website này chứa 16,854 file, tổng dung lượng quét là 281.2 MiB. Wordfence quét mất 851 giây (khoảng 14 phút) và phát hiện ra đúng 3 file suspicious (file nghi vấn chứa mã độc). Bài viết này sẽ chia sẻ chi tiết case study thực tế này, đưa ra tên cụ thể của các plugin độc hại, tài khoản admin giả mạo của hacker và quy trình dọn sạch từ A-Z để bạn có thể tự kiểm tra hệ thống của mình.
Bước 1: Quét phát hiện mã độc bằng Wordfence CLI
Wordfence CLI là công cụ quét mã độc chạy trên dòng lệnh của máy chủ (VPS/Server) vô cùng mạnh mẽ, xử lý nhanh hơn nhiều so với plugin thông thường. Trước tiên, bạn cần kết nối license key miễn phí của Wordfence bằng lệnh:
wordfence configure
Sau đó, tiến hành quét thư mục chứa mã nguồn của website và xuất kết quả ra một file log cố định để tiện phân tích:
wordfence malware-scan --output-path=/home/yourdomain.com/public_html/wordfence-scan-log.log /home/yourdomain.com/public_html/
Lưu ý cực kỳ quan trọng về số file bị bỏ qua (Skipped Files)
Trong quá trình quét, hệ thống báo cáo có tới 7,903 files bị bỏ qua. Lý do là Wordfence CLI theo mặc định chỉ quét các file mã nguồn (như PHP). Tuy nhiên, hacker ngày nay rất tinh vi, chúng thường giấu webshell hoặc chèn mã PHP vào trong các file tĩnh (như đuôi `.jpg`, `.png`, `.css`, hoặc `.js`).
Do đó, để đảm bảo làm sạch triệt để, bạn bắt buộc phải thực hiện quét sâu toàn bộ bằng cách thêm cờ --include-all-files:
wordfence malware-scan --include-all-files --output-path=/home/yourdomain.com/public_html/wordfence-scan-full-\\$(date +%Y%m%d-%H%M%S).log /home/yourdomain.com/public_html/
Ngoài ra, nếu trong log báo có timeout (hệ thống bị 1 timeout), hãy kiểm tra ngay file bị timeout đó. Những file có dung lượng lớn bất thường hoặc xử lý quá lâu thường là các file chứa hàng triệu dòng code mã hóa (obfuscated code) của hacker.

Bước 2: Đọc file log và định vị chính xác tên mã độc
Vì Wordfence chỉ báo số lượng file nghi ngờ ở phần tổng kết cuối cùng, bạn cần lọc chi tiết đường dẫn của 3 file này bằng lệnh lọc grep:
grep -i "suspicious\|malicious\|match" /home/yourdomain.com/public_html/wordfence-scan-log.log
Hoặc bạn có thể xuất thẳng kết quả quét ra định dạng CSV để dễ phân tích trực quan:
wordfence malware-scan --output-format=csv --output-path=/home/yourdomain.com/public_html/wordfence-scan-results.csv /home/yourdomain.com/public_html/
Dựa trên log thực tế, chúng tôi phát hiện 3 file độc hại cụ thể gồm:
- wp-content-filter/wp-content-filter.php: Fake plugin chứa đoạn mã độc tạo tài khoản admin và in ra dòng xác nhận “OK”. Đây là kiểu backdoor tạo admin kinh điển, thường được hacker kích hoạt từ xa thông qua một tham số HTTP ẩn.
- wordpress-cache-optimizer/wordpress-cache-optimizer.php: Fake plugin ngụy trang dưới dạng công cụ tối ưu bộ nhớ đệm (caching tool). File này chứa code tự động chèn một tài khoản quản trị ẩn với thông tin đăng nhập được hardcode sẵn.
- wp-fixplugin.php: Located in the directory
wp-content/mu-plugins/(Must-Use Plugins, tự động tải mà không hiển thị trong danh sách plugin thông thường). File này tự động chèn một thẻ script độc hại dạng<script src="...">vào thẻ<head>của trang web nhằm redirect người dùng sang các trang cá độ. Tinh vi ở chỗ, file này sử dụng hàmis_user_logged_in()để ẩn script độc hại này đối với admin đã đăng nhập nhằm tránh bị người quản trị phát hiện khi duyệt web của mình.
Sau khi đã biết chính xác, hãy dùng lệnh xóa sạch các thư mục và file độc hại này:
rm -rf /home/yourdomain.com/public_html/wp-content/plugins/wp-content-filter
rm -rf /home/yourdomain.com/public_html/wp-content/plugins/wordpress-cache-optimizer
rm /home/yourdomain.com/public_html/wp-content/mu-plugins/wp-fixplugin.php
Bước 3: Rà soát và xóa tài khoản Admin giả mạo
Liệt kê tất cả các tài khoản có quyền cao nhất trên website bằng WP-CLI:
wp user list --role=administrator --allow-root --path=/home/yourdomain.com/public_html
Đối chiếu với mã nguồn và thời gian tạo tài khoản, chúng tôi phát hiện 2 tài khoản quản trị giả mạo do hacker tạo ra:
- wphiddenbot (ID 4): Tạo lúc 2026-07-21 03:54:55, tên hiển thị “Cache Worker”, email
wphiddenbot@gmail.com. Đây là tài khoản được tạo ra bởi fake pluginwordpress-cache-optimizer.php. - wpenginebot (ID 3): Tạo lúc 2026-07-20 21:41:33 (trước wphiddenbot khoảng 6 tiếng). Đây chính là tài khoản do backdoor
wp-content-filter.phptạo ra. Khoảng thời gian tạo trùng khớp với thời điểm mã độc được thả vào server.
Tiến hành xóa bỏ 2 tài khoản giả mạo này và gán lại bài viết sang cho tài khoản admin thật (ID 1):
wp user delete 3 --reassign=1 --allow-root --path=/home/yourdomain.com/public_html
wp user delete 4 --reassign=1 --allow-root --path=/home/yourdomain.com/public_html
Bước 4: Dọn dẹp cấu hình độc hại ẩn sâu trong Database
Mã độc không chỉ nằm ở file mà còn lưu các cấu hình độc hại trong database (bảng wp_options). Rất nhiều trường hợp người quản trị xóa file PHP nhưng không dọn dẹp DB nên website vẫn tiếp tục bị hack lại.
Để tìm kiếm các option độc hại này trong database, bạn sử dụng WP-CLI chạy các lệnh kiểm tra sau (lưu ý thay đổi đường dẫn domain thực tế thành yourdomain.com):
wp option list --search="*fixplugin*" --allow-root --path=/home/yourdomain.com/public_html
wp option list --search="*cache_optimizer*" --allow-root --path=/home/yourdomain.com/public_html
wp option list --search="*content_filter*" --allow-root --path=/home/yourdomain.com/public_html
Kết quả hiển thị trên terminal sẽ giúp bạn nhận diện ngay các cấu hình bất thường:
+-------------------------+--------------------------------------------------+
| option_name | option_value |
+-------------------------+--------------------------------------------------+
| wp_fixplugin_script_url | https://mamglaqwek.com/googletagmanager.js?v=2.0 |
| wp_fixplugin_script_ver | 1785515873 |
+-------------------------+--------------------------------------------------+
+-------------+--------------+
| option_name | option_value |
+-------------+--------------+
+-------------+--------------+
| option_name | option_value |
+-------------+--------------+
+-------------+--------------+
| option_name | option_value |
+-------------+--------------+
Cụ thể, mu-plugin wp-fixplugin.php gọi hàm get_option() từ các hằng số cấu hình. Khi kiểm tra thực tế, chúng tôi tìm thấy hai option độc hại được thêm vào bảng wp_options:
- wp_fixplugin_script_url: Lưu giá trị link script độc hại
https://mamglaqwek.com/googletagmanager.js?v=2.0. Link này giả danh Google Tag Manager để lẫn lộn với mã tracking thật của bạn (ví dụGTM-WPTSRZZJ). - wp_fixplugin_script_ver: Lưu timestamp
1785511188(hoặc các biến thể timestamp khác như1785515873).
Hai option này có option_id rất lớn (lên tới 100,136), chứng tỏ chúng mới được tiêm vào gần đây trong chuỗi tấn công ngày 20-21/07. Tiến hành xóa sạch các option này bằng WP-CLI:
wp option delete wp_fixplugin_script_url --allow-root --path=/home/yourdomain.com/public_html
wp option delete wp_fixplugin_script_ver --allow-root --path=/home/yourdomain.com/public_html
Truy vết và tìm kiếm sâu hơn:
Hacker thường có cơ chế dự phòng, chèn link độc hại mamglaqwek.com ở nhiều nơi khác như nội dung bài viết, widget hoặc theme. Bác cần quét toàn bộ hệ thống để tìm kiếm dấu vết của domain này:
# Quét tìm trong toàn bộ file của wp-content
grep -rl "mamglaqwek.com" /home/yourdomain.com/public_html/ 2>/dev/null
# Quét tìm trong toàn bộ các bảng dữ liệu database
wp db search "mamglaqwek.com" --allow-root --path=/home/yourdomain.com/public_html
Bước 5: Kiểm tra các file cấu hình và vá lỗ hổng nghiêm trọng
Read the file carefully .htaccess và wp-config.php:
cat /home/yourdomain.com/public_html/.htaccess
cat /home/yourdomain.com/public_html/wp-config.php | grep -v "^\s*//" | grep -v "^\s*\$"
Kiểm tra kỹ xem có quy tắc chuyển hướng lạ nào trong `.htaccess` không. Đồng thời, qua rà soát file `wp-config.php`, chúng tôi phát hiện 2 lỗ hổng bảo mật nghiêm trọng cần xử lý ngay:
1. Các khóa bảo mật (Salts key) chưa được thiết lập
Các khóa dùng để mã hóa cookie đăng nhập vẫn đang để giá trị mặc định của WordPress:
define( 'AUTH_KEY', 'put your unique phrase here' );
define( 'SECURE_AUTH_KEY', 'put your unique phrase here' );
...
Hãy lấy bộ khóa ngẫu nhiên mới từ WordPress.org bằng cách chạy lệnh:
curl -s https://api.wordpress.org/secret-key/1.1/salt/
Hoặc đảo Salts key tự động bằng WP-CLI (việc này sẽ ép tất cả tài khoản đang đăng nhập, kể cả hacker, phải thoát ra lập tức):
wp config shuffle-salts --allow-root --path=/home/yourdomain.com/public_html
2. Mật khẩu Database bị rò rỉ hoặc quá yếu
Nếu mật khẩu kết nối database của bạn bị lộ trong log hoặc quá đơn giản, hãy tiến hành đổi ngay trên MySQL console:
# Truy cập MySQL Console
mysql -u root -p
# Thay đổi mật khẩu cho user kết nối database
ALTER USER 'yourdomain_wp_user'@'localhost' IDENTIFIED BY 'mat_khau_moi_sieu_manh';
FLUSH PRIVILEGES;
EXIT;
Sau đó, cập nhật lại mật khẩu mới này vào dòng DB_PASSWORD trong file wp-config.php.
Bước 6: Thay thế toàn bộ mã nguồn Core bằng bản sạch
Để đảm bảo không còn file hệ thống nào bị hacker âm thầm chỉnh sửa, bạn hãy ghi đè core sạch từ nguồn chính thức của WordPress (bỏ qua thư mục wp-content):
cd /tmp
wget https://downloads.wordpress.org/release/wordpress-7.0.2-no-content.zip
unzip wordpress-7.0.2-no-content.zip
# Sao lưu wp-admin và wp-includes cũ để dự phòng
cp -r /home/yourdomain.com/public_html/wp-admin /home/yourdomain.com/wp-admin-backup-\\$(date +%Y%m%d)
cp -r /home/yourdomain.com/public_html/wp-includes /home/yourdomain.com/wp-includes-backup-\\$(date +%Y%m%d)
# Sử dụng rsync ghi đè core sạch
rsync -av --exclude='wp-content' /tmp/wordpress/ /home/yourdomain.com/public_html/
Bước 7: Reset mật khẩu tài khoản Admin thật
Đổi mật khẩu cho toàn bộ tài khoản admin thực tế của hệ thống (như tài khoản admindps và các admin khác) qua WP-CLI:
wp user update admindps --user_pass="MatKhauMoiSieuCapBaoMat@2026" --allow-root --path=/home/yourdomain.com/public_html
Bước 8: Chặn thực thi file PHP trong thư mục Uploads
Đây là hành động gia cố bảo mật buộc phải làm. Hacker rất hay lợi dụng lỗ hổng upload để tải webshell ẩn dưới dạng đuôi `.png.php` hoặc tương tự vào thư mục uploads. Hãy tạo file .htaccess nằm trong thư mục wp-content/uploads/ với nội dung chặn thực thi PHP:
<Files *.php>
deny from all
</Files>
Bước 9: Quét lại hệ thống lần cuối để xác nhận sạch
Chạy lại lệnh quét toàn diện để đảm bảo không còn bất kỳ mối đe dọa nào sót lại:
wordfence malware-scan --include-all-files --output-path=/home/yourdomain.com/public_html/wordfence-scan-final.log /home/yourdomain.com/public_html/
Khi kết quả trả về hoàn toàn sạch sẽ, hãy tắt chế độ bảo trì:
wp maintenance-mode deactivate --allow-root --path=/home/yourdomain.com/public_html
Bước 10: Phân quyền file và theo dõi liên tục
Thiết lập quyền thư mục là 755, file là 644, và file wp-config.php is 400 hoặc 600 để ngăn chặn việc chỉnh sửa file cấu hình.
Tối ưu bảo mật website cùng dịch vụ chuyên nghiệp DPS.MEDIA
Dọn sạch mã độc chỉ giải quyết phần ngọn. Điều cốt lõi là bạn phải tìm ra lỗ hổng bảo mật ban đầu bằng cách phân tích Access Log của Web Server tại thời điểm file backdoor được tạo để bịt kẽ hở đó lại, ngăn chặn hacker quay lại vào lần sau.
Bạn nên tìm hiểu các tiêu chuẩn bảo mật chính thức qua tài liệu Hardening WordPress chính thức để nâng cao tính an toàn cho hệ thống.
Nếu bạn đang gặp khó khăn trong việc dọn dẹp mã độc hoặc muốn gia cố hệ thống bảo mật toàn diện cho website của mình, hãy liên hệ ngay với DPS.MEDIA qua Hotline/Zalo: 0961545445 hoặc ghé thăm văn phòng tại số 56 Nguyen Dinh Chieu, Tan Dinh Ward, District 1, Ho Chi Minh City. Chúng tôi mang đến dịch vụ thiết kế website WordPress chuyên nghiệp chuẩn SEO, tích hợp bảo mật tự động nhiều lớp và chế độ sao lưu an toàn hàng ngày, giúp bạn an tâm vận hành doanh nghiệp phát triển bền vững.
Ý kiến bạn đọc (9)
Đăng nhập để bình luận
Đăng nhập nhanh 1-chạm bằng Google để chia sẻ ý kiến của bạn về bài viết.
Bằng cách đăng nhập, bạn đồng ý với điều khoản và chính sách cộng đồng.
Chưa có bình luận nào. Hãy là người đầu tiên chia sẻ cảm nghĩ!
Đăng nhập / Tạo tài khoản
Đăng nhập với Google để gửi bình luận và tương tác cùng cộng đồng.
Tiếp tục là đồng ý với điều khoản sử dụng và chính sách bảo mật của DPS Media.