Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
requests-racer — Petite bibliothèque Python qui facilite l'exploitation de conditions de concurrence dans les applications web avec Requests. | Kitploit
Outils/GitHubGitHub/nccgroup/requests-racer
Analyse des VulnérabilitésExploitation d'Applications WebSécurité WebTests d'Intrusion
GitHubnccgroup/requests-racer

requests-racer

Petite bibliothèque Python qui facilite l'exploitation de conditions de concurrence dans les applications web avec Requests.

Voir le dépôt
16116il y a 3 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Site web

Requests-Racer

Requests-Racer est une petite bibliothèque Python qui vous permet d'utiliser la bibliothèque Requests pour soumettre plusieurs requêtes qui seront traitées par leurs serveurs de destination à peu près au même moment, même si les requêtes ont des destinations différentes ou des charges utiles de tailles différentes. Cela peut être utile pour détecter et exploiter les vulnérabilités de type course (race condition) dans les applications web. (Pour plus d'informations, voir motivation.md.)

Avertissement

Requests (et urllib3, que Requests utilise en interne) n'ont jamais été conçus pour vous permettre de faire ce genre de chose. Requests-Racer est donc contraint de recourir à des bidouilles assez horribles pour obtenir un contrôle fin sur la façon dont les requêtes sont soumises.

Ces bidouilles consistent notamment à modifier l'état privé de certains objets urllib3, de sorte qu'une mise à jour d'urllib3 qui reste rétrocompatible au regard de son API publique pourrait néanmoins casser Requests-Racer. Par conséquent, je recommande d'utiliser Requests-Racer dans un virtualenv et de l'installer avant Requests ou urllib3, afin qu'une version connue comme compatible de ces bibliothèques soit tirée comme dépendance.

Installation

Pour utiliser Requests-Racer, vous aurez besoin de Python 3.5 ou version ultérieure. Tout d'abord, créez et activez un environnement virtuel Python :

root@kitploit:~
python3 -m venv env
source env/bin/activate

Ensuite, téléchargez une copie de la bibliothèque et installez-la :

root@kitploit:~
git clone https://github.com/nccgroup/requests-racer.git
cd requests-racer
python setup.py install

Utilisation

Requests-Racer fonctionne en fournissant un adaptateur de transport alternatif pour Requests, appelé SynchronizedAdapter. Il collecte toutes les requêtes que vous faites à travers lui et ne les termine que lorsque la méthode finish_all() est appelée :

root@kitploit:~
import requests
from requests_racer import SynchronizedAdapter

s = requests.Session()
sync = SynchronizedAdapter()
s.mount('http://', sync)
s.mount('https://', sync)

resp1 = s.get('http://example.com/a', params={'hello': 'world'})
resp2 = s.post('https://example.net/b', data={'one': 'two'})

# at this point, the requests have been started but not finished.
# resp1 and resp2 should *not* be used.

sync.finish_all()

print(resp1.status_code)
print(resp2.text)

Pour simplifier votre code, vous pouvez aussi utiliser SynchronizedSession, qui est simplement un objet requests.Session qui monte automatiquement un SynchronizedAdapter pour HTTP[S] et qui délègue la méthode finish_all(). Le code ci-dessus peut donc être réécrit comme suit :

root@kitploit:~
from requests_racer import SynchronizedSession

s = SynchronizedSession()

resp1 = s.get('http://example.com/a', params={'hello': 'world'})
resp2 = s.post('https://example.net/b', data={'one': 'two'})

# at this point, the requests have been started but not finished.
# resp1 and resp2 should *not* be used.

s.finish_all()

print(resp1.status_code)
print(resp2.text)

Voici quelques mises en garde à garder à l'esprit, ainsi que des choses plus sophistiquées que vous pouvez faire :

  • SynchronizedAdapter n'est pas thread-safe.
  • Les requêtes faites via un SynchronizedAdapter ne mettront pas à jour l'objet session (par exemple, les cookies des en-têtes Set-Cookie ne seront pas ajoutés au cookie jar de la session).
  • Les redirections pourraient ne pas être suivies, essayez de les éviter.
  • Si une exception se produit pendant le démarrage d'une requête, elle sera relancée exactement comme avec les requêtes normales. En revanche, si une exception se produit pendant la fin d'une requête, elle ne sera pas relancée. À la place, la réponse à la requête aura le code de statut 999 et contiendra une traceback dans son attribut .text.
  • SynchronizedSession.from_regular_session construit un SynchronizedSession à partir d'une instance de requests.Session. Cela est utile si vous devez faire quelques requêtes simples pour, par exemple, vous connecter à un service et obtenir un cookie de session dont vous aurez besoin pour les requêtes synchronisées.
  • SynchronizedAdapter et SynchronizedSession acceptent un paramètre optionnel appelé , qui donne le nombre maximal de threads que l'adaptateur utilisera. S'il n'est pas spécifié, l'adaptateur utilisera un thread par requête.

Voir benchmark/ pour des notes sur les performances.

Licence

Copyright (C) 2019 Aleksejs Popovs, NCC Group

Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence publique générale GNU telle que publiée par la Free Software Foundation, soit la version 3 de la Licence, soit (à votre convenance) toute version ultérieure.

Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de QUALITÉ MARCHANDE ou d'ADÉQUATION À UN USAGE PARTICULIER. Voir la Licence publique générale GNU pour plus de détails.

Vous devriez avoir reçu une copie de la Licence publique générale GNU avec ce programme. Sinon, voir https://www.gnu.org/licenses/.

Télécharger l’outil
num_threads
  • finish_all() accepte un paramètre optionnel appelé timeout, qui donne le temps maximal (en secondes) pendant lequel l'adaptateur attendra qu'un thread se termine.