حل المهمة مع pwnable.kr cmd1 ، cmd2 ، asm ، blukat. تجاوز التصفية في لينكس. كتابة shellcode مع pwntools

صورة

في هذه المقالة ، سننظر في كيفية تجاوز مرشح خفيف الوزن ، وفهم كيفية كتابة غلاف باستخدام pwntools ، وكذلك حل العديد من المهام من الموقع pwnable.kr .

المعلومات التنظيمية
خاصةً لأولئك الذين يرغبون في تعلم شيء جديد وتطويره في أي من مجالات أمن المعلومات والحاسوب ، سأكتب وأتحدث عن الفئات التالية:

  • PWN.
  • التشفير (التشفير) ؛
  • تقنيات الشبكات (الشبكة) ؛
  • عكس (الهندسة العكسية) ؛
  • إخفاء المعلومات (Stegano) ؛
  • بحث واستغلال مواطن الضعف WEB.

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

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

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

حل المهمة cmd1


نضغط على الأيقونة بالتوقيع cmd1 ، وقيل لنا إننا بحاجة إلى الاتصال عبر SSH بضيف كلمة المرور.

صورة

عند الاتصال ، نرى الشعار المقابل.

صورة

دعونا نعرف ما هي الملفات الموجودة على الخادم ، وكذلك ما هي الحقوق التي لدينا.

صورة

لنلقِ نظرة على الكود المصدري.

صورة

كل شيء بسيط للغاية: نقوم بتمرير الأمر إلى البرنامج وتنفيذه على سطر الأوامر ، ولكن أولاً يقوم بتصفية الكلمات flag ، sh ، tmp. علم المرشحات ، ولكن ليس fla *.

صورة

نحن نسلم العلم ونحصل على نقطة أخرى.

حل المهمة cmd2


نضغط على الأيقونة بالتوقيع cmd2 ، وقيل لنا إننا نحتاج إلى الاتصال عبر SSH بكلمة مرور المهمة cmd1.

صورة

عند الاتصال ، نرى الشعار المقابل.

صورة

دعونا نعرف ما هي الملفات الموجودة على الخادم ، وكذلك ما هي الحقوق التي لدينا.

صورة

لنلقِ نظرة على الكود المصدري.

صورة

يبدو cmd1 ، ولكن عامل تصفية أكثر تعقيدًا. مرة أخرى تقوم بتصفية العلم ، ولكن لا تقوم بتصفية fla *. كل شيء معقد من خلال تصفية القطع المائلة ، ولكن يمكننا تنفيذ / bin / cat كقيادة الأوامر -p.

صورة

نحن نسلم العلم ونحصل على نقاط.

حل وظيفة بلوكات


نضغط على الأيقونة مع توقيع blukat ، وقيل لنا إننا بحاجة إلى الاتصال عبر SSH بضيف كلمة المرور.

صورة

عند الاتصال ، نرى الشعار المقابل.

صورة

دعونا نعرف ما هي الملفات الموجودة على الخادم ، وكذلك ما هي الحقوق التي لدينا.

صورة

لنلقِ نظرة على الكود المصدري.

صورة

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

صورة

صورة

نحن نسلم العلم ونحصل على ثلاث نقاط.

حل وظيفة asm


نضغط على الأيقونة بالتوقيع asm ، وقيل لنا إننا بحاجة إلى الاتصال عبر SSH بضيف كلمة المرور.

صورة

عند الاتصال ، نرى الشعار المقابل.

صورة

دعونا نعرف ما هي الملفات الموجودة على الخادم ، وكذلك ما هي الحقوق التي لدينا.

صورة

تركوا لنا التمهيدي ، وقراءته.

صورة

لذلك ، يجب أن نرسل رمز القشرة الذي يقرأ ملف العلامة إلى المنفذ 9026.

صورة

ممتاز. نحن نستخدم pwntools ، ونحن نحدد المعلمات للاتصال والهندسة المعمارية.

from pwn import * r = remote('pwnable.kr', 9026) context.arch = 'amd64' r.interactive() 

لتجميع الصدفة ، سنستخدم وحدة shellcraft. كيف ستعمل shellcode:

  1. نضع على المكدس خط - اسم الملف.
  2. افتح الملف بالاسم من أعلى الحزمة (سجل rsp).
  3. نظرًا لأن الدالة open ستُرجع واصف الملف المفتوح في سجل rax - المعلمة الأولى المراد قراءتها ، فسوف نقرأ 64 بايت على المكدس ، وبالتالي سيكون سجل rsp هو المعامل الثاني.
  4. نكتب الآن إلى الإخراج القياسي (واصف 1) علامة تقع في أعلى الحزمة (سجل rsp).
  5. نجمع قذيفة لدينا والسفينة.

 from pwn import * r = remote('pwnable.kr', 9026) context.arch = 'amd64' payload = shellcraft.pushstr('this_is_pwnable.kr_flag_file_please_read_this_file.sorry_the_file_name_is_very_loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo0000000000000000000000000ooooooooooooooooooooooo000000000000o0o0o0o0o0o0ong') payload += shellcraft.open('rsp', 0, 0) payload += shellcraft.read('rax', 'rsp', 64) payload += shellcraft.write(1,'rsp', 64) shell = asm(payload) r.send(shell) r.interactive() 

صورة

نسلم العلم ونحصل على 6 نقاط. نراكم في المقالة التالية ، حيث سننظر في الثغرة المعقدة Use After Free.

نحن في قناة برقية: قناة في برقية .

Source: https://habr.com/ru/post/ar462091/


All Articles