Fools Mate, Revenge | STY IT Labs
STY IT Labs · TryHackMe · تكملة Fools Mate

Fools Mate, Revenge

“شفت إن دفاعاتي الأمامية متقدرش عليك، أحسنت يا تلميذي!” — الآلة رقّعت الـ bypass اللي كسرته في اللاب الأول، والتحقق من النقلات بقى فعلياً في السيرفر. بس السيرفر نفسه فيه ثغرة تانية خالص.

Medium 60 دقيقة سؤال واحد Linux

عن اللاب

دي تكملة مباشرة لـ Fools Mate — نفس فكرة كش الملك في نقلة واحدة، بس الآلة اتعلمت من غلطتها. الحيلة القديمة (تجاوز فحص JavaScript في المتصفح) ماعادتش تنفع، لأن التحقق من النقلة بقى بيحصل فعلياً على السيرفر. الويب أب شغال على port 3000 (Node.js نموذجي)، والثغرة الجديدة مش في منطق الشطرنج نفسه — هي في إزاي السيرفر بيتعامل مع الـ JSON اللي بتبعته له.

إيه هي Prototype Pollution؟
في JavaScript، كل الـ objects بترث خصائص من Object.prototype. لو تطبيق بيدمج (merge) بيانات جاية منك مع object داخلي من غير ما يستثني مفاتيح زي __proto__ أو constructor.prototype، تقدر “تلوّث” الـ prototype المشترك نفسه — يعني تضيف أو تعدّل خاصية بتأثر على كل الـ objects في التطبيق، حتى اللي اتعمل قبل هجومك.

مسار الحل

1
Recon
فحص البورتات — هتلاقي الويب أب شغال على port 3000
nmap -sC -sV IP
2
جرّب الحيلة القديمة — هتتفاجئ
حاول نفس أسلوب اللاب الأول (تعديل preMoveCheck أو إرسال النقلة مباشرة). هتلاقي السيرفر بيرفضها فعلياً — التحقق بقى حقيقي مش مجرد واجهة
Server-side validation active
3
دوّر على endpoints بتدمج JSON
افحص أي endpoint بياخد بيانات إعدادات أو حالة لاعب ويدمجها في object داخلي — دي المنطقة المرشحة للثغرة
Burp Suite / DevTools Network
4
جرّب تلويث الـ Prototype
ابعت جسم JSON فيه مفتاح __proto__ بيحاول يضيف أو يغيّر خاصية ممكن منطق التحقق من النقلات يثق فيها
{“__proto__”:{“…”:”…”}}
5
فعّل السلوك الملوّث
بعد التلويث، أي object جديد بيتعمل هيرث الخاصية اللي زرعتها — استخدم ده عشان تخلّي السيرفر يقبل الفوز، واحصل على الـ flag
flag

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

Prototype Pollution JavaScript Object Internals API Fuzzing Business Logic Bypass Server-Side vs Client-Side Trust