24
CMD Hijack a command/argument confusion with path traversal in cmd.exe Julian Horoszkiewicz : Researcher رابط ا لورقة البحثية:https://vxug.fakedoma.in/papers/VXUG/Mirrors/CmdHijackacommandargumentconfusionwithpa thtraversalincmdexe.pdf لم العربي،لعابحاث لذه ادف نشر همل تطوعي به هذا العلدعاءسألكم ا أ. ة على تويتر رسالصل، قم بإرسالقتراح أو التوا أو ترغب في اي خطأرجمة، إن رأيت أ في التً لست خبيرا أنا0x1411 .

CMD Hijack · 2020. 8. 8. · ةفاضلإاب cmd.exe /c زواجتب موي cmd.exe دعب( بسانملا ةيئانثلا صيصنتلا ةملاع اذ رملأا نأ ىرن

  • Upload
    others

  • View
    12

  • Download
    0

Embed Size (px)

Citation preview

  • CMD Hijack a command/argument confusion with path traversal in cmd.exe

    Julian Horoszkiewicz: Researcher

    لورقة البحثية: رابط ا

    https://vxug.fakedoma.in/papers/VXUG/Mirrors/CmdHijackacommandargumentconfusionwithpa

    thtraversalincmdexe.pdf

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

    .0x1411أنا لست خبيراً في الترجمة، إن رأيت أي خطأ أو ترغب في االقتراح أو التواصل، قم بإرسال رسالة على تويتر

    https://twitter.com/julianpentesthttps://vxug.fakedoma.in/papers/VXUG/Mirrors/CmdHijackacommandargumentconfusionwithpathtraversalincmdexe.pdfhttps://vxug.fakedoma.in/papers/VXUG/Mirrors/CmdHijackacommandargumentconfusionwithpathtraversalincmdexe.pdfhttps://twitter.com/0x1411

  • بعد عدة أسابيع من البحث المتقطع. cmd.exeوجدته في سأشرح في هذه الورقة تصرف غريب ومدهش

    في هذه الفترة كنت أحاول:

    ( بين أوامر التحقق من/فلترة الكود Encoding Mismatch)العثور على عدم تطابق في التشفير -١

    Existing Commandلفواصل األمر الحالي ) ASCIIوباقي البرنامج، مما يتيح لي تهريب ال

    Separators ).في البايت الثانية ألحد الكاركترز، للحظة ظننت أني تمكنت من ذلك لكني كنت مخطأ

    .Unix shell’s backtrick operatorالغير ظاهرة ل cmd.exeإكتشاف بعض نظائر -٢

    والذي تسبب سابقاً في العثور على ثغرة ال زالت موجودة لكن n\ ,& ,|العثور على أمر فاصل مشابه ل -۳

    https://vuldb.com/?id.93602 نادرة وهي

    https://vuldb.com/?id.93602

  • للكسالى الذين ليس لديهم صبر لقراءة الورقة البحثية كاملة، هذا ما اكتشفت:

  • ندوز بالخصائص التالية:يتمت التجربة على إصدار و١- Windows 10 Pro x64 (Microsoft Windows [Version 10.0.18363.836])

    ٢- cmd.exeversion: 10.0.18362.449

    ۳- CMD SHA256:FF79D3C4A0B7EB191783C323AB8363EBD1FD10BE58D8BCC96B07067743CA81D5

    ومن المفترض أن تعمل على اإلصدارات السابقة.

    شرح بعض التفاصيل لنبدأ ."cmd.exe /c "ping 127.0.0.1بهذا األمر: بداية

    وشبيهاتها(. ()PHP shell_execبالتحديد يُستخدم من البرامج لتنفيذ أوامر للنظام مثل الدالة )هذا األمر

    .pingيتم اختياره من المستخدم في برنامج يقوم بتشغيل أمر آخر، في حالتنا هذه هو 127.0.0.1الحد

    عن pingة بدالً من األمر بتشغيل تطبيق اآللة الحاسب (cmd.exe)اآلن يستطيع المستخدم خداع موجه األوامر

    أو بإضافة windows/system32/calc.exe/../../../../../../../../../../127.0.0.1طريق إضافة الحد

    مسار أي تطبيق آخر، وموجه األوامر سيقوم بتنفيذه.

    "cmd.exe /c "ping 127.0.0.1/../../../../../../../../../../windows/system32/calc.exeاألمر الكامل:

    يمكن استخدام هذه الخدعة في العديد من الهجمات مثل:

    1- Denial of Service.

    2- Information Disclosure.

    3- Arbitrary Code Execution.

  • التالي: PHPسأقوم بتجربة هذه الطريقة على تطبيق ويب، ألق نظرة على كود

    هذا الكود ليس به ثغرة معروفة تمكننا من حقن موجه األوامر )بإستثناء ()escapeshellcmdبسبب استخدام الدالة

    (.RCEحقن الحدود لكنه لن يمكننا من العثور على ثغرة

    بدالً من تلك، وأنتم محقون، هذه الخدعة ()escapeshellargبعض منكم جاء في باله أنه من الممكن استخدام الدالة

    كانت الحدود المحقونة بين عالمات تنصيص.لن تعمل في حالة

    أكثر شيوعاً، والذي الحظته ()escapeshellarg بدالً من ()escapeshellcmdعلى أي حال، استخدام الدالة

    والذي CVE-2020-12743و CVE-2020-12742و CVE-2020-12669أثناء العثور وتسجيل الثغرات

    في برامج مفتوحة المصدر PHP( أكواد Scan)انتهى بقضاء أسبوع أخر في تشغيل أكواد أوتوماتيكية لتقوم بمسح

    من التطبيقات ، أنا متأكد من أن هناك العديدSCA toolوالتدقيق في النتائج، تم هذا باستخدام األداة التي قمت بتطويرها

    المصابة بهذا النوع من الثغرات، لكن ليس لدي وقت للبحث أكثر.

    https://cve.mitre.org/cgi-bin/cvename.cgi?name=2020-12669https://cve.mitre.org/cgi-bin/cvename.cgi?name=2020-12742https://cve.mitre.org/cgi-bin/cvename.cgi?name=2020-12742https://cve.mitre.org/cgi-bin/cvename.cgi?name=2020-12742https://github.com/ewilded/SCARY

  • An extended PoC:

  • . RCEخطورة إستخدام هذه الثغرة في العثور على

    بدون الحاجة للتحكم في أي ملف في الجهاز الضحية وبدالً من RCEأنا متأكد من إمكانية تحويل تلك الثغرة ل

    ذلك سيتم إرسال البايلود في موجه األوامر مباشرة.

    على سبيل المثال:

    يقوم بتنفيذ:

    c:\windows\system32\calc.exe with command line equal ping 127.0.0.1/../../../../../../../windows/system32/calc.exe

    وكما تم التوضيح سابقاً، من الممكن اإلستيالء على تنفيذ البرامج حتى في حال إضافة العديد من الحدود، والذي

    سيؤدي لشبيه باألمر التالي:

    ping THE PLACE FOR THE RCE PAYLOAD ARGS 127.0.0.1/../../path/to/lol.bin

    كاملة، الذي RCEمناسب للتعامل مع الحدود الغير صحيحة من الممكن أن يؤدي إلى ثغرة LOLBinباستخدام

    يجب أن يستقبل/يتجاهل الحد األول )والذي يكون مكتوب مسبقاً، كما في LOLBinنحتاجه في مثالنا السابق من

    ضاُ أن يستقبل/يتجاهل الحد األخير.(، ويجب أيpingمثالنا

    والذي يستقبل أكثر /project.github.io/lolbas/Binaries/Ieexec-https://lolbasعلى سبيل المثال:

    من حد ويقوم بتجاهل الغير صحيح منهم.

    https://lolbas-project.github.io/https://lolbas-project.github.io/lolbas/Binaries/Ieexec/

  • استخدام باورشل، فمثالً تنفيذ األمر التالي:أيضاً كنت أفكر في

    يجعل باورشل يقوم باألمر:

    ، نعم أعلم أن الفاصلة ping.exeبعد تشغيل calc.exeتوقعت أن يقوم بمعاملة األمر كنص وأن يقوم بتشغيل

    Command، لكنها ليست أمر فاصل )calcعن ping( مستخدمة هنا لفصل Semicolonالمنقوطة )

    Separator في )cmd.exe في الباورشل، على أي حال تقريباً كل أنظمة التشغيل تقوم بتصفيتها وحظرها ألن

    الفاصلة المنقوطة هي أمر فاصل في أنظمة تشغيل يونكس.

    ، EncodedCommand–كما في أمر الباورشل base64للحصول على أمر حقن مدعوم يجب أن يكون مشفر ب

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

    interactive .بدالً من معاملة النص المدخل كمجموعة من األوامر للتنفيذ

  • تحليل أعمق

    وتحليل النتائج باستخدام HTTP with Burpعن طريق PHPعثرت على تلك الخدعة أثناء تجربتي لبعض كود

    Procmon بعد إضافة بعض الفالتر المناسبة، كما قمت بكتابةcmd.exe fuzzer بعد الحصول على بعض النتائج ،

    .x64dbgو Ghidraستاتيكي باستخدام ر أسابيع من التحليل االالمحبطة والمملة على مدا

    ، mainوالتي تُستدعى من Initوالتي يتم استدعائها من CheckSwitchesيبدأ بالدالة cmd.exeأمر تنفيذ

    للتنفيذ معه، مثل cmd.exe( تم استدعاء Switchمسئولة عن تحديد أي محول ) CheckSwitchesالدالة

    (/c, /k, /v:on etc الالئحة الكاملة للخيارات يمكن العثور عليها عن طريق ،)cmd.exe /? help استغرقت ،

    عملية التحليل الكثير من الوقت للعثور على محوالت مخفية أو مشاكل في المنطق تمكنني من إدخال بعض

    المحوالت عن طريق إخراجها من عالمات التنصيص.

    https://github.com/ewilded/shelling/blob/master/fuzzing/cmd-fuzzing.c

  • بة إلى األمر المفترض تنفيذه )بداخل عالمات التنصيص(، والذي يكون تنتقل عملية الحوس c/إذا تم كشف المحول

    من أشهر المحوالت استخداماً وسأناقش في باقي الورقة هذا المحول بتفصيل أكبر.

    r/يمكن الحصول على نفس الوضع باستخدام المحول

  • افات من بداية األوامر(، وجدت دالة بعد القليل من التحليل والتجربة وإضافة بعض التعديالت )مثل إزالة المس

    موضحة لنفسها

  • mainCRTStartupنقطة البداية دعن breakpoint، قمت بوضع debuggingمشوق! حان وقت بعض ال

  • Debug > Restartعن طريق cmd.exeثم بداية

    SearchForExecutableعند الدالة breakpointسأقوم أيضاً بوضع

    باإلضافة cmd.exe /cيقوم بتجاوز cmd.exeالمناسب )بعد عالمة التنصيص الثنائية ذاكما نرى أن األمر

    .CheckSwitches(، أيضاً القيمة الموجودة في أعلى الستاك تحتوي على عنوان يشير للدالة R15و RBXل

    ي هذه ، لكن فSearchForExecutable، سنقوم بتشغيل العنصر الثاني من F9إذا قمنا بالضغط على زر

    ، في حين أن اإلستدعاء األصلي كان من دالة أخرى تسمى RAX, RDI, R11المرة سيُخزن نص األمر في

    ECWork.

  • ping.exeالعنصر الثاني يقوم بإعادة المسار الكامل ل

    .SearchForExecutable، مع إستدعاء للدالة ECWorkإذا نظرنا على الصورة القادمة سنجد الدالة

  • ، الحظ Returnقام باإلعادة SearchForExecutableاآلن إذا نظرنا للصورة القادمة سنجد أن إستدعاء الدالة

    أمراً ستجد إستدعاء للدالة ١٥، بعد R14والمشار إليه في العنوان الموجود في ping.exeالمسار الكامل ل

    ExecPgm .والتي ستقوم بإستخدام المسار الجديد إلنشاء عملية حوسبة جديدة

    ، ping 127.0.0.1باإلضافة للنص الكامل ل SearchForExecutableمن هنا، رؤية إستدعاء الدالة

    يوضح خلل بين األمر الكامل وإسم الملف الحقيقي، لذا أردت التأكد من إمكانية اإلستيالء على تنفيذ العملية عن

    طريق إنشاء واحد إضافي بنفس اإلسم الموجود في أمر التنفيذ والذي سيمكننا من تشغيل:

  • باستخدام أن يفتحها cmd.exeحتى أرى ما الملفات التي حاول Procmonمشوق! قررت أن ألقي نظرة على

    CreateFile.

    في ping .PNGبإستخدام اسم ملف اسمه حرفياً calc.exeلذا نعم، النتائج أكدت من فتح ملفات نسخ من

    المجلد الحالي.

  • لو لم أنشأ الملف في البداية. Operation = CreateFileلم يكن بإمكاني مشاهدة النتائج باستخدام الفلتر

    ، NAME NOT FOUNDوتكون النتيجة CreateFileتقوم بإستدعاء cmd.exeقد يتوقع أحدهم أن يرى

    يقوم بالتأكد من cmd.exe، لكن ليس في هذه الحالة، ألن potential DLLتيادية هي البحث عن الطريقة االع

    .QueryDirectoryعن طريق استدعاء الدالة CreateFileوجود الملف قبل استدعاء الدالة

  • Payload’s Magic Stringمن األفضل تحديد الفلتر بناء على Procmonلهذا السبب، أثناء استخدام

    الواقعة في المسار بدالً من الفلترة بناء على العملية.

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

    psychoPATH علىcmd.exe لكن لم يحدث هذا بعدما رأيت عند ضغطي مرة أخرى على ،F9.

    Subdirectoryوالذي يتشابه مع ال c:\windows\system32\calc.exeفي calc.exeيتواجد

    الموجودة!!

    https://github.com/ewilded/shelling/blob/master/fuzzing/cmd-fuzzing.chttps://github.com/ewilded/psychoPATH

  • .SearchForExecutableقمت بالبحث أكثر في الدالة

    path-us/dotnet/standard/io/file-https://docs.microsoft.com/en-في هذه األثناء قابلني

    formats .)يحتوي على إجابة لمعظم تساؤالتي(

    ليه ومن ثم التبليغ لمايكروسوفت، بعد أقل من أسبوع تم مراجعة بعد االكتشاف، قمت بكتابة تقرير عما توصلت إ

    بحثي، بعد أسبوع آخر جاء الرد منهم أن هذا البحث ال يتطابق مع معايير مايكروسوفت حتى يُعد مصدر تهديد.

    https://docs.microsoft.com/en-us/dotnet/standard/io/file-path-formatshttps://docs.microsoft.com/en-us/dotnet/standard/io/file-path-formatshttps://docs.microsoft.com/en-us/dotnet/standard/io/file-path-formats

  • لم تتناسب تلك الثغرة معهم!! CVEلقد خاب ظني، بعد أن توقعت إستالم

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

    أنها ليست ثغرة، إذاً فهي طريقة جديدة.

    -----

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

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