Introduction Bayangkan kamu masuk ke sebuah gedung konser. Di pintu masuk ada petugas memeriksa tiketmu dan memberimu sebuah gelang khusus sebagai tanda bahwa kamu sudah resmi masuk. Selama kamu memakai gelang itu, kamu bebas keluar masuk toilet atau kantin tanpa harus menunjukkan tiket lagi.
Dalam konteks website, "gelang" ini disebut Session ID.
Weak Session IDs (ID Sesi yang lemah) terjadi ketika sistem pembuatan "gelang" tersebut terlalu sederhana atau polanya mudah ditebak. Jika seseorang bisa menebak seperti apa bentuk gelang milik orang lain, dia bisa memalsukannya dan berpura-pura menjadi orang tersebut tanpa perlu tahu username dan password-nya.
Analogi Weak Session IDs (Antrean Kopi)
Misalkan ada sebuah cafe kopi yang memberikan nomor antrean kepada pelanggannya.
- Sesi yang kuat (Aman): Nomor antreannya acak dan panjang, misalnya: AX-9921-ZLP. Mustahil bagi orang lain untuk menebak nomor pelanggan berikutnya.
- Sesi yang lemah (Bahaya): Nomor antreannya urut 1, 2, 3, 4, 5 …. Jika kamu memegang nomor 4, kamu tahu pasti bahwa orang sebelum kamu adalah nomor 3. Kamu tinggal bilang ke barista "saya nomor 3" dan kamu bisa mengambil kopi milik orang lain tersebut.
Dampak Dari Weak Session IDs
Jika sebuah website memiliki session ID yang lemah, dampaknya bisa sangat fatal:
- Session Hijacking(Pembajakan Akun): Attacker bisa mencuri sesi aktifmu. Mereka tidak butuh password mu, mereka hanya butuh "gelang" yang valid.
- Akses Tanpa Izin: Attacker bisa masuk ke akun admin, melihat data pribadi, atau bahkan mengubah pengaturan akun hanya dengan menebak pola ID selanjutnya.
- Privasi Bocor: Data sensitif seperti alamat, nomor telepon, atau riwayat transaksi bisa diintip oleh orang lain.
Fitur-fitur Weak Session IDs DVWA

Pada halaman Weak Session IDs memang tampilannya terlihat sangat sederhana:
- Button Generate : Ini adalah fitur utama di halaman tersebut. Setiap kali user menekan tombol Generate, server akan membuatkan sebuag "gelang" (Session ID) baru untukmu.
Weak Session IDs In DVWA
- Level Low
Pada level ini sama sekali tidak menggunakan pengamanan. Pada level low setiap kali user meminta session ID baru, server hanya mengambil angka terakhir yang tersimpan dan menambahnya dengan angka 1 (ID = ID + 1).

Pada saat button Generate diklik, Brup Suite menangkat request dan response. Terlihat pada gambar diatas bahwa dvwaSession:4

Saat button Send di klik maka dvwaSession menjadi 5, dan itu akan terus menerus bertambah +1 id sessionnya.
Skenario "Session Hijacking"
Pada skenario ini tujuannya adalah masuk sebagai admin DVWA tana login, hanya membutuhkan dvwaSession dan PHPSESSID.

Browser A, sebagai admin login melalui Chrome dan membuka menu Weak Session IDs melakukan generate beberapa kali.

Dihalaman DVWA pada browser A, saat di insepksi terlihat pada tab Application bahwa: dvwaSession=14 PHPSESSID= 6v8rslm6tdisa77k06203jlst3

Untuk browser B, sebagai penyerang mengakses DVWA melalui Tab samaran Chrome.

Pada halaman login DVWA klik kanan untuk inspek lalu masuk tab console dan jalankan perintah: document.cookie = "dvwaSession=14; path=/"; document.cookie = "PHPSESSID= 6v8rslm6tdisa77k06203jlst3; path=/";
Catatan: Sesuaikan ID session dan PHPSESSID target.

Pada URL ubah login.php menjadi index.php lalu enter.

Hasilnya berhasil masuk DVWA dengan session milik user admin.

Disini saya mencoba mengubah password user admin melalui menu change password CSRF hasilnya Password Changed.

Hasilnya pada browser A, user yang ingin memeriksa passwordnya aka gagal meskipun user merasa password sudah benar.

Tetapi saat menggunakan password yang sudah diganti oleh penyerang (Browser B) hasilnya Valid.
Kerentanan Level Low
<?php
$html = "";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
if (!isset ($_SESSION['last_session_id'])) {
$_SESSION['last_session_id'] = 0;
}
$_SESSION['last_session_id']++;
$cookie_value = $_SESSION['last_session_id'];
setcookie("dvwaSession", $cookie_value);
}
?>Pada level low session ID dibuat menggunakan increment integer dimana tiap session baru hanya ditambah +1. Jadi mudah bagi attacker membaca pola pembuatan dvwaSessionya. Nilaisession juga disimpan di counter local last_session_id. Pada level low tidak ada validasi server (cek ip, cek user, login ulang).
2. Level Medium
Di level ini, setiap kali user mengklik tombol Generate, server tidak lagi menambah angka satu per satu untuk ID sessionnya. Server akan melihat jam digitalnya dan mengambil hitungan detik saat itu juga atau biasa disebut Timestamp.

Di bagian response pada Burp Suite dvwaSession terlihat sudah berbeda dari level low. Dimana dvwaSession nya mengikuti Timestamp.
Saya sudah mencatat dvwaSession: 1770886393 1770886401 1770886408

Session ID tersebut bisa dikonversi melalui https://www.unixtimestamp.com/ dan hasilnya terlihat informasi seperti Format, GMT, Your Time Zone, Relative.
1770886393 Thu Feb 12 2026 15:53:13 GMT+0700 1770886401 Thu Feb 12 2026 15:53:21 GMT+0700 1770886408 Thu Feb 12 2026 15:53:28 GMT+0700
Kerentanan Level Medium
<?php
$html = "";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$cookie_value = time();
setcookie("dvwaSession", $cookie_value);
}
?>Pada level medium session ID masih rentan karena penggunaan Unix Timestamp ( time() ) sehingga nilai session ID menjadi mudah diprediksi oleh penyerang.
3. Level High
Pada level high session ID tidak lagi menggunakan angka sederhana atau timestamp langsung. Setiap kali button Generate diklik session ID bertambah satu lalu dienkripsi menggunakan algoritma MD5.

Pada level high dvwaSession terlihat pada bagian response di Burp Suite berupa penomoran acak dengan kombinasi huruf dan angka.
Tetapi pada bagian request terlihat dvwaSession tidak di enkripsi, itu karena request adalah identitas lama dari level sebelumnya (level medium) sedangkan response adalah identitas baru.
eccbc87e4b5ce2fe28308fd9f2a7baf3
a87ff679a2f3e71d9181a67b7542122c
e4da3b7fbbce2345d7772b0674a318d5
1679091c5a880faf6fb5e6087eb1b2dc
8f14e45fceea167a5a36dedd4bea2543Disini saya sudah mencatat lima dvwaSession yang tertangkap dari Burp Suite. Disini saya akan menggunakan bantuan https://crackstation.net/ untuk mengetahui apakah dvwaSession tersebut hasil hash MD5/SHA1 dari angka, timestamp, atau string sederhana.

Hasilnya dvwaSession merupakan nilai yang dienkripsi dengan algoritma MD5 tetapi ternyata dvwaSession tersebut berurutan seperti pada level low dimana tiap session bertambah satu, Hanya saja di level high di enkripsi dengan MD5.
Mengapa Level High Masih Dianggap Rentan?
<?php
$html = "";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
if (!isset ($_SESSION['last_session_id_high'])) {
$_SESSION['last_session_id_high'] = 0;
}
$_SESSION['last_session_id_high']++;
$cookie_value = md5($_SESSION['last_session_id_high']);
setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], false, false);
}
?>Pada level high session ID dimulai dengan nilai awal 0. Session ID di level ini hanya nilai sederhana yang dihash dengan MD5, pola pembuatan session ID sangat mudah diprediksi seperti level low dimana tiap session bertambah satu.
4. Level Impossible
Pada level impossible session ID dibuat menggunakan kombinasi nilai acak, waktu, dan string tambahan lalu di hash sehingga menghasilkan kode uni dan sulit diprediksi. Berbeda dengan level sebelumnya yang memiliki pola yang mudah diprediksi.

Di Burp Suite terlihat pada bagian response dvwaSession nilainya lebih panjang dari level high. Disini saya akan mencoba menggunakan https://crackstation.net/ lagi untuk memastikan apakah session di level impossible mampu terbaca.

Hasilnya nilai session tidak terbaca seperti di level high ini menandakan bahwa level impossible sudah menerapkan proteksi session ID yang kuat dan tidak mudah diprediksi.
Keamanan Level Impossible
<?php
$html = "";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$cookie_value = sha1(mt_rand() . time() . "Impossible");
setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], true, true);
}
?>- mt_rand() : Session yang dibuat dari kombinasi nilai acak, menghasilkan angka acak yang tidak berurutan dan sulit ditebak.
- time() : Session ditambah dengan waktu sistem, dimana nilai session dikombinasi dengan waktu sistem yang berbeda-berbeda sehingga memperbesar variasi nilai session.
- "Impossible" : Adanya secret string tambahan yang tidak bisa dilihat oleh attacker sehingga menambah kompleksitas session.
- sha1 : Hash SHA1 menjadikan hasil akhir menjadi string yang panjang dan menyembunyikan nilai aslinya.
- Cookie secure (HTTPS ) : Cookie hanya dikirim lewat HTTPS dan cookie tidak bisa diakses Javascript.