Jest wiele czynności, które każdy Pentester oraz Bug Bounty Hunter powtarza podczas testów penetracyjnych aplikacji webowych metodą czarnej skrzynki (black box). Te powtarzalne czynności kosztują zazwyczaj dużo czasu, którego jest zwykle za mało w trakcie trwania projektu. W obliczu tych przeszkód stworzyłem narzędzie automatyzujące wiele czynności i zwiększające efektywność pracy (wciąż jest w fazie rozwoju). W tym artykule opisano organizację zadań, z której korzystam podczas testów penetracyjnych aplikacji webowych w przypadku projektu z zakresem oceny “*.domain.com” – to znaczy, tam, gdzie wszystkie znalezione subdomeny mogą być testowane. Często taka sytuacja ma miejsce również podczas Bug Bounty.

Moje badania opierają się na metodologii OWASP oraz metodologii zawartej w książce „Hack Tricks” napisanej przez Carlosa Polopa. Na potrzeby tego artykułu załóżmy, że wszystkie zasoby zawarte w domenie „*.domain.com” są objęte naszym zakresem testu. Wyniki działania każdego z wymienionych poniżej narzędzi zostaną zapisane w plikach tekstowych do dalszej obróbki.

Generalnie, gdy testem objęte będą wszystkie zasoby sieciowe, to celem rekonesansu będą:

1. Protokoły (schemat)
2. Hosty (subdomeny, domeny, adresy IP i porty)
3. Ścieżki (katalogi i pliki)
4. Zapytania (nazwy parametrów i ich wartości)

Źródło: Opracowanie własne

Przed rozpoczęciem pracy należy ustawić klucze API dla programu Subfinder w pliku “$HOME/.config/subfinder/config.yaml”, rozpocząć nowy projekt w programie Burp Suite oraz wyłączyć przechwytywanie zapytań tak, jak pokazano na zrzucie ekranu poniżej:

Źródło: Opracowanie własne

Pierwszym zadaniem testera jest zgromadzenie jak największej ilości poddomen. Zaczynamy od enumerowania domen metodą pasywną – czyli bez generowania bezpośredniego ruchu z infrastrukturą testowanej organizacji. Użyte narzędzia to:

  • crt.sh
  • amass
  • subfinder
  • assetfinder
  • paramspider

Poniższy zrzut ekranu pokazuje jak można zautomatyzować ten proces za pomocą bash’a:

Źródło: Opracowanie własne

Następnym krokiem jest odgadywanie nazw domen metodą siłową. Użyte narzędzia to:

  • massdns
  • puredns

Poniższy zrzut ekranu pokazuje jak można zautomatyzować ten proces za pomocą bash’a:

Źródło: Opracowanie własne

W tym kroku łączymy wszystkie wygenerowane pliki w jeden. Odfiltrowujemy duplikaty i martwe rekordy z listy. Użyte narzędzie to dnsx.

Poniższy zrzut ekranu pokazuje jak można zautomatyzować ten proces za pomocą bash’a:

Źródło: Opracowanie własne

W tym kroku identyfikujemy nowe subdomeny za pomocą mutacji znanych już domen / subdomen. Użyte narzędzia:

  • altdns
  • puredns
  • massdns
  • dnsx

Poniższy zrzut ekranu pokazuje jak można zautomatyzować ten proces za pomocą bash’a:

Źródło: Opracowanie własne

Jeśli czas na to pozwoli, następnym krokiem powinno być enumerowanie poddomen trzeciego poziomu metodą siłową. W związku z tym wymienione powyżej czynności związane z odgadywaniem poddomen należy powtórzyć dla każdej znalezionej do tej pory poddomeny. Ten krok jest bardzo czasochłonny i zalecam go wykonać na samym końcu enumerowania poddomen, abyś mógł rozpocząć pracę nad tymi znalezionymi do tej pory. Użyte narzędzia:

  • puredns
  • dnsx

Poniższy zrzut ekranu pokazuje jak można zautomatyzować ten proces za pomocą bash’a:

Źródło: Opracowanie własne

Do tej pory powinieneś zgromadzić dość dużą liczbę poddomen. Następnym zadaniem jest przeszukanie sieci w celu znalezienia wszystkich znanych adresów URL powiązanych ze znalezionymi poddomenami, aby wydobyć z nich ich jeszcze więcej – np. parametry i historycznie występujące tam zasoby zgromadzone w tzw. internet archive. Użyte narzędzia:

  • gau
  • waybackurls
  • unfurl

Poniższy zrzut ekranu pokazuje jak można zautomatyzować ten proces za pomocą bash’a:

Źródło: Opracowanie własne

Sprawdzamy, czy we wszystkich znalezionych subdomenach nie ma błędnych konfiguracji CORS oraz czy nie są podatne na przejęcie (subdomain takeover). Użyte narzędzia:

  • CorsMe
  • subjack

Poniższy zrzut ekranu pokazuje jak można zautomatyzować ten proces za pomocą bash’a:

Źródło: Opracowanie własne

W tym kroku robimy zrzut ekranu każdej subdomeny i zapisujemy go w katalogu „screens” przy pomocy narzędzia EyeWitness:

Źródło: Opracowanie własne

Sprawdzamy status wszystkich poddomen, a następnie przekierowujemy znalezione poddomeny i adresy URL do programu Burp Suite w celu przeprowadzenia dalszej analizy za pomocą automatycznego skanowania i ręcznego testowania. Użyte narzędzia:

  • Burp Suite
  • wfuzz

Podobnie jak w poprzednich przypadkach możemy pomóc sobie korzystając z bash’a:

Źródło: Opracowanie własne

W kolejnym kroku sprawdzamy czy występuje podatność Zone Transfer. W tym celu korzystamy z narzędzia dnsrecon:

Źródło: Opracowanie własne

Na sam koniec należy sprawdzić adresy IP wszystkich znalezionych poddomen, a na wszystkich wykrytych adresach IP przeprowadzić skanowanie portów. Można zrobić to z pomocą narzędzi takich jak dig oraz masscan.

Źródło: Opracowanie własne

Po wykonaniu wszystkich tych czynności sprawdzamy następujące pliki tekstowe i katalog:

  1. live.txt — lista “żywych” poddomen
  2. ip.txt — lista z adresami ip
  3. ports.txt — lista otwartych portów
  4. subjack.txt — lista z poddomenami podatnymi na przejęcie
  5. Screens — katalog ze zrzutami ekranu stron głównych poddomen
  6. cors_scan.txt — lista poddomen z błędnie skonfigurowanym CORS
  7. urls.txt — lista wszystkie zgromadzonych adresów url zawierających nazwy subdomen
  8. status_live.txt — lista statusów znalezionych poddomen

Powyższy proces został zautomatyzowany w jednym skrypcie o nazwie „crimson_recon”. To jeden z trzech modułów, które są częścią narzędzia „crimson”, które stale tworzę (https://github.com/Karmaz95/crimson). Jeżeli chcesz przetestować jego działanie, najlepiej skorzystać z celu, który można legalnie “hakować” – np. wybranego otwartego programu bug bounty o otwartym scope (w momencie pisania artykułu to np. tesla, google, yahoo – więcej można znaleźć np. tutaj).

W następnym artykule zostanie przybliżony kolejny moduł narzędzia o nazwie „crimson_target”. 

References:

  1. https://github.com/Karmaz95/crimson
  2. https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/
  3. https://book.hacktricks.xyz/pentesting/pentesting-web
  4. https://book.hacktricks.xyz/external-recon-methodology
  5. https://github.com/robertdavidgraham/masscan
  6. https://github.com/projectdiscovery/subfinder
  7. https://github.com/blechschmidt/massdns
  8. https://github.com/tomnomnom/assetfinder
  9. https://github.com/devanshbatham/ParamSpider
  10. https://github.com/projectdiscovery/dnsx
  11. https://github.com/lc/gau
  12. https://github.com/tomnomnom/waybackurls
  13. https://github.com/Shivangx01b/CorsMe
  14. https://github.com/haccer/subjack
  15. https://github.com/xmendez/wfuzz