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:

*pastikan prefixnya sama misa wp_ atau dicontoh ini wpgd_
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.