Bitácora del Pentester – Oracle Reports Services – Parte I

Buenas de nuevo queridos/as lectores/as!!

Me estreno este nuevo año con la siguiente entrada. Espero que os guste y si no, por lo menos que os sirva de algo en alguna ocasión.

Lo primero, no soy un experto en estos servicios que se mostrarán a lo largo de esta entrada, por lo tanto la mayor parte de la información y definiciones vienen de hacer búsquedas y recabar información como un cabrón.

La herramienta de la que vengo a hablar concretamente es de Oracle Reports Services. Estoy seguro de que much@s ya sabéis de que se trata y que riesgos de seguridad pueden ocasionar si dicha herramienta no cuenta con una configuración adecuada.

Oracle Reports Services consiste en una potente herramienta de diseño de informes basado en JEE 5 con arquitectura de múltiples niveles para acceder a cualquier fuente de datos, generar informes en cualquier formato popular, y distribuir informes a cualquier destino.

Está integrado con Oracle Fusion Middleware y Oracle Weblogic Server, lo que se traduce en una administración más simple de topologías e implementaciones complejas. Forma, junto con Oracle Forms, parte de la plataforma Middleware para diseñar aplicaciones de tipo empresarial.

El primer punto a tratar es que en su instalación, sino se adquiere una licencia, no se puede mantener actualizada la versión (eso he leído), por lo tanto será vulnerable a las vulnerabilidades que puedan afectar hasta el momento a dicha versión.

Una vez la introducción, procedemos a que nos puede ayudar Oracle Reports Services en nuestras andadas… #No me hago responsable del mal uso que se le pueda dar al siguiente contenido, ya que mi enfoque es meramente para fines educativos, queda totalmente prohibido usarlo para provocar daños.

Si nos encontramos con una plataforma Oracle Middleware, lo primero es probar a la ejecución de /frmservlet y /rwservlet, ya que corresponden al uso de los servicios Forms y Reports respectivamente. Destacar que hay más componentes que pertenecen a Oracle Reports, solo se mencionan los anteriores ya que son en los que nos centraremos en esta entrada. Para más información, ver:

https://docs.oracle.com/cd/E16764_01/bi.1111/b32121/pbr_cla002.htm.

Rwservlet podrá invocar el comando «help» por defecto como llamada principal, con lo que esta ejecución nos brinda la oportunidad de conocer los comandos que pueden ser ejecutados en Rwservlet. (Las descripciones que se mostrarán a continuación corresponden con las mostradas por los mismos comandos. Son los siguientes:

  • help: Muestra la salida de la ayuda.
  • showenv: Muestra el archivo de configuración de rwservlet.
  • showjobs: Muestra el estado de la cola de los servicios de Reports.
  • showmap: Muestra correspondencias de teclas de rwservlet.
  • showmyjobs: Muestra el estado de cola de los servicios de Reports, para un usuario específico.
  • showjobid: Muestra el estado de trabajo del servidor de Reports, con el identificado de trabajo «n».
  • killjobid: Elimina el trabajo con identificador «n».
  • parsequery: Analiza la consulta rwservlet y muestra la línea de comandos creada del servidor de Reports.
  • showauth: Muestra la página de conexión de Reports y ejecuta un informe.
  • delauth: Suprime cookies del indentificador de usuario de rwservlet.
  • getjobid: Obtiene los resultados de trabajo del servidor Reports con el identificador de trabajo «n».
  • getserverinfo: Visualiza información del servidor Reports.
  • killengine: Elimina el motor con el tipo «tipo_sistema» y el identificador «n».

Vamos a probar cualquiera de ellos, si el sistema no está configurado debidamente, es posible que nos permita ejecutar comandos que solo estarían permitidos al administrador. Sí esto es así, podremos obtener vulnerabilidades de divulgación de información… Comienza la party!!

 

 

Utilizando el comando showenv: Devuelve información sobre el entorno local, que mostrará por ejemplo rutas del servidor web.

 

 

 

Utilizando el comando showmap: Enumerar todos los mapas clave en el servidor.

 

 

Utilizando el comando parsequery: Con la ayuda de los mapas clave anteriores, podremos obtener la definición de los mismos.  Puede ser utilizado para calcular las credenciales y la ruta del servidor web.

 

Con esto nos devuelve el nombre del servidor, así como el usuario y la password. (También puede verse en showmap, pero… estamos haciendo una consulta…xD). En la imagen anterior, no se muestra el nombre interno del servidor, ya que debería aparecer lo siguiente: /server=»nombre-servidor».

– «Eso está muy bien Hurd4n0, pero y ahora qué?!!

Pues ahora no hay un ahora, hay un continuará. Uno en el que si queréis podéis acompañarme, y en el que también podéis ayudarme, para que entre tod@s, podamos llegar hasta las entrañas.

Para no dejaros la miel en los labios, os mostraré uno de los puntos de hasta donde podremos llegar:

Para que luego digáis que no soy buena gente… xD

Como ya he mencionado, no he tenido nunca ocasión de trabajar con estas herramientas, por tanto, mis conocimientos en ello son solo superficiales. No obstante, debido al alto número que he visto usando este tipo de tecnología, es probable que acabe investigando más al respecto para poder llevar a cabo una comprensión más profunda que me permita llevar a cabo pruebas de intrusión más sofisticadas.

Obviamente como todo, existen exploits públicos para versiones desactualizadas de los servicios mencionados anteriormente, pero no es mi intención valerme de ello, ya que lo que busco con esto es encontrar esos fallos de configuración que nosotros los humanos, cometemos constantemente.

Espero que os haya gustado la lectura. Siento que esta parte haya sido más teórica que práctica, y sobre todo, que pueda valer a alguien como punto de iniciación si alguna vez se encuentra con ello.

 

Un saludo, y hasta la próxima!