1 Oracle Es fácil presentar Oracle como una base de datos RDBMS relativamente temprana con una participación de mercado relativamente grande y que a menudo se utiliza en algunas bases de datos muy grandes. Además de su buen soporte para varios lenguajes SQL, también proporciona una variedad de paquetes enriquecidos, procedimientos almacenados e incluso admite la creación de bibliotecas y Java. Estas funciones poderosas brindan una gran comodidad para la piratería.
El propio Oracle tiene muchas cuentas predeterminadas y muchos procedimientos almacenados. Estos procedimientos almacenados son creados por el sistema. Muchas cuentas predeterminadas están abiertas al público. En los últimos años, se han publicado muchas vulnerabilidades de Oracle, incluidas las de desbordamiento y SQL. incluyendo inyecciones. Aquí, la vulnerabilidad de inyección SQL es particularmente importante, porque en Oracle, sin agregar otras palabras clave AUTHID CURRENT_USER, el proceso almacenado creado se ejecuta como creador cuando se ejecuta, y el público no tiene acceso a estos procesos almacenados. Todos tienen permisos para llamar, por lo que si. hay una inyección en el proceso almacenado incorporado, es fácil para los usuarios comunes actualizar a los permisos del sistema Oracle. El propio Oracle tiene muchas cuentas integradas, algunas de las cuales tienen contraseñas predeterminadas y permisos de CONEXIÓN. De esta manera, si el puerto de Oracle no está protegido por un firewall y se puede conectar de forma remota, se puede utilizar la cuenta predeterminada. Si ingresa al sistema de forma remota y luego usa el SQL del proceso almacenado en el sistema para inyectar una vulnerabilidad, el sistema fallará. Por supuesto, iniciar sesión en Oracle requiere un SID, pero no es difícil que el tnslintener de Oracle no establezca una contraseña. de forma predeterminada, puede usar tnscmd .pl usa el comando de servicios para averiguar el SID del sistema (en versiones más recientes, esta falla se ha solucionado. Este también es un modo muy clásico de invadir Oracle).
2 Antecedentes técnicos de Oracle Web Hacking
Tablas enriquecidas del sistema de Oracle. Casi toda la información en Oracle se almacena en tablas del sistema: el estado actual de la operación de la base de datos, la información actual del usuario, la información actual de la base de datos, la información sobre las bases de datos y las tablas a las que los usuarios pueden acceder... las tablas del sistema son la parte central de toda la base de datos. obtenga toda la información consultando las tablas del sistema que se necesitan con urgencia. Por ejemplo, sys.v_$option contiene información sobre la base de datos actual, como si es compatible con Java, etc., all_tables contiene toda la información de la tabla, all_tab_colmuns contiene toda la información de las columnas, etc., lo que nos proporciona una forma muy amplia de Obtener información Conveniencia, más adelante se describirá cómo utilizar las tablas del sistema para obtener información confidencial.
Entre las diversas vulnerabilidades de Oracle, es urgente hablar de la inyección de procedimientos almacenados. De hecho, no hay ningún misterio en que los procedimientos y funciones almacenados también reciban la entrada del usuario y luego la envíen al servidor de la base de datos para su análisis y ejecución. está seleccionado Si el esquema se construye en una cadena SQL y se implementa, es fácil mezclar datos y comandos, lo que resulta en una inyección SQL. Pero dependiendo de dónde se produzca la inyección, la naturaleza de la vulnerabilidad de la inyección también es diferente. Oracle usa PL/SQL y la vulnerabilidad ocurre en lenguajes DML como select. Dado que no admite la implementación de múltiples idiomas, si desea ejecutar sus propios lenguajes, como GRANT DBA TO LOVEHSELL y otros lenguajes DDL. , debe crear sus propias funciones o procedimientos almacenados; si no tiene los permisos pertinentes, también puede usar la inyección de cursor y usar el paquete dbms_sql para eludir las restricciones. La mayoría de las inyecciones son las inyecciones limitadas anteriores. Debe confiar en otros paquetes o cursores creados por usted mismo para lograr el propósito de aumentar los permisos. Sin embargo, todavía existen algunas vulnerabilidades muy comunes, pero el entorno de inyección es muy flexible, que es el usuario. input La inyección del bloque pl/sql anónimo colocado entre el principio y el final. En este caso, la inyección se puede inyectar directamente en varias palabras, casi sin restricciones. Se puede ver que es este tipo de vulnerabilidad brillante la que crea. El problema para nuestra web es que la tecnología de inyección ha devuelto tanta brillantez.
Bien, las mencionadas anteriormente son algunas de las tecnologías ofensivas de Oracle, pero en muchos entornos actuales, los servicios web están abiertos al mundo exterior y la base de datos del jefe backend está protegida por un firewall. Es imposible perder demasiada información detallada de la base de datos. Y ya no es posible iniciar sesión directamente. La base de datos está en funcionamiento. En este momento, es hora de considerar el uso de vulnerabilidades detenidas por la web para atacar la base de datos de respaldo. ¡Ahora echemos un vistazo a cómo desarrollar inyecciones en el entorno web de Oracle! Oracle puede funcionar bien en varios entornos web, y el impacto de varios entornos web en nuestras inyecciones no es grande. En asp, .net y jsp, es el. Los parámetros entrantes no se filtran en absoluto, pero debido a que los lenguajes .net y jsp son lenguajes de categorías fuertes, incluso si el lenguaje SQL no se filtra cuando se trata de inyecciones numéricas, pueden ocurrir errores al aceptar parámetros. La clase de cadena tiene más parámetros. En el entorno php, todo ' se escapará como ', en el entorno Oracle ' no se escapará (el escape correcto en el entorno Oracle debería ser ''), pero en nuestro propio El uso de 'en el discurso de inyección puede dañarse si se convierte en ', por lo que no se puede utilizar durante la inyección'. Excepto que no existen restricciones en el entorno web. En términos de base de datos, si el discurso se ejecuta en modo de parámetros, no se puede inyectar a menos que se use el modo de conexión de cadena (porque el modo de conexión de cadena es relativamente simple y, debido a algunas razones históricas, muchos programadores a menudo prefieren esta forma). ). El modo de conexión de cadena también se dividirá en dos tipos. Los parámetros están en palabras DML como seleccionar, actualizar e insertar, y los parámetros están en el bloque anónimo pl/sql. error, Entonces podemos juzgar fácilmente la categoría del discurso actual en función del error, que se discutirá más adelante. Es relativamente raro en el bloque anónimo pl/sql, pero no se descarta que no haya límite para dicha inyección. Puede implementar múltiples conversaciones y hacer cualquier cosa, que no es diferente del inicio de sesión local.
3 ideas básicas de Oracle Web Hacking
La siguiente parte habla sobre cómo determinar el objetivo. La determinación de los parámetros de inyección depende de todos. Lo principal es cómo determinar si la base de datos pertenece a Oracle. Es fácil de determinar en función de las características de la base de datos. admite la interpretación de categorías, pero no la admite; implementación separada Muchas palabras, Oracle tiene muchas tablas del sistema, como all_tables. Al acceder a estas tablas, también puede determinar si pertenecen a Oracle. también se puede utilizar para determinar, como utl_http.request, el idioma. También se pueden utilizar pequeños detalles para distinguir sistemas. Por ejemplo, || es un símbolo de unión en Oracle, pero no en otras bases de datos. |chr(123)=chr(123)| |chr(123) Si se puede ejecutar correctamente, debería ser Oracle. Además, algunos scripts no manejan el mensaje de error cuando se produce un error en la consulta de la base de datos y también pueden filtrarse. la base de datos de respaldo real, esto se puede ver claramente.
Lo siguiente que debe determinarse con urgencia es el tipo de punto de inyección. Por lo general, los parámetros que ingresamos son numéricos o simplemente de caracteres (lo que muchas otras personas llaman inyección de tipo de búsqueda en realidad debería clasificarse como carácter). categoría numérica, no piense en nada en absoluto. Es muy sencillo agregar caracteres de interpretación para que el enunciado se cierre con precisión. Si se trata de la categoría de caracteres, tendrá que pensar en cómo hacer que todo el enunciado sea preciso. generalmente agrega ' y - estos caracteres de inyección para organizar su propia situación de inyección. En algunas situaciones complejas, como un parámetro que aparece en varias palabras y lógica de SQL, deberá estructurar cuidadosamente las palabras de inyección que se adapten a la situación. Recuerde, solo necesitamos un entorno completo que pueda organizar fácilmente varios comandos de SQL :)