Bug Pada CMS WordPress
CMS
WordPress masih
banyak sekali mengandung ‘bug’/celah keamanan yang muncul lewat eksploitasi via
URL. Saya tidak tahu apakah ini karena kelalaian pihak pengembangnya atau
memang disengaja.
Dari hasil
riset kecil-kecilan saya selama beberapa jam, saya akhirnya menemukan cukup
banyak celah keamanan WordPress. Umumnya terletak pada direktori rootnya. Ada
juga yang terletak pada direktori induk/utama.
CMS
WordPress sendiri terdiri atas 3 direktori utama, yaitu:
- wp-admin
- wp-content
- wp-includes
Pada
masing-masing direktori mengandung cukup banyak file. Bahkan masih ada
direktori lagi di dalam masing-masing direktori utama tersebut. Mirip dengan
struktur hierarki folder di komputer kita. Direktori bisa diartikan sebagai
folder kalau kita kaitkan dengan komputer. Nah, kita tentu sudah tahu, bahwa
dalam folder pun bisa kita buat folder lagi. Folder mengandung folder. Tentunya
selain mengandung file.
Lalu, apa saja celah keamanan CMS WordPress pada
direktorinya, terutama jika dieksploitasi via URL?
Berikut ini
daftar lengkap celah keamanan WordPress yang bisa memunculkan ‘bug’ berupa
pesan error. Lengkap dengan cara mengamankannya.
- namadomain/wp-settings.php
Tips pengamanan:
- Login ke kontrol panel hosting
Anda (namadomain/cpanel).
- Masuk ke folder utama
WordPress.
Kalau menggunakan cPanel, masuk ke public_html > wp-settings.php
Kalau menggunakan Spanel, masuk ke direktori sites > namadomainsitus
> www > wp-settings.php
- Tambahkan/sisipkan kode
penghilang pesan error berupa:
error_reporting(0);
Tepatnya di bawah kode pembuka PHP yang berupa
<?php
Pada wp-settings.php
<?php
Error_reporting(0); //kode penghilang pesan error
/**
*Build Administration
Menu.
Jadi, kodenya kita sisipkan di baris kedua (di bawah
kode <?php). Caranya, cukup buat baris baru (dengan menekan enter) di bawah
kode pembuka file wp-settings.php tersebut.
- Klik tombol simpan atau save
untuk menyimpan settingan baru tersebut.
- namadomain/wp-admin/namafile
Berikut ini daftar nama file pada direktori wp-admin
ini yang bisa memunculkan pesan error ketika dieksploitasi via URL:
admin-functions.php
menu.php
menu-header.php
options-head.php
upgrade-functions.php
Contoh celah keamanannya misalnya berupa http://namadomain.com/wp-admin/menu.php
Tips pengamanan:
Sama dengan pengamanan pada celah pertama di atas,
yaitu dengan menambahkan/menyisipkan kode penghilang pesan error berupa error_reporting(0); di baris kedua pada masing-masing file. Misalnya jika
di file menu.php akan seperti ini.
Pada menu.php
<?php
Error_reporting(0); //kode penghilang pesan error
/**
*Build Administration
Menu.
Lakukan hal yang sama pada file-file lain yang
terkandung di dalam direktori wp-admin (seperti pada list di atas). Lokasi
direktorinya yaitu: public_html > wp-admin > nama file (jika menggunakan
cPanel). Sedangkan kalau menggunakan Spanel, masuk ke direktori sites >
namadomain > www > wp-admin.
- namadomain/wp-admin/includes/
dan namadomain/wp-admin/includes/namafile
Direktori ini lumayan banyak mengandung ‘bug’ atau
celah keamanan jika dieksploitasi lebih lanjut sampai ke bagian file-filenya.
Dengan pola URL seperti di atas, maka pesan error yang menampilkan username
akun hosting bisa terlihat/muncul.
Contoh saja misalnya pada URL
http://namadomain/wp-admin/includes/admin.php
Berikut ini daftar file root pada direktori
wp-admin/includes yang mengandung bug berupa pesan error ketika kita ekploitasi
via URL:
admin.php
class-ftp-pure.php
class-ftp-sockets.php
class-ftp.php
class-wp-filesystem-direct.php
class-wp-filesystem-ftpext.php
class-wp-filesystem-ftpsockets.php
class-wp-filesystem-ssh2.php
comment.php
continents-cities.php
file.php
media.php
misc.php
plugin-install.php
plugin.php
template.php
theme-install.php
update.php
upgrade.php
user.php
Bagaimana cara mengamankannya?
Ada cukup membuat sebuah file .htacces pada direktori wp-admin/includes. Caranya:
- Login ke kontrol panel hosting
WordPress Anda.
- Masuk ke direktori public_html
> wp-admin > includes.
Jika menggunakan Spanel, masuk ke sites > namadomain > www >
wp-admin > includes.
- Buat sebuah file baru pada
lokasi wp-admin > includes tersebut dengan nama .htaccess (dalam
format txt). Anda bisa membuatnya dengan menu buat file baru atau dengan
jalan upload file txt yang nantinya di-rename dengan nama ‘.htaccess’.
- Isilah file .htaccess tersebut
dengan kode berikut ini:
5. # PHP error handling for production servers
6. php_flag display_startup_errors off
7. php_flag display_errors off
8. php_flag html_errors off
9. php_flag log_errors on
10.php_flag ignore_repeated_errors off
11.php_flag ignore_repeated_source off
12.php_flag report_memleaks on
13.php_flag track_errors on
14.php_value docref_root 0
15.php_value docref_ext 0
16.# [see footnote 3] # php_value error_reporting
999999999
17.php_value error_reporting -1
18.php_value log_errors_max_len 0
- Lalu klik tombol save atau
simpan.
Kode di atas berguna untuk menampilkan pesan error
secara umum saja (tanpa memunculkan lokasi/letak error yang mengandung username
akun hosting).
Efek dari penambahan file .htaccess dengan script di atas bisa Anda lihat pada link
berikut ini:
- namadomain/wp-content/themes/namatheme
Celah keamanan di lokasi ini sudah saya bahas tuntas
di postingan tentang cara menutupi celah
keamanan wordpress pada
direktori wp/content/theme/namathemes. Silakan simak jika Anda belum
membacanya.
- namadomain/wp-includes
dan namadomain/wp-includes/namafile
Berikut ini daftar file di direktori wp-includes yang
bisa memunculkan pesan error ketika dieskploitasi via URL:
* canonical.php
* class-feed.php
* class.wp-scripts.php
* class.wp-styles.php
* comment-template.php
* default-embeds.php
* default-filters.php
* default-widgets.php
* feed-atom-comments.php
* feed-atom.php
* feed-rdf.php
* feed-rss.php
* feed-rss2-comments.php
* feed-rss2.php
* general-template.php
* kses.php
* media.php
* post.php
* registration-functions.php
* rss-functions.php
* rss.php
* script-loader.php
* shortcodes.php
* taxonomy.php
* template-loader.php
* theme.php
* update.php
* vars.php
* wp-db.php
* user.php
Tips pengamanan:
- Login ke kontrol panel hosting
Anda.
- Masuk ke direkrori public_html
> wp-includes (cPanel). Namun kalau menggunakan Spanel, masuk ke sites
> namadomain > www > wp-includes
- Buat file .htaccess dengan isi
4. <ifmodule mod_rewrite.c>
5. RewriteEngine On
6. RewriteBase /
7. RewriteRule .*\.php$ http://namadomainsitusanda [L]
Gunanya untuk mengalihkan ke halaman depan situs Anda
jika ada yang mengakses domain situs kita melalui pola URL kelima ini. Jadi,
pesan error yang bisa menampilkan username akun hosting tidak akan ditampilkan
karena akan langsung dialihkan ke halaman utama situs kita.
Jadi, coba ganti http//domainsitusanda dengan URL
halaman depan situs Anda. Misalnya kalau situs ini, maka kode .htaccess baris
terakhirnya menjadi:
RewriteRule .*\.php$ http://kafegue.com [L]
Contoh hasil penyisipan file .htaccess tersebut:
Selamat
mencoba.
Bagi Anda
yang tak mau terlalu peduli dengan masalah keamanan situs WordPress Anda,
silakan abaikan saja tulisan ini. Termasuk jika Anda sudah merasa cukup aman,
walaupun username akun hosting Anda diketahui.
Jika ada
solusi atau cara pengamanan lain yang menurut Anda lebih baik, silakan
sharingkan di kolom komentar.