¿Cuál es el proceso general de inyección SQL? 3 Esto es imposible hoy en día, a muchas personas les gusta consultar el contenido. Una vez que aparece un mensaje de error que indica que iis no se cierra, puede utilizar el método de error para obtener fácilmente el contenido de la biblioteca. conexión de base de datos. Nombre de usuario:; y usuario>0 fueron propuestos por Xiaozhuzi. Citaré un pasaje del "Libro de inyección SQL" para explicar: ----- ---------- ---- - ----- ---------- ---------------------------------- - ------- "El punto clave es y usuario>0. Sabemos que usuario es una variable incorporada de SQL Server. Su valor es el nombre de usuario de la conexión actual y su tipo es nvarchar. Tome un nvarchar value y compararlo con el número 0 de int, el sistema primero intentará convertir el valor nvarchar en un valor nvarchar. Por supuesto, el mensaje de error de SQLServer será. : convert nvarch" ----- -- -------- ---------- ---------- Lo entenderemos cuando veamos esto. El principio de El informe de errores consiste en utilizar las tablas del sistema integradas de SQLserver para realizar consultas de conversión. Se producirá un error durante el proceso de conversión y se mostrará en la página web. Además, declaraciones como y 1 = (seleccione el top 1). usuario de admin) también se puede mostrar. ;y db_name()>0 entonces es el nombre de la base de datos de Storm. Una vez que ocurre un error de IIS, también puede usar unión (consulta conjunta) para verificar el contenido. La declaración principal es Ordenar por 10 y 1 = 2 unión seleccionar 1,2,3,4,5,6,7,8,9. ,10 de admin Y 1=2 union select 1,2,3,user,5,passwd ,7,8,9,10 de admin La clasificación anterior por 10 es principalmente para verificar la cantidad de campos de administrador en la tabla. nombre. Puedes adivinar. Usuario y contraseña son nombres de columna. De todos modos, el retorno correcto significa correcto y el retorno anormal significa error. Además, existe un método muy común para dividir el código ascll por la mitad. Conozca el nombre de la columna especificada, como la longitud del contenido en usuario y (seleccione len. ¿La longitud en (usuario) de admin)=2 es de 2 dígitos? La consulta devuelve un número de aumento o disminución incorrecto. Generalmente, este número no debería. Si es demasiado grande, ríndete. Supongo que los símbolos lógicos redundantes se pueden cambiar de acuerdo con diferentes requisitos más adelante. Mayor que < menor que = declaraciones, actualizar declaraciones, = puede representar y pasar símbolos <> no. igual Después de conocer la longitud, puede comenzar a adivinar. También hay (Seleccione el 1 superior asc(mid(user,n,1)) de admin)>100 n son los primeros dígitos del nombre de la tabla adivinada. la longitud del último dígito es la longitud de la columna que acaba de adivinar y resolver. Y (Seleccione el 1 superior asc( mid(user,1,1)) de admin) > mayor que 100, lo cual es correcto, y luego significa que el primer carácter ASCLL en el código de USUARIO es mayor que 100, y luego al adivinar > 120, el error devuelto está entre 100 y 120, y luego avanza gradualmente.
120, y luego redúzcalo paso a paso, y finalmente obtenga el carácter correcto XXX, y luego use el convertidor ASCLL para convertirlo en un carácter normal. Luego está el segundo Y (Seleccione el 1 superior asc(mid(user,2, 1)) del administrador)> Se ha adivinado 100. Agregue el nombre de la tabla después del nombre de la columna de la URL o adivine primero para devolver la cuenta correcta, lo que significa que el código ascll es mayor que 100. Luego adivine hacia adelante para guiar el error. y reemplace el código ascll adivinado. Simplemente use el convertidor ascll para convertirlo. El chino es un número negativo para obtener el valor absoluto y (seleccione el 1 superior asb(asc(asc(mid(user,n,1)))). from admin)> 15320 para obtener el segundo Y (Seleccione el 1 superior asc(asc(mid(user,2,1)) from admin)> 15320 después del segundo Y (Seleccione el 1 superior asc(mid(user,2, 1)) del administrador) obtenga gt; Después de obtener 15320, recuerde agregar - antes del número; de lo contrario, el convertidor ASCLL no puede convertir. El código ASCLL en chino es -23423, por lo que es bastante problemático adivinar. , pero tiene el mejor efecto y la cobertura más amplia. Método 2 Vulnerabilidad de omisión de autenticación en segundo plano La vulnerabilidad de omisión de autenticación en segundo plano es 'o'='o'. Por ejemplo, si la contraseña de la cuenta del administrador es admin, entonces la base de datos en segundo plano. La declaración de consulta es usuario=request(" usuario") passwd=request("passwd") sql='select admin from adminbate donde usuario='&'''&user&'''&'''&'and passwd='& '''&passwd&'''' Entonces, si uso ' o 'a'='a' como nombre de usuario y contraseña, entonces la consulta se convierte en select admin de adminbate donde user='' o 'a'='a' y passwd= '' o 'a' = 'a' En este caso, de acuerdo con las reglas aritméticas, hay 4 declaraciones de consulta aquí, luego el resultado de la consulta es Falso o verdadero y Falso o verdadero, primero calcule o y luego calcule o, el final El resultado es verdadero, para que pueda ingresar en segundo plano. Hay dos condiciones para que exista esta vulnerabilidad. La primera es: al verificar el código en segundo plano, la declaración de consulta de la cuenta y la contraseña deben ser las mismas. , similar a sql="select * from admin donde nombre de usuario ='"&nombre de usuario&'& "passwd='"& "passwd&'& "passwd='"& "passwd&'& "passwd='"& "passwd&'&". passwd&' Una vez que la contraseña de la cuenta está separada de la consulta, primero verifique el número de cuenta y luego verifique la contraseña. En este caso, no hay forma. El segundo es verificar si la contraseña está cifrada una vez que está cifrada mediante MD5 u otro cifrado, depende de si la primera condición todavía existe. Si no se puede cumplir la primera condición, entonces no hay posibilidad. Con respecto a cómo defenderse contra la inyección SQL, hay muchos en Internet, y hablaré sobre algunos aquí. Si escribe código anti-inyección usted mismo, generalmente primero define una función y luego escribe las palabras clave que se filtrarán en ella. . Palabras clave como seleccionar; ""; formulario; etc. Estas palabras clave son las palabras más utilizadas en las declaraciones de consulta, una vez filtradas, los datos construidos por el usuario no participarán completamente en la operación cuando se envíen a la base de datos.