أي من لغات البرمجة النصية هذه أكثر ملاءمة لاختبار القلم؟[مغلق]

StackOverflow https://stackoverflow.com/questions/76408

سؤال

بادئ ذي بدء، أريد تجنب حرب اللهب على اللغات.اللغات التي يمكنك الاختيار من بينها هي Perl وPython وRuby.أريد أن أشير إلى أنني مرتاح معهم جميعًا، لكن المشكلة هي أنني لا أستطيع التركيز على واحد فقط.

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

أعمل حاليًا كمطور Java، ولكني أخطط للحصول على شهادة CEH في المستقبل القريب.سؤالي هو:لكتابة الأدوات وتطوير الاستغلال، ما هي اللغة التي تجدها الأكثر ملاءمة؟

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

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

هل كانت مفيدة؟

المحلول

ربما تريد لغة Ruby، لأنها اللغة الأصلية لـ Metasploit، وهي إطار اختبار الاختراق القياسي مفتوح المصدر بحكم الأمر الواقع.روبي سوف تعطيك:

  • ميتاسبلويت قواعد بيانات إطار العمل وكود التشغيل وكود القشرة
  • ميتاسبلويت روبي لوركون الارتباطات للعمل الخام 802.11.
  • روابط KARMA الخاصة بـ Metasploit لإعادة توجيه 802.11 من جانب العميل.
  • ليبكورل وnet/http لكتابة أدوات الويب.
  • EventMachine لبروكسي الويب والعمل الغامض (أو RFuzz، الذي يمتد لخادم الويب Mongrel الشهير).
  • ميتاسم لتوليد كود القشرة.
  • الاضطراب لتفكيك x86.
  • BinData لتنسيق الملف الثنائي التشويش.

المركز الثاني هنا يذهب إلى بايثون.هناك مكتبات pentesting متوفرة في Python أكثر من تلك الموجودة في Ruby (لكنها ليست كافية لتعويض Metasploit).تميل الأدوات التجارية إلى دعم Python أيضًا --- إذا كنت من عملاء Immunity CANVAS أو CORE Impact، فأنت تريد Python.بايثون تمنحك:

  • ملتوية للوصول إلى الشبكة.
  • بايمي لتتبع البرنامج وتصحيح الأخطاء القابلة للبرمجة.
  • دعم CANVAS والتأثير.
  • دورنسيف مكتبات firewire لتصحيح الأخطاء عن بعد.
  • التكامل الجاهز مع WinDbg لتصحيح أخطاء kernel لنظام التشغيل Windows عن بعد (لا توجد حتى الآن إجابة جيدة في Ruby لتصحيح أخطاء kernel، ولهذا السبب ما زلت أستخدم Python أحيانًا).
  • الخوخ Fuzzer وسولي للتشويش.
  • SpikeProxy لاختبار اختراق الويب (أيضًا، أواسب بانتيرا).

ليس من المستغرب أن الكثير من العمل على الويب يستخدم أدوات Java.أداة pentest القياسية الفعلية على الويب هي Burp Suite، وهو تطبيق Java البديل.يحتوي كل من Ruby وPython على متغيرات Java التي يمكنك استخدامها للوصول إلى أدوات مثل هذه.أيضًا، يقدم كل من Ruby وPython:

  • التكامل المباشر مع libpcap لعمل الحزم الأولية.
  • روابط OpenSSL للعملات المشفرة.
  • ملحقات IDA Pro.
  • واجهات الوظائف الخارجية C الناضجة (أو المعقولة على الأقل) للوصول إلى واجهة برمجة التطبيقات (API).
  • يعمل WxWindows لواجهة المستخدم، ومكدسات الويب اللائقة لواجهات مستخدم الويب.

لن تخطئ في استخدام أي من اللغتين، على الرغم من أنه بالنسبة لأعمال pentest السائدة، من المحتمل أن يتفوق Metasploit على جميع فوائد Python، وفي الوقت الحاضر، بالنسبة للعمل العكسي x86، فإن واجهات تصحيح الأخطاء المتفوقة في Python تتفوق على جميع فوائد Ruby.

أيضًا:إنه عام 2008.إنها ليست "لغات برمجة نصية".إنها لغات البرمجة.;)

نصائح أخرى

[تنصل:أنا في المقام الأول مبرمج لغة Perl، وهو ما قد يؤثر على حكمي.ومع ذلك، أنا لست قبليًا بشكل خاص، وأعتقد أن حجتي في هذه المسألة بالذات موضوعية إلى حد معقول.]

تم تصميم لغة Perl لتندمج بسلاسة مع بيئة Unix، ولهذا السبب تبدو غريبة جدًا بالنسبة للأشخاص الذين لديهم خلفية OO بشكل رئيسي (خاصة مدرسة Java الخاصة بـ OOP).لهذا السبب، على الرغم من ذلك، يتم تثبيته على نطاق واسع بشكل لا يصدق على الأجهزة التي تعمل بأي نوع من نظام التشغيل Unixoid، ويتم كتابة العديد من الأدوات المساعدة لنظام البائعين فيه.وللسبب نفسه أيضًا، من المحتمل أن تحتوي الخوادم التي لم يتم تثبيت Python أو Ruby عليها على Perl، مما يجعل من المهم مرة أخرى أن يكون لديك بعض الإلمام بها.لذلك، إذا كان نشاط CEH الخاص بك يتضمن نشاطًا مكثفًا على Unix، فسيتعين عليك أن يكون لديك قدر من الإلمام بـ Perl على أي حال، وقد تركز عليه أيضًا.

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

فيما يتعلق بالمكتبات، لا أعرف كيف يمكن مقارنة روبي وبيثون ببعضهما البعض - أعلم أن بيرل قد تفوق عليهما بهامش كبير.ثم مرة أخرى، في بعض الأحيان (خاصة عندما تبحث عن مكتبات لتلبية الاحتياجات العامة) يكون التأثير الوحيد لذلك هو أن تغرق في الاختيارات.وإذا كنت تتطلع فقط إلى القيام بأشياء في منطقة معينة تغطيها جيدًا مكتبات Python أو Ruby، فإن كتلة آخر الأشياء الموجودة على CPAN ليست بالضرورة ميزة.ومع ذلك، في المجالات المتخصصة، يكون الأمر مهمًا، ولن تعرف أبدًا ما هي الحاجة غير المتوقعة التي ستحتاج إليها في النهاية (أخطأ، بحكم التعريف).

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

فيما يتعلق ببيئة المترجم الفوري التفاعلية، Perl... أوم... حسنًا، يمكنك استخدام مصحح الأخطاء، وهو ليس رائعًا، أو يمكنك تثبيت واحد من CPAN، لكن Perl لا يشحن مصححًا جيدًا بنفسه.

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

يمكنني تقديم حجة لجميع الثلاثة :-)

تمتلك لغة Perl كل CPAN - مما يمنحك ميزة كبيرة في تجميع الوظائف معًا بسرعة.كما أن لديها بنية تحتية لطيفة ومرنة للاختبار مما يعني أنه يمكنك توصيل الكثير من أنماط الاختبار الآلي المختلفة (بما في ذلك الاختبارات بلغات أخرى) في نفس الإطار.

روبي هي لغة رائعة للتعلم - وتفتقر إلى بعض المهارات الموجودة في لغة Perl 5.إذا كنت تجري اختبارات على شبكة الإنترنت، فهي تحتوي أيضًا على مكتبة watir - وهي مفيدة جدًا (انظر http://wtr.rubyforge.org/)

بايثون - لغة جميلة و(على الرغم من أن ذلك ليس من تفضيلاتي الشخصية) يجد بعض الأشخاص أن الطريقة التي يتم بها تنظيمها أسهل في التعامل معها.

أي واحد منهم (والعديد من الآخرين) سيكون لغة رائعة للتعلم.

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

يعتمد ذلك على التنفيذ، فإذا تم توزيعه فسأختار Java، كما تعلمون، بسبب قابليتها للنقل.إذا كان للاستخدام الداخلي فقط، أو سيتم استخدامه في بيئات شبه خاضعة للتحكم، فاختر ما تشعر براحة أكبر في صيانته، وأيهما يتمتع بأفضل التوقعات على المدى الطويل.

الآن للإجابة على السؤال فقط، سأختار لغة Perl، لكنني من محبي Linux، لذا قد أكون متحيزًا بعض الشيء في هذا.

إذا كنت تخطط لاستخدام Metasploit لاختبار القلم وتطوير استغلال، فإنني أوصي باستخدام روبي كما ذكرنا سابقًا، Metasploit مكتوب بالياقوت وأي تطوير لاستغلال/وحدة قد ترغب في القيام به سيتطلب روبي.

إذا كنت ستستخدم Immunity CANVAS لاختبار القلم، فلنفس الأسباب فإنني أوصي بـ Python حيث أن CANVAS مكتوب بلغة python.تمت أيضًا كتابة مجموعة من الأطر الغامضة مثل Peach و Sulley بلغة Python.

لا أوصي بـ Perl لأنك ستجد عددًا قليلاً جدًا من الأدوات/النصوص البرمجية/الأطر المتعلقة باختبار القلم/التشويش/المآثر/...في بيرل.

نظرًا لأن سؤالك هو "كتابة الأدوات وتطويرها" فإنني أوصي باستخدام Ruby إذا اخترت Metasploit أو python إذا اخترت CANVAS.

امل ان يساعد :)

عندما تتحدث كـ CEH، تعلم مواد CEH أولاً.سيعرضك هذا لمجموعة متنوعة من الأدوات والمنصات المستخدمة لشن أنواع مختلفة من الهجمات.بمجرد أن تفهم هدفك جيدًا، انظر إلى إمكانيات الأدوات والمنصات المتاحة بالفعل (إطار عمل metasploit المذكور سابقًا شامل وقوي للغاية).كيف يمكن تمديدها لتلبية احتياجاتك؟بمجرد معرفة ذلك، يمكنك مقارنة قدرات اللغات.

وأود أيضًا أن أوصي بإلقاء نظرة على الأدوات المتاحة على المسار الخلفي توزيعة.

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

إذا كنت تبحث عن لغة برمجة نصية تعمل بشكل جيد مع Java، فقد ترغب في إلقاء نظرة على Groovy.إنه يتمتع بمرونة وقوة لغة Perl (عمليات الإغلاق، والتعبيرات المنطقية المضمنة، والمصفوفات الترابطية في كل زاوية) ولكن يمكنك الوصول إلى كود Java منه وبالتالي يمكنك الوصول إلى عدد كبير من المكتبات، وعلى وجه الخصوص بقية النظام الذي تريده إعادة تطوير.

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

إذا كنت مهتمًا بـ CEH، فسألقي نظرة عليه القبعة الرمادية بيثون.يعرض بعض الأشياء المثيرة للاهتمام وذات الصلة.

ومع ذلك، ينبغي أن تكون أي لغة على ما يرام.

حسنًا، ما نوع المآثر التي تفكر فيها؟إذا كنت تريد كتابة شيء يحتاج إلى أشياء ذات مستوى منخفض (ptrace، ومآخذ توصيل خام، وما إلى ذلك) فستحتاج إلى تعلم لغة C.ولكن يمكن استخدام كل من Perl وPython.السؤال الحقيقي هو أيهما يناسب أسلوبك أكثر؟

أما بالنسبة لصناعة الأدوات، فإن لغة Perl تتمتع بقدرات جيدة على معالجة السلاسل، وهي أقرب إلى النظام، وتتمتع بدعم جيد، لكن الأمر محير للغاية على IMHO.أفضّل بايثون:إنها لغة نظيفة وسهلة الاستخدام وسهلة التعلم مع دعم جيد (مرجع اللغة/المكتبة الكامل، مكتبات الطرف الثالث، وما إلى ذلك).وانها (IMHO بدقة) باردة.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top