Muhammad Faqih · Penetration tester web & API · Remote, UTC+7

Saya menguji apa yang terjadi di antara pengecekan dan penulisan.

Pentest web dan API, lengkap dengan buktinya: 45 kasus lab, 130 screenshot, 123 rekaman mentah.

Jelajahi 45 kasus Buka kasus ini

Ilustrasi dari pengujian yang terekam: 10 transfer senilai 900 semuanya lolos pemeriksaan saldo yang sama sebesar 900; saldo berakhir di -8100.0.

45 kasus · 32 FAIL · 13 PASS · 130 screenshot · 123 rekaman · 5 laporan PDF

Bukti

45 kasus. 32 tembus, 13 bertahan. Buka yang mana saja: request, response, dan screenshot-nya ada di dalam.

45
Skenario pengujian 1
32
Skenario FAIL 2
13
Skenario PASS 3
130
tangkapan layar 4
123
Rekaman HTTP & proses 5
5
Laporan PDF 6
Apa yang dihitung angka-angka ini
Skenario pengujian
Satu skenario pengujian adalah satu pemeriksaan terfokus: satu perilaku, diubah satu kali, lalu hasilnya dicatat.
Skenario FAIL
Skenario di mana pemeriksaan menemukan kerentanan.
Skenario PASS
Skenario di mana pemeriksaan lolos.
tangkapan layar
Tangkapan layar yang direkam sebagai bukti.
Rekaman HTTP & proses
Setiap pasangan request/response yang terekam dan setiap catatan proses di balik skenario pengujian.
Laporan PDF
Laporan lab asli, dalam bahasa Inggris dan Indonesia.

Satu bug, dibedah.

  1. Klaim

    Endpoint /transfer membaca saldo pengirim, memeriksa kecukupan dana, lalu menulis saldo baru sebagai operasi terpisah tanpa transaksi database atomik maupun penguncian baris. Sepuluh permintaan transfer yang dikirim bersamaan semuanya lolos pemeriksaan saldo menggunakan nilai lama yang sama sebelum satu pun penulisan selesai (TOCTOU).

  2. Request paralel

    (Screenshot 4) EKSPLOITASI: sepuluh transfer senilai 900 dikirim bersamaan -> seluruhnya dilaporkan sukses.

    POST /transfer HTTP/1.1
    User-Agent: python-requests/2.33.1
    Accept-Encoding: gzip, deflate, br, zstd
    Accept: */*
    Connection: keep-alive
    Authorization: Bearer [REDACTED-LAB-TOKEN]
    Content-Length: 43
    Content-Type: application/json
    
    {"to_account": "9159912486", "amount": 900}
  3. Hasil

    -8100.0

    (Screenshot 5) DAMPAK CIA: saldo penyerang menjadi -8100.0, bernilai negatif dan melampaui dana yang pernah dimiliki.

  4. Mengapa berhasil

    Sepuluh permintaan transfer yang dikirim bersamaan semuanya lolos pemeriksaan saldo menggunakan nilai lama yang sama sebelum satu pun penulisan selesai (TOCTOU).

    CWE-362: Concurrent Execution using Shared Resource with Improper Synchronization · OWASP A04:2021 - Insecure Design

  5. Perbaikan

    Apa yang diubah perbaikan ini.

    • Jalankan pemeriksaan saldo dan pendebetan dalam satu transaksi database atomik.
    • Kunci baris rekening pengirim (SELECT ... FOR UPDATE) atau gunakan pembaruan kondisional UPDATE ... SET balance = balance - x WHERE balance >= x.
    • Tambahkan constraint CHECK (balance >= 0) pada kolom saldo sebagai jaring pengaman.
    • Terapkan idempotency key dan rate limiting pada endpoint transfer.

Semua 45 kasus

Menampilkan 45 dari 45

crAPI

VulnBank

Tampilan tabel

Seluruh catatan lab di balik ringkasan di atas: setiap skenario pengujian, tangkapan layar, rekaman HTTP, dan laporan PDF asli, dapat ditelusuri satu per satu.

Hasil pengujianSkenario pengujianKategoriCWEtangkapan layar
LAB PASS Broken Access Control - Login - CSRF Token Cookie Binding Broken Access Control — 5
LAB FAIL Broken Function Level Authorization - Workshop - Management Users Endpoint Broken Function Level Authorization CWE-285 2
LAB PASS Broken Object Level Authorization - Shop - Return Order Broken Object Level Authorization CWE-639 1
LAB FAIL Broken Object Level Authorization - Vehicle - Location Tracking Broken Object Level Authorization CWE-639 2
LAB PASS Broken Object Level Authorization - Vehicle - Location Tracking (Unauthenticated) Broken Object Level Authorization CWE-306 2
LAB FAIL Broken Object Level Authorization - Workshop - Mechanic Report Broken Object Level Authorization CWE-639 2
LAB PASS Broken Object Level Authorization - Workshop - Mechanic Report (Unauthenticated) Broken Object Level Authorization CWE-306 2
LAB FAIL Improper Inventory Management - Authentication - OTP Endpoint Versions Improper Inventory Management CWE-1059 2
LAB FAIL JWT Signature Not Verified - Authentication - JWT Validation JWT Signature Not Verified CWE-347 5
LAB PASS Mass Assignment - Authentication - User Registration Mass Assignment CWE-915 3
LAB FAIL NoSQL Injection - Community - Coupon Validation NoSQL Injection CWE-943 3
LAB PASS NoSQL Injection - Community - Coupon Validation (Normal Input) NoSQL Injection CWE-943 2
LAB PASS OTP Bruteforce Protection - Authentication - Password Reset (Per-Session Lockout) OTP Bruteforce Protection CWE-307 2
LAB FAIL OTP Bruteforce Protection Bypass - Authentication - Password Reset OTP Bruteforce Protection Bypass CWE-307 3
LAB FAIL Server-Side Request Forgery - Workshop - Contact Mechanic Server-Side Request Forgery CWE-918 5
LAB FAIL Unauthenticated Order Access - Shop - Order Details Unauthenticated Order Access CWE-306 2
LAB PASS Unrestricted Access to Sensitive Business Flow - Shop - Coupon Claim Unrestricted Access to Sensitive Business Flow CWE-837 2
LAB FAIL Unrestricted Resource Consumption - Authentication - Login Rate Limiting Unrestricted Resource Consumption CWE-307 2
LAB FAIL Unsafe Consumption of APIs - Workshop - Contact Mechanic Upstream Unsafe Consumption of APIs CWE-20 2
LAB FAIL Account Takeover - Password Reset - Reset PIN Disclosure Account Takeover CWE-640 4
LAB FAIL Active Debug Code - Application Server - Werkzeug Debugger Active Debug Code CWE-489 2
LAB PASS Broken Function Level Authorization - Admin - Administrative Endpoints Broken Function Level Authorization CWE-285 3
LAB FAIL Broken Object Level Authorization - Accounts - Balance Lookup Broken Object Level Authorization CWE-639 3
LAB PASS Broken Object Level Authorization - GraphQL - Transaction Summary Broken Object Level Authorization CWE-639 3
LAB PASS Broken Object Level Authorization - Merchant Payments - Payment By ID Broken Object Level Authorization CWE-639 2
LAB FAIL Broken Object Level Authorization - Merchant Payments - Payments By Merchant Broken Object Level Authorization CWE-639 2
LAB FAIL Broken Object Level Authorization - Users - User Detail API Broken Object Level Authorization CWE-639 3
LAB FAIL Broken Object Level Authorization - Virtual Cards - Card Operations Broken Object Level Authorization CWE-639 4
LAB FAIL Excessive Data Exposure - GraphQL - Schema Introspection Excessive Data Exposure CWE-200 1
LAB FAIL Insufficient Session Expiration - Authentication - JWT Lifetime Insufficient Session Expiration CWE-613 3
LAB PASS JWT Algorithm Confusion - Authentication - alg none JWT Algorithm Confusion CWE-347 3
LAB FAIL JWT Signature Not Verified - Authentication - Token Validation JWT Signature Not Verified CWE-347 4
LAB FAIL Mass Assignment - Registration - Privilege Fields Mass Assignment CWE-915 3
LAB PASS Path Traversal - Profile Picture - Upload Filename Path Traversal CWE-22 2
LAB FAIL Race Condition - Transfer - Balance Check Race Condition CWE-362 5
LAB FAIL Security Misconfiguration - CORS - Wildcard Origin Security Misconfiguration CWE-942 1
LAB FAIL Sensitive Data Exposure - Debug Endpoint - User Credentials Sensitive Data Exposure CWE-200 3
LAB FAIL Sensitive Data Exposure - Web Root - Environment Files Sensitive Data Exposure CWE-538 2
LAB FAIL Server-Side Request Forgery - Profile Picture - Import By URL Server-Side Request Forgery CWE-918 6
LAB FAIL SQL Injection - Authentication - Login Bypass SQL Injection CWE-89 3
LAB FAIL SQL Injection - GraphQL - Transaction Summary Resolver SQL Injection CWE-89 3
LAB FAIL Stored Cross-Site Scripting - User Profile - Bio Field Stored Cross-Site Scripting CWE-79 5
LAB FAIL Unrestricted File Upload - Profile Picture - File Type Validation Unrestricted File Upload CWE-434 3
LAB FAIL Unrestricted Resource Consumption - Authentication - Login Rate Limiting Unrestricted Resource Consumption CWE-307 3
LAB FAIL Unrestricted Resource Consumption - Password Reset - PIN Rate Limiting Unrestricted Resource Consumption CWE-307 5

Burp-TCP

LAB Alat open-source

Relay SOCKS5 Rust dan ekstensi Burp Java, membawa trafik Burp lewat TCP (WebSocket + Protobuf).

Kode sumber di GitHub

Bisa

  • Relay SOCKS5 CONNECT yang hanya terikat ke alamat loopback
  • Perekaman TCP dua arah dengan timestamp dan offset
  • Intersepsi manual opsional untuk masing-masing arah trafik
  • Riwayat trafik, tampilan heksadesimal dan teks, serta repeater
  • WebSocket dan Protobuf untuk komunikasi antarkomponen
  • Build Windows melalui CI dan pengujian otomatis

Tidak bisa

  • Tidak mendekripsi TLS
  • Tidak mendukung UDP
  • Merekam potongan data TCP, bukan menyusun ulang pesan protokol secara utuh
  • Menahan aliran trafik dapat menyebabkan heartbeat aplikasi mengalami timeout

Laporan

crAPI — English

English · 57 halaman · 21 MB · 19 kasus

19 Skenario dalam laporan ini

Baca PDF-nya

crAPI — Bahasa Indonesia

Bahasa Indonesia · 57 halaman · 21 MB · 19 kasus

19 Skenario dalam laporan ini

Baca PDF-nya

VulnBank — English

English · 82 halaman · 20 MB · 26 kasus

26 Skenario dalam laporan ini

Baca PDF-nya

VulnBank — Bahasa Indonesia

Bahasa Indonesia · 83 halaman · 20 MB · 26 kasus

26 Skenario dalam laporan ini

Baca PDF-nya

BOLA lintas project

English · 100 halaman · 5,99 MB

5 Medium, 1 Low, 7 lolos uji

LAB — CONTOH YANG DISUNTING

Baca PDF-nya

Pengalaman

Security Analyst

PT Systech Global Informasi (SGI Asia) · Sep 2025 — Sekarang

Application Security Engineer

PT Korelasi Persada Indonesia, ditugaskan di BRI · Agu 2023 — Agu 2025

Kontribusi pribadi: Menangani sekitar 1.200–1.500 tiket terkait DAST per tahun pada posisi ini.

OSCP+ / OSCP · 2025 eWPTX · 2024 eMAPT · 2025 PT1 · 2025 Remote · Indonesia · UTC+7

Punya web app atau API yang perlu diuji? Kirim pesan.

faqih@siberfaqih.com

Kirim email

LAB

Gunakan tombol panah untuk pindah antar case.

Buka kasus ini