En muchos casos, cuando los intrusos utilizan la inyección de herramientas, descubren que la herramienta no puede descifrar los nombres de las tablas y los nombres de los campos. Esto se debe a que todas las herramientas tienen su propio diccionario, que incluye los nombres de las tablas y los nombres de los campos, si el administrador los especifica. El nombre del campo se cambia para que no esté en este diccionario, entonces la herramienta que utilizamos no podrá adivinar el nombre del campo y el nombre de la tabla. En el siguiente artículo, comenzaremos analizando la inyección manual para construir una línea de defensa contra la inyección SQL.
El intruso construirá una condición de juicio simple para determinar si la página tiene una vulnerabilidad de inyección. Los pasos generales son los siguientes:
La página que se detectará aquí es http://127.0.0.1/111/view.asp?id=198
1. Intruso Si desea inyectar manualmente un sitio, debe configurar el navegador para asegurarse de que se puedan devolver mensajes de error durante la inyección manual. Los pasos son los siguientes:
haga clic derecho en el navegador y seleccione "Propiedades" y seleccione ". Avanzado" en el cuadro de diálogo emergente. Como se muestra a continuación:
Figura 1
Luego retire el gancho frente a "Mostrar mensajes de error HTTP amigables" y finalmente haga clic en el botón "Aplicar".
2. El intruso envía la siguiente URL al navegador:
http://127.0.0.1/111/view.asp?id=198 y 1=1.
Si hay una vulnerabilidad de inyección SQL, se puede consultar la base de datos 1=. 1 es una identidad Ignorar, por lo que se devolverá una página normal. Esta página es la misma que http://127.0.0.1/111/view.asp?id=198 . En este momento, el intruso juzgará que este sitio. se espera que sea inyectado. Si se devuelven algunos mensajes de error, algunos intrusos rudimentarios pueden abandonar el sitio.
3. El intruso envía además la siguiente URL al navegador:
http://127.0.0.1/111/view.asp?id=198 y 1=2
1=2 es una desigualdad de identidad. Si el sitio admite consultas a la base de datos, probablemente devolverá información como se muestra en la siguiente figura:
Figura 2
Generalmente, si el intruso aparece como se muestra en la figura anterior, es básicamente seguro que este sitio puede llevar a cabo ataques de inyección SQL.
Sin embargo, en muchos casos, un intruso puede determinar rápidamente si el sitio de destino tiene una vulnerabilidad de inyección SQL simplemente usando una comilla simple y enviando la siguiente URL al navegador:
http://127.0.0.1/111/view.asp? id=198'if La devolución de la siguiente información indica que existe más de la mitad de posibilidades de que exista una vulnerabilidad de inyección:
Proveedor Microsoft OLE DB para controladores ODBC error '80040e14'
[Microsoft] [Controlador ODBC Microsoft Access] El error de sintaxis de la cadena está en la expresión de consulta 'id =1'. /list.asp, línea 50
4. En este momento, el intruso comienza a construir una declaración de consulta SQL especial para consultar el nombre de la tabla de la base de datos del sitio y envía la siguiente declaración a la URL:
http://127.0.0.1/ 111/view.asp?id= 198 y existe (seleccione * de admin)
Esta declaración consulta la base de datos para ver si la tabla de administración existe. Si existe, se devolverá una página normal. Si la tabla no existe, se producirá un error. Se devolverá la página. Generalmente, los intrusos probarán primero los nombres de tablas de uso común, que también son nombres de tablas y nombres de campos que existen en el diccionario de contraseñas de las herramientas de inyección generales. Si el nombre de la tabla no se encuentra entre los nombres de tabla más utilizados, el intruso utilizará ingeniería social para adivinar el nombre de la tabla. En este caso, el intruso tiene pocas posibilidades de adivinar el nombre de la tabla.
5. Después de obtener el nombre de la tabla, el intruso comienza a construir una declaración de consulta para consultar el nombre del campo de la base de datos y envía la siguiente declaración a la URL:
http://127.0.0.1/111/view.asp?id=198 y existe (seleccione usuario de administrador)
esta declaración es para consultar la tabla de administración en la base de datos si el campo de usuario existe. Si existe, se devolverá una página normal. Si no existe, se devolverá una página de error.
7. A continuación, el intruso comienza a determinar el valor del campo id y construye la siguiente declaración para consultar el valor de id: http://127.0.0.1/111/view.asp?id=198 y existe (seleccione id from admin donde id=1 )
devuelve la página correcta si es correcta y devuelve la página de error si es incorrecta.
6. Después de adivinar el nombre de la tabla y el nombre del campo, el intruso comenzó a construir una declaración de consulta para adivinar la longitud de la cuenta del administrador y envió la siguiente declaración a la URL:
http://127.0.0.1/111/view.asp?id = 198 y existe (seleccione id de administrador donde len (usuario) <6 e id = 1)
Esta declaración es para consultar el rango de longitud del nombre de usuario en el campo de usuario, lo que significa que la longitud es menor que 6. Si es correcto volverá a la página normal, si es incorrecto volverá a la página de error.
Limite el alcance y luego cree la siguiente declaración para determinar la longitud específica del nombre de usuario:
http://127.0.0.1/111/view.asp?id=198 y existe (seleccione la identificación del administrador donde len(usuario)= 5 y id=1)
Correcto Si ocurre el error, se devolverá la página normal. Si ocurre el error, se devolverá la página de error.
8. A continuación, el intruso ingresa al paso final para construir una declaración para consultar el nombre de usuario del administrador y envía la siguiente declaración a la URL: http://127.0.0.1/111/view.asp?id=198 y existe ( seleccione count(*) from admin donde left(user,1)='a')
Esta declaración es para adivinar el nombre de usuario desde el lado izquierdo del nombre de usuario hasta a. Si es incorrecto, volverá a la página de error. Guess En la segunda posición, la declaración modificada es (user,2) = 'ad', y así sucesivamente.
Una vez que el intruso obtiene el nombre de usuario y la contraseña, la inyección está a punto de completarse.
En cuanto al método de prevención, es muy simple. Del proceso anterior, podemos ver que si el nombre de la tabla y el nombre del campo no se encuentran entre los nombres de la tabla y los nombres de campo más utilizados, el intruso utilizará la ingeniería social para adivinar. El nombre de la tabla y el nombre del campo modificados por el administrador son lo suficientemente complejos, el intruso invadirá. Si el atacante aún no puede lograr el objetivo, existe otro método de defensa simple que consiste en descargar algunos parches anti-inyección de Internet y aplicarlos. El método es modificar los archivos del sitio y agregar declaraciones de filtrado para filtrar las declaraciones enviadas por los intrusos para evitar inyecciones. Sí, no les explicaré su principio aquí.