Report lab cyber security PortSwigger
Kita akan mengulas dan merangkum poin-poin yang ada pada 10 lab di PortSwigger bertemakan:
- Access control vulnerability
- Authentication
- Path traversal
Access control vulnerability
User id controlled by request parameter:
Tujuan: Obtain API key for the user Carlos and submit it as solution
Parameter user_id dalam permintaan dapat dimanipulasi untuk mencoba mendapatkan data milik pengguna lain, seperti API key milik Carlos. Penyerang akan mengubah user_id dalam permintaan untuk mencoba ID lain hingga menemukan milik Carlos.
Penjelasan:
OWASP WSTG-ATHZ-01 adalah referensi dimana parameter user_id yang dikendalikan oleh permintaan salah satu bentuk kelemahan akses kontrol yang sering ditemukan dalam aplikasi web. Dalam kerentanan ini, sistem menggunakan parameter yang diterima dari klien untuk menentukan data yang akan diakses tanpa melakukan validasi yang memadai. Parameter tersebut biasanya ditemukan dalam URL, body request, atau query string. Sebagai contoh, jika pengguna "wiener" memiliki user_id= wiener, penyerang dapat mengganti nilai user_id dalam permintaan menjadi angka lain, seperti user_id= carlos , untuk mencoba mendapatkan informasi dari pengguna lain.
Dokumentasi step by step
LOGIN
Melihat API key
Validasi Api key (Burp Suite)
API Key Wiener: kRuczd8g14ylHg0kua9KH0rgTuJQX21y
Mencari API key Carlos (menggunakan user_id)
API Key Carlos: XHML9xPuIIwMYzb35uSNWyL2sgab4hyZ
Rekomendasi:
Untuk mengatasi masalah ini, pastikan server memvalidasi akses ke data berdasarkan identitas pengguna yang terautentikasi, sehingga pengguna hanya dapat mengakses data yang menjadi miliknya. Selain itu, gunakan token otorisasi berbasis sesi (seperti JWT) untuk memastikan parameter user_id tidak dapat dimanipulasi. Validasi parameter di sisi server harus diterapkan agar data yang diakses sesuai dengan hak akses pengguna.
User id controlled by request parameter, with unpredictable user IDs
Tujuan : Find the GUID for carlos and compromise his account
Jika ID pengguna berbentuk GUID yang sulit ditebak, penyerang dapat mencari pola GUID di respon atau log sistem. Setelah GUID milik Carlos ditemukan, data sensitifnya dapat diakses.
Penjelasan:
Referensi: WSTG-ATHZ-02: Testing for Predictable Object Identifiers
GUID (Globally Unique Identifier) adalah pengenal unik yang biasanya terdiri dari kombinasi angka dan huruf secara acak dengan format yang sangat sulit ditebak (contoh: de64401c-a90e-4287-8f6a-b488a06340f3). Dalam konteks keamanan, GUID sering digunakan sebagai pengganti ID numerik biasa untuk mencegah eksploitasi sederhana seperti brute force. Namun, jika GUID diterapkan tanpa mekanisme validasi yang baik, penyerang dapat mencari pola GUID yang mungkin secara tidak sengaja terekspos, misalnya melalui log, respon API, atau parameter lain di aplikasi. Dengan mempelajari GUID yang sudah diketahui, penyerang dapat mencoba enumerasi GUID lain dalam skenario tertentu. Meskipun GUID dirancang untuk sulit diprediksi, kesalahan implementasi, seperti penggunaan GUID secara berurutan atau kebocoran dalam sistem, dapat memberikan jalan bagi penyerang untuk menemukan GUID milik pengguna lain, seperti Carlos, sehingga memungkinkan eksploitasi lebih lanjut.
Dokumentasi step by step
LOGIN
Melihat API key Wiener
Validasi Api key (Burp Suite)
User_ID: de64401c-a90e-4287-8f6a-b488a06340f3
API Key is: dlG0QbWOX2I5Yko9QkSYrLVpzSj2Z4vt
Mencari User_Id Carlos
Mencari User_id Carlos (Burp suite)
User_id Carlos : 7df862f3-4440-40dd-abdc-6e5b74d962d5
Mencari API Key dengan User_id carlos (burp suite)
API Key : FQFKOim02cICDDObUkZVXBIVM8Fg80yD
Rekomendasi:
Pastikan GUID dihasilkan menggunakan algoritma yang divalidasi untuk mencegah prediksi. Selain itu, tambahkan lapisan kontrol akses tambahan di sisi server untuk memastikan bahwa GUID saja tidak cukup untuk mendapatkan akses. Implementasikan pula mekanisme pembatasan laju (rate-limiting) untuk mencegah serangan brute force terhadap GUID.
User id controlled by request parameter with data leakage in redirect
Tujuan : Obtain API key for the user Carlos through the body of redirect response
Data sensitif, seperti API key, bocor dalam isi body atau header redirect. Penyerang dapat mencegat redirect menggunakan alat seperti Burp Suite untuk mengekstrak informasi tersebut.
Penjelasan :
Referensi: WSTG-INFO-03: Testing for Sensitive Data Exposure
Kebocoran data di redirect terjadi ketika aplikasi secara tidak aman mengirimkan data sensitif seperti API key, token otentikasi, atau informasi pribadi dalam body, header, atau URL selama proses pengalihan (redirect). Saat pengguna mengakses endpoint tertentu, server mungkin merespons dengan kode status seperti 301, 302, atau 307, disertai dengan URL tujuan yang mengandung informasi sensitif dalam parameter query atau respons HTTP. Jika penyerang menggunakan alat seperti Burp Suite untuk mencegat dan memeriksa redirect tersebut, mereka dapat mengekstrak data sensitif yang terkandung di dalamnya.
Dokumentasi step by step
LOGIN menggunakan kredensial yang disediakan
Kirimkan request nya ke repeater
ubah parameter ID nya ke Carlos lalu klik send, cari API carlos lalu copy
Kembali ke browser, submit API carlos untuk menyelesaikan lab
Rekomendasi:
Hindari menyertakan data sensitif dalam rerponse redirect, Pastikan server memvalidasi ulang semua redirect untuk memastikan data sensitif tidak bocor.
User id controlled by request parameter with password disclosure
Tujuan : Retrieve the administrator’s password and delete the user carlos.
Sistem yang membocorkan kata sandi melalui parameter atau respon dapat dieksploitasi untuk mengambil password administrator, lalu digunakan untuk menghapus akun Carlos.
Penjelasan :
Referensi: WSTG-INFO-02: Testing for Weak Authentication
Pengungkapan password dalam respons terjadi ketika aplikasi secara tidak sengaja menampilkan kata sandi dalam body respons, URL, atau header akibat kesalahan pengkodean. Penyerang dapat memanfaatkan celah ini dengan menganalisis permintaan menggunakan alat seperti Burp Suite dan mengganti parameter seperti user_id untuk mendapatkan kata sandi target. Hal ini memungkinkan login tidak sah atau manipulasi akun.
Dokumentasi step by step
LOGIN menggunakan kredensial yang disediakan
Ganti parameter id=wiener di URL menjadi id=administrator
Lihat HTTP history, lalu cari input nya di kolom response
Copy passwordnya dan kembali ke browser lalu logout, LOGIN kembali dengan kredensial administrator dan password yang sudah di copy. Pergi ke admin panel lalu hapus user Carlos.
Rekomendasi:
Hindari menyertakan data sensitif dalam URL pengalihan (redirect). Sebagai gantinya, gunakan metode POST untuk mentransfer data sensitif. Pastikan server memvalidasi ulang semua redirect untuk memastikan data sensitif tidak bocor. Jika data sensitif tetap diperlukan, enkripsi data tersebut sebelum dikirim melalui redirect
Insecure direct object references
Tujuan = Find the carlos user password and log into his account
Penyerang dapat mengganti ID objek (misalnya, user_id=123) dalam permintaan untuk mengakses data pengguna lain seperti kata sandi milik Carlos.
Penjelasan:
Referensi: WSTG-ATHZ-01
Insecure Direct Object References adalah kerentanan keamanan yang terjadi ketika aplikasi web secara langsung menggunakan parameter yang dapat diprediksi, seperti ID atau identifier lain, untuk mengakses objek di server tanpa mekanisme validasi atau otorisasi yang memadai. Penyerang dapat memanipulasi parameter (misalnya, mengganti user_id=123 dengan user_id=456) untuk mengakses data milik pengguna lain. Ini terjadi karena kurangnya pemeriksaan hak akses di server.
Dokumentasi step by step
LOGIN
lakukan Live chat
Lakukan view transcript
Ubah data transcript/2.txt ke transcript/1.txt
Dapat Password carlos
Carlos Password : 0zf888xykw5vbnhh7evs
Lakukan login menggunakan username dan password carlos
Rekomendasi:
Untuk mengatasi kerentanan IDOR, pastikan setiap permintaan yang melibatkan akses ke objek tertentu divalidasi oleh server untuk memverifikasi bahwa pengguna memiliki izin yang sesuai. Sebaiknya gunakan referensi unik atau terenkripsi, seperti token atau UUID, alih-alih ID langsung, untuk mencegah manipulasi parameter oleh klien. Validasi tambahan juga perlu diterapkan untuk memastikan objek yang diminta benar-benar milik pengguna. Selain itu, audit semua akses ke objek secara berkala untuk mengidentifikasi pola eksploitasi yang mencurigakan
Authentication
Username enumeration via different responses:
Tujuan = Enumerate a valid username and brute force this user’s password
Penjelasan = Sistem memiliki kerentanan berupa tidak adanya batas percobaan login. Memungkinkan username dan password yang valid dapat dicari, ditebak, dan dicoba berkali-kali dengan brute force attack tanpa adanya peringatan langsung dari sistem. Sehingga mudah bagi peretas untuk menemukan username dan password yang tepat
Dokumentasi step by step
LOGIN dengan kredensial acak
Beralih ke Burp suite, cari history HTTP nya dan kirim ke intruder
Masuk ke pengaturan di intruder, lalu blok value parameter admin dan pilih add hingga terdapat simbol $
Selanjutnya masukkan list username yang disediakan di lab kedalam payload
Lalu masukkan output Invalid username (slide 1) ke dalam list grep match
Setelahnya kembali ke position lalu klik Start attack hingga muncul window seperti ini, jika output nya menunjukkan kosong dan bukan angka 1. Maka itulah username yang valid
Selanjutnya untuk mencari password yang valid, lakukan hal yang sama dengan list password yang disediakan di lab
Jangan lupa untuk mengganti parameter username yang benar dari admin menjadi agenda, lalu blok parameter password admin untuk di add
Klik start attack dan tunggu hingga berhasil ditemukan password yang valid, yaitu salah satu list yang menunjukkan status code berbeda dari yang lain. Disini contohnya adalah robert dengan status code 302
Dengan username dan password yang sudah ditemukan, kembali ke browser lalu LOGIN dengan kredensial tersebut untuk menyelesaikan lab
Rekomendasi:
Gunakan pesan kesalahan generik yang sama, seperti "Username atau password salah," tanpa memberikan petunjuk yang berbeda. Untuk mengurangi kemungkinan serangan berbasis waktu, terapkan penundaan waktu respons secara konsisten. Batasi jumlah percobaan login yang dapat dilakukan oleh satu IP atau pengguna dalam periode waktu tertentu menggunakan mekanisme rate-limiting.
2FA simple bypass:
Tujuan = access Carlos’s account page.
Akses akun Carlos dengan melewati autentikasi verifikasi 2 faktor
Penjelasan = 2F4 merupakan autentikasi 2 langkah, dimana dalam sistem ini terdapat celah untuk melewati autentikasi. Setelah login dengan username dan password, sistem ini menggunakan kode verifikasi yang dikirim melalui email agar bisa login. Namun saat memasuki halaman verifikasi kode, peretas dapat menembusnya dengan mengganti URL di belakangnya dengan “/my-account” sehingga peretas dapat melewati verifikasi dan langsung masuk ke halaman dashboard akun. Menunjukkan tidak adanya adanya algoritma yang mendeteksi akses masuk melalui URL yang belum di verifikasi
Dokumentasi step by step
LOGIN
cek email client untuk code security, lalu masukkan code security nya pada link
Validasi code (burp suite)
Login akun carlos
Intercept on
Drop Intercept
Ubah Link menjadi /my-account
Rekomendasi:
Terapkan sistem 2FA berbasis algoritma yang lebih kuat, seperti Time-based One-Time Password (TOTP), dan pastikan token 2FA diverifikasi secara ketat di sisi server, bukan hanya di klien. Selain itu, audit implementasi autentikasi ganda secara menyeluruh untuk mendeteksi celah logika yang mungkin dimanfaatkan penyerang.
Password reset broken logic:
Tujuan = reset Carlos’s password and access his “My account” page. Reset password Carlos dan akses halaman akun Carlos
penjelasan = Sistem ini memiliki kerentanan pada algoritma penggantian atau reset password, dimana token untuk penggantian password tidak diperiksa kembali oleh sistem algoritma sehingga permintaan pergantian password dapat dimanipulasi untuk akun lain
Dokumentasi step by step
Masuk ke halaman LOGIN lalu klik tombol Forgot password
Masukkan username kredensial Wiener
Klik email client dan klik link yang disediakan dalam email client tersebut, maka akan tampil halaman berikut
Update dengan password yang diinginkan, Lalu beralih ke history HTTP dan cari proxy yang memiliki method POST lalu kirim ke repeater
Di repeater, ubah value dari parameter temp-forgot-password-token yang ada di baris pertama dan terakhir dengan value yang sama. Misalnya disini adalah “x”, kemudian ganti username nya menjadi carlos dan klik send. Jika sudah, maka klik tombol Follow redirection yang ada di bagian atas kolom request
Kemudian kembali ke browser lalu LOGIN menggunakan username carlos dan password yang sudah kita update
Rekomendasi:
Setiap permintaan reset password harus menggunakan token unik yang dikirimkan melalui saluran aman seperti email atau SMS. Token tersebut harus divalidasi secara ketat di sisi server. Batasi jumlah percobaan reset password yang dapat dilakukan untuk satu akun dalam periode waktu tertentu untuk mencegah penyalahgunaan. Selain itu, lakukan audit proses reset password untuk memastikan tidak ada kelemahan logika yang dapat dieksploitasi
Path Traversal
File path traversal, simple case:
Tujuan = Retrieve the content of the /etc/passwd file
Mencari jalur file pada sistem yang seharusnya tidak untuk sembarang user
Penjelasan : Kerentanan pada input yang tidak divalidasi dengan baik membuat peretas memanipulasi jalur file yang digunakan dalam sistem. misal dengan memasukkan karakter seperti ../ dalam parameter input yang digunakan untuk menentukan lokasi file, peretas mengakses file sistem di luar direktori yang diizinkan seperti /etc/passwd pada sistem Unix-like dan meluncurkan serangan privilege escalation.
Dokumentasi Step By Step
Halaman Utama
Cari history HTTP lalu kirim ke repeater
Dapat dilihat ini adalah filename yang salah, ubah filename nya dengan ../../../etc/passwd
Mengubah filename menjadi benar
Hasil tampilan akhir
Rekomendasi:
Business logic
Excessive trust in client-side controls:
Tujuan = Checkout item with customized price
Memanipulasi data harga barang pada sistem yang memiliki kerentanan logika di sisi klien
Penjelasan : Kerentanan pada banyaknya kepercayaan terhadap kontrol yang dilakukan di sisi klien (client-side). Dalam transaksi online, beberapa aplikasi bergantung pada logika sisi klien untuk memanipulasi harga/ diskon. Jika aplikasi tidak memverifikasi ulang harga di sisi server/ tidak memvalidasi nilai yang dimodifikasi di sisi klien, peretas bisa memodifikasi harga produk sebelum checkout untuk mendapatkan barang dengan harga yang rendah atau bahkan gratis.
Dokumentasi step by step
LOGIN
Kembali ke Home lalu pilih item yang diminta, lalu klik Add to cart
Validasi harga (Burp suite) lalu kirim ke repeater
Ubah harga ke angka bulat di bawah 100$ dan send
Harga setelah diubah di browser
Check out barang
Rekomendasi:
Untuk melindungi logika bisnis dari manipulasi harga atau data lain, server harus memvalidasi setiap data yang diterima dari klien untuk memastikan konsistensinya dengan aturan bisnis. Sebagai tambahan, tambahkan otorisasi pada setiap tindakan sensitif, seperti perubahan harga atau kuantitas produk. Audit logika bisnis secara berkala untuk mengidentifikasi kelemahan yang berpotensi dieksploitasi oleh penyerang.