sábado, 8 de enero de 2022

Programación insegura y seguridad por obscuridad II

Es muy importante prepara un diccionario con nombres de funciones o métodos, una fuente para obtener estos nombres es github , una vez preparado el diccionario, procedemos a realizar el ataque de fuerza bruta. En mi caso prepare un diccionario con 12,341 posibles nombres de función, de esto, obtuve 12 nombres de funciones, como se puede visualizar en la siguiente imagen.

Imagen 1: Funciones encontradas por medio de fuerza bruta.

Una vez enumeradas las funciones, podremos proceder a realizar un ataque de fuerza bruta a cada una de las funciones, para saber la cantidad de parámetros que recibe cada función y el tipo de dato que recibe, por defecto, siempre reciben 1 parámetro (self), por lo tanto si la función recibe 1 parámetro por parte adicional, mostrara que recibe 2 parámetros, en este caso, solo tendremos que enviar 1 parámetro a la función, como se muestra a continuación.
Imagen 2: Función requiere parámetros, pero solo recibe self.

En mi caso las funciones encontradas son: ['write', 'search', 'read', 'get_dir', 'send_noti', '_noti', '_convert', 'save_disk_path', '_conn_ftp', 'validations', 'prepare_64', '_uni'] de las cuales, write, search,read, son nativas de odoo, es importante colocar funciones nativas, para confirmar que nuestro ataque se esta llevando acabo, las demás funciones, son propias del modulo. De todas las funciones propias del modulo, unicamente prepare_64 y save_disk_path reciben 1 parámetro adicional a self y de esas ultimas 2 save_disk_path no retorna absolutamente nada.

Al evaluar la ultima función, le enviamos un diccionario, y al fallar, nos refleja, un código posiblemente inseguro, el cual llama una funcion, llamada shell_bk, al tratarse de un modulo de copias de seguridad, quisiera imaginar, que lo usan, para almacenar copias en el mismo server, mediante la ejecución de comandos.


Imagen 3: Función con posible shell.

Llegados a este punto, veremos si es una función para correr algún comando, para ello, haremos un simple "whoami", y el resultado es, que logramos ejecutar el comando directamente.
Imagen 4: Ejecutando whoami.

Imagen 5: Listando directorio del servidor.

Por ultimo, trataremos de obtener acceso total al servidor, lo cual, lo veremos en una tercera parte.

Saludos.
Lexer Pars.

No hay comentarios:

Publicar un comentario