<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.2">Jekyll</generator><link href="http://zeroxucl.team/feed.xml" rel="self" type="application/atom+xml" /><link href="http://zeroxucl.team/" rel="alternate" type="text/html" /><updated>2026-06-10T14:26:40+00:00</updated><id>http://zeroxucl.team/feed.xml</id><title type="html">0xUCL</title><subtitle>Portal komunitas cyber security untuk dokumentasi write-up CTF, pembelajaran exploit, dan arsip penyelesaian soal.</subtitle><entry><title type="html">W1-D1 Aktivasi Sistem</title><link href="http://zeroxucl.team/2026/06/10/aktivasi-sistem.html" rel="alternate" type="text/html" title="W1-D1 Aktivasi Sistem" /><published>2026-06-10T00:00:00+00:00</published><updated>2026-06-10T14:26:24+00:00</updated><id>http://zeroxucl.team/2026/06/10/aktivasi-sistem</id><content type="html" xml:base="http://zeroxucl.team/2026/06/10/aktivasi-sistem.html"><![CDATA[<h2 id="detail-soal">Detail Soal</h2>

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Nama Challenge</td>
      <td>W1-D1 Aktivasi Sistem</td>
    </tr>
    <tr>
      <td>Kategori</td>
      <td>Reverse Binary</td>
    </tr>
    <tr>
      <td>Event</td>
      <td>ZERO DAY Mini Games 2026</td>
    </tr>
    <tr>
      <td>Poin</td>
      <td>100</td>
    </tr>
    <tr>
      <td>Difficulty</td>
      <td>Beginner</td>
    </tr>
    <tr>
      <td>File</td>
      <td>Binary <code class="language-plaintext highlighter-rouge">aktivasi_sistem</code></td>
    </tr>
  </tbody>
</table>

<h2 id="deskripsi-singkat">Deskripsi Singkat</h2>

<p>Pada challenge ini diberikan sebuah file binary bernama <code class="language-plaintext highlighter-rouge">aktivasi_sistem</code>. Binary tersebut merupakan modul aktivasi sistem yang meminta kode aktivasi sebelum memberikan akses. Tujuan dari challenge ini adalah menganalisis binary untuk menemukan kode aktivasi yang valid.</p>

<h2 id="analisis-awal">Analisis Awal</h2>

<p>Langkah pertama yang saya lakukan adalah mengecek jenis file menggunakan perintah <code class="language-plaintext highlighter-rouge">file</code>.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>file aktivasi_sistem
</code></pre></div></div>

<p>Hasilnya menunjukkan bahwa file tersebut merupakan ELF 64-bit executable. Selanjutnya, saya menjalankan binary untuk melihat perilakunya.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./aktivasi_sistem
</code></pre></div></div>

<p>Program menampilkan pesan:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Sistem Aktivasi PT Infrastruktur Digital
Masukkan kode aktivasi:
</code></pre></div></div>

<p>Jika input yang diberikan salah, program akan menampilkan pesan bahwa kode aktivasi tidak valid. Dari sini dapat disimpulkan bahwa program melakukan validasi terhadap input pengguna.</p>

<p>Kemudian saya melakukan pemeriksaan string menggunakan perintah:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>strings aktivasi_sistem
</code></pre></div></div>

<p>Pada hasil <code class="language-plaintext highlighter-rouge">strings</code>, terdapat beberapa string yang terlihat seperti petunjuk, seperti:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>INFRANET-V2
bypass_key_admin
kernel_token
SYS-AUTH-MODULE-v3.1
</code></pre></div></div>

<p>Namun string tersebut bukan kode aktivasi yang valid. Selain itu, terdapat string yang tampak tidak terbaca langsung:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;6;=!)k4=6i
</code></pre></div></div>

<p>Hal ini sesuai dengan catatan challenge bahwa string yang tidak terbaca langsung bukan berarti tidak ada informasi di dalamnya.</p>

<h2 id="langkah-penyelesaian">Langkah Penyelesaian</h2>

<p>Untuk memahami cara program memvalidasi input, saya melakukan disassembly menggunakan <code class="language-plaintext highlighter-rouge">objdump</code>.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>objdump <span class="nt">-d</span> <span class="nt">-Mintel</span> aktivasi_sistem
</code></pre></div></div>

<p>Dari hasil disassembly, ditemukan fungsi bernama <code class="language-plaintext highlighter-rouge">xor_decode</code>. Fungsi ini melakukan operasi XOR terhadap setiap byte menggunakan nilai <code class="language-plaintext highlighter-rouge">0x5a</code>.</p>

<p>Potongan logic pentingnya adalah:</p>

<pre><code class="language-asm">xor eax, 0x5a
</code></pre>

<p>Program mengambil data terenkripsi dari bagian <code class="language-plaintext highlighter-rouge">.rodata</code>, kemudian melakukan decode menggunakan XOR <code class="language-plaintext highlighter-rouge">0x5a</code>. Hasil decode tersebut kemudian dibandingkan dengan input pengguna menggunakan fungsi <code class="language-plaintext highlighter-rouge">strcmp</code>.</p>

<p>Data terenkripsi yang digunakan sebagai kode aktivasi berada pada bagian <code class="language-plaintext highlighter-rouge">.rodata</code>:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>3c 36 3b 3d 21 29 6b 34 3d 36 69 05 38 23 2e 69
05 22 6a 28 05 6e 39 2e 6b 2c 6e 2e 69 3e 27
</code></pre></div></div>

<p>Setelah mengetahui bahwa algoritmanya adalah single-byte XOR dengan key <code class="language-plaintext highlighter-rouge">0x5a</code>, saya melakukan decode menggunakan Python.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">enc</span> <span class="o">=</span> <span class="nb">bytes</span><span class="p">.</span><span class="n">fromhex</span><span class="p">(</span>
    <span class="s">"3c363b3d21296b343d36690538232e6905226a28056e392e6b2c6e2e693e27"</span>
<span class="p">)</span>

<span class="k">print</span><span class="p">(</span><span class="nb">bytes</span><span class="p">([</span><span class="n">b</span> <span class="o">^</span> <span class="mh">0x5a</span> <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">enc</span><span class="p">]).</span><span class="n">decode</span><span class="p">())</span>
</code></pre></div></div>

<p>Hasil decode-nya adalah:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>flag{s1ngl3_byt3_x0r_4ct1v4t3d}
</code></pre></div></div>

<p>Untuk memastikan kode tersebut benar, saya menjalankan kembali binary dan memasukkan hasil decode tersebut sebagai kode aktivasi.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./aktivasi_sistem
</code></pre></div></div>

<p>Input:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>flag{s1ngl3_byt3_x0r_4ct1v4t3d}
</code></pre></div></div>

<p>Program kemudian menampilkan pesan:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Aktivasi berhasil! Sistem online.
</code></pre></div></div>

<h2 id="flag">Flag</h2>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>flag{s1ngl3_byt3_x0r_4ct1v4t3d}
</code></pre></div></div>

<h2 id="kesimpulan--hal-yang-dipelajari">Kesimpulan / Hal yang Dipelajari</h2>

<p>Pada challenge ini, kode aktivasi tidak disimpan secara langsung dalam bentuk plaintext. Program menyimpan kode tersebut dalam bentuk data yang telah di-XOR menggunakan key <code class="language-plaintext highlighter-rouge">0x5a</code>, lalu mendecode-nya saat runtime sebelum dibandingkan dengan input pengguna.</p>

<p>Dari challenge ini, saya belajar bahwa pada reverse binary, hasil <code class="language-plaintext highlighter-rouge">strings</code> tidak selalu langsung menampilkan flag. String yang terlihat seperti petunjuk bisa saja hanya noise, sedangkan data penting dapat disimpan dalam bentuk terenkripsi atau ter-encode sederhana seperti single-byte XOR.</p>]]></content><author><name>azizul-manal-gaumalanga</name></author><category term="rev" /><category term="binary" /><category term="zero-day-2026" /><summary type="html"><![CDATA[Detail Soal]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://zeroxucl.team/images/oxucl-logo.jpg" /><media:content medium="image" url="http://zeroxucl.team/images/oxucl-logo.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">W1-E1 Foto Mencurigakan</title><link href="http://zeroxucl.team/2026/06/10/foto-mencurigakan.html" rel="alternate" type="text/html" title="W1-E1 Foto Mencurigakan" /><published>2026-06-10T00:00:00+00:00</published><updated>2026-06-10T14:26:24+00:00</updated><id>http://zeroxucl.team/2026/06/10/foto-mencurigakan</id><content type="html" xml:base="http://zeroxucl.team/2026/06/10/foto-mencurigakan.html"><![CDATA[<h2 id="detail-soal">Detail Soal</h2>

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Nama Challenge</td>
      <td>W1-E1: Foto Mencurigakan</td>
    </tr>
    <tr>
      <td>Kategori</td>
      <td>Digital Forensics</td>
    </tr>
    <tr>
      <td>Event</td>
      <td>ZERO_DAY Mini Games 2026</td>
    </tr>
    <tr>
      <td>Poin</td>
      <td>100</td>
    </tr>
    <tr>
      <td>Tingkat</td>
      <td>Beginner</td>
    </tr>
    <tr>
      <td>File</td>
      <td><code class="language-plaintext highlighter-rouge">foto_kantor.jpg</code> dan <code class="language-plaintext highlighter-rouge">readme_analis.txt</code></td>
    </tr>
  </tbody>
</table>

<h2 id="deskripsi-singkat">Deskripsi Singkat</h2>

<p>Challenge <strong>W1-E1: Foto Mencurigakan</strong> merupakan challenge kategori <strong>Digital Forensics</strong>. Pada soal diberikan sebuah file gambar bernama <code class="language-plaintext highlighter-rouge">foto_kantor.jpg</code> dan file catatan analis <code class="language-plaintext highlighter-rouge">readme_analis.txt</code>. Dari catatan analis, diketahui bahwa foto tersebut kemungkinan mengandung file tersembunyi dan perlu diperiksa menggunakan tool forensik standar.</p>

<h2 id="analisis-awal">Analisis Awal</h2>

<p>Langkah awal yang saya lakukan adalah membaca file <code class="language-plaintext highlighter-rouge">readme_analis.txt</code>. Di dalam catatan tersebut terdapat petunjuk bahwa gambar yang diberikan tidak hanya berisi tampilan visual biasa, tetapi kemungkinan menyimpan file lain di dalamnya. Karena challenge ini termasuk digital forensics dan berkaitan dengan gambar, saya mulai memeriksa metadata serta kemungkinan adanya teknik steganografi pada file <code class="language-plaintext highlighter-rouge">foto_kantor.jpg</code>.</p>

<h2 id="langkah-penyelesaian">Langkah Penyelesaian</h2>

<p>Pertama, saya memeriksa metadata gambar menggunakan <code class="language-plaintext highlighter-rouge">exiftool</code>.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>exiftool foto_kantor.jpg
</code></pre></div></div>

<p>Dari hasil pengecekan metadata, ditemukan komentar yang berisi password:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pass: kantor2026
</code></pre></div></div>

<p>Password ini menjadi petunjuk bahwa file gambar kemungkinan menggunakan teknik steganografi dengan password tertentu. Selanjutnya, saya mencoba mengekstrak file tersembunyi menggunakan <code class="language-plaintext highlighter-rouge">steghide</code>.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>steghide extract -sf foto_kantor.jpg -p kantor2026
</code></pre></div></div>

<p>Setelah perintah tersebut dijalankan, berhasil diekstrak sebuah file bernama <code class="language-plaintext highlighter-rouge">hidden.txt</code>.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cat hidden.txt
</code></pre></div></div>

<p>Isi file tersebut menampilkan flag challenge.</p>

<h2 id="flag">Flag</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>flag{st3gh1d3_k4nt0r_2026_f0und}
</code></pre></div></div>

<h2 id="kesimpulan--hal-yang-dipelajari">Kesimpulan / Hal yang Dipelajari</h2>

<p>Dari challenge ini, saya belajar bahwa file gambar tidak selalu hanya berisi data visual yang terlihat oleh mata. Informasi penting dapat disembunyikan di dalam metadata maupun menggunakan teknik steganografi. Pada kasus ini, metadata gambar menyimpan password yang kemudian digunakan untuk mengekstrak file tersembunyi menggunakan <code class="language-plaintext highlighter-rouge">steghide</code>.</p>]]></content><author><name>azizul-manal-gaumalanga</name></author><category term="forensics" /><category term="zero-day-2026" /><summary type="html"><![CDATA[Detail Soal]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://zeroxucl.team/images/oxucl-logo.jpg" /><media:content medium="image" url="http://zeroxucl.team/images/oxucl-logo.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">W1-F1 Jejak Digital Seorang Dev</title><link href="http://zeroxucl.team/2026/06/10/jejak-digital-seorang-dev.html" rel="alternate" type="text/html" title="W1-F1 Jejak Digital Seorang Dev" /><published>2026-06-10T00:00:00+00:00</published><updated>2026-06-10T14:26:24+00:00</updated><id>http://zeroxucl.team/2026/06/10/jejak-digital-seorang-dev</id><content type="html" xml:base="http://zeroxucl.team/2026/06/10/jejak-digital-seorang-dev.html"><![CDATA[<h2 id="detail-soal">Detail Soal</h2>

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Nama Challenge</td>
      <td>W1-F1 Warmup — Selamat Datang</td>
    </tr>
    <tr>
      <td>Kategori</td>
      <td>Recon / OSINT</td>
    </tr>
    <tr>
      <td>Event</td>
      <td>ZERO DAY Mini Games 2026</td>
    </tr>
    <tr>
      <td>Poin</td>
      <td>100</td>
    </tr>
    <tr>
      <td>Difficulty</td>
      <td>Easy</td>
    </tr>
    <tr>
      <td>File/Sumber</td>
      <td>Website dari lomba</td>
    </tr>
  </tbody>
</table>

<h2 id="deskripsi-singkat">Deskripsi Singkat</h2>

<p>Pada challange ini diberikan website Portfolio Budi Santoso, dan menurut instruksi ada informasi sensitif yang tersebar. Catatan dari tantangan ini memberitahukan bahwa flag bukan hanya ada di tampilan atau halaman utama.</p>

<h2 id="analisis-awal">Analisis Awal</h2>

<p>Saya melakukan analisis pada bagian front end website. Kemudian di halaman <code class="language-plaintext highlighter-rouge">/whois_dump.txt</code> saya menemukan potongan flag part 2 yang di-encoding dengan base64.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>=RfYjRzMzY0X2NoNDFufQ==
</code></pre></div></div>

<p>Pemeriksaan secara backend dilakukan. Dari kode halaman utama ditemukan komentar tentang adanya halaman yang disembunyikan.</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">&lt;!-- halaman pribadi: /catatan.html --&gt;</span>
</code></pre></div></div>

<p>Di halaman <code class="language-plaintext highlighter-rouge">catatan.html</code> ditemukan bagian 1 dari flag:</p>

<p><img src="/images/wu/jejak-1.png" alt="" /></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ZmxhZ3t0dzBfZnI0Z20zbn
</code></pre></div></div>

<h2 id="langkah-penyelesaian">Langkah Penyelesaian</h2>

<ol>
  <li>Buka terminal linux</li>
  <li>Gabungkan part 1 dan 2 dari flag:</li>
</ol>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ZmxhZ3t0dzBfZnI0Z20zbnRfYjRzMzY0X2NoNDFufQ==
</code></pre></div></div>

<ol>
  <li>Decode dengan tool base64:</li>
</ol>

<p><img src="/images/wu/jejak-2.png" alt="" /></p>

<h2 id="flag">Flag</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>flag{tw0_fr4gm3nt_b4s364_ch41n}
</code></pre></div></div>

<h2 id="kesimpulan--hal-yang-dipelajari">Kesimpulan / Hal yang Dipelajari</h2>

<p>Dari challenge ini, saya belajar bahwa informasi penting pada website tidak selalu terlihat di halaman utama. Dengan memeriksa source code, halaman tersembunyi, dan file tambahan seperti <code class="language-plaintext highlighter-rouge">/whois_dump.txt</code>, saya dapat menemukan dua bagian flag. Kedua bagian tersebut kemudian digabungkan dan didecode menggunakan base64 untuk mendapatkan flag akhir.</p>]]></content><author><name>azizul-manal-gaumalanga</name></author><category term="osint" /><category term="recon" /><category term="zero-day-2026" /><summary type="html"><![CDATA[Detail Soal]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://zeroxucl.team/images/oxucl-logo.jpg" /><media:content medium="image" url="http://zeroxucl.team/images/oxucl-logo.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">W1-A3 Konfigurasi Terenkripsi</title><link href="http://zeroxucl.team/2026/06/10/konfigurasi-terenkripsi.html" rel="alternate" type="text/html" title="W1-A3 Konfigurasi Terenkripsi" /><published>2026-06-10T00:00:00+00:00</published><updated>2026-06-10T14:26:24+00:00</updated><id>http://zeroxucl.team/2026/06/10/konfigurasi-terenkripsi</id><content type="html" xml:base="http://zeroxucl.team/2026/06/10/konfigurasi-terenkripsi.html"><![CDATA[<h2 id="detail-soal">Detail Soal</h2>

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Nama Challenge</td>
      <td>W1-A3 Konfigurasi Terenkripsi</td>
    </tr>
    <tr>
      <td>Kategori</td>
      <td>Crypto &amp; Puzzle</td>
    </tr>
    <tr>
      <td>Event</td>
      <td>ZERO DAY Mini Games 2026</td>
    </tr>
    <tr>
      <td>Poin</td>
      <td>200</td>
    </tr>
    <tr>
      <td>Difficulty</td>
      <td>Beginner</td>
    </tr>
    <tr>
      <td>File</td>
      <td><code class="language-plaintext highlighter-rouge">config.bin</code>, <code class="language-plaintext highlighter-rouge">key_hint.txt</code>, dan <code class="language-plaintext highlighter-rouge">partial_source.c</code></td>
    </tr>
  </tbody>
</table>

<h2 id="deskripsi-singkat">Deskripsi Singkat</h2>

<p>Pada challenge ini diberikan sebuah file binary blob konfigurasi dari perangkat IoT yang diduga telah dikompromikan. Bersama file tersebut, terdapat catatan analis dan potongan source code yang menjelaskan cara data konfigurasi diproses. Tujuan dari challenge ini adalah memahami struktur file binary, menemukan kunci enkripsi, lalu mendecode isi konfigurasi hingga mendapatkan flag.</p>

<h2 id="analisis-awal">Analisis Awal</h2>

<p>Langkah pertama yang saya lakukan adalah membaca file <code class="language-plaintext highlighter-rouge">key_hint.txt</code>. Dari catatan tersebut diketahui bahwa 4 byte pertama pada file <code class="language-plaintext highlighter-rouge">config.bin</code> merupakan XOR key. Nilai pada offset <code class="language-plaintext highlighter-rouge">0x00-0x03</code> adalah:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>4B 33 61 5F
</code></pre></div></div>

<p>Jika dikonversi dari hexadecimal ke ASCII, nilai tersebut menjadi:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>K3a_
</code></pre></div></div>

<p>Selanjutnya, saya membaca file <code class="language-plaintext highlighter-rouge">partial_source.c</code>. Dari potongan source code tersebut terlihat bahwa program membaca 4 byte pertama sebagai key, lalu melewati 4 byte awal file sebelum melakukan proses decode. Data setelah offset <code class="language-plaintext highlighter-rouge">0x04</code> di-XOR menggunakan key 4-byte secara berulang atau siklik.</p>

<p>Catatan pada soal berbunyi:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>"Dalam analisis biner, yang tampak jelas seringkali adalah pengalih perhatian."
</code></pre></div></div>

<p>Petunjuk ini menunjukkan bahwa tidak cukup hanya melihat string yang tampak langsung dari file binary. Isi sebenarnya perlu didecode terlebih dahulu menggunakan algoritma yang sesuai dengan source code yang diberikan.</p>

<h2 id="langkah-penyelesaian">Langkah Penyelesaian</h2>

<p>Pertama, saya membuka file petunjuk untuk mengetahui struktur <code class="language-plaintext highlighter-rouge">config.bin</code>. Struktur file tersebut adalah:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[0x00-0x03] : 4-byte XOR key
[0x04-EOF ] : XOR-encoded strings
</code></pre></div></div>

<p>Dari struktur tersebut, saya mengambil 4 byte pertama sebagai key, yaitu:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>4B 33 61 5F
</code></pre></div></div>

<p>Kemudian, saya membuat script Python sederhana untuk membaca file <code class="language-plaintext highlighter-rouge">config.bin</code>, mengambil key dari 4 byte pertama, lalu mendecode seluruh data setelah offset <code class="language-plaintext highlighter-rouge">0x04</code> dengan operasi XOR.</p>

<p>Script yang digunakan:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="nn">pathlib</span> <span class="kn">import</span> <span class="n">Path</span>

<span class="n">data</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s">"config.bin"</span><span class="p">).</span><span class="n">read_bytes</span><span class="p">()</span>

<span class="n">key</span> <span class="o">=</span> <span class="n">data</span><span class="p">[:</span><span class="mi">4</span><span class="p">]</span>
<span class="n">enc</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">4</span><span class="p">:]</span>

<span class="n">dec</span> <span class="o">=</span> <span class="nb">bytes</span><span class="p">(</span><span class="n">b</span> <span class="o">^</span> <span class="n">key</span><span class="p">[</span><span class="n">i</span> <span class="o">%</span> <span class="mi">4</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">b</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">enc</span><span class="p">))</span>

<span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">dec</span><span class="p">.</span><span class="n">split</span><span class="p">(</span><span class="sa">b</span><span class="s">"</span><span class="se">\x00</span><span class="s">"</span><span class="p">):</span>
    <span class="k">if</span> <span class="n">s</span><span class="p">:</span>
        <span class="k">print</span><span class="p">(</span><span class="n">s</span><span class="p">.</span><span class="n">decode</span><span class="p">())</span>
</code></pre></div></div>

<p>Script tersebut bekerja dengan cara:</p>

<ol>
  <li>Membaca seluruh isi <code class="language-plaintext highlighter-rouge">config.bin</code>.</li>
  <li>Mengambil 4 byte pertama sebagai XOR key.</li>
  <li>Mengambil data setelah 4 byte pertama sebagai data terenkripsi.</li>
  <li>Melakukan XOR setiap byte data dengan key secara berulang.</li>
  <li>Memisahkan hasil decode berdasarkan null byte <code class="language-plaintext highlighter-rouge">0x00</code>, karena setiap string diakhiri dengan null terminator.</li>
</ol>

<p>Setelah script dijalankan, muncul beberapa string konfigurasi seperti alamat server, endpoint internal, dan satu string flag.</p>

<p>Hasil decode yang ditemukan:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>192.168.47.23:8080
http://update.telematika-nusantara.internal/api/v1/beacon
vpn-gw.telematika-nusantara.internal
L2FwaS92Mi9iZWFjb24vdXBkYXRl
c2-backup.telematika.net:443
flag{xor_k3y_K33l_3xtr4ct3d}
</code></pre></div></div>

<p>Dari hasil tersebut, string terakhir merupakan flag challenge.</p>

<h2 id="flag">Flag</h2>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>flag{xor_k3y_K33l_3xtr4ct3d}
</code></pre></div></div>

<h2 id="kesimpulan--hal-yang-dipelajari">Kesimpulan / Hal yang Dipelajari</h2>

<p>Pada challenge ini saya mempelajari bahwa file binary tidak selalu dapat dianalisis hanya dengan melihat string yang tampak secara langsung. Informasi penting bisa disimpan dalam bentuk encoded atau encrypted. Dengan membaca catatan analis dan memahami potongan source code, dapat diketahui bahwa file <code class="language-plaintext highlighter-rouge">config.bin</code> menggunakan XOR encryption sederhana dengan key yang disimpan pada 4 byte pertama file. Setelah key ditemukan dan proses XOR dilakukan secara benar, isi konfigurasi berhasil didecode dan flag dapat ditemukan.</p>]]></content><author><name>azizul-manal-gaumalanga</name></author><category term="crypto" /><category term="puzzle" /><category term="zero-day-2026" /><summary type="html"><![CDATA[Detail Soal]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://zeroxucl.team/images/oxucl-logo.jpg" /><media:content medium="image" url="http://zeroxucl.team/images/oxucl-logo.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Korespondensi Tersegel</title><link href="http://zeroxucl.team/2026/06/10/korespondensi-tersegel.html" rel="alternate" type="text/html" title="Korespondensi Tersegel" /><published>2026-06-10T00:00:00+00:00</published><updated>2026-06-10T14:26:24+00:00</updated><id>http://zeroxucl.team/2026/06/10/korespondensi-tersegel</id><content type="html" xml:base="http://zeroxucl.team/2026/06/10/korespondensi-tersegel.html"><![CDATA[<h2 id="detail-soal">Detail Soal</h2>

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Nama Challenge</td>
      <td>Korespondensi Tersegel</td>
    </tr>
    <tr>
      <td>Kategori</td>
      <td>Crypto &amp; Puzzle</td>
    </tr>
    <tr>
      <td>Event</td>
      <td>ZERO_DAY // Scholar Battle</td>
    </tr>
    <tr>
      <td>Poin</td>
      <td>25</td>
    </tr>
    <tr>
      <td>Difficulty</td>
      <td>Easy</td>
    </tr>
    <tr>
      <td>File</td>
      <td><code class="language-plaintext highlighter-rouge">readme.txt</code>, <code class="language-plaintext highlighter-rouge">company_logo.jpg</code>, <code class="language-plaintext highlighter-rouge">cipher_text.txt</code></td>
    </tr>
  </tbody>
</table>

<h2 id="deskripsi-singkat">Deskripsi Singkat</h2>

<p>Pada challenge ini, diberikan sebuah teks terenkripsi yang diduga merupakan korespondensi internal dari PT Arkana Sistem. Tugas utama dari challenge ini adalah menemukan metode enkripsi yang digunakan, mencari kunci dekripsi, lalu mendekripsi pesan untuk mendapatkan flag.</p>

<h2 id="analisis-awal">Analisis Awal</h2>

<p>Langkah pertama yang saya lakukan adalah membaca file <code class="language-plaintext highlighter-rouge">readme.txt</code>. Dari file tersebut diketahui bahwa pesan dienkripsi menggunakan metode klasik, dan kunci dekripsi dapat ditemukan pada salah satu file lain di dalam archive. Readme juga memberikan petunjuk untuk memeriksa data yang tidak terlihat secara visual.</p>

<p>Selanjutnya, saya membuka file <code class="language-plaintext highlighter-rouge">cipher_text.txt</code>. Isi file tersebut berupa teks acak dengan huruf kapital, tetapi susunannya masih menyerupai format surat atau korespondensi. Di dalam teks tersebut juga terdapat bagian yang terlihat seperti flag, yaitu:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>SLAX{F1G3A3R3_4RB4X4_D3PRYGD3D}
</code></pre></div></div>

<p>Bagian ini kemungkinan besar merupakan flag yang masih terenkripsi. Karena readme menyebutkan bahwa kunci ada pada file lain dan perlu memeriksa data yang tidak terlihat secara visual, saya kemudian mengecek metadata dari file <code class="language-plaintext highlighter-rouge">company_logo.jpg</code>.</p>

<h2 id="langkah-penyelesaian">Langkah Penyelesaian</h2>

<ol>
  <li>Membaca file <code class="language-plaintext highlighter-rouge">readme.txt</code> untuk mencari petunjuk awal.</li>
  <li>Dari readme, diketahui bahwa:
    <ul>
      <li>Cipher yang digunakan adalah metode klasik</li>
      <li>Kunci berada di salah satu file lain</li>
      <li>Perlu memeriksa data tersembunyi atau metadata</li>
    </ul>
  </li>
  <li>Mengecek metadata gambar <code class="language-plaintext highlighter-rouge">company_logo.jpg</code> menggunakan perintah:</li>
</ol>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>exiftool company_logo.jpg
</code></pre></div></div>

<ol>
  <li>Dari metadata gambar ditemukan komentar:</li>
</ol>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>kunci: ARKANA
</code></pre></div></div>

<ol>
  <li>Karena kunci berupa kata, metode klasik yang sesuai adalah <strong>Vigenere Cipher</strong>.</li>
  <li>Melakukan dekripsi isi <code class="language-plaintext highlighter-rouge">cipher_text.txt</code> menggunakan <strong>Vigenere Cipher</strong> dengan key:</li>
</ol>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ARKANA
</code></pre></div></div>

<ol>
  <li>Setelah didekripsi, teks menjadi terbaca sebagai korespondensi internal. Bagian flag yang awalnya:</li>
</ol>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>SLAX{F1G3A3R3_4RB4X4_D3PRYGD3D}
</code></pre></div></div>

<p>berubah menjadi:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>FLAG{V1G3N3R3_4RK4N4_D3CRYPT3D}
</code></pre></div></div>

<ol>
  <li>Karena instruksi challenge meminta submit flag dalam format huruf kecil, maka flag diubah menjadi lowercase.</li>
</ol>

<h2 id="flag">Flag</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>flag{v1g3n3r3_4rk4n4_d3crypt3d}
</code></pre></div></div>

<h2 id="kesimpulan--hal-yang-dipelajari">Kesimpulan / Hal yang Dipelajari</h2>

<p>Dari challenge ini, saya belajar bahwa pada soal kriptografi, petunjuk tidak selalu berada langsung di file ciphertext. File pendukung seperti gambar juga bisa menyimpan informasi penting melalui metadata. Selain itu, ketika sebuah cipher klasik menggunakan kunci berupa kata, salah satu metode yang perlu dicoba adalah <strong>Vigenere Cipher</strong>. Pada challenge ini, key <code class="language-plaintext highlighter-rouge">ARKANA</code> berhasil digunakan untuk mendekripsi pesan dan mendapatkan flag.</p>]]></content><author><name>azizul-manal-gaumalanga</name></author><category term="crypto" /><category term="puzzle" /><category term="zero-day-2026" /><summary type="html"><![CDATA[Detail Soal]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://zeroxucl.team/images/oxucl-logo.jpg" /><media:content medium="image" url="http://zeroxucl.team/images/oxucl-logo.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">W1-E2 Lalu Lintas Jaringan</title><link href="http://zeroxucl.team/2026/06/10/lalu-lintas-jaringan.html" rel="alternate" type="text/html" title="W1-E2 Lalu Lintas Jaringan" /><published>2026-06-10T00:00:00+00:00</published><updated>2026-06-10T14:26:24+00:00</updated><id>http://zeroxucl.team/2026/06/10/lalu-lintas-jaringan</id><content type="html" xml:base="http://zeroxucl.team/2026/06/10/lalu-lintas-jaringan.html"><![CDATA[<h2 id="detail-soal">Detail Soal</h2>

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Nama Challenge</td>
      <td>W1-E2: Lalu Lintas Jaringan</td>
    </tr>
    <tr>
      <td>Kategori</td>
      <td>Digital Forensics</td>
    </tr>
    <tr>
      <td>Event</td>
      <td>ZERO DAY Mini Games 2026</td>
    </tr>
    <tr>
      <td>File</td>
      <td><code class="language-plaintext highlighter-rouge">traffic.pcap</code></td>
    </tr>
  </tbody>
</table>

<h2 id="deskripsi-singkat">Deskripsi Singkat</h2>

<p>Pada challenge <strong>W1-E2: Lalu Lintas Jaringan</strong>, diberikan sebuah file capture bernama <code class="language-plaintext highlighter-rouge">traffic.pcap</code>. File ini berisi rekaman lalu lintas jaringan dari workstation yang dicurigai melakukan komunikasi tidak sah dengan server eksternal. Tujuan dari challenge ini adalah menganalisis traffic tersebut dan menemukan data tersembunyi yang mengarah ke flag.</p>

<h2 id="analisis-awal">Analisis Awal</h2>

<p>Langkah pertama yang saya lakukan adalah membuka file <code class="language-plaintext highlighter-rouge">traffic.pcap</code> menggunakan Wireshark. Dari hasil pengamatan awal, terlihat bahwa traffic berisi beberapa komunikasi HTTP biasa, seperti akses ke website umum, request status API, request ping internal, dan komunikasi ke beberapa endpoint.</p>

<p>Untuk mempercepat analisis, saya juga menggunakan perintah <code class="language-plaintext highlighter-rouge">strings</code> agar dapat melihat teks yang terbaca langsung dari file PCAP.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>strings traffic.pcap
</code></pre></div></div>

<p>Dari hasil tersebut terlihat beberapa request HTTP, salah satunya menuju host berikut:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>backend.siluman-tech.id
</code></pre></div></div>

<p>Host ini terlihat mencurigakan karena terdapat beberapa endpoint yang tidak umum, seperti:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/api/submit
/session/refresh
/api/c2/beacon
/update/check
</code></pre></div></div>

<p>Selain itu, ditemukan juga beberapa data yang terlihat seperti Base64.</p>

<h2 id="langkah-penyelesaian">Langkah Penyelesaian</h2>

<p>Pada awalnya ditemukan request berikut:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>POST /api/submit HTTP/1.1
Host: backend.siluman-tech.id

user_id=EMP3391&amp;action=check_in&amp;secret_token=c2VjcmV0XzRiOGYyYzlkMWE2ZTNmN2IwYzVkMmU4YTlmNGIxYzdl
</code></pre></div></div>

<p>Nilai <code class="language-plaintext highlighter-rouge">secret_token</code> tersebut terlihat seperti Base64, sehingga saya mencoba melakukan decode.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">echo</span> <span class="s1">'c2VjcmV0XzRiOGYyYzlkMWE2ZTNmN2IwYzVkMmU4YTlmNGIxYzdl'</span> | <span class="nb">base64</span> <span class="nt">-d</span>
</code></pre></div></div>

<p>Hasilnya:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>secret_4b8f2c9d1a6e3f7b0c5d2e8a9f4b1c7e
</code></pre></div></div>

<p>Namun hasil tersebut bukan flag, melainkan hanya token atau petunjuk lain. Karena challenge menyebutkan adanya data yang disembunyikan dalam lalu lintas normal, saya melanjutkan analisis ke request lain yang terlihat lebih mencurigakan.</p>

<p>Kemudian ditemukan komunikasi berikut:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>POST /api/c2/beacon HTTP/1.1
Host: backend.siluman-tech.id
Content-Type: application/json
X-Client-ID: SLM-EMP3391

{"host":"WS-3391","os":"win10","ts":1748000000}
</code></pre></div></div>

<p>Endpoint <code class="language-plaintext highlighter-rouge">/api/c2/beacon</code> cukup mencurigakan karena istilah <strong>C2</strong> biasanya merujuk pada <strong>Command and Control</strong>, yaitu komunikasi antara client yang terinfeksi dengan server pengendali.</p>

<p>Response dari server berisi data berikut:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>HTTP/1.1 200 OK
Content-Type: application/json
X-Request-ID: c2-20260528-9f3a

{"status":"ok","task":"idle","ref":"ZmxhZ3twY2FwX2MyX3IzZl9iNHMzNjRfM3hmMWx9"}
</code></pre></div></div>

<p>Pada bagian response terdapat field <code class="language-plaintext highlighter-rouge">ref</code> yang berisi string Base64:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ZmxhZ3twY2FwX2MyX3IzZl9iNHMzNjRfM3hmMWx9
</code></pre></div></div>

<p>String tersebut kemudian saya decode menggunakan perintah:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">echo</span> <span class="s1">'ZmxhZ3twY2FwX2MyX3IzZl9iNHMzNjRfM3hmMWx9'</span> | <span class="nb">base64</span> <span class="nt">-d</span>
</code></pre></div></div>

<p>Hasil decode-nya adalah:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>flag{pcap_c2_r3f_b4s364_3xf1l}
</code></pre></div></div>

<p>Dari sini dapat disimpulkan bahwa flag disembunyikan pada response komunikasi C2 dalam field <code class="language-plaintext highlighter-rouge">ref</code>, lalu diencoding menggunakan Base64.</p>

<h2 id="flag">Flag</h2>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>flag{pcap_c2_r3f_b4s364_3xf1l}
</code></pre></div></div>

<h2 id="kesimpulan--hal-yang-dipelajari">Kesimpulan / Hal yang Dipelajari</h2>

<p>Pada challenge ini, flag tidak muncul secara langsung di tampilan traffic biasa. Data penting disamarkan dalam komunikasi HTTP yang terlihat normal, tepatnya pada response endpoint <code class="language-plaintext highlighter-rouge">/api/c2/beacon</code>. Dari challenge ini dipelajari bahwa dalam analisis PCAP, kita tidak hanya perlu melihat request yang terlihat mencurigakan, tetapi juga perlu memeriksa response server, parameter tersembunyi, header, serta data yang tampak seperti hasil encoding. Base64 sering digunakan untuk menyamarkan data agar tidak langsung terbaca.</p>]]></content><author><name>azizul-manal-gaumalanga</name></author><category term="forensics" /><category term="zero-day-2026" /><summary type="html"><![CDATA[Detail Soal]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://zeroxucl.team/images/oxucl-logo.jpg" /><media:content medium="image" url="http://zeroxucl.team/images/oxucl-logo.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">W1-C2 Manajer Berkas Internal</title><link href="http://zeroxucl.team/2026/06/10/manajer-berkas-internal.html" rel="alternate" type="text/html" title="W1-C2 Manajer Berkas Internal" /><published>2026-06-10T00:00:00+00:00</published><updated>2026-06-10T14:26:24+00:00</updated><id>http://zeroxucl.team/2026/06/10/manajer-berkas-internal</id><content type="html" xml:base="http://zeroxucl.team/2026/06/10/manajer-berkas-internal.html"><![CDATA[<h2 id="detail-soal">Detail Soal</h2>

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Nama Challenge</td>
      <td>W1-C2: Manajer Berkas Internal</td>
    </tr>
    <tr>
      <td>Kategori</td>
      <td>Web Breach</td>
    </tr>
    <tr>
      <td>Event</td>
      <td>ZERO DAY Mini Games 2026</td>
    </tr>
    <tr>
      <td>Poin</td>
      <td>100</td>
    </tr>
    <tr>
      <td>Difficulty</td>
      <td>Beginner</td>
    </tr>
    <tr>
      <td>Target</td>
      <td>Website Manajer Berkas Internal PT Cahaya Nusantara</td>
    </tr>
  </tbody>
</table>

<h2 id="deskripsi-singkat">Deskripsi Singkat</h2>

<p>Pada challenge ini diberikan sebuah website manajemen berkas internal milik PT Cahaya Nusantara. Website tersebut digunakan untuk menampilkan beberapa dokumen internal seperti halaman beranda, dokumen, laporan, dan panduan.</p>

<p>Dari narasi soal dijelaskan bahwa sistem menggunakan parameter URL untuk menentukan berkas yang ditampilkan. Catatan soal juga memberikan petunjuk bahwa validasi yang tidak sempurna dapat membuka akses ke seluruh sistem. Berdasarkan petunjuk tersebut, kemungkinan besar terdapat celah pada proses pembacaan file melalui parameter URL.</p>

<h2 id="analisis-awal">Analisis Awal</h2>

<p>Saat membuka halaman utama, terlihat bahwa website menampilkan isi file <code class="language-plaintext highlighter-rouge">welcome.txt</code>. Pada menu navigasi, setiap halaman dipanggil menggunakan parameter <code class="language-plaintext highlighter-rouge">page</code>, contohnya:</p>

<pre><code class="language-txt">?page=welcome.txt
?page=dokumen.txt
?page=laporan.txt
?page=panduan.txt
</code></pre>

<p>Hal ini menunjukkan bahwa aplikasi membaca file berdasarkan nilai dari parameter <code class="language-plaintext highlighter-rouge">page</code>.</p>

<p>Kemudian saya memeriksa source code halaman dan menemukan komentar HTML berikut:</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">&lt;!-- Konfigurasi: lihat /var/www/html/config.php untuk referensi path flag_file --&gt;</span>
</code></pre></div></div>

<p>Komentar tersebut menjadi petunjuk penting karena memberitahu bahwa file konfigurasi berada di:</p>

<pre><code class="language-txt">/var/www/html/config.php
</code></pre>

<p>Selain itu, file tersebut juga disebut berisi referensi menuju lokasi file flag.</p>

<h2 id="langkah-penyelesaian">Langkah Penyelesaian</h2>

<p>Langkah pertama adalah mencoba membaca file <code class="language-plaintext highlighter-rouge">config.php</code> menggunakan teknik path traversal melalui parameter <code class="language-plaintext highlighter-rouge">page</code>.</p>

<p>Payload yang digunakan:</p>

<pre><code class="language-txt">?page=../../../../var/www/html/config.php
</code></pre>

<p>Setelah payload tersebut dijalankan melalui browser, isi file <code class="language-plaintext highlighter-rouge">config.php</code> berhasil ditampilkan. Di dalam file tersebut ditemukan konfigurasi berikut:</p>

<div class="language-php highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">&lt;?php</span>
<span class="c1">// config.php  -  Konfigurasi Sistem Manajer Berkas Internal</span>
<span class="c1">// File ini berisi konfigurasi path dan pengaturan aplikasi.</span>

<span class="c1">// Path ke direktori halaman</span>
<span class="nb">define</span><span class="p">(</span><span class="s1">'PAGES_DIR'</span><span class="p">,</span> <span class="s1">'/var/www/html/pages/'</span><span class="p">);</span>

<span class="c1">// Path token autentikasi sistem</span>
<span class="nv">$flag_file</span> <span class="o">=</span> <span class="s1">'/var/www/private/flag.txt'</span><span class="p">;</span>

<span class="c1">// Pengaturan tampilan</span>
<span class="nb">define</span><span class="p">(</span><span class="s1">'APP_NAME'</span><span class="p">,</span> <span class="s1">'Manajer Berkas Internal'</span><span class="p">);</span>
<span class="nb">define</span><span class="p">(</span><span class="s1">'APP_VERSION'</span><span class="p">,</span> <span class="s1">'1.4.2'</span><span class="p">);</span>
<span class="nb">define</span><span class="p">(</span><span class="s1">'COMPANY'</span><span class="p">,</span> <span class="s1">'PT Cahaya Nusantara'</span><span class="p">);</span>
</code></pre></div></div>

<p>Dari file konfigurasi tersebut, diketahui bahwa lokasi flag berada di:</p>

<pre><code class="language-txt">/var/www/private/flag.txt
</code></pre>

<p>Setelah mengetahui lokasi flag, saya kembali menggunakan parameter <code class="language-plaintext highlighter-rouge">page</code> untuk membaca file tersebut:</p>

<pre><code class="language-txt">?page=../../../../var/www/private/flag.txt
</code></pre>

<p>Payload tersebut berhasil menampilkan isi file flag pada halaman website. Setelah flag didapatkan, flag kemudian disubmit ke platform dan berhasil diterima.</p>

<h2 id="flag">Flag</h2>

<pre><code class="language-txt">DSG{...}
</code></pre>

<h2 id="kesimpulan--hal-yang-dipelajari">Kesimpulan / Hal yang Dipelajari</h2>

<p>Challenge ini memanfaatkan kerentanan <strong>Local File Inclusion</strong> atau <strong>Path Traversal</strong>. Kerentanan terjadi karena aplikasi menerima input dari parameter <code class="language-plaintext highlighter-rouge">page</code> untuk menentukan file yang akan dibaca, tetapi tidak membatasi akses hanya ke direktori file yang seharusnya.</p>

<p>Akibatnya, pengguna dapat menggunakan pola <code class="language-plaintext highlighter-rouge">../</code> untuk keluar dari direktori halaman dan membaca file lain di server, termasuk file konfigurasi dan file flag. Dari challenge ini dapat dipelajari bahwa validasi path sangat penting pada fitur pembacaan file. Aplikasi seharusnya menggunakan whitelist file yang boleh diakses, membatasi direktori kerja, serta mencegah penggunaan traversal sequence seperti <code class="language-plaintext highlighter-rouge">../</code>.</p>]]></content><author><name>azizul-manal-gaumalanga</name></author><category term="web" /><category term="zero-day-2026" /><summary type="html"><![CDATA[Detail Soal]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://zeroxucl.team/images/oxucl-logo.jpg" /><media:content medium="image" url="http://zeroxucl.team/images/oxucl-logo.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">W1-D3 Pemeriksa Kredensial</title><link href="http://zeroxucl.team/2026/06/10/pemeriksa-kredensial.html" rel="alternate" type="text/html" title="W1-D3 Pemeriksa Kredensial" /><published>2026-06-10T00:00:00+00:00</published><updated>2026-06-10T14:26:24+00:00</updated><id>http://zeroxucl.team/2026/06/10/pemeriksa-kredensial</id><content type="html" xml:base="http://zeroxucl.team/2026/06/10/pemeriksa-kredensial.html"><![CDATA[<h2 id="detail-soal">Detail Soal</h2>

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Nama Challenge</td>
      <td>W1-D3: Pemeriksa Kredensial</td>
    </tr>
    <tr>
      <td>Kategori</td>
      <td>Reverse Binary</td>
    </tr>
    <tr>
      <td>Event</td>
      <td>ZERO DAY Mini Games 2026</td>
    </tr>
    <tr>
      <td>File</td>
      <td><code class="language-plaintext highlighter-rouge">pemeriksa_kredensial</code></td>
    </tr>
  </tbody>
</table>

<h2 id="deskripsi-singkat">Deskripsi Singkat</h2>

<p>Pada challenge <strong>W1-D3: Pemeriksa Kredensial</strong>, diberikan sebuah binary bernama <code class="language-plaintext highlighter-rouge">pemeriksa_kredensial</code>. Binary ini meminta input kredensial, lalu menentukan apakah input tersebut benar atau salah. Tujuan dari challenge ini adalah melakukan analisis reverse engineering untuk mengetahui kredensial yang valid.</p>

<h2 id="analisis-awal">Analisis Awal</h2>

<p>Pertama, saya menjalankan pengecekan awal terhadap binary menggunakan perintah <code class="language-plaintext highlighter-rouge">file</code>.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>file pemeriksa_kredensial
</code></pre></div></div>

<p>Hasilnya menunjukkan bahwa file merupakan binary <strong>ELF 64-bit</strong> untuk Linux dan tidak ter-strip, sehingga nama fungsi masih dapat terlihat saat dianalisis.</p>

<p>Selanjutnya, saya menggunakan <code class="language-plaintext highlighter-rouge">strings</code> untuk melihat string yang tersimpan di dalam binary.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>strings pemeriksa_kredensial
</code></pre></div></div>

<p>Dari hasil tersebut ditemukan beberapa string menarik seperti:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ADMIN-CREDENTIAL-2026
ROOT-ACCESS-TOKEN
fWQza2M0cmNfbjE0aGNfNDYzczRiXzNzcjN2M3J7Z2FsZg==
</code></pre></div></div>

<p>Dua string pertama terlihat seperti kredensial, tetapi kemungkinan hanya decoy atau pengalih perhatian. String ketiga terlihat seperti Base64 karena memiliki pola karakter Base64 dan diakhiri dengan tanda <code class="language-plaintext highlighter-rouge">==</code>.</p>

<h2 id="langkah-penyelesaian">Langkah Penyelesaian</h2>

<p>Binary kemudian dianalisis lebih lanjut menggunakan <code class="language-plaintext highlighter-rouge">objdump</code>.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>objdump <span class="nt">-d</span> <span class="nt">-Mintel</span> pemeriksa_kredensial
</code></pre></div></div>

<p>Dari fungsi <code class="language-plaintext highlighter-rouge">main</code>, ditemukan bahwa program melakukan beberapa proses terhadap input pengguna. Alurnya adalah:</p>

<ol>
  <li>Program menerima input dari user.</li>
  <li>Karakter newline dihapus.</li>
  <li>Input dibalik menggunakan fungsi <code class="language-plaintext highlighter-rouge">reverse_str</code>.</li>
  <li>Hasil reverse kemudian di-encode menggunakan fungsi <code class="language-plaintext highlighter-rouge">b64_encode</code>.</li>
  <li>Hasil encoding dibandingkan dengan string Base64 yang tersimpan di binary.</li>
</ol>

<p>String pembanding yang ditemukan adalah:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>fWQza2M0cmNfbjE0aGNfNDYzczRiXzNzcjN2M3J7Z2FsZg==
</code></pre></div></div>

<p>Karena program melakukan proses:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>input → reverse → base64 encode → compare
</code></pre></div></div>

<p>maka untuk mendapatkan input asli, urutan tersebut harus dibalik:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>base64 decode → reverse
</code></pre></div></div>

<p>Saya menggunakan Python untuk melakukan decoding.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>python3 <span class="nt">-c</span> <span class="s1">'import base64; s="fWQza2M0cmNfbjE0aGNfNDYzczRiXzNzcjN2M3J7Z2FsZg=="; print(base64.b64decode(s).decode())'</span>
</code></pre></div></div>

<p>Hasil decode Base64:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>}d3kc4rc_n14hc_463s4b_3sr3v3r{galf
</code></pre></div></div>

<p>Hasil tersebut masih dalam kondisi terbalik, sehingga perlu dibalik lagi.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>python3 <span class="nt">-c</span> <span class="s1">'import base64; s="fWQza2M0cmNfbjE0aGNfNDYzczRiXzNzcjN2M3J7Z2FsZg=="; print(base64.b64decode(s).decode()[::-1])'</span>
</code></pre></div></div>

<p>Hasil akhirnya adalah:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>flag{r3v3rs3_b4s364_ch41n_cr4ck3d}
</code></pre></div></div>

<p>Setelah input tersebut dimasukkan ke program, binary menampilkan pesan bahwa kredensial benar dan akses diberikan.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">printf</span> <span class="s1">'flag{r3v3rs3_b4s364_ch41n_cr4ck3d}\n'</span> | ./pemeriksa_kredensial
</code></pre></div></div>

<p>Output:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Kredensial benar! Akses diberikan.
</code></pre></div></div>

<h2 id="flag">Flag</h2>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>flag{r3v3rs3_b4s364_ch41n_cr4ck3d}
</code></pre></div></div>

<h2 id="kesimpulan--hal-yang-dipelajari">Kesimpulan / Hal yang Dipelajari</h2>

<p>Pada challenge ini, flag tidak langsung tersimpan dalam bentuk plaintext. Binary melakukan beberapa lapisan transformasi, yaitu membalik input lalu melakukan encoding Base64 sebelum membandingkannya dengan nilai yang sudah disimpan. Dari challenge ini dipelajari bahwa saat melakukan reverse engineering, penting untuk memahami urutan transformasi yang dilakukan program. Untuk mendapatkan nilai asli, proses tersebut harus dibalik dengan urutan yang berlawanan.</p>]]></content><author><name>azizul-manal-gaumalanga</name></author><category term="rev" /><category term="binary" /><category term="zero-day-2026" /><summary type="html"><![CDATA[Detail Soal]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://zeroxucl.team/images/oxucl-logo.jpg" /><media:content medium="image" url="http://zeroxucl.team/images/oxucl-logo.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">W1-D2 Perangkat Lunak Terkunci</title><link href="http://zeroxucl.team/2026/06/10/perangkat-lunak-terkunci.html" rel="alternate" type="text/html" title="W1-D2 Perangkat Lunak Terkunci" /><published>2026-06-10T00:00:00+00:00</published><updated>2026-06-10T14:26:24+00:00</updated><id>http://zeroxucl.team/2026/06/10/perangkat-lunak-terkunci</id><content type="html" xml:base="http://zeroxucl.team/2026/06/10/perangkat-lunak-terkunci.html"><![CDATA[<h2 id="detail-soal">Detail Soal</h2>

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Nama Challenge</td>
      <td>W1-D2: Perangkat Lunak Terkunci</td>
    </tr>
    <tr>
      <td>Kategori</td>
      <td>Reverse Binary</td>
    </tr>
    <tr>
      <td>Event</td>
      <td>ZERO DAY Mini Games 2026</td>
    </tr>
    <tr>
      <td>Poin</td>
      <td>100</td>
    </tr>
    <tr>
      <td>Difficulty</td>
      <td>Beginner</td>
    </tr>
    <tr>
      <td>File</td>
      <td><code class="language-plaintext highlighter-rouge">perangkat_lunak_terkunci</code></td>
    </tr>
  </tbody>
</table>

<h2 id="deskripsi-singkat">Deskripsi Singkat</h2>

<p>Pada challenge ini diberikan sebuah binary bernama <code class="language-plaintext highlighter-rouge">perangkat_lunak_terkunci</code>. Binary tersebut merupakan program verifikasi lisensi yang meminta input berupa kunci lisensi. Tujuan dari challenge ini adalah menganalisis cara program memvalidasi input, lalu menemukan license key yang benar agar program berhasil diaktifkan.</p>

<h2 id="analisis-awal">Analisis Awal</h2>

<p>Pertama, binary dijalankan untuk melihat perilakunya.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./perangkat_lunak_terkunci
</code></pre></div></div>

<p>Program meminta input lisensi. Jika input salah, program akan menampilkan pesan bahwa lisensi tidak valid. Berdasarkan catatan soal, nilai yang tersimpan di dalam binary kemungkinan tidak disimpan dalam bentuk asli, sehingga perlu dianalisis menggunakan teknik reverse engineering sederhana.</p>

<p>Selanjutnya dilakukan pengecekan string yang ada di dalam binary.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>strings perangkat_lunak_terkunci
</code></pre></div></div>

<p>Dari hasil pengecekan ditemukan sebuah string panjang berbentuk hexadecimal:</p>

<pre><code class="language-txt">666c61677b6833785f737472316e675f6c3163336e73335f637234636b33647d
</code></pre>

<p>String tersebut terlihat seperti data yang sudah di-encode, bukan teks biasa.</p>

<h2 id="langkah-penyelesaian">Langkah Penyelesaian</h2>

<p>Karena string yang ditemukan berbentuk hexadecimal, langkah berikutnya adalah melakukan decode dari hex ke ASCII.</p>

<p>Decode dapat dilakukan menggunakan command berikut:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">echo</span> <span class="s2">"666c61677b6833785f737472316e675f6c3163336e73335f637234636b33647d"</span> | xxd <span class="nt">-r</span> <span class="nt">-p</span>
</code></pre></div></div>

<p>Hasil decode-nya adalah:</p>

<pre><code class="language-txt">flag{h3x_str1ng_l1c3ns3_cr4ck3d}
</code></pre>

<p>Setelah itu, hasil decode tersebut dicoba sebagai input lisensi ke program.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./perangkat_lunak_terkunci
</code></pre></div></div>

<p>Kemudian masukkan:</p>

<pre><code class="language-txt">flag{h3x_str1ng_l1c3ns3_cr4ck3d}
</code></pre>

<p>Program memberikan output bahwa lisensi valid dan perangkat lunak berhasil diaktifkan. Ini membuktikan bahwa string hexadecimal di dalam binary adalah license key yang benar setelah didecode.</p>

<h2 id="flag">Flag</h2>

<pre><code class="language-txt">flag{h3x_str1ng_l1c3ns3_cr4ck3d}
</code></pre>

<h2 id="kesimpulan--hal-yang-dipelajari">Kesimpulan / Hal yang Dipelajari</h2>

<p>Pada challenge ini, validasi lisensi dilakukan dengan membandingkan input pengguna dengan nilai yang sudah disimpan di dalam binary dalam bentuk hexadecimal. Dari challenge ini dapat dipelajari bahwa pada reverse engineering, string penting seperti password, key, atau flag tidak selalu disimpan dalam bentuk plaintext, tetapi bisa disamarkan menggunakan encoding sederhana seperti hex.</p>]]></content><author><name>azizul-manal-gaumalanga</name></author><category term="rev" /><category term="binary" /><category term="zero-day-2026" /><summary type="html"><![CDATA[Detail Soal]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://zeroxucl.team/images/oxucl-logo.jpg" /><media:content medium="image" url="http://zeroxucl.team/images/oxucl-logo.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">W1-B3 Perusahaan Bayangan</title><link href="http://zeroxucl.team/2026/06/10/perusahaan-bayangan.html" rel="alternate" type="text/html" title="W1-B3 Perusahaan Bayangan" /><published>2026-06-10T00:00:00+00:00</published><updated>2026-06-10T14:26:24+00:00</updated><id>http://zeroxucl.team/2026/06/10/perusahaan-bayangan</id><content type="html" xml:base="http://zeroxucl.team/2026/06/10/perusahaan-bayangan.html"><![CDATA[<h2 id="detail-soal">Detail Soal</h2>

<table>
  <tbody>
    <tr>
      <td>Field</td>
      <td>Value</td>
      <td> </td>
    </tr>
    <tr>
      <td>——-</td>
      <td>——-</td>
      <td>Detail Soal</td>
    </tr>
    <tr>
      <td>Nama Challenge</td>
      <td>W1-B3: Perusahaan Bayangan</td>
      <td> </td>
    </tr>
    <tr>
      <td>Kategori</td>
      <td>Recon / OSINT</td>
      <td> </td>
    </tr>
    <tr>
      <td>Poin</td>
      <td>200</td>
      <td> </td>
    </tr>
    <tr>
      <td>Event</td>
      <td>ZERO DAY Mini Games 2026</td>
      <td> </td>
    </tr>
  </tbody>
</table>

<h2 id="deskripsi-singkat">Deskripsi Singkat</h2>

<p>Pada challenge ini, diberikan sebuah website milik PT Siluman Teknologi. Berdasarkan narasi soal, data sensitif perusahaan diduga bocor dan tersebar di beberapa lokasi digital. Tujuan dari challenge ini adalah menelusuri jejak-jejak yang tersedia pada website untuk menemukan komponen yang diperlukan dalam proses mendapatkan flag.</p>

<h2 id="analisis-awal">Analisis Awal</h2>

<p>Langkah pertama dilakukan dengan membuka halaman utama PT Siluman Teknologi. Pada halaman tersebut terdapat daftar tim teknis unggulan dan sebuah tautan untuk mengunduh direktori karyawan dalam bentuk file <code class="language-plaintext highlighter-rouge">employee_list.csv</code>.</p>

<p>Dari file CSV tersebut ditemukan beberapa data karyawan seperti nama, divisi, email, status, dan blog pribadi. Salah satu entri yang menarik adalah Ahmad Fauzi, seorang Senior Security Engineer dengan ID karyawan <code class="language-plaintext highlighter-rouge">EMP-3391</code>, yang memiliki blog pribadi bernama <code class="language-plaintext highlighter-rouge">aftech.html</code>.</p>

<p>Selain itu, pengecekan terhadap <code class="language-plaintext highlighter-rouge">robots.txt</code> juga memberikan petunjuk penting karena terdapat beberapa path yang tidak diperbolehkan untuk diindeks, salah satunya adalah <code class="language-plaintext highlighter-rouge">/leaked_env.txt</code>. File ini menjadi petunjuk kuat karena halaman utama juga menyebutkan adanya potensi kebocoran file konfigurasi.</p>

<h2 id="langkah-penyelesaian">Langkah Penyelesaian</h2>

<p>Pertama, saya membuka file <code class="language-plaintext highlighter-rouge">employee_list.csv</code> dari halaman utama. File tersebut berisi data karyawan PT Siluman Teknologi. Dari file ini ditemukan bahwa Ahmad Fauzi memiliki blog pribadi dengan path:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>aftech.html
</code></pre></div></div>

<p>Setelah membuka halaman <code class="language-plaintext highlighter-rouge">aftech.html</code>, terdapat petunjuk bahwa file gambar sering menyimpan informasi lebih dari yang terlihat, khususnya melalui metadata. Pada halaman tersebut juga terdapat gambar profil Ahmad Fauzi dengan nama file:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>profile_ahmad.jpg
</code></pre></div></div>

<p>Selanjutnya, saya membuka file <code class="language-plaintext highlighter-rouge">robots.txt</code> dan menemukan beberapa path tersembunyi:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/internal/
/admin/
/leaked_env.txt
</code></pre></div></div>

<p>Path yang paling relevan adalah <code class="language-plaintext highlighter-rouge">/leaked_env.txt</code> karena berhubungan dengan kebocoran konfigurasi. Setelah dibuka, file tersebut berisi konfigurasi API dan sebuah token terenkripsi:</p>

<pre><code class="language-env">API_TOKEN_ENC=VV9YViMEQmkCbEEGKUcuKFxBZlprTi5kQEAKXDpbQjRO
</code></pre>

<p>Dari petunjuk pada blog Ahmad Fauzi, saya kemudian memeriksa metadata gambar <code class="language-plaintext highlighter-rouge">profile_ahmad.jpg</code>. Pada metadata gambar ditemukan komentar:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>kunci2: X7qP
</code></pre></div></div>

<p>Karena Ahmad Fauzi memiliki ID karyawan <code class="language-plaintext highlighter-rouge">EMP-3391</code>, maka bagian pertama kunci diambil dari ID tersebut, yaitu:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>3391
</code></pre></div></div>

<p>Kemudian kunci kedua dari metadata adalah:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>X7qP
</code></pre></div></div>

<p>Sehingga kunci lengkap yang digunakan adalah:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>3391X7qP
</code></pre></div></div>

<p>Token <code class="language-plaintext highlighter-rouge">API_TOKEN_ENC</code> kemudian didecode dari Base64, lalu hasilnya didekripsi menggunakan XOR dengan kunci <code class="language-plaintext highlighter-rouge">3391X7qP</code>. Dari proses tersebut didapatkan flag:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>flag{3391_x7qp_xor_k3y_4ss3mbl3d}
</code></pre></div></div>

<h2 id="flag">Flag</h2>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>flag{3391_x7qp_xor_k3y_4ss3mbl3d}
</code></pre></div></div>

<h2 id="kesimpulan--hal-yang-dipelajari">Kesimpulan / Hal yang Dipelajari</h2>

<p>Challenge ini mengajarkan bahwa dalam OSINT, informasi penting tidak selalu terlihat langsung pada halaman utama. Petunjuk dapat tersebar di berbagai tempat seperti file CSV, <code class="language-plaintext highlighter-rouge">robots.txt</code>, file konfigurasi yang bocor, halaman blog pribadi, hingga metadata gambar. Selain itu, challenge ini juga menunjukkan pentingnya menggabungkan beberapa potongan informasi untuk mendapatkan kunci dekripsi yang benar.</p>]]></content><author><name>azizul-manal-gaumalanga</name></author><category term="osint" /><category term="recon" /><category term="zero-day-2026" /><summary type="html"><![CDATA[Detail Soal]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://zeroxucl.team/images/oxucl-logo.jpg" /><media:content medium="image" url="http://zeroxucl.team/images/oxucl-logo.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>