لقد قمنا بتغطية حقن الأوامر وتنفيذها في Node JS. يتضمن السيناريو مربع إدخال يقوم بتمرير إدخال المستخدم كأرقام إلى وظيفة الآلة الحاسبة التي تستخدم دالة EVAL() لحساب مخرجات العملية الحسابية وإرجاعها إلى المستخدم. لا تنفذ وظيفة EVAL() مع الآلة الحاسبة أي نوع من التحقق من صحة الإدخال مما يسمح لنا باستخدام واستدعاء أساليب Node JS مثل readdirsync() & readfilesync() لقراءة الملفات الحساسة. كان هذا جزءًا من HackTheBox JSCalc تحدي الويب.
الدورة العملية الكاملة لاختبار اختراق تطبيقات الويب
أبرز مقاطع الفيديو
لمعرفة المزيد عن النشطة Node.js العملية، استخدم عملية الكائن العالمية. Require() ليست ضرورية لأنها عالمية. فهو يوفر عددًا كبيرًا من الميزات والتقنيات المفيدة للحصول على مزيد من التحكم في تفاعلات النظام.
على سبيل المثال، يتم إرجاع دليل العمل الحالي لعملية Node.js بواسطة عملية.cwd(). لقد استخدمت برنامجنا لاختبار هذا، وحصلت على النتائج. لم يتم تفعيل التجشؤ. كنت بحاجة فقط إلى استخدام وحدة تحكم المتصفح لفحص الحمولة ورؤية الإجابة.
كانت قراءة البيانات من ملف flag.txt الموجود على الخادم هو الهدف من التحدي. يمكن أن تساعد وحدة Node.js fs، والتي يجب أن تكون مطلوبة مع require('fs')، في القيام بذلك. هناك إصدارات متزامنة وغير متزامنة من كل طريقة. أصبح العمل مع نظام الملفات ممكنًا (الوصول إلى الملفات وإدارتها وتعديلها، وما إلى ذلك). ويشمل مجموعة واسعة من التقنيات والسمات. يمكن إدراج محتويات الدليل باستخدام طريقة readdir() أو readdirSync() (الإصدار المتزامن) للفئة fs، والتي تعمل بشكل مشابه لأوامر ls أو dir في Linux وMicrosoft Windows، على التوالي.
استخدمنا الحمولة أدناه لحل التحدي
يتطلب("خس").readdirSync('/برنامج').إلى سلسلة()
يتطلب('خ.س').readdirSync(‘../’).إلى سلسلة()
يتطلب("خس").readFileSync("/علم.txt").إلى سلسلة()