Rotacja proxy w pentestach i bug bounty — przewodnik dla uprawnionych badaczy

Praktyczny przewodnik po użyciu rotacyjnych proxy residential w autoryzowanych pentestach i programach bug bounty. Subdomeny, ffuf, Burp Suite, limity i ramy prawne.

Rotacja proxy w pentestach i bug bounty — przewodnik dla uprawnionych badaczy
W tym artykule

Dlaczego uprawnieni pentesterzy potrzebują rotacji proxy

Jeśli kiedykolwiek uruchomiłeś amass albo ffuf na cel objęty programem bug bounty — i po pięciu minutach zobaczyłeś 403 Forbidden albo CAPTCHA na każdej odpowiedzi — wiesz, dlaczego rotacja IP ma znaczenie. WAF i systemy rate-limiting blokują adresy, z których napływa zbyt wiele żądań. Residential proxy z odpowiednią rotacją pozwalają na kontrolowane, etyczne rozproszenie ruchu tak, aby nie naruszyć warunków programu ani nie zdradzić swojej infrastruktury.

Kluczowe zastrzeżenie: Wszystkie techniki opisane w tym artykule mogą być stosowane wyłącznie w ramach wyraźnie określonego zakresu (scope) autoryzowanego pentestu lub programu bug bounty. Testowanie poza scope jest nielegalne i nieetyczne.

Ramy prawne i autoryzacja — zanim zaczniesz

Scope i safe harbor

Każdy program bug bounty definiuje scope — listę domen, IP, aplikacji i typów podatności, które wolno testować. Zanim uruchomisz jakiekolwiek narzędzie:

  • Przeczytaj regulamin programu na platformie (HackerOne, Bugcrowd, Intigriti).
  • Zidentyfikuj explicit scope — domeny, wildcardy, zakresy IP.
  • Sprawdź safe harbor — czy program gwarantuje ochronę prawną dla badań w scope.
  • Zwróć uwagę na limity żądań — niektóre programy wprost określają maksymalny rate (np. 100 req/min).

Testowanie infrastruktury spoza scope, nawet jeśli jest technicznie podobna, jest nielegalne w większości jurysdykcji. Nie ma wyjątków.

Typy autoryzacji

Typ autoryzacjiPrzykładUwagi
Program bug bountyPolityka na HackerOneScope + safe harbor w regulaminie
Pentest komercyjnyUmowa z klientemPodpisana umowa + ROE (Rules of Engagement)
CTF / labOWASP Juice ShopJawne zezwolenie, brak ryzyka prawnego
Brak autoryzacjiNIE TESTUJ. Pełna odpowiedzialność karna i cywilna.

Wybór typu proxy do pentestów

Nie każdy typ proxy nadaje się do każdego etapu pentestu. Poniżej porównanie trzech głównych kategorii w kontekście pentest proxy rotation:

KryteriumResidential proxyDatacenter proxyMobile proxy
Wykrywalność przez WAFNiska — IP wygląda jak zwykły użytkownikWysoka — zakresy CIDR znane dostawcom WAFBardzo niska — IP operatorów komórkowych
Rotacja IPPer-request lub sticky sessionRęczna lub per-requestPer-request (reconnect)
Stabilność połączeniaŚredniaWysokaZmienna (zależna od operatora)
KosztŚredniNiskiWysoki
Najlepsze zastosowanieEnumeracja, content discovery, OSINTBrute-force wewn., szybkie skanowanieTesty API mobilnych, MFA bypass

Do bug bounty residential proxies są zazwyczaj najlepszym wyborem — ruch wygląda naturalnie, a rotacja per-request zapobiega blokadom.

Odkrywanie subdomen z rotacją proxy

Amass — enumeracja pasywna

Amass agreguje dane z kilkudziesięciu źródeł OSINT ( crt.sh, VirusTotal, Shodan, DNSDB). Pasywna enumeracja rzadko wymaga proxy — źródła API mają własne limity. Problem pojawia się przy aktywnej enumeracji DNS, gdzie amass wysyła zapytania bezpośrednio do resolverów docelowych.

Konfiguracja amass z upstream residential proxy:

# Plik: ~/.config/amass/amass.ini
[network_settings]
  http_proxy = http://user-country-US:PASSWORD@gate.proxyhat.com:8080
  https_proxy = http://user-country-US:PASSWORD@gate.proxyhat.com:8080

[dns_settings]
  # Dystrybucja zapytań przez wiele resolverów + proxy
  resolver = 1.1.1.1,8.8.8.8,8.8.4.4
  timeout = 5
  max_retries = 3

Uruchomienie z włączonym proxy:

# Enumeracja pasywna (proxy dla API data sources)
amass enum -passive -d example.com

# Enumeracja aktywna — proxy rozprasza ruch DNS
amass enum -active -d example.com -config ~/.config/amass/amass.ini

Subfinder — pasywna enumeracja

Subfinder działa wyłącznie pasywnie, więc proxy jest potrzebne głównie do unikania rate-limitów na API dostawców danych (SecurityTrails, BufferOver). Użyj zmiennych środowiskowych:

export HTTP_PROXY=http://user-country-US:PASSWORD@gate.proxyhat.com:8080
export HTTPS_PROXY=http://user-country-US:PASSWORD@gate.proxyhat.com:8080
subfinder -d example.com -all -o subs.txt

Dla dłuższych list domen warto napisać prosty wrapper, który rotuje kraj po kraju — zmieniając country-US na country-DE, country-GB itd. między kolejnymi domenami.

Web asset discovery z proxy — ffuf i gobuster

Dlaczego content discovery wymaga rotacji IP

Typowy skan ffuf z wordlistą common.txt (4600 wpisów) przy 100 req/s = ~46 sekund. Przy 500 req/s = ~9 sekund. Problem: większość WAF blokuje IP po 200–500 żądaniach w krótkim czasie. Web asset discovery proxies rozwiązują ten problem — każde żądanie może pochodzić z innego IP.

ffuf z rotacyjnym residential proxy

ffuf natywnie obsługuje proxy przez flagę -x:

# Podstawowe użycie z residential proxy
ffuf -u https://example.com/FUZZ \
    -w /opt/wordlists/common.txt \
    -x http://user-country-US:PASSWORD@gate.proxyhat.com:8080 \
    -t 50 \
    -rate 100

Flaga -t 50 (50 wątków) z -rate 100 (100 req/s) zapewnia stabilny ruch. Przy rotacji per-request (domyślny tryb residential) każde żądanie ma inne IP — WAF nie widzi anomalii.

Zaawansowana rotacja — skrypt wrapper

Dla pełnej kontroli nad rotacją IP, możesz napisać wrapper, który zmienia parametr sesji w nazwie użytkownika proxy:

#!/bin/bash
# ffuf-rotate.sh — ffuf z rotacją sticky sessions
DOMAIN="$1"
WORDLIST="$2"
BATCH_SIZE=200
TOTAL=$(wc -l < "$WORDLIST")
BATCHES=$(( (TOTAL + BATCH_SIZE - 1) / BATCH_SIZE ))

for i in $(seq 1 $BATCHES); do
  SESSION="sess-$(date +%s)-$i"
  PROXY_URL="http://user-session-${SESSION}:PASSWORD@gate.proxyhat.com:8080"
  
  # Podziel wordlistę na batche
  START=$(( (i - 1) * BATCH_SIZE + 1 ))
  END=$(( i * BATCH_SIZE ))
  
  sed -n "${START},${END}p" "$WORDLIST" > "/tmp/batch_${i}.txt"
  
  ffuf -u "https://${DOMAIN}/FUZZ" \
    -w "/tmp/batch_${i}.txt" \
    -x "$PROXY_URL" \
    -t 30 \
    -rate 80 \
    -o "/tmp/ffuf_batch_${i}.json" \
    -of json
  
  # Pauza między batchami — etykieta rate-limit
  sleep 5
done

# Połącz wyniki
jq -s '.[].results[]' /tmp/ffuf_batch_*.json > ffuf_results.json
echo "[+] Wyniki zapisane w ffuf_results.json"

Ten skrypt dzieli wordlistę na batche po 200 wpisów, każdy batch biegnie przez inną sesję sticky (stałe IP wewnątrz batcha), a między batchami jest 5-sekundowa pauza. To etyczny sposób na content discovery — szanujesz limity celu i nie zalewasz go ruchem.

Gobuster — alternatywa dla ffuf

Gobuster obsługuje proxy przez zmienną środowiskową lub flagę -p:

export HTTP_PROXY=http://user-country-US:PASSWORD@gate.proxyhat.com:8080
gobuster dir -u https://example.com \
    -w /opt/wordlists/common.txt \
    -t 30 \
    --timeout 10s

Scanner-traffic blending — Burp Suite z upstream proxy

Konfiguracja Burp Suite

Burp Suite Professional pozwala na skonfigurowanie upstream proxy dla całego ruchu. To kluczowe dla bug bounty residential proxies — ruch skanera wygląda jak normalny ruch użytkownika:

  1. Otwórz Project options → Connections → Upstream Proxy Servers.
  2. Dodaj nową regułę: Destination host: * (wszystkie hosty).
  3. Ustaw proxy host: gate.proxyhat.com, port: 8080.
  4. W sekcji authentication wpisz username i password w formacie: user-country-US / PASSWORD.
  5. Zaznacz Use for all destinations.

Dla aktywnego skanowania z rotacją IP, użyj trybu per-request — zmieniaj parametr sesji w username między kolejnymi skanami. Możesz zautomatyzować to za pomocą Burp Extension w Pythonie (Jython), która rotuje username proxy co N żądań.

Sticky sessions w Burp

Kiedy testujesz logikę sesji (session management, MFA flow), potrzebujesz sticky session — stałego IP dla całego flow:

  • Username: user-session-mytest01-country-US:PASSWORD
  • Każdy request w ramach sesji idzie przez to samo IP.
  • Po zakończeniu testu zmieniasz session ID — nowe IP, nowa sesja.

Rate-limit etiquette — etyka w bug bounty

Limity żądań w scope

Wielu programów bug bounty określa maksymalny rate żądań. Typowe wartości:

  • 100 req/min — programy z wrażliwą infrastrukturą (bankowość, zdrowie).
  • 500 req/min — standardowe programy webowe.
  • Brak limitu — rzadkie, zazwyczaj duże programy typu infra.

Jeśli program nie określa limitu, stosuj zasadę rozsądku — nie przekraczaj 200–300 req/min dla jednego IP.

Praktyczne strategie throttlingu

NarzędzieFlaga throttleZalecana wartość
ffuf-rate50–100 req/s z rotacją IP
gobuster-t + --timeout20–30 wątków
nuclei-rate-limit100–150 req/min
Burp Active ScanThrottle w Options50–100 req/min per IP

Co robić, gdy WAF blokuje

  1. Nie zwiększaj rate — to pogorszy sytuację.
  2. Przełącz się na sticky session z innym IP (nowy session ID).
  3. Zmniejsz rate do połowy dotychczasowej wartości.
  4. Rozważ geo-targeting — użyj IP z kraju, w którym znajduje się cel (mniej podejrzane dla WAF).
  5. Jeśli CAPTCHA się pojawia — zrób pauzę 5–10 minut przed kolejną próbą.

OSINT i unikanie atrybucji

Residential proxy pełnią podwójną rolę w OSINT: (1) zapobiegają blokadom rate-limit, (2) chronią Twoją tożsamość. Kiedy zbierasz dane z publicznych źródeł (WHOIS, Shodan, crt.sh, social media), Twój prawdziwy IP nie jest logowany przez cel.

Geo-targeting jest tu kluczowy — jeśli badasz infrastrukturę w Niemczech, użyj:

curl -x http://user-country-DE-city-berlin:PASSWORD@gate.proxyhat.com:8080 \
    https://target.example/api/endpoint

Ruch z berlińskiego IP jest mniej podejrzany niż ruch z amerykańskiego datacenter.

Podsumowanie — kluczowe zasady

Key Takeaways:

  • Zawsze weryfikuj scope — testowanie poza autoryzowanym zakresem jest nielegalne.
  • Residential proxy z rotacją per-request to najlepszy wybór do enumeracji i content discovery w bug bounty.
  • Sticky sessions — używaj ich do testowania logiki sesji (MFA, auth flow).
  • Szanuj rate-limity — throttluj ruch nawet poniżej formalnych limitów programu.
  • Geo-targeting zmniejsza ryzyko wykrycia — dopasuj lokalizację IP do celu.
  • Burp Suite z upstream proxy pozwala na blending scanner-traffic z normalnym ruchem.
  • Dokumentuj — zapisuj, kiedy i jakich proxy użyłeś, w razie sporu z programem.

Jeśli szukasz proxy do autoryzowanych pentestów i bug bounty, sprawdź plany ProxyHat — residential proxy z rotacją per-request, geo-targetingiem w 190+ krajach i sticky sessions na życzenie. Więcej o zastosowaniach proxy w web scrapingu i SERP tracking.

Często zadawane pytania

Czy użycie residential proxy w pentestach jest legalne?

Tak, pod warunkiem że masz wyraźną autoryzację — podpisaną umowę na pentest lub badasz cel w scope programu bug bounty z safe harbor. Testowanie bez autoryzacji jest nielegalne niezależnie od typu proxy.

Jaka rotacja IP jest najlepsza do enumeracji subdomen?

Do enumeracji pasywnej (amass, subfinder) zazwyczaj wystarczy jedno residential IP lub rotacja per-request. Do enumeracji aktywnej (DNS brute-force) i content discovery (ffuf) zalecana jest rotacja per-request, która rozprasza ruch po wielu IP.

Jak skonfigurować Burp Suite z residential proxy?

W Project Options → Connections → Upstream Proxy Servers dodaj regułę dla wszystkich hostów z gate.proxyhat.com:8080 i odpowiednimi danymi logowania. Dla sticky sessions dodaj parametr session w username, np. user-session-abc123-country-US.

Ile żądań na minutę jest bezpieczne w bug bounty?

To zależy od programu — niektóre określają to wprost (np. 100 req/min). Jeśli program nie podaje limitu, trzymaj się 200–300 req/min z rotacją IP. Zawsze zacznij od mniejszego rate i zwiększaj stopniowo.

Czy datacenter proxy nadają się do pentestów?

Datacenter proxy są wykrywalne przez większość WAF, bo ich zakresy CIDR są znane. Nadają się do wewnętrznych testów (za firewall) lub szybkiego skanowania, ale do bug bounty i enumeracji publicznych celów residential proxy są znacznie lepszym wyborem.

Przetestuj swoje proxy przeciwko prawdziwym zabezpieczeniom anti-bot

Darmowy tester proxy — opóźnienie, anonimowość i sygnały blokad jednym kliknięciem.

Wykonaj darmowy test
← Powrót do Bloga