# WriteUp CTF Technoskill 1.0 2025
## <center>Tyzals</center>

<center><b>Harsya Brahmantyo Wibowo</b></center>
### Daftar Isi
#### π’ Easy
* [Netcyber](#netcyber)
* [KFC](#kfc)
* [Yummy Cookie](#yummy-cookie)
* [Scenario ???](#scenario)
#### π‘ Medium
* [Replayer](#replayer)
* [727](#727)
* [Login 2.0](#login-2-0)
* [Schizo](#schizo)
#### π΄ Hard
* [Touch Grass](#TouchGrass)
* [Class of Tactical Fabrication](#Class-of-Tactical-Fabrication)
#### π RESULT
* [Score Board](#result)
---
## π’ Easy
### <a id="netcyber"></a> Netcyber
> **Poin:** 300
> **URL:** `https://netlab-ctf-netcyber.tagj8z.easypanel.host/`
#### π§© Cerita Awal
Pas buka challenge ini, tampilannya keliatan kayak web company biasa. Gak ada tombol aneh, gak ada input field, keliatan banget kayak landing page doang.
> β¨ Feeling awal: "Hmm... pasti ada sesuatu yang disembunyiin."
Langsung aja saya scan pake tool `dirsearch`.
#### π Hasil Dirsearch
Ditemuin endpoint `/flag` yang ternyata langsung redirect ke `/login`.
---
#### π Halaman Login
Di halaman `/login`, ada form dengan username dan password. Awalnya saya kira ini challenge tentang SQL Injection.
Saya cobain payload seperti:
* `' OR 1=1--`
* `admin' #`
* dan semacamnya...
Tapi gak ada respon yang mencurigakan. Gak error, gak redirect, gak muncul tanda berhasil login.

---
#### π΅οΈ Kembali ke Home
Karena mandek di halaman login, saya balik lagi ke halaman utama. Scroll sampai bawah, saya nemu bagian ini:
> **Ready to Secure Your Business?**
> Contact us today to schedule a consultation or learn more about our services.
> βοΈ `notkamalfrfr@x.com`
Nah ini mencurigakan banget. Nama `notkamalfrfr` ini unik dan kayaknya bukan email beneran.
---
#### π Stalking di X (Twitter)
Saya coba cek ke `x.com` dengan username `notkamalfrfr`, dan bener aja: ada akun dengan username itu.
> π§ Feeling saya bilang, "Pasti ada sesuatu di sana..."
Ternyata dia pernah upload foto tampilan login yang password-nya keliatan.
Password-nya: `uiauiaui_uiiiauia`

---
#### β
Login Sukses
Saya cobain login pakai:
* **Username:** `notkamalfrfr`
* **Password:** `uiauiaui_uiiiauia`
Dan... boom! Langsung masuk dan muncul flag π

---
### π Flag
```
TECHNOSKILL{Tr4l4l3LoTr4lala_tun9tun9s4hur}
```
---
### <a id="kfc"></a> KFC
> **Poin:** 300
> **Deskripsi:** The last place we talk to each other before you become another person.
>
> **Format Flag 1:** `TECHNOSKILL{"address dari kfc"}` (address dapat memiliki spasi dan merupakan alphanumeric)
> **Format Flag 2:** `TECHNOSKILL{longitude, latitude}` atau `TECHNOSKILL{--.---, ---.---}`
#### π§© Permulaan
Jadi di challenge ini kita cuma dikasih **sebuah gambar** KFC.
Awalnya bingung ini ngapain...(udah cek metadata dsb) kayak cuma foto biasa doang, tapi pas diperhatiin, ternyata...
> Gambar ini kayak **dihalangi oleh pattern atau watermark**.
> Gak bisa di-scan pakai Google Lens, hasilnya kacau.

---
#### π§ Clue Tersembunyi: Lokasi Jepang?
Kalau diperhatiin baik-baik, di gambar itu ada **tulisan Jepang**.
Dari situ saya mulai mikir, *"Oke, berarti ini KFC di Jepang."*
Tapi ternyata... **jumlah cabang KFC di Jepang tuh ada 1200+** π€―
Bisa gila kalau harus cari satu-satu.
---
#### πͺ Gunakan AI untuk Hilangkan Watermark
Saya keinget bisa pake tool online buat hapus watermark.
Langsung googling dan nemu: `https://www.watermarkremover.io/`
Upload gambarnya ke situ, dan boom... watermark-nya ilang.

---
#### π Google Lens Menyelamatkan
Begitu watermark hilang, saya buka Google Lens dan scan gambarnya.
Langsung muncul hasil pencarian lokasi, dan... beneran ketemu!

---
#### π§ Plot Twist: Gojo & Geto?
Deskripsi challenge ini sempat bikin saya mikir keras:
> *"The last place we talk to each other before you become another person."*
Setelah saya cari tahu (maklum, bukan wibu π
), ternyata itu **referensi ke anime Jujutsu Kaisen**, tempat Gojo dan Geto terakhir kali ngobrol β yaitu **KFC Shinjuku**.
[Lihat di Google Maps](https://www.google.com/maps/place/KFC+Nishi-Shinjuku/@35.6929591,139.6994212,17z/data=!3m1!4b1!4m6!3m5!1s0x60188d71d64189f1:0xfcf989420881bb2d!8m2!3d35.6929591!4d139.6994212!16s%2Fg%2F1tjkfswz?entry=ttu&g_ep=EgoyMDI1MDcwNy4wIKXMDSoASAFQAw%3D%3D)
---
#### β οΈ Format Flag Bikin Kesel
Saya sempat beberapa kali **salah submit** karena format flagnya sensitif.
Setelah beberapa kali percobaan dan nyobain dua format (alamat & koordinat), akhirnya ketemu yang benar.
---
### π Flag
Flag utama:
```
TECHNOSKILL{1 Chome-2-10 Nishishinjuku, Shinjuku City, Tokyo 160-0023, Japan}
```
Format alternatif (berdasarkan deskripsi):
```
TECHNOSKILL{139.699, 35.692}
```
---
### <a id="yummy-cookie"></a> Yummy Cookie
> **Poin:** 300
> **URL:** `https://netlab-ctf-cookie-yumy.tagj8z.easypanel.host/`
#### πͺ Pertama Kali Masuk
Pas buka web-nya, tampilannya sederhana banget:

Form login ini cuma minta **username doang**, gak ada password sama sekali. Yaudah, saya masukin nama sembarang.
---
#### π Setelah Login
Begitu masuk, tampilannya berubah jadi kayak gini:

Hmm... biasa banget dan kayak gak ada apa-apa.
---
#### πͺ Karena Judulnya "Yummy Cookie"...
Saya jadi curiga jangan-jangan ada rahasia di **cookie-nya**. Langsung saya buka cookie pake **Cookie Editor (extension Chrome)**, dan bener aja...
Ada cookie bernama `user` dengan value `<username_yang_kita_input_tadi>`.

---
#### π¨βπΌ Ubah Jadi Admin
Langsung aja saya ubah value cookie `user` menjadi `admin`, lalu refresh halaman...
Boom! Halaman berubah:

---
#### π Decrypt Base64
Bagian terakhir menampilkan address yang kayak acak-acak gitu:
`aHR0cHM6Ly9wYXN0ZWJpbi5jb20vYWVyTXVzcWs=`
Saya langsung decode base64 β hasilnya:
`https://pastebin.com/aerMusqk`

Buka link tersebut, dan... ada flag-nya!

---
### π Flag
```
TECHNOSKILL{yum_yum_c00k135_50_yummie}
```
---
### <a id="scenario"></a> Scenario ???
> **Poin:** 300
> **URL:** `https://netlab-ctf-bull-board.tagj8z.easypanel.host/`
#### π§© Deskripsi
Begitu buka web-nya, kita langsung dilempar ke `/login` dan cuma disuruh masukin nama. Hmm... awalnya ngira ini bakal simple, tapi ternyata...

Setelah submit nama (aku masukin aja nama sembarang), langsung masuk ke halaman *Bulletin Board*. Di situ ada semacam chat board dengan berbagai karakter ngomongin sesuatu yang kayaknya nyambung satu sama lain. Awalnya agak ngaco, tapi kalau diperhatiin ada clue walau ada fake flag.

---
#### π Proses Penyelesaian
Ahh, saya coba langsung GET datanya aja deh, ternyata bener ternyata pake API:

Pas dilihat di responsenya ternyata ada...
```json
...
{
"username": "kim_dokja",
"message": "This scenario seems information-based..."
},
{
"username": "yoo_joonghyuk",
"message": "The only answer is to find the endpoint directly..."
},
{
"username": "han_sooyoung",
"message": "Let him waste time..."
},
{
"username": "admin",
"message": "[Log] Origin: tls123 | Extracted: 'TECHNOSKILL{N3v3r'"
},
...
{
"username": "admin",
"message": "[Log] Continued fragment: '_ending_5t0ry}' | Source file: story_final_final2_draft.json"
},
...
{
"username": "admin",
"message": "[Log] Fully assembled: TECHNOSKILL{Neverending_5t0ry}"
}
...
```
1. Cek halaman utama β tampilannya cuma kaya board dengan banyak karakter fiksi saling chat.
2. Curiga kalau ini ambil data dari API. Buka DevTools β tab *Network* β cari request yang ambil data `GET /api/posts`.
3. Bener aja! Di situ ada JSON panjang banget berisi list semua post yang muncul di board β termasuk dari user `admin` yang ternyata nyisipin flag dalam bentuk pecahan dan akhirnya digabungkan.
4. Yak! Itu flag-nya! π―
---
### π Flag
```
TECHNOSKILL{Neverending_5t0ry}
```
---
---
## π‘ Medium
### <a id="replayer"></a> Replayer
> **Poin:** 400
> **URL:** `https://netlab-ctf-replayer-fe.tagj8z.easypanel.host/`
#### π΅οΈββοΈ Deskripsi Awal
Saat pertama kali membuka *web*, kita akan melihat tampilan sebuah *chatbot* sederhana. Kita bisa mengetik teks, dan *chatbot* akan memberikan balasan. Awalnya, tidak ada yang aneh, tapi Jam Terbang CTF saya langsung menyala π§ π₯.
Model aplikasi seperti ini sering kali digunakan dalam *challenge* **Command Injection**. Jadi, saya langsung mencoba *payload* standar.
---
#### π§ͺ Eksploitasi Command Injection
Saya mencoba *payload* klasik untuk **Command Injection**:
```
;ls
```
Dan *boom*! Respons dari *chatbot* memberikan daftar *file* atau *folder* yang ada di direktori saat ini:

Ini mengonfirmasi bahwa *command injection* berhasil dan *chatbot* terhubung ke sistem *file*. Saya lanjutkan eksplorasi:
```
;ls ../
```
*Output* menunjukkan daftar direktori induk, dan saya melihat sesuatu yang menarik:

Ada *folder* bernama `secret`! Tanpa ragu, saya langsung mencoba melihat isinya:
```
;ls ../secret
```
Dan ya, saya menemukan `flag.txt`:
```
;cat ../secret/flag.txt
```

π *Flag*-nya langsung muncul!
---
### π Flag
```
TECHNOSKILL{WOW_you_dug_deep_huh}
```
---
### <a id="727"></a> 727
> **Poin:** 400
> **URL:** `https://netlab-ctf-727.tagj8z.easypanel.host/`
#### ποΈ Deskripsi Singkat
*Challenge* ini nawarin pengalaman yang beda banget dari CTF pada umumnya. Dengan tema waktu, kultus, dan simbol-simbol misterius, "Cult of 7:27" ngajak kita nyelam ke dalam teka-teki tersembunyi yang cuma bisa dipecahin kalau kita **sabar dan peka banget**. Di halaman web-nya, enggak ada *form login*, enggak ada tombol apa-apa, cuma ada satu pesan jelas:

---
#### π°οΈ Bagian Kritis: Jam UTC Jadi Kunci!
Begitu kita buka *web*-nya, yang paling menonjol itu **jam UTC** yang terus berputar. Enggak ada yang bisa dilakuin selain ngeliatin jam itu dan pesan misterius tadi. Dan ya, sesuai nama *challenge*-nya, kita langsung curiga kalau jam **07:27 UTC** itu kunci rahasianya.
Setelah nyoba ngubah waktu sistem di komputer (lewat Pengaturan Tanggal & Waktu Windows), begitu jam menunjukkan tepat **07:27 UTC**...

*jeng-jeng*... halaman *web*-nya langsung berubah sendiri!
---
#### β¨ Transisi Halaman: Wahyu Terungkap!
Begitu waktu tepat di 07:27 UTC, muncul kutipan baru yang bikin merinding:

Dan yang paling penting, muncul tombol baru yang bikin penasaran:
> **Receive the Revelation**
Saat tombol itu diklik, kita langsung dapet *file* **`vision.zip`**. Hore!
---
#### π¦ Mengungkap Isi `vision.zip`
Di dalam *file* ZIP itu, ada dua *file* lagi yang jadi petunjuk kita selanjutnya:
* `path.txt`
* `runes.txt`
**π `path.txt`**
Isinya cuma pesan samar yang bikin mikir:
> *"The Tablet rests in the open, among the Seerβs shared records. It lies beneath the sigil known to those who speak the true name."*
**π `runes.txt`**
Ini isinya simbol-simbol aneh, kayak tulisan kuno:
```
ββββα΄β βαΊβ α΄βα‘ββ
```
---
#### π§ Mencari Sang `Seer` (Exorthe)
Dari kutipan yang muncul pas transisi halaman, ada nama `Exorthe@Github.com`. Ini langsung jadi petunjuk vital! Aku langsung nyari *username* `Exorthe` di GitHub, dan bener aja, ada sebuah repositori publik yang berisi *file* bernama **`tablet.txt`**. Jackpot!

---
#### π Memecahkan Kode di `tablet.txt`
*File* `tablet.txt` ini ternyata adalah kunci untuk menerjemahkan simbol-simbol (rune) tadi. Isinya semacam pemetaan simbol ke alfabet biasa, yang kelihatannya pakai **Atbash cipher** (alfabet terbalik):
```
Z-Y-X-W-V-U-T-S-R-Q-P-O-N-M-L-K-J-I-H-G-F-E-D-C-B-A
β-α£-αͺ-β-α‘-α’-β-α΄-β-α©-β-α©-β-α-β-α-α-β-αΊ-β-α -β-β-α-α-β
```
Setelah dicocokin simbol dari `runes.txt` dengan pemetaan ini:
* `β` = P
* `β` = R
* `β` = A
* ...dan seterusnya
Hasil terjemahannya adalah: **PRAISE THE SEVEN**
---
### π Flag
```
TECHNOSKILL{PRAISE THE SEVEN}
```
---
### <a id="login-2-0"></a> Login 2.0
> **Poin:** 400
> **URL:** `https://netlab-ctf-login-fe.tagj8z.easypanel.host/`
> **Deskripsi:** This time i have added some new security measures
#### π΅οΈββοΈ Penyelidikan Awal
Begitu buka *web*-nya, kita langsung disuguhkan halaman *login* standar:

Melihat *form login* seperti ini, insting pertama saya langsung bilang: "Pasti **SQL Injection**!" π§
Saya coba *payload* klasik untuk SQL Injection di kolom *password*, seperti:
**Email:** `sembarang@example.com`
**Password:** `' or 1=1 limit 1 -- -+`
Tapi, hasilnya cuma `Invalid credential`. Wah, kok gagal ya?
---
#### π Mengungkap Sanitasi di Konsol
Karena gagal, saya langsung buka **Console** di *browser* (biasanya F12) untuk melihat apa yang terjadi di balik layar. Dan di sinilah petunjuk pentingnya muncul! Saya melihat *log* seperti ini:

*Output* `Sanitized Password` itu langsung bikin saya **notice**: ada proses sanitasi yang membuang karakter penting seperti `or`, `'`, dan `;` dari *payload* SQL Injection saya! Ini artinya, ada **filter di sisi *client*** (di *browser*) karena dia dari `index-C6f-3x8_.js`.
---
#### π‘ Analisis Kode JavaScript
Saya langsung tahu kalau proses sanitasi ini terjadi di *file* `index-C6f-3x8_.js` seperti yang ditunjukkan di konsol. Begitu saya buka *file* itu, saya menemukan potongan kode ini:
```javascript
// ... (kode di-obfuscate)
const R = /('|--|;|\/\*|\*\/|xp_|exec|union|select|insert|update|delete|drop|alter|create|truncate|replace|grant|revoke|cast|convert|char|nchar|varchar|nvarchar|declare|set|sleep|benchmark|information_schema|or\s+\d+=\d+)/gi
, P = D.replace(R, "")
, k = K.replace(R, "");
console.log("Sanitized Email:", P),
console.log("Sanitized Password:", k);
try {
const ml = {
email: P,
password: k
};
if (console.log("Sending request with body:", ml),
!(await fetch("https://netlab-ctf-login.tagj8z.easypanel.host/login", {
// ...
```
Bagian ini mengonfirmasi kecurigaan saya. Variabel `R` adalah *regex* yang membuang banyak *keyword* SQL Injection. Namun, yang paling penting adalah *regex* ini dijalankan di **sisi *client***. Ini berarti, jika kita bisa mengirim *request* POST langsung ke *server* tanpa melewati validasi *frontend* ini, *payload* kita mungkin akan berhasil!
---
#### π Bypass Sanitasi dengan cURL
Karena sanitasinya hanya di *client-side*, saya memutuskan untuk langsung mengirim *request* POST ke *endpoint login* menggunakan **cURL**. Dengan begitu, *payload* SQL Injection saya tidak akan disanitasi.
Saya menggunakan *payload* yang sudah dimodifikasi sedikit agar sesuai dengan konteks `JSON` dan *escaped quotes*:
```bash
curl 'https://netlab-ctf-login.tagj8z.easypanel.host/login' \
-X POST \
-H 'Content-Type: application/json' \
-d '{"email":"admin@example.com", "password":"'\'' OR '\''1'\''='\''1'\'' -- "}'
```
Dan *yup*! *Request* ini berhasil dan *flag* langsung didapatkan dalam *response* JSON dari *server*:
```json
{
"success": true,
"user": {
"id": 1,
"username": "flag",
"password": "TECHNOSKILL{put_s@n1t1z3r_0n_th3_b4ckend_4s_w3ll}"
}
}
```

---
### π Flag
```
TECHNOSKILL{put_s@n1t1z3r_0n_th3_b4ckend_4s_w3ll}
```
---
### <a id="schizo"></a> Schizo
> **Poin:** 400
> **URL:** `https://netlab-ctf-wordpress.tagj8z.easypanel.host/`
> **Deskripsi:** a page i could no longger find
#### π΅οΈββοΈ Penjelajahan Awal
Begitu saya buka *link* tantangannya, yang nongol cuma halaman blog WordPress yang sederhana banget. Tampilannya polos, kayak blog standar baru di-*install*.

---
#### π Mengikuti Jejak Link
Saya langsung coba klik judul *post* pertama yang paling keliatan di halaman utama: "Welcome to Technoskill 2025 β Where Curiosity Meets Code!". Klik itu langsung mengarahkan saya ke URL: `https://netlab-ctf-wordpress.tagj8z.easypanel.host/2025/06/22/hello-world/`.

Halaman ini juga terlihat biasa saja, seperti halaman *post* blog pada umumnya. Namun, mata saya tertuju pada **bagian *navbar* di pojok kiri atas**. Di situ ada sebuah teks aneh yang terlihat seperti kode atau ID: **`x6IzN1XbqR`**.
Ini pasti bukan teks biasa, pikir saya. Langsung saja saya klik teks itu!
---
#### π Menemukan Halaman Rahasia
Setelah mengklik `x6IzN1XbqR`, *browser* saya diarahkan ke URL baru: `https://netlab-ctf-wordpress.tagj8z.easypanel.host/x6izn1xbqr/`.
Dan *boom*! Halaman ini bukan lagi halaman blog biasa. Di sana terpampang jelas *flag*-nya!

Ternyata, "Schizo" ini maksudnya "sesuatu yang terlihat normal, tapi ada sisi tersembunyi yang enggak terduga"!
---
### π Flag
```
TECHNOSKILL{w0rdpr3ss_24102003}
```
## π΄ Hard
### <a id="TouchGrass"></a> Touch Grass
> **Poin:** 500
> **File:** `https://hackmd.io/_uploads/Sk2W0c0Slg.png
`
> **Deskripsi:** time to touch some grass find the message in the grass.
Siap, revisi diterima! Ternyata mata saya salah baca sandi Morse-nya di akhir. `MOWED` (dipotong/dibabat) memang jauh lebih masuk akal daripada `MOLDED` (berjamur) untuk konteks rumput.
---
#### π§© Analisis Awal
Begitu dapet file `field.png`, hal pertama yang bikin kaget adalah ukurannya: **11MB+**! Ini bukan gambar biasa.
> β¨ Feeling pertama: "Ukurannya segede gaban, pasti ada sesuatu yang disumpel di dalemnya."
Langsung aja saya keluarin jurus-jurus standar:
* `exiftool field.png` β gak ada metadata aneh.
* Lihat gambarnya langsung β Cuma foto lapangan golf biasa, gak ada yang aneh. Jadi kayaknya bukan OSINT.
* `binwalk -e field.png` β Nihil, gak ada file lain yang di-embed.
Oke, berarti ini bukan steganografi level dasar. Pesannya pasti disembunyiin di dalam data pikselnya sendiri.
---
#### π¬ Menggali Lebih Dalam dengan `zsteg`
Karena metode standar gagal, saya langsung beralih ke senjata pamungkas buat steganografi LSB (Least Significant Bit): `zsteg`. Tool ini bisa nganalisis gambar dan nyari data tersembunyi di berbagai bit plane.
Saya jalankan command:
```bash
zsteg field.png
```
Dan... *jackpot*! Muncul banyak output, tapi ada satu baris yang langsung menarik perhatian:

Di situ ada pesan jelas: "here is your grass now find the message", diikuti serangkaian huruf `V` dan `W` yang misterius.
---
#### π± Dari Rumput ke Morse
Awalnya bingung, ini kode apaan? `VW VVWV VWVV...`
> π§ Tiba-tiba teringat masa lalu... "Tunggu, ini kan kayak Sandi Rumput!"
Sebagai mantan anak pramuka, saya langsung ngeh! **Sandi Rumput** itu cuma cara lain buat nulis **Sandi Morse**. Pola rumput tinggi dan rendah itu melambangkan titik dan strip.
Dari pola `V` dan `W` yang ada, mapping-nya jadi jelas:
* **V** (rumput pendek) = **`.` (titik / dot)**
* **W** (rumput tinggi) = **`-` (strip / dash)**
---
#### Decoding Pesan Rahasia
Sekarang tinggal kerjaan utamanya: nerjemahin kode `VW` tadi ke Morse, lalu ke teks biasa.
1. **Ciphertext:**
`VW VVWV VWVV VW WWV VVVV VV WVV WVV V WV VV WV W VVVV V VVWV VV V VWVV WVV WW VVW VVV W WV WWW W WVVV V WW WWW VWW V WVV`
2. **Ubah ke Morse (V=. , W=-):**
`.- ..-. .-.. .- --. .... .. -.. -.. . -. .. -. - .... . ..-. .. . .-.. -.. -- ..- ... - -. --- - -... . -- --- .-- . -..`
3. **Terjemahkan ke Teks:**

Setelah diterjemahkan semua, pesannya jadi:
`A FLAG HIDDEN IN THE FIELD MUST NOT BE MOWED`
---
### π Flag
```
TECHNOSKILL{AFLAGHIDDENINTHEFIELDMUSTNOTBEMOWED}
```
-----
### <a id="Class-of-Tactical-Fabrication"></a> Class of Tactical Fabrication
> **Points:** 500
> **IP:** 8.215.63.72
> **Deskripsi:** There's always an entry for those who know
### πΊοΈ Reconnaissance: Mencari Pintu Masuk
Challenge ini dimulai dengan sebuah alamat IP (`8.215.63.72`). Langkah pertama adalah mencoba mengaksesnya melalui browser, namun tidak ada respons, yang menandakan port web (80/443) tidak terbuka.
Langkah logis berikutnya adalah melakukan pemindaian port untuk mencari "pintu masuk" lain menggunakan `nmap`.
```bash
nmap -sV -A 8.215.63.72
```
Hasil pemindaian menunjukkan beberapa port yang terbuka, namun yang paling menonjol adalah:

- **Port 21 (FTP):** Menjalankan `vsftpd 3.0.5` dan yang terpenting, `nmap` mendeteksi bahwa **login anonim diizinkan**.
- **Port 22 (SSH):** Menjalankan `OpenSSH 8.9p1`
Pintu masuk pertama yang paling jelas adalah melalui FTP.
-----
### π Foothold Awal: Dari FTP ke SSH
Saya langsung mencoba masuk ke server FTP sebagai pengguna `anonymous`.
```powershell
PS C:\Users\msi> ftp 8.215.63.72
Connected to 8.215.63.72.
220 (vsFTPd 3.0.5)
User (8.215.63.72:(none)): anonymous
230 Login successful.
```
Setelah berhasil masuk, saya memeriksa isi direktori dan menemukan sebuah file `creds.txt`.
```ftp
ftp> ls
150 Here comes the directory listing.
creds.txt
```
Isi dari `creds.txt` memberikan kredensial untuk langkah selanjutnya:
> I know you will get it. Use this to get through another door.
> Once you got there, use our secret path
>
> **student:nmixx00**
Kredensial ini (`student:nmixx00`) saya gunakan untuk masuk ke server melalui SSH.
-----
### π΅οΈ Enumerasi: Menggali Lebih Dalam
Setelah berhasil masuk sebagai `student` via SSH, saya mulai menjelajahi isi server. Dengan perintah `ls -R`, saya menemukan beberapa direktori. Namun, yang paling menarik adalah sebuah **direktori tersembunyi** di dalam `CaptureTheFlag-Club`.
```bash
student@iZk1ajf6znogz081blawb7Z:~$ ls -aR
./CaptureTheFlag-Club:
. .. .secret leader.png
./CaptureTheFlag-Club/.secret:
. .. key.txt leader.png
```
Di dalam direktori `.secret`, terdapat file `key.txt` yang berisi petunjuk penting:
> Access to the secret file is hidden inside our leader picture.
> Just for your information, we have secret folder hidden inside the FTP server.
> /var/ftp/.ctf-only
Petunjuk ini mengarahkan saya untuk memeriksa file gambar `leader.png` yang ada di direktori yang sama.
-----
### πΌοΈ Steganografi: Kunci Terakhir
Berdasarkan petunjuk, saya menganalisis file `leader.png` menggunakan `zsteg` untuk mencari data tersembunyi.
```bash
zsteg leader.png
```
Hasilnya langsung memberikan kredensial final yang saya butuhkan:

Dari output tersebut, saya mendapatkan kredensial baru:
- **User:** `cftp`
- **Password:** `9120758hafhfa`
-----
### π Capturing the Flag
Dengan kredensial terakhir di tangan, ada dua cara mudah untuk mendapatkan flag:
#### Metode 1: Melalui FTP (Login Baru)
Masuk kembali ke server FTP, kali ini menggunakan kredensial `cftp`.
```powershell
PS C:\Users\msi> ftp 8.215.63.72
User (8.215.63.72:(none)): cftp
Password:
230 Login successful.
ftp> ls
flag.txt
```
Kita bisa langsung mengunduh `flag.txt`.
#### Metode 2: Melalui SSH (Jalur Cepat)
Karena sudah berada di dalam sesi SSH, saya bisa langsung menuju ke direktori yang dituju (yang ternyata adalah `/var/cftp/`) dan membaca flag-nya.

### π Flag
```
TECHNOSKILL{FTP_ST3G0_CH34T}
```
## π RESULT
### <a id="result"></a>

