هاك ذا بوكس. تجول JSON. الضعف في Json.Net و LPE عبر SeImpersonatePrivilege

صورة

أواصل نشر الحلول المرسلة للمعالجة الإضافية من موقع HackTheBox . آمل أن يساعد ذلك شخصًا على الأقل على التطور في مجال أمن المعلومات. في هذه المقالة ، نستغل الثغرة الأمنية في Json.Net ونرى كيفية زيادة امتيازاتنا إلى SYSTEM إذا كان لدينا امتياز SeImpersonatePrivilege.

يتم الاتصال بالمختبر عبر VPN. من المستحسن عدم الاتصال من جهاز كمبيوتر العمل أو من مضيف حيث تتوفر البيانات المهمة لك ، نظرًا لأنك تدخل في شبكة خاصة مع أشخاص يعرفون شيئًا في مجال أمن المعلومات :)

المعلومات التنظيمية
, - , :

  • PWN;
  • (Crypto);
  • c (Network);
  • (Reverse Engineering);
  • (Stegano);
  • WEB-.

, , , .

, , Telegram . , , .

. , - , .

خدمة ذكية


يحتوي هذا الجهاز على عنوان IP 10.10.10.158 ، والذي أضيفه إلى / etc / hosts.

10.10.10.158    json.htb

أولاً ، نقوم بمسح المنافذ المفتوحة. نظرًا لأنه يستغرق وقتًا طويلاً لفحص جميع المنافذ باستخدام nmap ، سأفعل ذلك أولاً مع ماسكان. نقوم بمسح جميع منافذ TCP و UDP من واجهة tun0 بسرعة 500 حزمة في الثانية.

masscan -e tun0 -p1-65535,U:1-65535 10.10.10.158 --rate=500

صورة

بعد ذلك ، تحتاج إلى جمع المزيد من المعلومات حول المنافذ المعروفة. للقيام بذلك ، استخدم nmap مع الخيار -A.

nmap json.htb -p49156,49154,49152,47001,80,137,49153,139,49155,135,445,49158,5985,6666,21

صورة

الآن ، لمزيد من المعلومات التفصيلية حول الخدمات التي تعمل على المنافذ ، سنقوم بإجراء مسح ضوئي باستخدام الخيار -A.

nmap -A json.htb -p80,139,135,445,5985,6666,21

صورة

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

صورة

يمكننا تجاوز هذا ، ولكن admin: admin يسمح لنا بتسجيل الدخول.

صورة

لا يوجد شيء مثير للاهتمام على الموقع نفسه ، وفي محاولات العثور على شيء ما على الأقل ، نتشبث بملفات تعريف الارتباط.

صورة

فك Base64.

echo "eyJJZCI6MSwiVXNlck5hbWUiOiJhZG1pbiIsIlBhc3N3b3JkIjoiMjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzMiLCJOYW1lIjoiVXNlciBBZG1pbiBIVEIiLCJSb2wiOiJBZG1pbmlzdHJhdG9yIn0=" | base64 -d ; echo

صورة

أي أن قيمة كلمة المرور هي MD5 من كلمة مرور المسؤول.

صورة

علاوة على ذلك ، لا يوجد شيء مثير للاهتمام. من خلال فتح التجشؤ واعتراض الطلب ، يمكنك العثور على رأس HTTP مثير للاهتمام.

صورة

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

نقطة الدخول


ثم تم اكتشاف أنه إذا تم إرسال البيانات المعطلة في عنوان HTTP غريب (حذف بعض الأحرف) ، فإن الخادم يعطي أخطاء. فيما يلي البيانات التي يرجعها الخادم بقيمة رأس عادية مع حذف واحد إلى أربعة أحرف.

صورة

نحصل على خطأ مثير للاهتمام في الحالة الأخيرة. نظرًا لأن كائن JSON يتم إيقاف تشغيله ، يمكننا استغلال ذلك باستخدام ysoserial . سنستخدم أداة ObjectDataProvider لـ Json.Net وننفذ أمر ping للتحقق من افتراض الثغرة الأمنية.

صورة

الآن قم بتمكين tcpdump باستخدام مرشح بروتوكول ICMP لالتقاط ping.

صورة

عند اعتراض طلب ، نغير الرأس.

صورة

ونحصل على الأمر ping الذي تم طلبه.

صورة

المستعمل


الآن عليك أن تفعل الشيء نفسه مع عداد الحمل. أولاً ، نقوم بإنشاء تحميل وفتح مستمع.

صورة

صورة

الآن افتح خادم SMB المحلي الذي سيبدأ التحميل منه.

صورة

الآن مرة أخرى نقوم بتسلسل البيانات الضرورية ، كأمر نطلق حملنا من خادمنا.

صورة

نرى اتصالاً ناجحًا بخادم SMB وجلسة Meterpreter محملة بنجاح.

صورة

صورة

وقراءة ملف المستخدم.

جذر


بادئ ذي بدء ، نحن ننظر إلى المعلومات حول المستخدم الذي نعمل ضمنه.

صورة

تم تمكين امتياز SeImpersonatePrivilege للمستخدم (حق "انتحال صفة العميل بعد المصادقة"). كما تقول Microsoft :
يسمح تعيين "حق انتحال شخصية عميل بعد المصادقة" للبرامج التي يتم إطلاقها نيابة عن هذا المستخدم بانتحال هوية عميل. يمنع استخدام هذه المعلمة الخوادم غير المصرح لها من انتحال هوية العملاء الذين يتصلون بهذه الخوادم باستخدام إجراءات RPC أو الأنابيب المسماة.
الحقيقة هي أنه يمكننا رفع حقوقنا في النظام. يمكن العثور على دراسة كاملة هنا . تتأثر الامتيازات التالية بهذه الثغرة الأمنية:

  • SeImpersonatePrivilege
  • SeAssignPrimaryPrivilege
  • Setcbprivilege
  • SeBackupPrivilege
  • SeRestorePrivilege
  • SeCreateTokenPrivilege
  • SeLoadDriverPrivilege
  • SeTakeOwnershipPrivilege
  • SeDebugPrivilege

دعنا نولد حمولة أخرى ونشغل مستمعًا لها.

صورة

صورة

للتشغيل سنستخدم Juicy Potato . ولكن كمعلمة تحتاج إلى تحديد CLSID الخاص بالحساب للنظام المستهدف ، سنأخذها أيضًا من المستودع . لكن أولاً ، دعنا نرى أي نوع من النظام.

صورة

والآن ننظر إلى CLSID.

صورة

قم بتحميل الملفات إلى المضيف الهدف.

صورة

الآن قم بتشغيل Juicy Potato ووضح لها ما سيتم إنشاء العملية (CreateProcessWithTokenW أو CreateProcessAsUser ، المعلمة -t) ، ملف العملية (-p) ، منفذ الاستماع (-l) ، و CLSID (-c).

صورة

تم إنشاء العملية بنجاح ، ونرى جلسة metterpreter التي تم إنشاؤها.

صورة

ونحصل على حساب SYSTEM.

يمكنك الانضمام إلينا على Telegram. دعونا نجمع مجتمعًا سيكون فيه أناس على دراية في العديد من مجالات تكنولوجيا المعلومات ، ثم يمكننا دائمًا مساعدة بعضنا البعض في أي قضايا تتعلق بتكنولوجيا المعلومات وأمن المعلومات.

All Articles