เตรียมตัวลง CTF ครั้งแรก · WATKORN.ME
บล็อก

เตรียมตัวลง CTF ครั้งแรก

ชุดเริ่มต้นแบบไม่อ้อมค้อมสำหรับ Capture The Flag ครั้งแรก: เลือกสายที่ถนัด เซ็ตเครื่องมือ ซ้อมมือ แล้วเอาตัวรอดให้ได้ตลอดสุดสัปดาห์

อ่าน 5 นาที#ctf#beginner

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

นี่คือไกด์ที่ผมอยากให้มีคนยื่นให้ก่อนลงแข่งครั้งแรก

CTFtime เว็บสำหรับหา CTF ที่กำลังจะจัด

ก่อนอื่น 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 คือคอมโบที่ดีมาก

หลังแข่งจบ (ส่วนที่ทุกคนชอบข้าม)

การเรียนรู้จริงๆ เกิดขึ้นตรงนี้:

  1. อ่าน writeup ของทีมอื่น สำหรับข้อที่เราแก้ไม่ได้ CTFtime จะรวมลิงก์ไว้ในหน้าของแต่ละงาน
  2. เขียน writeup ของตัวเอง ต่อให้เป็นข้อง่ายก็เขียน การอธิบายวิธีแก้คือสิ่งที่ทำให้มันติดหัว (บนเว็บนี้ใช้คำสั่ง npm run new-post -- --writeup "Challenge name")
  3. เปลี่ยนทริกที่ใช้ซ้ำๆ ให้เป็น cheat sheet ทั้ง payload, one-liner และ snippet Python

เช็กลิสต์สั้นๆ

อยากวอร์มอัพตอนนี้เลย? terminal ในหน้าแรก มี flag ซ่อนอยู่ทั่วเว็บนี้ 8 อัน เช็กความคืบหน้าได้ที่หน้าความสำเร็จ ขอให้โชคดี และสนุกกับการรื้อของให้พังนะ