Contournement de la Limite de Taux
Reading time: 8 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
Techniques de contournement de la limite de taux
Exploration des Points de Terminaison Similaires
Des tentatives devraient ĂȘtre faites pour effectuer des attaques par force brute sur des variations du point de terminaison ciblĂ©, comme /api/v3/sign-up
, y compris des alternatives comme /Sing-up
, /SignUp
, /singup
, /api/v1/sign-up
, /api/sign-up
, etc.
Incorporation de CaractĂšres Vides dans le Code ou les ParamĂštres
L'insertion de bytes vides comme %00
, %0d%0a
, %0d
, %0a
, %09
, %0C
, %20
dans le code ou les paramĂštres peut ĂȘtre une stratĂ©gie utile. Par exemple, ajuster un paramĂštre Ă code=1234%0a
permet d'étendre les tentatives à travers des variations d'entrée, comme l'ajout de caractÚres de nouvelle ligne à une adresse e-mail pour contourner les limitations de tentatives.
Manipulation de l'Origine IP via les En-tĂȘtes
Modifier les en-tĂȘtes pour altĂ©rer l'origine IP perçue peut aider Ă Ă©chapper Ă la limitation de taux basĂ©e sur l'IP. Des en-tĂȘtes tels que X-Originating-IP
, X-Forwarded-For
, X-Remote-IP
, X-Remote-Addr
, X-Client-IP
, X-Host
, X-Forwared-Host
, y compris l'utilisation de plusieurs instances de X-Forwarded-For
, peuvent ĂȘtre ajustĂ©s pour simuler des requĂȘtes provenant de diffĂ©rentes IP.
X-Originating-IP: 127.0.0.1
X-Forwarded-For: 127.0.0.1
X-Remote-IP: 127.0.0.1
X-Remote-Addr: 127.0.0.1
X-Client-IP: 127.0.0.1
X-Host: 127.0.0.1
X-Forwared-Host: 127.0.0.1
# Double X-Forwarded-For header example
X-Forwarded-For:
X-Forwarded-For: 127.0.0.1
Changer d'autres en-tĂȘtes
Il est recommandĂ© de modifier d'autres en-tĂȘtes de requĂȘte tels que l'agent utilisateur et les cookies, car ceux-ci peuvent Ă©galement ĂȘtre utilisĂ©s pour identifier et suivre les modĂšles de requĂȘtes. Changer ces en-tĂȘtes peut empĂȘcher la reconnaissance et le suivi des activitĂ©s du demandeur.
Tirer parti du comportement de la passerelle API
Certaines passerelles API sont configurĂ©es pour appliquer des limites de taux en fonction de la combinaison de l'endpoint et des paramĂštres. En variant les valeurs des paramĂštres ou en ajoutant des paramĂštres non significatifs Ă la requĂȘte, il est possible de contourner la logique de limitation de taux de la passerelle, rendant chaque requĂȘte unique. Par exemple /resetpwd?someparam=1
.
Se connecter Ă votre compte avant chaque tentative
Se connecter à un compte avant chaque tentative, ou chaque ensemble de tentatives, peut réinitialiser le compteur de limite de taux. Cela est particuliÚrement utile lors des tests de fonctionnalités de connexion. Utiliser une attaque Pitchfork dans des outils comme Burp Suite, pour faire tourner les identifiants toutes les quelques tentatives et s'assurer que les redirections sont marquées, peut efficacement redémarrer les compteurs de limite de taux.
Utiliser des réseaux de proxy
DĂ©ployer un rĂ©seau de proxies pour distribuer les requĂȘtes sur plusieurs adresses IP peut contourner efficacement les limites de taux basĂ©es sur l'IP. En acheminant le trafic Ă travers divers proxies, chaque requĂȘte semble provenir d'une source diffĂ©rente, diluant ainsi l'efficacitĂ© de la limite de taux.
Répartir l'attaque sur différents comptes ou sessions
Si le systÚme cible applique des limites de taux sur une base par compte ou par session, répartir l'attaque ou le test sur plusieurs comptes ou sessions peut aider à éviter la détection. Cette approche nécessite de gérer plusieurs identités ou jetons de session, mais peut efficacement répartir la charge pour rester dans les limites autorisées.
Continuez Ă essayer
Notez que mĂȘme si une limite de taux est en place, vous devriez essayer de voir si la rĂ©ponse est diffĂ©rente lorsque le OTP valide est envoyĂ©. Dans ce post, le chasseur de bugs a dĂ©couvert que mĂȘme si une limite de taux est dĂ©clenchĂ©e aprĂšs 20 tentatives infructueuses en rĂ©pondant avec 401, si le valide Ă©tait envoyĂ©, une rĂ©ponse 200 Ă©tait reçue.
Abuser du multiplexage HTTP/2 et du pipelining des requĂȘtes (2023-2025)
Les implĂ©mentations modernes de limiteurs de taux comptent frĂ©quemment les connexions TCP (ou mĂȘme les requĂȘtes HTTP/1.1 individuelles) au lieu du nombre de flux HTTP/2 qu'une connexion contient. Lorsque la mĂȘme connexion TLS est rĂ©utilisĂ©e, un attaquant peut ouvrir des centaines de flux parallĂšles, chacun transportant une requĂȘte distincte, tandis que la passerelle ne dĂ©duit qu'une requĂȘte du quota.
# Send 100 POST requests in a single HTTP/2 connection with curl
seq 1 100 | xargs -I@ -P0 curl -k --http2-prior-knowledge -X POST \
-H "Content-Type: application/json" \
-d '{"code":"@"}' https://target/api/v2/verify &>/dev/null
Si le limiteur protĂšge uniquement /verify
mais pas /api/v2/verify
, vous pouvez Ă©galement combiner la confusion de chemin avec le multiplexage HTTP/2 pour un extrĂȘmement rapide OTP ou brute-forcing de crĂ©dentiels.
đŸ Astuce : Le Turbo Intruder de PortSwigger prend en charge HTTP/2 et vous permet d'affiner
maxConcurrentConnections
etrequestsPerConnection
pour automatiser cette attaque.
Aliases GraphQL & opérations groupées
GraphQL permet au client d'envoyer plusieurs requĂȘtes ou mutations logiquement indĂ©pendantes dans une seule requĂȘte en les prĂ©fixant avec des alias. Comme le serveur exĂ©cute chaque alias mais que le limiteur de dĂ©bit compte souvent seulement une requĂȘte, c'est un contournement fiable pour le throttling de connexion ou de rĂ©initialisation de mot de passe.
mutation bruteForceOTP {
a: verify(code:"111111") { token }
b: verify(code:"222222") { token }
c: verify(code:"333333") { token }
# ⊠add up to dozens of aliases âŠ
}
Regardez la réponse : exactement un alias renverra 200 OK lorsque le code correct est atteint, tandis que les autres sont soumis à une limitation de taux.
La technique a Ă©tĂ© popularisĂ©e par la recherche de PortSwigger sur âGraphQL batching & aliasesâ en 2023 et a Ă©tĂ© responsable de nombreux paiements rĂ©cents de bug-bounty.
Abus des points de terminaison REST batch ou bulk
Certaines API exposent des points de terminaison d'assistance tels que /v2/batch
ou acceptent un tableau d'objets dans le corps de la requĂȘte. Si le limiteur est placĂ© uniquement devant les points de terminaison legacy, envelopper plusieurs opĂ©rations dans une seule requĂȘte bulk peut complĂštement contourner la protection.
[
{"path": "/login", "method": "POST", "body": {"user":"bob","pass":"123"}},
{"path": "/login", "method": "POST", "body": {"user":"bob","pass":"456"}}
]
ChronomĂ©trage de la fenĂȘtre glissante
Un limiteur classique de type token-bucket ou leaky-bucket se rĂ©initialise Ă une frontiĂšre temporelle fixe (par exemple, chaque minute). Si la fenĂȘtre est connue (par exemple, via des messages d'erreur tels que X-RateLimit-Reset: 27
), effectuez le nombre maximum de requĂȘtes autorisĂ©es juste avant que le seau ne se rĂ©initialise, puis effectuez immĂ©diatement une autre pleine rafale.
|<-- 60 s window â->|<-- 60 s window â->|
###### ######
Cette simple optimisation peut plus que doubler votre débit sans toucher à aucune autre technique de contournement.
Outils
- https://github.com/Hashtag-AMIN/hashtag-fuzz : Outil de fuzzing qui prend en charge la randomisation des en-tĂȘtes, des listes de mots en morceaux et la rotation de proxy en round-robin.
- https://github.com/ustayready/fireprox : CrĂ©e automatiquement des points de terminaison AWS API Gateway jetables afin que chaque requĂȘte provienne d'une adresse IP diffĂ©rente â parfait pour vaincre le throttling basĂ© sur l'IP.
- Burp Suite â IPRotate + extension : Utilise un pool de proxies SOCKS/HTTP (ou AWS API Gateway) pour faire tourner l'IP source de maniĂšre transparente lors des attaques Intruder et Turbo Intruder.
- Turbo Intruder (BApp) : Moteur d'attaque haute performance prenant en charge le multiplexage HTTP/2 ; réglez
requestsPerConnection
Ă 100-1000 pour regrouper des centaines de requĂȘtes en une seule connexion.
Références
- PortSwigger Research â âBypassing rate limits with GraphQL aliasingâ (2023) https://portswigger.net/research/graphql-authorization-bypass
- PortSwigger Research â âHTTP/2: The Sequel is Always Worseâ (section Connection-based throttling) (2024) https://portswigger.net/research/http2
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.