เตรียมตัวลง CTF ครั้งแรก
ชุดเริ่มต้นแบบไม่อ้อมค้อมสำหรับ Capture The Flag ครั้งแรก: เลือกสายที่ถนัด เซ็ตเครื่องมือ ซ้อมมือ แล้วเอาตัวรอดให้ได้ตลอดสุดสัปดาห์
การแข่ง Capture The Flag (CTF) คือวิธีเรียน security ที่สนุกที่สุดแล้ว ผู้จัดจะซ่อนข้อความหน้าตาแบบ flag{...} ไว้หลังเว็บแอปพังๆ ไบนารีแปลกๆ หรือไฟล์ PCAP ที่ดูมีพิรุธ หน้าที่ของเราคือรื้อมันให้พัง (แบบถูกกฎหมาย) จนกว่า flag จะหล่นออกมา ช่วงแรกจะแพ้บ่อยมาก และนั่นแหละคือประเด็น
นี่คือไกด์ที่ผมอยากให้มีคนยื่นให้ก่อนลงแข่งครั้งแรก

ก่อนอื่น CTF นี้เป็นแบบไหน?
- Jeopardy กระดานโจทย์แบ่งตามหมวดและคะแนน จะแก้ข้อไหนก่อนก็ได้ CTF ราว 90% เป็นแบบนี้ และเป็นจุดที่ควรเริ่ม
- Attack–Defense ทุกทีมได้ service ที่มีช่องโหว่ชุดเดียวกัน ต้อง patch ของตัวเองแล้วไปเจาะของทีมอื่น วุ่นวายแต่มันส์มาก ยังไม่ใช่ของสัปดาห์แรก
- King of the Hill ยึดเครื่องให้ได้แล้วรักษาไว้ให้นานที่สุด ลองเล่นใน TryHackMe ได้เมื่อเริ่มคล่องแล้ว
หางานแข่งได้ที่ CTFtime มองหางานที่ติดป้าย beginner หรือมีค่า "weight" ต่ำๆ
เลือกสายก่อน (แล้วค่อยขยาย)
ไม่มีใครเก่งทุกอย่าง เริ่มจากสักหนึ่งหรือสองหมวด แล้วค่อยขยายออกไป
| หมวด | คืออะไร | ควรเรียนอะไรก่อน |
|---|---|---|
| web | เจาะเว็บแอป | HTTP, cookie, SQLi, XSS, SSTI, IDOR, อ่าน JS |
| pwn | เจาะไบนารีจนได้ shell | ภาษา C, โครงสร้าง stack, buffer overflow, ROP, checksec |
| rev | แกะว่าโปรแกรมทำอะไร | พื้นฐาน x86-64, Ghidra, strace/ltrace, การ patch |
| crypto | เจาะการเข้ารหัสที่ทำพลาด | XOR, จุดพลาดของ RSA, padding, ความต่างระหว่าง encoding กับ encryption |
| forensics | ขุดไฟล์ หน่วยความจำ และทราฟฟิก | รูปแบบไฟล์, Wireshark, Volatility, steganography |
| misc / OSINT | ที่เหลือทั้งหมด | ทักษะ Linux, เขียนสคริปต์, ทักษะการค้นหา |
ถ้าไม่รู้จะเริ่มตรงไหน: web หรือ forensics ได้ผลเร็ว ไม่ต้องรู้ assembly ก่อน
เซ็ตเครื่องมือ
ใช้ Linux VM (Kali, Parrot หรือ Ubuntu ธรรมดา) จะรวมทุกอย่างไว้ที่เดียวและไม่ทำให้เครื่องหลักรก เครื่องมือหลัก:
- ใช้ทุกหมวด: Python 3, CyberChef,
file,strings, text editor ดีๆ สักตัว - Web: Burp Suite Community, DevTools ของเบราว์เซอร์,
ffuf,curl - Pwn / rev:
pwntools, GDB + pwndbg หรือ GEF, Ghidra,checksec - Forensics: Wireshark,
binwalk,exiftool, Volatility 3 - Crypto / แคร็กรหัส:
hashcat, John the Ripper, SageMath หรือ Python เปล่าๆ
sudo apt install -y python3-pip gdb binwalk exiftool wireshark john hashcat
pip install pwntools
git clone https://github.com/pwndbg/pwndbg && cd pwndbg && ./setup.sh
ซ้อมก่อนถึงวันแข่ง
- picoCTF: ที่ที่ดีที่สุดสำหรับเริ่มต้น โจทย์มีตั้งแต่ง่ายๆ ไปจนถึงยากของจริง
- OverTheWire: Bandit: พื้นฐาน Linux ทีละด่าน
- TryHackMe: ห้องแบบมีไกด์และเส้นทางการเรียน
- Hack The Box: เครื่องที่สมจริง และมีส่วน "Challenges" สไตล์ CTF
- pwn.college: คอร์สมหาวิทยาลัยฟรีสำหรับสาย pwn และ rev
- CryptoHack: เรียน crypto ผ่านปริศนา
ทำทีละนิดทุกวันดีกว่าอัดทีเดียวทั้งสุดสัปดาห์ แก้โจทย์ง่ายได้สิบข้อ ดีกว่าโจทย์ยากข้อเดียวที่ถอดใจกลางทาง
10 นาทีแรกของทุกโจทย์
ก่อนจะทำอะไรเท่ๆ ให้รันของน่าเบื่อก่อน มันแก้โจทย์ได้มากกว่าที่คิด
file chall # ตกลงไฟล์นี้คืออะไรกันแน่?
strings -n 8 chall | less # ข้อความที่อ่านออก บางทีก็คือ flag เลย
exiftool image.png # metadata
binwalk -e firmware.bin # ไฟล์ที่ซ่อนอยู่ในไฟล์
checksec --file=./chall # ไบนารีนี้เปิดระบบป้องกันอะไรไว้บ้าง?
โจทย์ web: อ่าน source ของหน้า เปิด DevTools ดู /robots.txt เช็ก cookie และส่องทุก request ใน Burp
ระหว่างแข่ง
- อ่านโจทย์ทุกข้อก่อน เรียงตามจำนวนคนที่แก้ได้ ข้อที่คนแก้ได้เยอะที่สุดมักจะง่ายที่สุด
- จับเวลา ถ้า 45–60 นาทีแล้วยังไม่คืบ ให้เปลี่ยนข้อแล้วค่อยกลับมาทีหลัง
- จดทุกอย่าง ลองอะไรไปแล้ว อะไรไม่ได้ผล และทุกความแปลกที่สังเกตเห็น ตัวเราในอนาคตจะขอบคุณ
- อ่านกติกา ห้ามโจมตีโครงสร้างระบบของงาน ห้าม brute-force การส่ง flag ห้ามแชร์ flag
- นอนกับกินข้าว จริงจังนะ สมองที่ล้าหาบั๊ก off-by-one ไม่เจอหรอก
เล่นเป็นทีม
- หนึ่ง channel หรือ thread ต่อหนึ่งโจทย์ โพสต์ว่าลองอะไรไปแล้วบ้าง
- "จอง" โจทย์ก่อนลงมือ จะได้ไม่มีสองคนทำเรื่องเดียวกันเงียบๆ
- รวมโน้ตไว้ที่เดียว (Obsidian, HedgeDoc หรือ Notion) อย่าให้อะไรอยู่แค่ในหัวใครคนเดียว
- จับคู่กัน: คนเก่ง rev คู่กับคนเก่ง pwn คือคอมโบที่ดีมาก
หลังแข่งจบ (ส่วนที่ทุกคนชอบข้าม)
การเรียนรู้จริงๆ เกิดขึ้นตรงนี้:
- อ่าน writeup ของทีมอื่น สำหรับข้อที่เราแก้ไม่ได้ CTFtime จะรวมลิงก์ไว้ในหน้าของแต่ละงาน
- เขียน writeup ของตัวเอง ต่อให้เป็นข้อง่ายก็เขียน การอธิบายวิธีแก้คือสิ่งที่ทำให้มันติดหัว (บนเว็บนี้ใช้คำสั่ง
npm run new-post -- --writeup "Challenge name") - เปลี่ยนทริกที่ใช้ซ้ำๆ ให้เป็น cheat sheet ทั้ง payload, one-liner และ snippet Python
เช็กลิสต์สั้นๆ
อยากวอร์มอัพตอนนี้เลย? terminal ในหน้าแรก มี flag ซ่อนอยู่ทั่วเว็บนี้ 8 อัน เช็กความคืบหน้าได้ที่หน้าความสำเร็จ ขอให้โชคดี และสนุกกับการรื้อของให้พังนะ