docs: create GEMASTIK 2026 Warmup writeups (ch1-14) via MCP DB API
- Deleted all 14 dummy docs from DB + filesystem - Created 14 Gemastik warmup writeups + index via create_document API (DB-first) - ch1-ch12: encoding/stego/web/pwn basics - ch13: RSA small factors - ch14: RSA special integers via paper-search (GCD with paper appendix primes) - All 15 docs indexed and live at wiki.asepharyana.my.id
This commit is contained in:
@@ -1,5 +1,16 @@
|
||||
---
|
||||
title: "GEMASTIK 2026 Warmup — All Chapters"
|
||||
type: "writeup"
|
||||
section: "writeups"
|
||||
status: "published"
|
||||
author: "asep"
|
||||
tags: ["gemastik", "ctf", "warmup", "writeup-index"]
|
||||
path: "writeups/gemastik-2026-warmup/_index.md"
|
||||
created_at: "2026-08-21T07:17:48.670Z"
|
||||
updated_at: "2026-08-21T07:17:48.670Z"
|
||||
---
|
||||
---
|
||||
title: "GEMASTIK 2026 Warmup — All Chapters"
|
||||
event: "GEMASTIK 2026 Warmup"
|
||||
category: "index"
|
||||
points: 0
|
||||
@@ -28,21 +39,20 @@ difficulty: "index"
|
||||
| 13 | Slopped | RSA small factors | medium | `GEMASTIK19{qu4ntum_c0mput3r_br0k3_rs4_y0u_sh0uld_us3_p4p3r_s34rch_mcp_sk1ll}` |
|
||||
| 14 | Slopped wave-2 | RSA paper search | hard | `GEMASTIK19{test_vector_of_listP_on_quant}` |
|
||||
|
||||
## Ringkasan Metode
|
||||
|
||||
### Ringkasan Metode
|
||||
| Ch | Metode | Tool |
|
||||
|----|--------|------|
|
||||
| 1 | Double Base64 | `base64 -d` ×2 |
|
||||
| 2 | ROT13 Caesar | `codecs.encode(s, "rot_13")` |
|
||||
| 3 | strings | `strings secret.bin` |
|
||||
| 4 | EXIF metadata | `strings photo.jpg` |
|
||||
| 5 | HTML comment | `curl \| grep '<!--'` |
|
||||
| 6 | Base64 cookie | `base64 -d` |
|
||||
| 1 | Double Base64 | base64 -d ×2 |
|
||||
| 2 | ROT13 Caesar | codecs.encode(s, "rot_13") |
|
||||
| 3 | strings | strings secret.bin |
|
||||
| 4 | EXIF metadata | strings photo.jpg |
|
||||
| 5 | HTML comment | curl \| grep '<!--' |
|
||||
| 6 | Base64 cookie | base64 -d |
|
||||
| 7 | ASCII codes | chr() decoding |
|
||||
| 8 | Single-byte XOR | XOR 0x42 |
|
||||
| 9 | Stack overflow | buffer > admin |
|
||||
| 10 | ret2win + align | ROP chain |
|
||||
| 11 | PNG strings | `strings kucing.png` |
|
||||
| 12 | Hex→Base64 | `bytes.fromhex` + `b64decode` |
|
||||
| 11 | PNG strings | strings kucing.png |
|
||||
| 12 | Hex→Base64 | bytes.fromhex + b64decode |
|
||||
| 13 | RSA small factors | trial division / sympy factorint |
|
||||
| 14 | RSA special integers | GCD with paper appendix primes |
|
||||
| 14 | RSA special integers | GCD with paper appendix primes |
|
||||
@@ -1,13 +1,20 @@
|
||||
---
|
||||
title: "Sixty Four — Double Base64"
|
||||
type: "writeup"
|
||||
section: "writeups"
|
||||
status: "published"
|
||||
author: "asep"
|
||||
tags: ["gemastik", "ctf", "warmup", "crypto"]
|
||||
path: "writeups/gemastik-2026-warmup/ch1-sixty-four.md"
|
||||
created_at: "2026-08-21T07:25:17.079Z"
|
||||
updated_at: "2026-08-21T07:25:17.079Z"
|
||||
event: "GEMASTIK 2026 Warmup"
|
||||
challenge: "Sixty Four"
|
||||
challenge: "Sixty Four — Double Base64"
|
||||
category: "crypto"
|
||||
points: 500
|
||||
difficulty: "easy"
|
||||
flag: "GEMASTIK19{b4s3_s1xty_f0ur_warm1ng_up}"
|
||||
---
|
||||
|
||||
# Sixty Four (500 pts) — Encoding
|
||||
|
||||
**File:** `chall.txt` → `UjBWTlFWTlVTVXN4T1h0aU5ITXpYM014ZUhSNVgyWXdkWEpmZDJGeWJURnVaMTkxY0gwPQ==`
|
||||
@@ -40,4 +47,4 @@ print(f"Flag: {flag}")
|
||||
|
||||
## Flag
|
||||
|
||||
`GEMASTIK19{b4s3_s1xty_f0ur_warm1ng_up}`
|
||||
`GEMASTIK19{b4s3_s1xty_f0ur_warm1ng_up}`
|
||||
@@ -1,13 +1,20 @@
|
||||
---
|
||||
title: "Call Me — ret2win"
|
||||
type: "writeup"
|
||||
section: "writeups"
|
||||
status: "published"
|
||||
author: "asep"
|
||||
tags: ["gemastik", "ctf", "warmup", "pwn"]
|
||||
path: "writeups/gemastik-2026-warmup/ch10-call-me.md"
|
||||
created_at: "2026-08-21T07:25:43.282Z"
|
||||
updated_at: "2026-08-21T07:25:43.282Z"
|
||||
event: "GEMASTIK 2026 Warmup"
|
||||
challenge: "Call Me"
|
||||
challenge: "Call Me — ret2win"
|
||||
category: "pwn"
|
||||
points: 500
|
||||
difficulty: "easy"
|
||||
flag: "GEMASTIK19{r3t2w1n_l0mpat_k3_win}"
|
||||
---
|
||||
|
||||
# Call Me (500 pts) — Pwn / ret2win
|
||||
|
||||
**Server:** `nc 15.232.89.109 9002`
|
||||
@@ -52,4 +59,4 @@ print(s.recv(4096).decode())
|
||||
|
||||
## Flag
|
||||
|
||||
`GEMASTIK19{r3t2w1n_l0mpat_k3_win}`
|
||||
`GEMASTIK19{r3t2w1n_l0mpat_k3_win}`
|
||||
@@ -1,13 +1,20 @@
|
||||
---
|
||||
title: "Behind the Picture — PNG Strings"
|
||||
type: "writeup"
|
||||
section: "writeups"
|
||||
status: "published"
|
||||
author: "asep"
|
||||
tags: ["gemastik", "ctf", "warmup", "forensics"]
|
||||
path: "writeups/gemastik-2026-warmup/ch11-behind-the-picture.md"
|
||||
created_at: "2026-08-21T07:25:45.672Z"
|
||||
updated_at: "2026-08-21T07:25:45.672Z"
|
||||
event: "GEMASTIK 2026 Warmup"
|
||||
challenge: "Behind the Picture"
|
||||
challenge: "Behind the Picture — PNG Strings"
|
||||
category: "forensics"
|
||||
points: 500
|
||||
difficulty: "easy"
|
||||
flag: "GEMASTIK19{c4t_g4mbar_ada_flag}"
|
||||
---
|
||||
|
||||
# Behind the Picture (500 pts) — Steganografi / PNG
|
||||
|
||||
**File:** `kucing.png` (cat image)
|
||||
@@ -21,4 +28,4 @@ strings kucing.png | grep GEMASTIK
|
||||
|
||||
## Flag
|
||||
|
||||
`GEMASTIK19{c4t_g4mbar_ada_flag}`
|
||||
`GEMASTIK19{c4t_g4mbar_ada_flag}`
|
||||
@@ -1,13 +1,20 @@
|
||||
---
|
||||
title: "Layers — Hex to Base64 Chain"
|
||||
type: "writeup"
|
||||
section: "writeups"
|
||||
status: "published"
|
||||
author: "asep"
|
||||
tags: ["gemastik", "ctf", "warmup", "crypto"]
|
||||
path: "writeups/gemastik-2026-warmup/ch12-layers.md"
|
||||
created_at: "2026-08-21T07:25:48.559Z"
|
||||
updated_at: "2026-08-21T07:25:48.559Z"
|
||||
event: "GEMASTIK 2026 Warmup"
|
||||
challenge: "Layers"
|
||||
challenge: "Layers — Hex to Base64 Chain"
|
||||
category: "crypto"
|
||||
points: 500
|
||||
difficulty: "easy"
|
||||
flag: "GEMASTIK19{h3x_lQlu_b4s3_ch41n}"
|
||||
---
|
||||
|
||||
# Layers (500 pts) — Encoding chain
|
||||
|
||||
**File:** `chall.txt` → `5230564e51564e55535573784f58746f4d33686662464673645639694e484d7a58324e6f4e44467566513d3d`
|
||||
@@ -31,4 +38,4 @@ print(flag)
|
||||
|
||||
## Flag
|
||||
|
||||
`GEMASTIK19{h3x_lQlu_b4s3_ch41n}`
|
||||
`GEMASTIK19{h3x_lQlu_b4s3_ch41n}`
|
||||
@@ -1,11 +1,19 @@
|
||||
---
|
||||
title: "Slopped — RSA Small Factors"
|
||||
event: "GEMASTIK 2026 Warmup"
|
||||
challenge: "Slopped"
|
||||
type: "writeup"
|
||||
section: "writeups"
|
||||
status: "published"
|
||||
author: "asep"
|
||||
tags: ["gemastik", "ctf", "warmup", "crypto"]
|
||||
path: "writeups/gemastik-2026-warmup/ch13-slopped.md"
|
||||
created_at: "2026-08-21T07:26:21.304Z"
|
||||
updated_at: "2026-08-21T07:26:21.304Z"
|
||||
category: "crypto"
|
||||
points: 500
|
||||
challenge: "Slopped"
|
||||
difficulty: "medium"
|
||||
event: "GEMASTIK 2026 Warmup"
|
||||
flag: "GEMASTIK19{qu4ntum_c0mput3r_br0k3_rs4_y0u_sh0uld_us3_p4p3r_s34rch_mcp_sk1ll}"
|
||||
points: 500
|
||||
---
|
||||
|
||||
# Slopped (500 pts) — Crypto / RSA small factors
|
||||
@@ -25,7 +33,8 @@ c = pow(flag, e, n)
|
||||
## Analisis
|
||||
|
||||
RSA dengan `e = 0x10001`, `n` 2048-bit, `c = pow(flag, e, n)`.
|
||||
`n` dibangun dari **faktor prima kecil** (sloppy primes — "my AI broke RSA with 1 billion qubits"). Faktorisasi temukan prima kecil lewat trial division, lalu `phi = prod(p_i - 1)`, `d = e⁻¹ mod phi`, dan `m = pow(c, d, n)`.
|
||||
`n` dibangun dari **faktor prima kecil** (sloppy primes — "my AI broke RSA with
|
||||
1 billion qubits"). Faktorisasi temukan prima kecil lewat trial division, lalu `phi = prod(p_i - 1)`, `d = e⁻¹ mod phi`, dan `m = pow(c, d, n)`.
|
||||
|
||||
## Solusi
|
||||
|
||||
@@ -37,7 +46,6 @@ e = 0x10001
|
||||
n = 0xdb... # 2048-bit modulus
|
||||
c = 0x...
|
||||
|
||||
# Trial division menemukan faktor kecil
|
||||
factors = factorint(n)
|
||||
print(factors)
|
||||
# {83: 1, 233: 1, 9679: 1, <big_prime>: 1}
|
||||
@@ -56,4 +64,4 @@ print(long_to_bytes(m))
|
||||
|
||||
`GEMASTIK19{qu4ntum_c0mput3r_br0k3_rs4_y0u_sh0uld_us3_p4p3r_s34rch_mcp_sk1ll}`
|
||||
|
||||
> Flag ini adalah petunjuk untuk ch14 ("you should use paper search").
|
||||
> Flag ini adalah petunjuk untuk ch14 (paper search).
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,13 +1,20 @@
|
||||
---
|
||||
title: "Julius — ROT13 Caesar Cipher"
|
||||
type: "writeup"
|
||||
section: "writeups"
|
||||
status: "published"
|
||||
author: "asep"
|
||||
tags: ["gemastik", "ctf", "warmup", "crypto"]
|
||||
path: "writeups/gemastik-2026-warmup/ch2-julius.md"
|
||||
created_at: "2026-08-21T07:25:20.120Z"
|
||||
updated_at: "2026-08-21T07:25:20.120Z"
|
||||
event: "GEMASTIK 2026 Warmup"
|
||||
challenge: "Julius"
|
||||
challenge: "Julius — ROT13 Caesar Cipher"
|
||||
category: "crypto"
|
||||
points: 500
|
||||
difficulty: "easy"
|
||||
flag: "GEMASTIK19{caesar_r0t_th1rt33n_klasik}"
|
||||
---
|
||||
|
||||
# Julius (500 pts) — Caesar / ROT13
|
||||
|
||||
**File:** `chall.txt` → `TRZNFGVX19{pnrfne_e0g_gu1eg33a_xynfvx}`
|
||||
@@ -26,4 +33,4 @@ print(f"Flag: {flag}")
|
||||
|
||||
## Flag
|
||||
|
||||
`GEMASTIK19{caesar_r0t_th1rt33n_klasik}`
|
||||
`GEMASTIK19{caesar_r0t_th1rt33n_klasik}`
|
||||
@@ -1,13 +1,20 @@
|
||||
---
|
||||
title: "Needle — Strings Binary"
|
||||
type: "writeup"
|
||||
section: "writeups"
|
||||
status: "published"
|
||||
author: "asep"
|
||||
tags: ["gemastik", "ctf", "warmup", "forensics"]
|
||||
path: "writeups/gemastik-2026-warmup/ch3-needle.md"
|
||||
created_at: "2026-08-21T07:25:23.053Z"
|
||||
updated_at: "2026-08-21T07:25:23.053Z"
|
||||
event: "GEMASTIK 2026 Warmup"
|
||||
challenge: "Needle"
|
||||
challenge: "Needle — Strings Binary"
|
||||
category: "forensics"
|
||||
points: 500
|
||||
difficulty: "easy"
|
||||
flag: "GEMASTIK19{str1ngs_c4n_f1nd_m3}"
|
||||
---
|
||||
|
||||
# Needle (500 pts) — Steganografi / Binary
|
||||
|
||||
**File:** `secret.bin` (748 bytes, binary)
|
||||
@@ -21,4 +28,4 @@ strings secret.bin | grep GEMASTIK
|
||||
|
||||
## Flag
|
||||
|
||||
`GEMASTIK19{str1ngs_c4n_f1nd_m3}`
|
||||
`GEMASTIK19{str1ngs_c4n_f1nd_m3}`
|
||||
@@ -1,13 +1,20 @@
|
||||
---
|
||||
title: "Say Cheese — EXIF Metadata"
|
||||
type: "writeup"
|
||||
section: "writeups"
|
||||
status: "published"
|
||||
author: "asep"
|
||||
tags: ["gemastik", "ctf", "warmup", "forensics"]
|
||||
path: "writeups/gemastik-2026-warmup/ch4-say-cheese.md"
|
||||
created_at: "2026-08-21T07:25:25.953Z"
|
||||
updated_at: "2026-08-21T07:25:25.953Z"
|
||||
event: "GEMASTIK 2026 Warmup"
|
||||
challenge: "Say Cheese"
|
||||
challenge: "Say Cheese — EXIF Metadata"
|
||||
category: "forensics"
|
||||
points: 500
|
||||
difficulty: "easy"
|
||||
flag: "GEMASTIK19{h1dd3n_1n_m3tadata_exif}"
|
||||
---
|
||||
|
||||
# Say Cheese (500 pts) — Steganografi / Metadata
|
||||
|
||||
**File:** `photo.jpg`
|
||||
@@ -21,4 +28,4 @@ strings photo.jpg | grep GEMASTIK
|
||||
|
||||
## Flag
|
||||
|
||||
`GEMASTIK19{h1dd3n_1n_m3tadata_exif}`
|
||||
`GEMASTIK19{h1dd3n_1n_m3tadata_exif}`
|
||||
@@ -1,13 +1,20 @@
|
||||
---
|
||||
title: "Nothing Here — Web Comment"
|
||||
type: "writeup"
|
||||
section: "writeups"
|
||||
status: "published"
|
||||
author: "asep"
|
||||
tags: ["gemastik", "ctf", "warmup", "web"]
|
||||
path: "writeups/gemastik-2026-warmup/ch5-nothing-here.md"
|
||||
created_at: "2026-08-21T07:25:28.880Z"
|
||||
updated_at: "2026-08-21T07:25:28.880Z"
|
||||
event: "GEMASTIK 2026 Warmup"
|
||||
challenge: "Nothing Here"
|
||||
challenge: "Nothing Here — Web Comment"
|
||||
category: "web"
|
||||
points: 500
|
||||
difficulty: "easy"
|
||||
flag: "GEMASTIK19{v13w_s0urc3_pahlawan}"
|
||||
---
|
||||
|
||||
# Nothing Here (500 pts) — Web
|
||||
|
||||
**URL:** `http://15.232.89.109:8001/`
|
||||
@@ -26,4 +33,4 @@ curl -s http://15.232.89.109:8001/ | grep -i 'GEMASTIK\|<!--'
|
||||
|
||||
## Flag
|
||||
|
||||
`GEMASTIK19{v13w_s0urc3_pahlawan}`
|
||||
`GEMASTIK19{v13w_s0urc3_pahlawan}`
|
||||
@@ -1,13 +1,20 @@
|
||||
---
|
||||
title: "Sweet Cookie — Base64 Cookie"
|
||||
type: "writeup"
|
||||
section: "writeups"
|
||||
status: "published"
|
||||
author: "asep"
|
||||
tags: ["gemastik", "ctf", "warmup", "web"]
|
||||
path: "writeups/gemastik-2026-warmup/ch6-sweet-cookie.md"
|
||||
created_at: "2026-08-21T07:25:31.627Z"
|
||||
updated_at: "2026-08-21T07:25:31.627Z"
|
||||
event: "GEMASTIK 2026 Warmup"
|
||||
challenge: "Sweet Cookie"
|
||||
challenge: "Sweet Cookie — Base64 Cookie"
|
||||
category: "web"
|
||||
points: 500
|
||||
difficulty: "easy"
|
||||
flag: "GEMASTIK19{c00k13_b4s3_d3c0d3}"
|
||||
---
|
||||
|
||||
# Sweet Cookie (500 pts) — Web
|
||||
|
||||
**URL:** `http://15.232.89.109:8002/`
|
||||
@@ -26,4 +33,4 @@ print(decoded)
|
||||
|
||||
## Flag
|
||||
|
||||
`GEMASTIK19{c00k13_b4s3_d3c0d3}`
|
||||
`GEMASTIK19{c00k13_b4s3_d3c0d3}`
|
||||
@@ -1,13 +1,20 @@
|
||||
---
|
||||
title: "Open Book — Python Source"
|
||||
type: "writeup"
|
||||
section: "writeups"
|
||||
status: "published"
|
||||
author: "asep"
|
||||
tags: ["gemastik", "ctf", "warmup", "misc"]
|
||||
path: "writeups/gemastik-2026-warmup/ch7-open-book.md"
|
||||
created_at: "2026-08-21T07:25:34.522Z"
|
||||
updated_at: "2026-08-21T07:25:34.522Z"
|
||||
event: "GEMASTIK 2026 Warmup"
|
||||
challenge: "Open Book"
|
||||
challenge: "Open Book — Python Source"
|
||||
category: "misc"
|
||||
points: 500
|
||||
difficulty: "easy"
|
||||
flag: "GEMASTIK19{pyth0n_s0urc3_t3rbuka}"
|
||||
---
|
||||
|
||||
# Open Book (500 pts) — Misc / Source
|
||||
|
||||
**File:** `chall.py`
|
||||
@@ -25,4 +32,4 @@ print(flag)
|
||||
|
||||
## Flag
|
||||
|
||||
`GEMASTIK19{pyth0n_s0urc3_t3rbuka}`
|
||||
`GEMASTIK19{pyth0n_s0urc3_t3rbuka}`
|
||||
@@ -1,13 +1,20 @@
|
||||
---
|
||||
title: "Back and Forth — XOR"
|
||||
type: "writeup"
|
||||
section: "writeups"
|
||||
status: "published"
|
||||
author: "asep"
|
||||
tags: ["gemastik", "ctf", "warmup", "reverse"]
|
||||
path: "writeups/gemastik-2026-warmup/ch8-back-and-forth.md"
|
||||
created_at: "2026-08-21T07:25:37.394Z"
|
||||
updated_at: "2026-08-21T07:25:37.394Z"
|
||||
event: "GEMASTIK 2026 Warmup"
|
||||
challenge: "Back and Forth"
|
||||
challenge: "Back and Forth — XOR"
|
||||
category: "reverse"
|
||||
points: 500
|
||||
difficulty: "easy"
|
||||
flag: "GEMASTIK19{x0r_it_back_4gain}"
|
||||
---
|
||||
|
||||
# Back and Forth (500 pts) — Reversing / XOR
|
||||
|
||||
**File:** `chall.c`
|
||||
@@ -26,4 +33,4 @@ print(flag)
|
||||
|
||||
## Flag
|
||||
|
||||
`GEMASTIK19{x0r_it_back_4gain}`
|
||||
`GEMASTIK19{x0r_it_back_4gain}`
|
||||
@@ -1,13 +1,20 @@
|
||||
---
|
||||
title: "Are You Admin? — Buffer Overflow"
|
||||
type: "writeup"
|
||||
section: "writeups"
|
||||
status: "published"
|
||||
author: "asep"
|
||||
tags: ["gemastik", "ctf", "warmup", "pwn"]
|
||||
path: "writeups/gemastik-2026-warmup/ch9-are-you-admin.md"
|
||||
created_at: "2026-08-21T07:25:39.978Z"
|
||||
updated_at: "2026-08-21T07:25:39.978Z"
|
||||
event: "GEMASTIK 2026 Warmup"
|
||||
challenge: "Are You Admin?"
|
||||
challenge: "Are You Admin? — Buffer Overflow"
|
||||
category: "pwn"
|
||||
points: 500
|
||||
difficulty: "easy"
|
||||
flag: "GEMASTIK19{0v3rfl0w_ubah_var}"
|
||||
---
|
||||
|
||||
# Are You Admin? (500 pts) — Pwn / Buffer Overflow
|
||||
|
||||
**Server:** `nc 15.232.89.109 9001`
|
||||
@@ -43,4 +50,4 @@ print(s.recv(4096).decode())
|
||||
|
||||
## Flag
|
||||
|
||||
`GEMASTIK19{0v3rfl0w_ubah_var}`
|
||||
`GEMASTIK19{0v3rfl0w_ubah_var}`
|
||||
Reference in New Issue
Block a user