Luyện để đi thi CTF, không chỉ học lý thuyết
Mục tiêu là thi được bằng mental model + + tool workflow, không học thuộc payload hay command.
9 track · học tới mức tự làm lại được
Tick khi ông có thể giải thích và làm lại kỹ năng mà không cần nhìn đáp án. Đây là checklist tự đánh giá, không phải chứng chỉ.
Web
Core → AdvancedTool chain + drill
Browser DevTools → → Toolkit: //Diff
Drill đầu tiên15 phút: lấy 3 request synthetic, ghi FACT → HYPOTHESIS → TEST → RESULT và xác định request nào cần negative test.
Crypto
Beginner → CTF MathTool chain + drill
→ → Toolkit: /Mod Math/Base converter
Drill đầu tiên20 phút: giải một artifact 3 lớp representation, ghi mỗi lớp và lý do chọn phép biến đổi.
Tool chain + drill
file// → / → Toolkit: File/PNG/
Drill đầu tiên20 phút: nhận 4 artifact synthetic, chọn thứ tự inspect ít phá hủy nhất và giải thích vì sao.
Reverse
Beginner → BinaryTool chain + drill
→ + / → Toolkit: /Endian/
Drill đầu tiên25 phút: từ + synthetic, lập 3 giả thuyết về luồng chương trình trước khi xem decompiler.
Tool chain + drill
+ / → → Toolkit: Endian/Base/
Drill đầu tiên25 phút: đọc crash log synthetic, xác định architecture, liên quan và còn thiếu để kết luận exploitability.
Network
Core → PCAPTool chain + drill
→ → Toolkit: //
Drill đầu tiên20 phút: từ 12 packet text synthetic, dựng timeline → → và ghi filter sẽ dùng trong .
Linux
Core → Service TriageTool chain + drill
Linux → jq / grep / find → Terminal Lab của khóa học
Drill đầu tiên20 phút: hoàn thành một mission terminal không xem hint; sau đó giải thích state nào đã thay đổi ở từng lệnh.
Tool chain + drill
Browser search → → Toolkit: /file helpers
Drill đầu tiên15 phút: từ 6 clue synthetic, tách fact, inference, unknown và cần kiểm chứng tiếp.
Blue Team /
Triage → CompetitionTool chain + drill
Simulator → / → jq/grep + report notes
Drill đầu tiên20 phút: chơi một round simulator, sau đó viết postmortem 5 dòng: signal, decision, change, verify, lesson.
Thi thử theo thời gian
Bắt đầu bằng Sprint 30 rồi mới lên No-Hint và Competition Simulation. Mục tiêu là reasoning ổn định khi bị giới hạn thời gian.
Sprint 30 phút
Target: 3 bài Easy + 1 Medium
- Không mở hint trong 15 phút đầu.
- Mỗi bài có tối đa 2 hướng thử trước khi reassess.
- Ghi tool đã dùng và output quyết định.
Mixed 60 phút
Target: 4 category khác nhau
- Không chọn 2 bài liên tiếp cùng category.
- 15 phút/bài trước khi chuyển.
- Một bài phải giải chỉ bằng artifact + built-in toolkit.
No-Hint 90 phút
Target: Medium/Hard
- Không mở hint.
- Phải ghi ít nhất 2 giả thuyết trước khi dùng tool nặng.
- Sau mỗi 30 phút tự kiểm tra progress và đổi chiến lược nếu không có mới.
Competition Simulation 120 phút
Target: CTF + Defense
- Chia 60 phút , 30 phút , 30 phút report/review.
- Không dùng target Internet.
- Giữ cá nhân: points, thời gian, hint, lỗi tư duy.
Lịch luyện 1 tuần
2 buổi nền tảng/tool fluency
2 buổi challenge theo category
1 buổi mixed timed run
1 buổi review + làm lại bài từng sai
1 buổi nghỉ hoặc đọc tài liệu chính thức
Biết lúc nào dùng tool nào
Không cần cài mọi thứ trong ngày đầu. Học đúng tool theo track đang luyện và đạt tiêu chí “ready” trước khi chuyển sang tool khác.
Khi dùng: Khi artifact có nhiều lớp encoding, byte transform, compression, hoặc dữ liệu cần recipe nhanh.
Drill đầu: Tạo recipe From → Gunzip/Decode Text trên dữ liệu lab và nhìn intermediate output sau từng operation.
Ready khi: Ông tự chọn operation theo dấu hiệu dữ liệu, không kéo recipe ngẫu nhiên cho tới khi “ra chữ”.
Khi dùng: Khi challenge có , /// flow hoặc cần reconstruct conversation.
Drill đầu: Mở lab, dùng display filter theo protocol rồi Follow Stream; ghi packet nào là chính.
Ready khi: Ông phân biệt capture/display filter và tự dựng timeline flow mà không click mò.
Khi dùng: Khi lớn, cần filter/field extraction nhanh trong terminal hoặc lặp lại thao tác có script.
Drill đầu: Trên lab, trích một vài field / bằng display filter và so output với GUI.
Ready khi: Ông biết khi nào GUI nhanh hơn và khi nào CLI giúp tiết kiệm thời gian.
Khi dùng: Khi cần quan sát, lưu và lặp request trong lab hoặc target có ủy quyền.
Drill đầu: Proxy app local → gửi một request sang → đổi đúng một field → so response/state.
Ready khi: Ông dùng Proxy/ như kính quan sát, không phụ thuộc scanner để nói hộ kết luận.
Khi dùng: Trong lab/ hoặc hạ tầng được phép khi cần host// discovery có rõ.
Drill đầu: Đọc output mô phỏng trước, sau đó chỉ chạy trên lab riêng để phân biệt open/closed/filtered.
Ready khi: Ông hiểu open không đồng nghĩa vulnerability và luôn ghi /target.
Khi dùng: Khi cần disassembly/decompiler, , xref, function graph và data-flow analysis.
Drill đầu: Import challenge local, xác định architecture, main/function quan trọng, và 2 xref.
Ready khi: Ông kiểm chứng decompiler bằng /xref thay vì tin pseudo-code tuyệt đối.
+ /
Khi dùng: Khi cần inspect , , breakpoint, crash và execution state của local.
Drill đầu: Break tại main của challenge local, step vài instruction, xem / và đối chiếu /.
Ready khi: Ông giải thích được mỗi breakpoint đang trả lời câu hỏi gì.
Khi dùng: Khi cần pack/unpack, I/O, hoặc script interaction cho challenge local.
Drill đầu: Viết script kết nối challenge local, gửi input, đọc output và dùng p32/p64 đúng architecture.
Ready khi: Script tái hiện ổn định và ông hiểu từng byte gửi/nhận, không copy exploit mù.
file / /
Khi dùng: Luôn hữu ích ở bước đầu của artifact file/.
Drill đầu: Trên 5 file lab đổi extension, so file type, và 64 byte đầu.
Ready khi: Ông biết lấy clue nhanh trước khi mở tool nặng.
Khi dùng: Khi ảnh/tài liệu có thời gian, author, GPS hoặc field vendor-specific trong challenge hợp pháp.
Drill đầu: Đọc từ ảnh lab và tách field factual khỏi suy luận về provenance.
Ready khi: Ông không coi là bằng chứng bất biến; biết nó có thể bị sửa.
Khi dùng: Khi file chứa embedded data, firmware hoặc signature lồng nhau.
Drill đầu: Scan một artifact lab có dữ liệu nhúng và ghi offset/signature trước khi extract.
Ready khi: Ông kiểm tra signature/offset và không tin extraction tự động 100%.
Khi dùng: Khi cung cấp memory image và cần , module, handle hoặc artifact trong .
Drill đầu: Dùng image lab đã biết ground truth để liệt kê rồi xác minh một artifact bằng plugin phù hợp.
Ready khi: Ông chọn plugin theo câu hỏi điều tra và ghi rõ giới hạn của memory .
/
Khi dùng: Khi challenge Android cần đọc manifest, resources, bytecode/decompiled Java/Kotlin hoặc cấu trúc .
Drill đầu: Mở lab, xem manifest, permission và tìm một string/function challenge.
Ready khi: Ông biết decompiled code có thể sai và biết đối chiếu resource/ khi cần.
jq
Khi dùng: Khi lớn, artifact hoặc log cần lọc field nhanh.
Drill đầu: Lọc object theo status/role trong dataset lab, sau đó group/count một field.
Ready khi: Ông biến dài thành câu trả lời nhỏ bằng filter rõ ràng.
Khi dùng: Khi cần mô tả pattern artifact/malware sample trong lab bằng rule có + condition.
Drill đầu: Viết rule cho sample synthetic với 2 string và một condition, test positive + negative sample.
Ready khi: Rule không chỉ match một /file duy nhất và có test chống .
Git
Khi dùng: Khi quản lý note, script, và diff thay đổi trong quá trình luyện.
Drill đầu: Tạo repo practice, commit script sạch và dùng diff để review thay đổi.
Ready khi: Ông không commit credential/ nhạy cảm và có thể quay lại phiên bản làm được.
Khi dùng: Khi cần parse artifact, transform byte, automate repetitive math hoặc xử lý text.
Drill đầu: Viết script 20–40 dòng đọc file lab, parse dữ liệu và in đúng output cần thiết.
Ready khi: Ông tự viết script nhỏ từ đầu, biết bytes/str/int và không phụ thuộc copy-paste.
Khi dùng: Khi cần chạy challenge/ local cô lập, tái hiện version hoặc giữ môi trường sạch.
Drill đầu: Chạy một image lab vô hại, map localhost và quan sát log/ lifecycle.
Ready khi: Ông hiểu không phải VM tuyệt đối và chỉ expose cần thiết.
Mọi drill tích hợp trong web dùng dữ liệu synthetic/local. Tool bên ngoài chỉ dùng với CTF, localhost, lab hoặc hệ thống có ủy quyền và scope rõ ràng.