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

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.

Gotowy, aby zacząć?

Dostęp do ponad 50 mln rezydencjalnych IP w ponad 148 krajach z filtrowaniem AI.

Zobacz cenyProxy rezydencjalne
← Powrót do Bloga