Rate Limit Bypass
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
Rate limit bypass techniques
Exploring Similar Endpoints
๋์ ์๋ํฌ์ธํธ์ ๋ณํ์ ๋ํด ๋ฌด์ฐจ๋ณ ๊ณต๊ฒฉ์ ์๋ํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด /api/v3/sign-up์ ๊ฐ์ ์๋ํฌ์ธํธ์ ๋ณํ์ผ๋ก๋ /Sing-up, /SignUp, /singup, /api/v1/sign-up, /api/sign-up ๋ฑ์ด ์์ต๋๋ค.
Incorporating Blank Characters in Code or Parameters
์ฝ๋๋ ๋งค๊ฐ๋ณ์์ %00, %0d%0a, %0d, %0a, %09, %0C, %20์ ๊ฐ์ ๋น ๋ฐ์ดํธ๋ฅผ ์ฝ์
ํ๋ ๊ฒ์ ์ ์ฉํ ์ ๋ต์ด ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋งค๊ฐ๋ณ์๋ฅผ code=1234%0a๋ก ์กฐ์ ํ๋ฉด ์
๋ ฅ์ ๋ณํ์ ํตํด ์๋๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ด๋ฉ์ผ ์ฃผ์์ ์ค ๋ฐ๊ฟ ๋ฌธ์๋ฅผ ์ถ๊ฐํ์ฌ ์๋ ์ ํ์ ์ฐํํ ์ ์์ต๋๋ค.
Manipulating IP Origin via Headers
ํค๋๋ฅผ ์์ ํ์ฌ ์ธ์๋ IP ์ถ์ฒ๋ฅผ ๋ณ๊ฒฝํ๋ฉด IP ๊ธฐ๋ฐ ์๋ ์ ํ์ ํผํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. X-Originating-IP, X-Forwarded-For, X-Remote-IP, X-Remote-Addr, X-Client-IP, X-Host, X-Forwared-Host์ ๊ฐ์ ํค๋๋ฅผ ์กฐ์ ํ์ฌ ์ฌ๋ฌ ์ธ์คํด์ค์ X-Forwarded-For๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ 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
๋ค๋ฅธ ํค๋ ๋ณ๊ฒฝํ๊ธฐ
user-agent ๋ฐ ์ฟ ํค์ ๊ฐ์ ๋ค๋ฅธ ์์ฒญ ํค๋๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค. ์ด๋ฌํ ํค๋๋ ์์ฒญ ํจํด์ ์๋ณํ๊ณ ์ถ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์ด๋ฌํ ํค๋๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์์ฒญ์์ ํ๋์ ์ธ์ํ๊ณ ์ถ์ ํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
API ๊ฒ์ดํธ์จ์ด ๋์ ํ์ฉํ๊ธฐ
์ผ๋ถ API ๊ฒ์ดํธ์จ์ด๋ ์๋ํฌ์ธํธ์ ๋งค๊ฐ๋ณ์์ ์กฐํฉ์ ๋ฐ๋ผ ์๋ ์ ํ์ ์ ์ฉํ๋๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ๋งค๊ฐ๋ณ์ ๊ฐ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ค์ํ์ง ์์ ๋งค๊ฐ๋ณ์๋ฅผ ์์ฒญ์ ์ถ๊ฐํจ์ผ๋ก์จ ๊ฒ์ดํธ์จ์ด์ ์๋ ์ ํ ๋
ผ๋ฆฌ๋ฅผ ์ฐํํ ์ ์์ผ๋ฉฐ, ๊ฐ ์์ฒญ์ด ๊ณ ์ ํ๊ฒ ๋ณด์ด๋๋ก ๋ง๋ค ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด /resetpwd?someparam=1.
๊ฐ ์๋ ์ ์ ๊ณ์ ์ ๋ก๊ทธ์ธํ๊ธฐ
๊ฐ ์๋ ๋๋ ๊ฐ ์๋ ์ธํธ ์ ์ ๊ณ์ ์ ๋ก๊ทธ์ธํ๋ฉด ์๋ ์ ํ ์นด์ดํฐ๊ฐ ์ฌ์ค์ ๋ ์ ์์ต๋๋ค. ์ด๋ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ํ ์คํธํ ๋ ํนํ ์ ์ฉํฉ๋๋ค. Burp Suite์ ๊ฐ์ ๋๊ตฌ์์ Pitchfork ๊ณต๊ฒฉ์ ํ์ฉํ์ฌ ๋ช ๋ฒ์ ์๋๋ง๋ค ์๊ฒฉ ์ฆ๋ช ์ ํ์ ์ํค๊ณ ๋ฆฌ๋๋ ์ ์ ๋ฐ๋ฅด๋๋ก ํ์ํ๋ฉด ์๋ ์ ํ ์นด์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์์ํ ์ ์์ต๋๋ค.
ํ๋ก์ ๋คํธ์ํฌ ํ์ฉํ๊ธฐ
์ฌ๋ฌ IP ์ฃผ์์ ์์ฒญ์ ๋ถ์ฐ์ํค๊ธฐ ์ํด ํ๋ก์ ๋คํธ์ํฌ๋ฅผ ๋ฐฐํฌํ๋ฉด IP ๊ธฐ๋ฐ ์๋ ์ ํ์ ํจ๊ณผ์ ์ผ๋ก ์ฐํํ ์ ์์ต๋๋ค. ๋ค์ํ ํ๋ก์๋ฅผ ํตํด ํธ๋ํฝ์ ๋ผ์ฐํ ํ๋ฉด ๊ฐ ์์ฒญ์ด ๋ค๋ฅธ ์ถ์ฒ์์ ๋ฐ์ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฏ๋ก ์๋ ์ ํ์ ํจ๊ณผ๊ฐ ํฌ์๋ฉ๋๋ค.
๋ค๋ฅธ ๊ณ์ ์ด๋ ์ธ์ ์ ๊ณต๊ฒฉ ๋ถ์ฐํ๊ธฐ
๋์ ์์คํ ์ด ๊ณ์ ๋ณ ๋๋ ์ธ์ ๋ณ๋ก ์๋ ์ ํ์ ์ ์ฉํ๋ ๊ฒฝ์ฐ, ์ฌ๋ฌ ๊ณ์ ์ด๋ ์ธ์ ์ ๊ณต๊ฒฉ ๋๋ ํ ์คํธ๋ฅผ ๋ถ์ฐ์ํค๋ฉด ํ์ง๋ฅผ ํผํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ๋ฌ ์ ์ ๋๋ ์ธ์ ํ ํฐ์ ๊ด๋ฆฌํด์ผ ํ์ง๋ง, ํ์ฉ ๊ฐ๋ฅํ ํ๋ ๋ด์์ ๋ถํ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ถ์ฐ์ํฌ ์ ์์ต๋๋ค.
๊ณ์ ์๋ํ๊ธฐ
์๋ ์ ํ์ด ์ค์ ๋์ด ์๋๋ผ๋ ์ ํจํ OTP๊ฐ ์ ์ก๋ ๋ ์๋ต์ด ๋ค๋ฅธ์ง ํ์ธํด ๋ณด์์ผ ํฉ๋๋ค. ์ด ๊ฒ์๋ฌผ์์ ๋ฒ๊ทธ ํํฐ๋ 20๋ฒ์ ์คํจํ ์๋ ํ 401๋ก ์๋ตํ๋๋ผ๋ ์๋ ์ ํ์ด ๋ฐ์ํ๋๋ผ๋ ์ ํจํ OTP๊ฐ ์ ์ก๋๋ฉด 200 ์๋ต์ ๋ฐ์๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
HTTP/2 ๋ค์คํ ๋ฐ ์์ฒญ ํ์ดํ๋ผ์ด๋ ๋จ์ฉํ๊ธฐ (2023-2025)
ํ๋์ ์๋ ์ ํ๊ธฐ ๊ตฌํ์ ์ข ์ข TCP ์ฐ๊ฒฐ(๋๋ ๊ฐ๋ณ HTTP/1.1 ์์ฒญ)์ ๊ณ์ฐํ๋ ๋์ ์ฐ๊ฒฐ์ด ํฌํจํ๋ HTTP/2 ์คํธ๋ฆผ ์๋ฅผ ๊ณ์ฐํฉ๋๋ค. ๋์ผํ TLS ์ฐ๊ฒฐ์ด ์ฌ์ฌ์ฉ๋ ๋, ๊ณต๊ฒฉ์๋ ์๋ฐฑ ๊ฐ์ ๋ณ๋ ฌ ์คํธ๋ฆผ์ ์ด ์ ์์ผ๋ฉฐ, ๊ฐ ์คํธ๋ฆผ์ ๋ณ๋์ ์์ฒญ์ ์ ๋ฌํ์ง๋ง ๊ฒ์ดํธ์จ์ด๋ ํ ๋น๋์์ ํ๋์ ์์ฒญ๋ง ์ฐจ๊ฐํฉ๋๋ค.
# 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
If the limiter protects only /verify but not /api/v2/verify, you can also combine path confusion with HTTP/2 multiplexing for extremely high-speed OTP or credential brute-forcing.
๐พ Tip: PortSwiggerโs Turbo Intruder supports HTTP/2 and lets you fine-tune
maxConcurrentConnectionsandrequestsPerConnectionto automate this attack.
GraphQL aliases & batched operations
GraphQL์ ํด๋ผ์ด์ธํธ๊ฐ ํ๋์ ์์ฒญ์์ ์ฌ๋ฌ ๊ฐ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ ๋ฆฝ์ ์ธ ์ฟผ๋ฆฌ ๋๋ ๋ณ์ด๋ฅผ ์ ์กํ ์ ์๋๋ก ๋ณ์นญ์ผ๋ก ์ ๋์ฌ๋ฅผ ๋ถ์ ๋๋ค. ์๋ฒ๋ ๋ชจ๋ ๋ณ์นญ์ ์คํํ์ง๋ง ์๋ ์ ํ๊ธฐ๋ ์ข ์ข ํ๋์ ์์ฒญ๋ง ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์, ์ด๋ ๋ก๊ทธ์ธ ๋๋ ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ์๋ ์ ํ์ ์ฐํํ๋ ์ ๋ขฐํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค.
mutation bruteForceOTP {
a: verify(code:"111111") { token }
b: verify(code:"222222") { token }
c: verify(code:"333333") { token }
# โฆ add up to dozens of aliases โฆ
}
์ ํํ ํ๋์ ๋ณ์นญ๋ง์ด ์ฌ๋ฐ๋ฅธ ์ฝ๋๊ฐ ํธ์ถ๋ ๋ 200 OK๋ฅผ ๋ฐํํ๋ฉฐ, ๋๋จธ์ง๋ ์๋ ์ ํ์ด ์์ต๋๋ค.
์ด ๊ธฐ์ ์ 2023๋ PortSwigger์ โGraphQL batching & aliasesโ ์ฐ๊ตฌ์ ์ํด ๋์คํ๋์์ผ๋ฉฐ, ์ต๊ทผ ๋ง์ ๋ฒ๊ทธ ๋ฐ์ดํฐ ์ง๊ธ์ ์์ธ์ด ๋์์ต๋๋ค.
๋ฐฐ์น ๋๋ ๋๋ REST ์๋ํฌ์ธํธ์ ๋จ์ฉ
์ผ๋ถ API๋ /v2/batch์ ๊ฐ์ ๋์ฐ๋ฏธ ์๋ํฌ์ธํธ๋ฅผ ๋
ธ์ถํ๊ฑฐ๋ ์์ฒญ ๋ณธ๋ฌธ์์ ๊ฐ์ฒด ๋ฐฐ์ด์ ์๋ฝํฉ๋๋ค. ์ ํ๊ธฐ๊ฐ ๊ตฌ์ ์๋ํฌ์ธํธ ์์๋ง ๋ฐฐ์น๋ ๊ฒฝ์ฐ, ์ฌ๋ฌ ์์
์ ๋จ์ผ ๋๋ ์์ฒญ์ผ๋ก ๊ฐ์ธ๋ฉด ๋ณดํธ๋ฅผ ์์ ํ ์ฐํํ ์ ์์ต๋๋ค.
[
{"path": "/login", "method": "POST", "body": {"user":"bob","pass":"123"}},
{"path": "/login", "method": "POST", "body": {"user":"bob","pass":"456"}}
]
ํ์ด๋ฐ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
ํด๋์ ํ ํฐ-๋ฒํท ๋๋ ๋ฆฌํค-๋ฒํท ๋ฆฌ๋ฏธํฐ๋ ๋ฆฌ์
์ด ๊ณ ์ ๋ ์๊ฐ ๊ฒฝ๊ณ์์ ๋ฐ์ํฉ๋๋ค (์: ๋งค ๋ถ๋ง๋ค). ์๋์ฐ๊ฐ ์๋ ค์ ธ ์๋ค๋ฉด (์: X-RateLimit-Reset: 27์ ๊ฐ์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํตํด), ๋ฒํท์ด ๋ฆฌ์
๋๊ธฐ ์ง์ ์ ํ์ฉ๋ ์ต๋ ์์ฒญ ์๋ฅผ ๋ฐ์ฌํ ๋ค์, ์ฆ์ ๋ ๋ค๋ฅธ ์ ์ฒด ํญ๋ฐ์ ๋ฐ์ฌํฉ๋๋ค.
|<-- 60 s window โ->|<-- 60 s window โ->|
###### ######
์ด ๊ฐ๋จํ ์ต์ ํ๋ ๋ค๋ฅธ ์ฐํ ๊ธฐ์ ์ ๊ฑด๋๋ฆฌ์ง ์๊ณ ๋ ์ฒ๋ฆฌ๋์ ๋ ๋ฐฐ ์ด์ ๋๋ฆด ์ ์์ต๋๋ค.
๋๊ตฌ
- https://github.com/Hashtag-AMIN/hashtag-fuzz: ํค๋ ๋ฌด์์ํ, ์ฒญํฌ ๋จ์ด ๋ชฉ๋ก ๋ฐ ๋ผ์ด๋ ๋ก๋น ํ๋ก์ ํ์ ์ ์ง์ํ๋ ํผ์ง ๋๊ตฌ์ ๋๋ค.
- https://github.com/ustayready/fireprox: ๋ชจ๋ ์์ฒญ์ด ๋ค๋ฅธ IP ์ฃผ์์์ ์์๋๋๋ก ์ผํ์ฉ AWS API Gateway ์๋ํฌ์ธํธ๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค โ IP ๊ธฐ๋ฐ ์๋ ์ ํ์ ๋ฌด๋ ฅํํ๋ ๋ฐ ์๋ฒฝํฉ๋๋ค.
- Burp Suite โ IPRotate + ํ์ฅ: Intruder ๋ฐ Turbo Intruder ๊ณต๊ฒฉ ์ค์ ์์ค IP๋ฅผ ํฌ๋ช ํ๊ฒ ํ์ ์ํค๊ธฐ ์ํด SOCKS/HTTP ํ๋ก์(๋๋ AWS API Gateway) ํ์ ์ฌ์ฉํฉ๋๋ค.
- Turbo Intruder (BApp): HTTP/2 ๋ค์คํ๋ฅผ ์ง์ํ๋ ๊ณ ์ฑ๋ฅ ๊ณต๊ฒฉ ์์ง; ์๋ฐฑ ๊ฐ์ ์์ฒญ์ ๋จ์ผ ์ฐ๊ฒฐ๋ก ์ถ์ํ๊ธฐ ์ํด
requestsPerConnection์ 100-1000์ผ๋ก ์กฐ์ ํฉ๋๋ค.
์ฐธ๊ณ ๋ฌธํ
- PortSwigger Research โ โGraphQL ๋ณ์นญ์ ์ฌ์ฉํ ์๋ ์ ํ ์ฐํโ (2023) https://portswigger.net/research/graphql-authorization-bypass
- PortSwigger Research โ โHTTP/2: ์ํธ์ ํญ์ ๋ ๋์๋คโ (์น์ ์ฐ๊ฒฐ ๊ธฐ๋ฐ ์๋ ์ ํ) (2024) https://portswigger.net/research/http2
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


