Una noche con PrestaShop [anécdota][shell-upload]

Iniciado por Xt3mP, Julio 16, 2012, 12:00:22 AM

Tema anterior - Siguiente tema

0 Miembros y 3 Visitantes están viendo este tema.

Hace poco tiempo me encontraba revisando varios sitios webs mediante enláces simbólicos y entre ellos me encontre un sitio peculiar Méxicano. Se trataba de una empresa jóven la cual se dedica a la venta de telefonía (celulares, iPods y accesorios, etc) mediante la plataforma PrestaShop.

CitarPrestaShop es el software de comercio electrónico de Código-abierto más confiable y flexible. Desde 2007, PrestaShop ha revolucionado la industria al proporcionar funcionalidades que atraen compradores y aumentan las ventas en línea.

Al ver que se trataba de la plataforma antes dicha y sin nunca haberla empleado, dedúje que -por obvias razones- se manejaba por base de datos; en ese momento mi objetivo primario era encontrar el archivo de configuración a la misma.

Al entrar al archivo "adminsys/index.php" noté que hacia referencia a un archivo de configuración de la siguiente forma:

Código: php
include(PS_ADMIN_DIR.'/../config/config.inc.php');


Por lo que procedí a buscar el path en cuestión junto con el respectivo fichero (config.inc.php) y me encontre con que -como era de esperarse- en dicho fichero no se establecía la conexión a la base de datos PERO hacía referencia a otro fichero: settings.inc.php.

Esta vez dicho archivo contenía toda la información de la plataforma (o al menos la importante): desde la conexión a la base de datos hasta la versión de la misma (plataforma):


Como la lógica lo indica, procedí a tratar de conectarme con los datos expuestos mediante una shell que ya tenía arriba en otro hosting bajo el mismo servidor y efectivamente, se logró la conexión a la base de datos. Al indagar por las tablas, encontré la tabla de usuarios bajo el nombre de ps_employee; al checar el hash de la contraseña pude deducir que se trataba de un hash md5 por sus 32 carácteres hexadecimales y por ende, traté de desencriptarlo con servicios en línea de comparación (no confundir con fuerza bruta) sin tener resultado alguno:


CitarServicios de comparación para descifrar hashs en MD5: Son nada más y nada menos que -generalmente- scripts escritos en PHP que hacen comparaciones (válgame la redundancia) entre un hash en md5 ya generado y el hash en md5 ingresado. Es decir, se tienen bases de datos enormes con: hash en md5 y la cadena de texto que le corresponde a ese hash, para que al nosotros ingresar el hash en md5 lo compare con los de las bases de datos y en caso de ser positiva la comparación, muestre la cadena de texto que le corresponde.

Aquí fué donde me entró una incógnita y pensé: ya tengo la conexión a la base de datos, también tengo el hash del administrador pero no lo pude descifrar con servicios en línea, aparte, ¿quién me dice que solo se creo el hash de la contraseña sin meter ningún salt de por medio?, y fué ahí cuando recorde haber visto una "_COOKIE_KEY_". ¿Para qué se definiría una COOKIE KEY en el script?, pues para generar la contraseña y hacer más segura la misma.

Entonces tenía dos opciones: o insertar un nuevo usuario mediante MySQL o modificar el hash del administrador por el mío y así poder acceder al sistema; ambas opciones son válidas aunque siguiendo la opción #1 me evitaría modificar el hash del administrador, crear un usuario y cambiar nuevamente al hash antiguo del administrador. Opté por la opción #1 y ejecute la siguiente línea:

Código: php
INSERT INTO ps_employee
(id_profile, id_lang, lastname, firstname, email, passwd, last_passwd_gen, stats_date_from, stats_date_to, bo_color, bo_theme, bo_uimode, bo_show_screencast, active)
values
(1, 2, "apellido", "nombre", "correo", "hash", "2012-07-14 00:01:45", "2012-07-14", "2012-07-14", "#000000", "flashyturtle", "click", 0, 1);


En donde:

    apellido es el apellido de la cuenta (válgame la redundancia).
    nombre es el nombre de la cuenta (válgame la redundancia).
    correo es el correo de la cuenta (válgame la redundancia).
    hash es el hash en md5 generado mediante la "cookie key" y la contraseña que queramos.
        La cookie key la encontramos definida en el archivo settings.inc.php de la carpeta config.
        Para generar el hash podemos ir a cualquier servicio en línea como md5 hash y escribir en el siguiente formato: cookie_key+pass.
            Ejemplo: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta (xt3mp.mx es la pass).

Una vez hecho ésto y comprobado que se ingresó correctamente a la base de datos, procedí a ir al panel de administración: http://[target].com/adminsys/ e ingresamos el correo y la contraseña.

Después de iniciar sesión en el sistema y ver que lo anterior había resultado, me entró otra incógnita: ¿cómo podré subir shell?. Como todo tipo de intento de subir shell a un servidor, comencé primero por encontrar algún uploader normal para tratar de subirla; el primero que busqué fué el de "añadir un nuevo producto".

Al intentar subir shell en dicho uploader me arrojó -como era de esperarse- que sólo permitía extensiones de imagenes (gif, jpg y png). Fué aquí donde mire la pestaña "adjuntos" y dije: ¡aquí lo lograré!; subí la shell y noté que sí guardaba el archivo en la carpeta downloads PERO sin extensión ya que lo renombraba con sha1 de la siguiente manera:


Por lo que al nosotros tratar de descargar el fichero (mediante el archivo attachment.php en la carpeta raíz), obtenía el código fuente del archivo sin extensión y lo descargaba (válgame la redundancia) con el nombre del fichero original almacenado en la columna file_name; y sí entrabamos directamente al fichero por la url con el hash sha1 del archivo no ejecutaba el PHP, sino lo mostraba como tal:


CitarSubir el archivo sin extensión y renombrando el mismo nos facilita a la hora de manejar cargas de ficheros ya que no nos enfocamos tanto en la seguridad de dicho módulo, por lo que aplaudo a PrestaShop ésta manera de lidiar con el problema de subir archivos no-deseados al servidor.

Para éste entonces ya se me habían agotado las ideas, inclusive llegue a pensar que me sería imposible obtener shell en la plataforma pero recordé haber visto un "bonito theme" en la página príncipal y dije: ¡JODER, COMO NO LO PENSE ANTES, SUBIRE UN THEME CON SHELL INCRUSTADA!, así que procedí a buscar algún módulo que me permitiera hacerme del sistema sin tanto lío.

Así que me fuí a la sección Módulos y a la sub-sección Temas encontrando lo que buscaba; al leer dicha sección me apareció ésto caído del cielo, metafóricamente hablando:


Por lo que dí click en Tema instalador e instale el módulo sin problema alguno; después apareció ésto y di click enconfigurar:


Ahora venía otro problema: encontrar algún theme simple que nos permitiera la encomienda de subir shell. Navegando por mi amigo Google encontre éste tema: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta. Lo descargué y simplemente lo abrí con winzip (no es necesario descomprimir el contenido) y arrastré mi shell a la carpeta themes/clean-simple/ quedando así:


Le di siguiente y bingo:


Al yo mirar éste diálogo, supuse que el archivo ya se había subido y como no quería instalarlo completamente, me fuí directamente a la carpeta themes y navegué hasta el theme que acababa de subir (themes/clean-simple/). Me redireccionó al index por obvias razones; el archivo index.php del tema tiene redirección, entonces entré por url directa: http://[target].com/themes/clean-simple/shell.php y obtuve lo siguiente:


Después de toda una travesía logré subir shell a la plataforma de PrestaShop, seguramente te preguntarás:¿Por qué querías shell en la plataforma si ya tenías otra shell en el mismo servidor?, pues las dos respuestas son las siguientes:

  • Como dije al inicio del post, estuve indagando en los archivos mediante symlink, ésto te permite visualizar el código fuente de todos los archivos, sin embargo, no te permite la manipulación de los mismos por lo que necesitaba shell en esa cuenta de hosting para manipular a mi antojo.
  • Y por última, y la respuesta que más peso tiene para mí es: porque para mí todo éste tipo de situaciones son un reto, y me gusta andar de curioso en las distintas plataformas; y más si son plataformas que nunca he utilizado.

Al final, después de un buen rato de lograr mi objetivo, no me conformé con tener acceso total a la cuenta, sino me dediqué a indagar en la base de datos y encontré cosas interesantes; como en la tabla ps_configuration, la cual contiene -por simple lógica- toda la configuración, y entre ésta configuración vienen keys de PayPal, del Banco (cuenta, clabe, etc):


Espero que ésta anécdota les sirva de algo, siempre hay maneras de hacer las cosas, simplemente hay que ser curiosos y dejar volar la imaginación.
Cada vez que me das Karma me motivas

Julio 16, 2012, 03:56:11 AM #1 Ultima modificación: Julio 16, 2012, 03:58:12 AM por Stiuvert
Estupendo la anécdota, me agrado y cuando dijiste lo de colocar la Shell en los themes mme hiciste recordar a Nathaniel cuando subio un template con una shell a "esp.am" (fue un servicio de foros SMF preinstalado y hosteados).



Saludos ;)

Sí, generalmente la forma de subir shells a varias plataformas de éste tipo es subiendo shell en template.
Cada vez que me das Karma me motivas

estuvo genial, valio la pena leerlo.

Saludos Xt3mP.

Si una lectura muy interesante. y con esto voy tomando ideas para mis pruebas. thx.

La verdad que uno a veces se encuentra con objetivos muy, muy interesantes. Me alegro que les haya gustado.
Cada vez que me das Karma me motivas