Website WordPress yang diretas sering kali tidak langsung menampilkan gejala yang jelas. Pada banyak kasus, hacker berhasil mendapatkan akses administrator, menanam backdoor, lalu membuat akun admin baru sebagai pintu masuk cadangan.
Masalah menjadi lebih serius ketika akun administrator yang sudah dihapus muncul kembali secara otomatis. Kondisi ini biasanya menunjukkan bahwa masih ada backdoor, cron job berbahaya, atau plugin yang telah dimodifikasi.
Artikel ini membahas langkah demi langkah proses audit WordPress setelah peretasan berdasarkan metode yang biasa digunakan oleh praktisi keamanan WordPress.
Tanda-Tanda WordPress Telah Diretas
Beberapa indikasi yang sering ditemukan antara lain:
- Muncul user administrator yang tidak dikenal.
- Website mengarahkan pengunjung ke situs lain.
- Terdapat halaman judi online atau spam SEO.
- Password administrator berubah tanpa sepengetahuan pemilik website.
- Resource server meningkat drastis.
- Google menandai website sebagai berbahaya.
- File PHP muncul di folder uploads.
Jika menemukan salah satu gejala tersebut, segera lakukan audit menyeluruh.
Langkah 1: Periksa Seluruh User Administrator
Pemeriksaan pertama adalah memastikan tidak ada akun administrator ilegal.
Menggunakan WP-CLI:
wp --path=/home/USER/public_html user list
Contoh hasil:
ID user_login
1 admin
3 adminbockup
Apabila ditemukan akun yang tidak dikenal seperti:
adminbockup
hapus segera:
wp --path=/home/USER/public_html user delete adminbockup
Atau menggunakan ID:
wp --path=/home/USER/public_html user delete 3
Setelah dihapus, jalankan kembali:
wp --path=/home/USER/public_html user list
Pastikan hanya akun yang memang digunakan pemilik website yang tersisa.
Langkah 2: Audit File PHP di Folder Uploads
Folder uploads seharusnya hanya berisi:
- gambar
- video
- dokumen
- cache tertentu
Periksa:
find wp-content/uploads -type f -name "*.php"
Hasil ideal:
wp-content/uploads/wpforms/cache/index.php
Kemudian buka isi file:
cat wp-content/uploads/wpforms/cache/index.php
Jika isinya:
<?php
// Silence is golden.
maka file tersebut aman.
Yang perlu dicurigai adalah file seperti:
eval(base64_decode(...))
atau:
system($_GET['cmd']);
atau:
shell_exec(...)
File seperti itu harus segera dihapus.
Langkah 3: Cari Backdoor Umum
Sebagian besar malware WordPress menggunakan fungsi tertentu untuk menyembunyikan kode berbahaya.
Lakukan pencarian:
Eval
find public_html -type f -name "*.php" | xargs grep -l "eval("
Base64
find public_html -type f -name "*.php" | xargs grep -l "base64_decode"
Gzinflate
find public_html -type f -name "*.php" | xargs grep -l "gzinflate("
Shell
find public_html -type f -name "*.php" | xargs grep -l "shell_exec"
System
find public_html -type f -name "*.php" | xargs grep -l "system("
Passthru
find public_html -type f -name "*.php" | xargs grep -l "passthru("
Fungsi-fungsi tersebut tidak selalu berbahaya.
Sebagai contoh:
- Wordfence sering menggunakan base64.
- Composer autoload menggunakan encoding tertentu.
- Library WordPress memakai gzinflate.
Karena itu setiap hasil harus diperiksa konteksnya.
Langkah 4: Periksa Cron WordPress
Hacker sering menggunakan cron untuk membuat akun admin kembali muncul setelah dihapus.
Lihat seluruh cron:
wp --path=/home/USER/public_html cron event list
Contoh cron normal:
wp_update_plugins
wp_update_themes
wordfence_hourly_cron
elementor/tracker/send_event
Yang perlu dicurigai:
create_admin
restore_admin
user_sync
hidden_task
atau nama hook yang tidak berasal dari plugin resmi.
Jika ditemukan cron mencurigakan:
wp cron event delete nama_hook
Langkah 5: Audit Database WordPress
Banyak malware menyimpan payload langsung di database.
Periksa tabel options:
SELECT option_name
FROM wpgd_options
WHERE option_value LIKE '%base64_decode%';
Periksa:
SELECT option_name
FROM wpgd_options
WHERE option_value LIKE '%eval(%';
Periksa:
SELECT option_name
FROM wpgd_options
WHERE option_value LIKE '%gzinflate%';
Jika query tidak menghasilkan data, itu pertanda baik.
Selanjutnya periksa isi postingan:
SELECT ID, post_title
FROM wpgd_posts
WHERE post_content LIKE '%base64_decode%'
OR post_content LIKE '%eval(%';
Hasil kosong menunjukkan tidak ada payload malware yang tersimpan pada konten.
Langkah 6: Audit Plugin yang Memiliki Akses File
Plugin file manager merupakan target favorit hacker.
Contoh plugin yang perlu diperhatikan:
- File Organizer
- WP File Manager
- Advanced File Manager
Plugin seperti ini memungkinkan perubahan file langsung dari dashboard WordPress.
Jika website tidak benar-benar memerlukannya, lebih aman untuk menghapus plugin tersebut.
Langkah 7: Periksa File yang Baru Dimodifikasi
Gunakan:
find public_html -type f -mtime -1
Perintah tersebut menampilkan file yang berubah dalam 24 jam terakhir.
Perhatikan file seperti:
wp-config.php
functions.php
header.php
footer.php
index.php
Jika ada perubahan yang tidak diketahui, lakukan pemeriksaan manual.
Langkah 8: Aktifkan Wordfence Login Security
Wordfence memiliki fitur penting:
- Two Factor Authentication
- Login Protection
- Brute Force Protection
- Malware Scanner
Aktifkan:
- 2FA untuk seluruh administrator.
- Login rate limit.
- Lockout otomatis.
Dengan demikian, meskipun password bocor, login tetap memerlukan kode OTP.
Langkah 9: Blok Penambahan User Admin Secara Otomatis
Banyak pemilik website ingin memastikan tidak ada administrator baru yang dapat dibuat tanpa izin.
Salah satu cara paling efektif adalah membuat plugin keamanan sederhana.
Contoh:
add_action('user_register', function($user_id){
$user = get_userdata($user_id);
if(in_array('administrator', $user->roles)) {
wp_delete_user($user_id);
error_log(
'Administrator blocked: ' .
$user->user_login
);
}
});
Fungsi tersebut:
- mendeteksi user baru,
- memeriksa role administrator,
- menghapus akun secara otomatis.
Namun metode ini hanya cocok pada website yang dikelola satu orang dan tidak pernah menambahkan admin baru secara rutin.
Langkah 10: Nonaktifkan Editor File WordPress
Tambahkan pada:
wp-config.php
isi:
define('DISALLOW_FILE_EDIT', true);
Fitur ini mencegah hacker mengedit file tema dan plugin dari dashboard WordPress.
Untuk keamanan tambahan:
define('DISALLOW_FILE_MODS', true);
Pengaturan tersebut memblokir:
- instal plugin
- update plugin
- edit plugin
- edit theme
langsung dari dashboard.
Langkah 11: Lindungi Folder Uploads
Tambahkan file:
wp-content/uploads/.htaccess
Isi:
<FilesMatch "\.php$">
Deny from all
</FilesMatch>
Pada server Apache, aturan ini mencegah eksekusi file PHP di dalam folder uploads.
Langkah ini sangat efektif menghentikan sebagian besar shell upload.
Langkah 12: Audit File Penting WordPress
Fokus pada:
wp-config.php
.htaccess
index.php
functions.php
header.php
footer.php
Periksa apakah terdapat kode aneh seperti:
eval(
base64_decode(
atau:
assert(
atau:
preg_replace('/e'
atau:
create_function(
Jika ditemukan, lakukan investigasi lebih lanjut.
Langkah 13: Ganti Seluruh Password
Setelah proses pembersihan selesai, ubah seluruh kredensial:
- Password WordPress.
- Password hosting.
- Password cPanel.
- Password FTP.
- Password SSH.
- Password database.
Gunakan password unik minimal 16 karakter.
Contoh:
9uT#vK8!Lp2@Qx7M
Jangan gunakan password yang sama di layanan lain.
Langkah 14: Update Seluruh Komponen
Pastikan selalu menggunakan versi terbaru:
- WordPress Core
- Tema
- Plugin
- PHP
Plugin yang tidak diperbarui sering menjadi titik masuk utama peretas.
Sebagai contoh, menjalankan Elementor Pro yang tertinggal beberapa versi dapat meningkatkan risiko eksploitasi apabila terdapat kerentanan yang sudah dipublikasikan.
Checklist Akhir Setelah Pembersihan
Pastikan seluruh poin berikut sudah terpenuhi:
✅ Tidak ada user administrator asing.
✅ Tidak ada file PHP mencurigakan di uploads.
✅ Tidak ada cron mencurigakan.
✅ Tidak ada payload malware di database.
✅ Wordfence aktif dan berjalan normal.
✅ Password telah diganti.
✅ Plugin tidak diperlukan sudah dihapus.
✅ File manager plugin sudah dinonaktifkan bila tidak digunakan.
✅ Uploads tidak dapat menjalankan PHP.
✅ Backup bersih telah dibuat.
Kesimpulan
Membersihkan WordPress yang diretas tidak cukup hanya dengan menghapus akun administrator asing. Anda harus memastikan tidak ada backdoor yang tersisa pada file, database, cron job, maupun plugin yang memiliki akses tinggi terhadap sistem.
Audit menyeluruh menggunakan SSH dan WP-CLI memungkinkan identifikasi sumber masalah dengan lebih akurat. Setelah website dinyatakan bersih, lapisan keamanan tambahan seperti Wordfence, Two Factor Authentication, pembatasan akses file, serta pemblokiran otomatis user administrator dapat membantu mencegah serangan serupa terjadi kembali di masa mendatang.