السلام عليكم ورحمة الله وبركاتة
كنت مشاركا في الفريق المنظم لمسابقة CTF(Capture The Flag) في مؤتمر Cairo Security Camp لهذا العام
وقمت بمشاركة التحدي Online حتي يتمكن الجميع من المشاركة .. واليوم هنا ان شاء الله سأقوم بشرح التحدي وطريقة الحل.
فكرة المسابقة[فكرة خيالية]:
وكالة المخابرات الروسية أعلنت عن مسابقة لتوظيف الهكرز للعمل لديها
فقامت بعمل موقع إلكتروني وطلبت من الهكرز تخطي ال Basic Authentication الخاصة بلوحة تحكم الموقع .. اذا إستطعت ان تجد لوحة التحكم وتتخطي ال Basic Authentication فستقابلك لوحة تحكم اخري مصرح بدخولها فقط لمن هم في الشبكة الداخلية للوكالة ولا يسمح لمن هم خارج الوكالة بالدخول إلي لوحة التحكم هذه.
فكيف ستتخطي كل هذه الحواجز إلي أن تصل إلي الشفرة المطلوبة؟
المطلوب بالترتيب:
١- أوجد مسار لوحة تحكم مدير الموقع (لن ينفعك التخمين)
٢- قم بتخطي ال basic authentication الموجوده عليها
٣- اذا استطعت عبور الاولي فستجد لوحة تحكم اخري وعليها أيضا basic authentication وغير مصرح بدخولها إلا لمن هم علي نفس الشبكة الداخلية للوكالة .. اذا إستطعت تخطيها فستحصل مباشرة علي الKey
نبدأ بالحل ..
عند دخولك الي صفحة التحدي ستجد شكل الصفحه كالآتي:
الآن سنستخدم ال Exif لتحليل الصورة المدرجة داخل الموقع لنري ما هي البيانات التي تحتويها هذه الصورة؟
EXIF
. وهو اختصار لــ Exchangeable Image File حيث يمكننا من قراءة ال Metadata والبيانات الاخري التي تحتويها الصور مثل متي وأين وكيف إلتقطت الصورة وبيانات اخري.
هناك موقع يسمح لك بعمل ذلك بدون تنزيل أي أدوات .. علي الرابط التالي:
http://regex.info/exif.cgi
الآن ننسخ رابط الصورة ونضعه بالموقع المذكور وسنجد البيانات التالية:
هل تري؟ داخل ال “User Comment:” يوجد كود طويل مشفر بال Hex لنحاول أن نفك هذا الكود .. وهذا كان ال string الذي خرج لنا عند محاولة فك الكود:
Spasiba moy drog, Kake bofera check below dir s3cr3tDIR/
اذا لوحة التحكم هي علي الرابط التالي كما هو واضح بالأعلي:
s3cr3tDIR/
عند محاولة الدخول إلي تلك اللوحة ظهرت لنا Basic Authentication تطلب منا إدخال username & password .. فكيف يمكننا تخطيها؟
حسنا .. لنفهم كيف يتم عمل Basic Authentication بال htaccess فتعالو نبحث في جوجل عن كيفية عمل ذلك (المقصد من البحث هو ان تري عدة أمثلة) .. وقد وجدنا الكود التالي:
AuthUserFile /usr/local/htpasswd/.htpasswd
AuthGroupFile /dev/null
AuthName “Please enter password”
AuthType Basic
< Limit GET POST>
require valid-user
< /Limit>
ما نفهمه من الكود بالأعلي هو ان ملف ال htaccess سيقوم بحماية المجلد في حالة ما اذا قام المستخدم بفتح المجلد من خلال GET or POST request! وهي طريقه غير آمنة في حماية المجلدات لأن المستخدم إستخدم طريقة Limit لتحديد من يطلبون الموقع بواسطة طلبات من نوع GET أو POST
حيث انه اذا قام المستخدم بإرسال طلب للصفحه باي طريقه غير GET or POST فانه سيتخطي هذه الحماية!!
وهي تقنية معروفة بإسم HTTP Verb Tampering
إضغط هنا لتشاهد فيديو يشرح مزيد من المعلومات حولها.. والآن لنكمل.
الآن نقوم بزيارة الصفحة ونقوم بتعديل طريقة طلب الصفحه من GET الي اي شئ .. مثلا LOL:
كما ترون بالأعلي قمت بتعديل طريقة ال Request لتصبح LOL بدلا من GET وخرج لي المحتوي التالي:
ال response تقول بأن الصفحه غير موجودة! 404 Page not found
لكن هل لفت انتباهك ذلك الجزأ الذي في أسفل الصفحة باللون الأخضر وقد تم عمل تعليق(comment) له?
ممتاز .. إذا وصلنا للوحة الأدمن الأخيرة علي المسار التالي: sup3rFlag/ .. وعليها أيضا Basic Authentication! .. ولكن لحظة .. كيف سيمكننا تخطيها في حين أنها مسموح دخولها فقط لمن هم علي نفس الشبكة الداخلية للوكالة؟
كما هو واضح من الوصف المرفق مع التحدي أن لوحة التحكم الأخيرة موجودة علي الشبكة الداخلية للوكالة .. في الوضع الطبيعي إذا كنت تستخدم وندوز وقمت بتطبيق الأمر ipconfig أو علي لينوكس وقمت بتطبيق الأمر ifconfig فسيظهر لك ال IP الخاص بك علي شبكتك المحلية .. ولنفترض أنه 192.168.1.233 إذا فلو أنك علي الشبكة الداخلية للوكالة فإن الآيبي الخاص بلوحة التحكم سيكون داخل نفس النطاق .. يعني
192.168.1.2
رائع .. إذا سنقوم بتطبيق نفس السيناريو هنا علي التحديث اللذي لدينا .. كيف سيمكننا عمل Request لموقع داخل الشبكة الخاصة بموقع الوكالة؟!
الأمر هنا يعتمد علي نوع من الثغرات يسمي Host Header Attack
لن اطيل في الشرح عنه هنا لأني سأكتب عنه موضوع مفصل ان شاء الله .. لكن سأذكر هنا أن من ضمن إستغلالات هذا النوع من الثغرات هو إمكاينة طلب موقع علي الشبكة المحلية/الداخلية للموقع الأصلي
يعني مثلا لو أن الموقع site.com موجود علي سرفر ما .. وال IP الداخلي لهذا الموقع هو 192.168.1.155
وهذا الموقع مصاب بثغرة Host Header Attack فإنني يمكنني طلب الموقع الموجود علي الآيبي 192.168.1.154 لأنه علي نفس شبكة الموقع المصاب.
الطريقة ببساطة هي عمل طلب للموقع Request بأي طريقة سواء GET أو POST مع التعديل في ال Headers بإستبدال خانة ال Host بالآيبي الداخلي الذي نريد الإطلاع عليه, الموضوع يعتمد علي مشكلة في سرفرات ال Apache نفسها.
If Apache receives an unrecognized Host header, it passes it to the first virtual host defined in httpd.conf. As such, it’s possible to pass requests with arbitrary host headers directly to a sizable number of applications
وبهذه الطريقة إستطعنا الحصول علي ال Key الخاص بالتحدي
The flag is: 607fc5e8ce2abfc66fb55b3914a6b5f1
شكرا لمتابعتكم.