Lab yang Aman

Menyiapkan lingkungan latihan yang aman: OWASP Juice Shop, Burp Suite Community, dan devtools browser.

Daftar isi

Latihan keamanan aplikasi web memerlukan target, dan target itu tidak boleh berupa aplikasi milik orang lain. Topik ini menyiapkan lingkungan latihan yang aman pada komputer sendiri dengan tiga komponen, yaitu OWASP Juice Shop sebagai aplikasi yang sengaja dibuat rentan, Burp Suite Community sebagai proxy untuk memeriksa lalu lintas, dan devtools yang sudah melekat pada browser. Setelah topik ini selesai, seluruh latihan pada jalur ini dapat dijalankan tanpa menyentuh sistem yang tidak diberi izin.

Target latihan: OWASP Juice Shop#

OWASP Juice Shop adalah aplikasi web open source yang sengaja dibuat rentan terhadap kategori risiko OWASP Top 10:2025. Aplikasi ini ditulis dengan Node.js, berjalan sebagai satu proses pada satu port, dan memuat tantangan yang bersumber dari kerentanan nyata, mulai dari injection hingga kontrol akses yang rusak. Sifat itulah yang menjadikannya target latihan yang sah: aplikasi ini memang dirancang untuk diserang.

Docker adalah cara paling ringkas untuk menjalankannya. Perintah berikut mengunduh citra resmi, lalu memetakan port 3000 pada komputer ke port 3000 di dalam kontainer.

bash
# tidak-dijalankan
# blok ini membutuhkan Docker, yang tidak tersedia pada sandbox topik ini
docker run --rm -p 3000:3000 bkimminich/juice-shop

Setelah kontainer berjalan, aplikasi dapat dibuka pada alamat http://localhost:3000. Blok di atas tidak dieksekusi karena sandbox topik ini tidak memiliki Docker, sedangkan pengerjaannya di komputer pembaca tidak memerlukan penyesuaian apa pun. Proses unduhan citra pertama kali memakan waktu beberapa menit, tergantung kecepatan jaringan. Selama kontainer berjalan, seluruh permintaan latihan diarahkan ke localhost sehingga targetnya selalu terkendali.

Burp Suite Community sebagai proxy#

Proxy adalah perantara yang menerima permintaan dari browser, meneruskannya ke server, lalu mengembalikan respons (response) ke browser. Karena seluruh lalu lintas melewatinya, proxy dapat menampilkan, menahan, dan mengubah setiap permintaan sebelum sampai tujuan. Burp Suite Community Edition dari PortSwigger adalah proxy yang banyak digunakan untuk pengujian keamanan aplikasi web. Edisinya tersedia gratis melalui halaman unduhan resmi dan berjalan sebagai aplikasi desktop. Penyiapannya hanya berupa pengaturan proxy pada browser menuju alamat pendengarnya (listener).

Posisi proxy terhadap target latihan digambarkan oleh diagram berikut.

BrowserBurp Suite(proxy)Juice Shoppermintaanresponspermintaanresponspermintaan berhenti di proxy sehingga dapat dilihat dan diubah sebelum diteruskan
Posisi proxy antara browser dan target latihan

Fitur yang paling sering digunakan pada tahap ini adalah Intercept pada tab Proxy. Saat intersepsi diaktifkan, permintaan berhenti di proxy dan dapat disunting sebelum diteruskan, sehingga perubahan nilai yang tidak mungkin dilakukan dari halaman aplikasi menjadi mungkin. Perbedaan edisi Community dengan edisi berbayar terletak pada fitur otomatisnya, sedangkan intersepsi manual yang menjadi tulang punggung latihan jalur ini tersedia penuh pada edisi gratis.

Permintaan yang dilihat proxy#

Yang ditampilkan proxy maupun devtools adalah permintaan HTTP dalam bentuk mentahnya, yaitu baris permintaan, header, dan isi permintaan. Bentuk mentah itu dapat direproduksi tanpa alat tambahan menggunakan server kecil berikut. Server ini mencatat setiap permintaan yang diterima, sehingga catatannya sama dengan apa yang tampil pada tab Intercept.

python server-lab.py
# tidak-dijalankan
"""Server lab kecil: mencatat baris permintaan, header, dan isi permintaan
yang diterima, lalu membalasnya dengan pesan singkat. Berkas ini tidak
dijalankan berdiri sendiri karena menunggu permintaan tanpa berhenti."""

from http.server import BaseHTTPRequestHandler, HTTPServer


class PenanganLab(BaseHTTPRequestHandler):
    def do_POST(self):
        panjang = int(self.headers.get("Content-Length", "0"))
        isi = self.rfile.read(panjang).decode("utf-8")
        print("baris permintaan :", self.requestline, flush=True)
        for nama, nilai in self.headers.items():
            print(f"header           : {nama}: {nilai}", flush=True)
        print(f"isi permintaan   : {isi}", flush=True)
        pesan = "pesanan diterima".encode("utf-8")
        self.send_response(200)
        self.send_header("Content-Type", "text/plain; charset=utf-8")
        self.send_header("Content-Length", str(len(pesan)))
        self.end_headers()
        self.wfile.write(pesan)

    def log_message(self, format, *args):
        pass  # matikan log default agar keluaran tetap rapi


HTTPServer(("127.0.0.1", 8765), PenanganLab).serve_forever()

Server di atas tidak dijalankan berdiri sendiri karena menunggu permintaan tanpa berhenti. Blok terminal berikut memanggilnya sebagai proses latar belakang, mengirim satu permintaan POST, lalu menghentikannya.

bash
# jalankan server lab sebagai proses latar belakang
python3 -u server-lab.py &
PID=$!
sleep 1

# kirim permintaan seolah-olah dari aplikasi, amati apa yang sampai di server
curl -s -X POST "http://127.0.0.1:8765/api/pesanan" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "User-Agent: lab-client" \
  -H "Accept: text/plain" \
  --data "jumlah=2&kode=ATK-01"

# tampilkan baris kosong pemisah, lalu hentikan server
echo
kill $PID
text Keluaran
baris permintaan : POST /api/pesanan HTTP/1.1
header           : Host: 127.0.0.1:8765
header           : Content-Type: application/x-www-form-urlencoded
header           : User-Agent: lab-client
header           : Accept: text/plain
header           : Content-Length: 20
isi permintaan   : jumlah=2&kode=ATK-01
pesanan diterima

Keluaran di atas memperlihatkan seluruh materi yang dilihat proxy. Baris pertama memuat metode, jalur, dan versi protokol. Header di bawahnya menyatakan tujuan, tipe isi, panjang isi, serta identitas klien, sedangkan baris terakhir berisi isi permintaan itu sendiri. Pada Burp Suite, bagian-bagian tersebut tampil pada tab Intercept dan setiap nilainya dapat disunting sebelum permintaan diteruskan.

Devtools browser#

Devtools (developer tools) adalah kumpulan alat yang melekat pada browser modern dan dibuka dengan tombol F12 atau menu opsi browser. Tab Network menampilkan setiap permintaan yang dikirim halaman beserta header, isi, dan status responsnya, sehingga pola permintaan aplikasi dapat dipetakan tanpa alat tambahan. Tab Console menjalankan JavaScript pada konteks halaman dan menampilkan pesan error yang muncul selama halaman berjalan.

Devtools melengkapi proxy, bukan menggantikannya. Pemetaan awal lebih cepat dilakukan di devtools karena alatnya langsung melekat pada browser, sedangkan penyuntingan permintaan yang berulang lebih nyaman dilakukan di proxy. Beberapa browser juga menyediakan opsi menyunting dan mengirim ulang permintaan langsung dari tab Network, sehingga eksperimen kecil tidak perlu meninggalkan browser.

Dari sudut keamanan, devtools menunjukkan bahwa halaman bukan wilayah tertutup: setiap nilai yang dikirim terbaca pada tab Network sebelum dan sesudah dikirim. Saat formulir dikirim, pasangan nama dan nilai pada isinya juga terbaca tanpa alat tambahan. Kebiasaan membuka devtools sejak awal latihan membuat kerja proxy lebih mudah dipahami karena keduanya menampilkan materi yang sama dari sisi yang berbeda.

Kesalahan umum#

Kesalahan saat menyiapkan lab jarang bersifat teknis yang sulit dan lebih sering berupa kelalaian kecil yang menghambat latihan. Kelalaian itu umumnya muncul saat alat baru dicoba dengan tergesa-gesa. Tiga kesalahan berikut paling sering muncul.

  • Menggunakan target di luar lab karena penasaran pada situs nyata. Perbaikannya adalah mengembalikan seluruh target ke localhost dan lab yang diizinkan sebelum melanjutkan.
  • Port 3000 sudah terpakai sehingga kontainer gagal berjalan. Perbaikannya adalah mengubah pemetaan menjadi -p 8080:3000, lalu membuka http://localhost:8080.
  • Server latihan dibiarkan berjalan di latar belakang sehingga portnya tetap tertahan pada sesi berikutnya. Perbaikannya adalah menghentikan proses dengan kill yang menggunakan PID yang dicatat saat proses dimulai.

Pencegahan ketiganya sama, yaitu mencatat proses yang dijalankan, menghentikannya setelah selesai, dan memeriksa ulang daftar target sebelum alat apa pun diarahkan. Lab yang tertata membuat proses berlatih lebih pendek, sedangkan temuan yang tercatat lebih mudah dipercaya karena sumbernya jelas.

Ringkasan#

  • OWASP Juice Shop menyediakan target yang sengaja dibuat rentan dan dijalankan secara lokal melalui Docker pada http://localhost:3000.
  • Burp Suite Community berperan sebagai proxy yang menampilkan, menahan, dan mengubah permintaan sebelum diteruskan ke server.
  • Devtools memetakan permintaan halaman langsung dari browser, sedangkan permintaan mentah yang dilihat proxy terdiri atas baris permintaan, header, dan isi.

Referensi#