Celah Keamanan Pada Website JAMSOSTEK
Situs resmi JAMSOSTEK (www.jamsostek.co.id) merupakan satu dari sederetan situs perusahaan di Indonesia yang memliki celah keamanan berupa kebocoran file SQL. Saya mulai melirik celah ini sekitar 3 bulan yang lalu, tapi baru sekarang sempat menuliskan laporan untuk Admin ^^”
Karena celah keamanan ini sudah lama ada, dugaan sementara saya pastinya banyak tertanam (setidaknya, ada) backdoor pada website tersebut. Didorong rasa penasaran, saya mencoba mencari tau jalan termudah Attacker untuk masuk ke sistem mereka dan menanam backdoor
Bocornya File SQL
Celah ini memang bisa ditemukan dan dilihat oleh siapapun karena Google sudah terlanjur merambahnya. Saya menggunakan jasa Google dengan memasukan keyword:
filetype:sql site:jamsostek.co.id
Kata kunci tersebut menghasilkan 2 hasil pencarian berupa file SQL.

Kebocoran file SQL
File pertama, http://www.jamsostek.co.id/jmsportal_2122005.sql, menyimpan informasi sensitif berikut:
-- phpMyAdmin SQL Dump
-- version 2.6.2-pl1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Dec 21, 2005 at 10:56 AM
-- Server version: 4.1.11
-- PHP Version: 5.0.4
--
-- Database: `jamcms`
--
-- --------------------------------------------------------
--
-- Table structure for table `advertisement`
--
.....
............
.................
--
-- Table structure for table `users`
--
CREATE TABLE `users` (
`userid` varchar(20) NOT NULL default '',
`password` varchar(20) default NULL,
`name` varchar(50) default NULL,
`email` varchar(60) default NULL,
`phone` varchar(20) default NULL,
`added_by` varchar(20) default NULL,
`added_date` datetime default NULL,
`level` varchar(30) default NULL,
`modul` varchar(20) default NULL,
PRIMARY KEY (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Dumping data for table `users`
--
INSERT INTO `users` VALUES ('admin', 'admin', 'Administrator', 'jrobalian@yahoo.com', '234234', NULL, NULL, 'Superuser', NULL);
INSERT INTO `users` VALUES ('lutung', 'lutung', 'Lutung Melalung', 'belikade@yahoo.com', '234234', NULL, NULL, 'Administrator', NULL);
....
Yap, kita mendapat informasi berharga:
| Username | Password |
| admin | admin |
| lutung | lutung |
Saya mencoba login dengan akun-akun tersebut melalui halaman login Administrator Jamsostek (http://www.jamsostek.co.id/admin/). Kabar buruk, akses menuju halaman admin dengan kedua akun diatas DITOLAK
Kabar baiknya.. tidak ada mekanisme untuk mencegah brute force

Akses ditolak
Wajar sich jika informasi pada file SQL tersebut sudah tidak valid, filenya sendiri digenerate 5 tahun yang lalu, 21 Desember 2005. Saya segera beralih ke file berikutnya ^^
File kedua, http://www.jamsostek.co.id/backup-data/jams.sql, memiliki ukuran 24.48MB. Dari informasi yang digenerate phpMyAdmin, file ini dibuat pada 2 Februari 2010. Saya mencari tabel password dan menemukan sesuatu yang sedikit berbeda dari file pertama.
Yap, kali ini passwordnya sudah dienkripsi dengan mcrypt
Berikut adalah daftar user selengkapnya:
| Name | Username | Encrypted Password | Level |
| Jamsostek Administrator | admin | 65393736333865633832 | Administrator |
| Gauss | webadmin | 38383331623463336332 | Administrator |
| Dhwi Jayanthy | dhwi | 64386433613031626137 | Administrator |
| ilyas | ilyas | 33656134613865346437 | Administrator |
| Ebenezer Simanjuntak | eben | 65396532333166613764 | User Normal |
| ari | ari | 66633239326264376466 | User Normal |
| uus supriyadi | uus | 61366538633236666461 | User Normal |
| ery arianto | ery bisap | 38666562666233316535 | Guest |
| puspitaningsih | puspitaningsih dap | 61653465303862323037 | Guest |
| zain setyadi | zain | 33656439623935653462 | Guest |
| jro | jro | 34663463343939616266 | Guest |
| I Kade Budiarta | kadek | 39626430613033346261 | Guest |
| eko semino | eko sdm | 65356561396236643731 | Guest |
| pulung riyanto | pulung manris | 34373938306661323164 | Guest |
| neneng salamah | neneng dil | 34666134636239376534 | Guest |
| weny herdiani | weny akuntansi | 36626530316433363264 | Guest |
| ibnu rusdan | ibnu pupm | 31393561636538643530 | Guest |
| isnavodiar jatmiko | iko renbang | 34616334643336363963 | Guest |
| nelson hasudungan | nelson renbang | 61346533363036383136 | Guest |
| dian senoaji | dian keu | 66393764653461393938 | Guest |
| endang sri hastuti | endang pkp | 37353635613166623166 | Guest |
| eris aprianto | eris operasi | 34346137653036343836 | Guest |
| gunara setiady | gunara akuntansi | 63343638303064363566 | Guest |
| ira listyosari | ira pengadaan | 33633637303830613161 | Guest |
| Gaus Gaus | gaus | 63613366623038616432 | Guest |
Hmm.. gimana yach cara decryptnya? hehehe.. daripada mengabiskan waktu mencari cara untuk mendekrip passwordnya, saya menggunakan jurus ampuh: mencari user yang passwordnya sama dengan usernamenya :p
User: admin, Password: admin -> gagal :’(
User: webadmin, Password: webadmin -> gagal :’(
…
….
User: uus, Password: uus -> berhasil, bisa login setingkat “User Normal” ![]()
…
User: zain, Password: zain -> berhasil, bisa login setingkat “Guest” ^_*
Upload Webshell
Langsung ajah saya login sebagai “uus” dengan User: uus, Password: uus
berikut adalah menu-menu yang bisa saya Akses dengan user tersebut:

Menu yang bisa diakses "User Normal"
Menu paling menarik bagi saya adalah menu Downloads. Dimana ada Downloads, tentunya ada fasilitas Upload
Dan dugaan saya ternyata…

Fasilitas Upload
Yeah, saya menemui fasilitas Upload. Saya berhasil melakukan upload webshell melalui fasilitas tersebut.Tapi… dimana ya letak file-file yang sudah diupload? Saya menuju halaman Unduh situs Jamsostek.co.id

Halaman Unduh situs Jamsostek
Wah, nama saya nampang disana
Setelah saya klik icon Folder di kolom paling kanan, Webshell saya muncul dengan sempurna

Webshell
Sampai disini, kita bisa melihat 2 kelalaian lagi:
- Tidak ada filter pada fasilitas tersebut. User bisa melakukan upload file apapun, termasuk PHP;
- Folder upload tidak diproteksi sehingga script PHP saya dieksekusi;
- Fungsi-fungsi berbahaya pada PHP tidak didisable sehingga saya bisa memanfaatkan webshell untuk menjalankan perintah-perintah shell;
Dengan memanfaatkan webshell, kini attacker bisa melakukan apapun yang diinginkan.. melihat username dan password database, melihat isi database terbaru, mencuri account-account perusahaan yang mendaftarkan diri pada Jamsostek, atau menggunakan tar untuk mendownload CMS Jamsostek
Insuficient Authorization
Saya jadi penasaran nich, apa yang terjadi jika saya login dengan account setingkat Guest ‘_’? Arh.. daripada penasaran, saya coba login dengan user setingkat Guest yang saya dapat tadi, User: zain, Password: zain

Hak akses akun setingkat Guest
Yaah.. bener-bener nggak seru nich. Menu yang diberikan untuk Guest sangat terbatas. Saya akan berpura-pura sebagai Guest yang belum pernah login sebagai user dengan level yang setingkat diatasnya
Hmm.. kira-kira dengan segala keterbatasan ini, bisa nggak ya Guest melakukan kecurangan untuk mendapatkan akses yang lebih tinggi? Bisa nggak yach Guest mengakses fasilitas Download untuk melakukan Upload webshell?
Saya mulai melirik URL dan menemui ada sesuatu yang menarik disana >:)
main.php?mainid=4
mainid=4 .. kenapa harus “4″? bagaimana kalau “1″
Iseng-iseng, saya ubah urlnya menjadi mainid=1 (http://www.jamsostek.co.id/admin/main.php?mainid=4)
Dan ternyata..

Menu yang disembunyikan tidak dilindungi session
Wah, saya mendapati halaman yang seharusnya tidak boleh diakses oleh user setingkat Guest. Fasilitas-fasilitas terlarang bagi Guest ini seharusnya tidak hanya disembunyikan, tapi juga dilindungi dengan menggunakan session. Hm.. sampai disini, ternyata saya masih belum mendapatkan hak akses untuk upload.
Saya mencoba mengakses:
main.php?mainid=2 main.php?mainid=3
Harapan saya sich ada area tersembunyi lagi ^^” tapi ternyata saya hanya menemui halaman kosong. Dimana saya harus mencari nilai mainid yang benar? Aha..! (saya bukan sedang promosi Modem lho
) saya akan mencoba mencarinya di database Jamsostek yang saya temukan melalui Googling tadi

Search mainid pada database
Yeah, ketemu nich.. admin/main.php?mainid=101 Saya segera melompat ke (http://www.jamsostek.co.id/admin/main.php?mainid=101)

Guest bisa mengakses area User Normal
Dan saya mendapati menu-menu lain yang sebelumnya disembunyikan bagi Guest, kini bisa diakses, termasuk menu Download. Sampai disini, Guest bisa memanfaatkan fasilitas Upload untuk mengupload Webshell d’_'b
Penutup
Celah keamanan beserta solusi atas kelemahan-kelemahan ini telah saya laporkan kepada Admin Jamsostek. Setidaknya kita bisa mendapatkan pelajaran berharga:
- Gunakan password yang secure. Banyak user dengan hak akses rendah yang tidak peduli dengan passwordnya. “Arrh.. biarin ajah password saya dicuri, toh cuma level biasa. Kalau password saya diubah, saya tinggal tanya ke Admin.” —> pemikiran ini sering saya temui. Di tangan Attacker yang tepat, segala keterbatasan hak akses bisa dilewati untuk menuju kepada level yang lebih tinggi.
- Dalam membangun CMS multi user dan multi level, pastikan setiap area terlindungi dengan session untuk mengatur hak akses, bukan hanya dilindungi dengan menyembunyikan menu.
- Sanitasi modul upload, izinkan user hanya mengupload file-file yang diperlukan saja (ex: jpg,gif,pdf)
- Disable php pada directory upload. Buatlah file .htaccess pada setiap directory upload dengan konten sebagai berikut:
<IfModule mod_php.c>
php_flag engine off
</IfModule>
AddType text/plain .html .htm .shtml .php .php3 .php5 .phtml .phtm .pl .py .cgi - Disable fungsi berbahaya yang tidak diperlukan. Misalnya: system, exec, shell_exec, passthru, error_log, ini_alter, dl, pfsockopen, openlog, syslog, readlink, symlink, link, leak, popen, escapeshellcmd, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, escapeshellarg, pcntl_exec
set display_errors off
Tentunya hal ini menyesuakan fungsi-fungsi yang diperlukan cms Anda. - Untuk menyulitkan Malicious Outsider, sembunyikan halaman Admin, jangan menggunakan /admin atau /administrator. Sudah banyak ditemui kasus adanya kebocoran file sql namun attacker gagal masuk karena tidak mengetahui url untuk login menuju halaman Admin.
Sekian, semoga bisa menambah pengetahuan dan kewaspadaan Anda
- Memanen Ratusan Email Secara Otomatis Dari Devilzc0de Social Network
- Bank Arta Graha Vulnerable to XSS
- Mendapatkan Account Admin Tersembunyi
- Menyembunyikan File Rahasia di Dalam Gambar
- Tutorial Patching PDF Password Unlocker V4.0.2.5
- Stack Using Array
- Mengatasi Permasalahan Error Out Of paper HP LaserJet P1005




