80,443 - Metodologia Pentesting Web

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Podstawowe informacje

Usługa webowa jest najbardziej powszechną i rozległą usługą i istnieje wiele różnych typów podatności.

Domyślny port: 80 (HTTP), 443(HTTPS)

PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  ssl/https
nc -v domain.com 80 # GET / HTTP/1.0
openssl s_client -connect domain.com:443 # GET / HTTP/1.0

Wytyczne dotyczące Web API

Web API Pentesting

Podsumowanie metodologii

W tej metodologii zakładamy, że będziesz atakować jedną domenę (lub subdomenę) i tylko ją. Zastosuj tę metodologię do każdej odkrytej domeny, subdomeny lub IP z nierozpoznanym web serverem w zakresie.

  • Zacznij od identyfikacji technologii używanych przez web server. Szukaj trików, o których warto pamiętać podczas reszty testu, jeśli uda Ci się zidentyfikować tech.
  • Czy istnieje jakaś znana podatność dla wersji tej technologii?
  • Używana jest jakaś well known tech? Jakiś useful trick żeby wydobyć więcej informacji?
  • Czy istnieje jakiś specialised scanner do uruchomienia (np. wpscan)?
  • Uruchom general purposes scanners. Nigdy nie wiadomo, czy znajdą coś ciekawego lub przydatnego.
  • Zacznij od initial checks: robots, sitemap, 404 error i SSL/TLS scan (jeśli HTTPS).
  • Zacznij spidering strony: czas znaleźć wszystkie możliwe pliki, foldery i parametry będące używane. Sprawdź też special findings.
  • Zauważ, że za każdym razem, gdy podczas brute-forcingu lub spideringu odkryjesz nowy katalog, powinien on zostać zspiderowany.
  • Directory Brute-Forcing: Spróbuj brute-forcować wszystkie odkryte foldery w poszukiwaniu nowych plików i katalogów.
  • Zauważ, że za każdym razem, gdy podczas brute-forcingu lub spideringu odkryjesz nowy katalog, powinien on zostać Brute-Forced.
  • Backups checking: Sprawdź, czy możesz znaleźć backupy odkrytych plików, dopisując popularne rozszerzenia kopii zapasowych.
  • Brute-Force parameters: Spróbuj znaleźć ukryte parametry.
  • Gdy zidentyfikujesz wszystkie możliwe endpoints akceptujące user input, sprawdź wszystkie rodzaje vulnerabilities z nimi związane.
  • Follow this checklist

Server Version (Vulnerable?)

Identyfikacja

Sprawdź, czy istnieją znane podatności dla wersji serwera, która działa.
Nagłówki HTTP i cookies odpowiedzi mogą być bardzo przydatne do identyfikacji używanych technologii i/lub wersji. Nmap scan może zidentyfikować wersję serwera, ale przydatne mogą być też narzędzia whatweb, webtech lub https://builtwith.com/:

whatweb -a 1 <URL> #Stealthy
whatweb -a 3 <URL> #Aggresive
webtech -u <URL>
webanalyze -host https://google.com -crawl 2

Search for vulnerabilities of the web application version

Sprawdź, czy jest WAF

Triki dotyczące technologii web

Kilka tricks do finding vulnerabilities w różnych dobrze znanych technologies używanych:

Pamiętaj, że ta same domain może używać different technologies na różnych ports, folders i subdomains.
Jeśli aplikacja webowa korzysta z którejkolwiek z wcześniej wymienionych well known tech/platform lub jakiejkolwiek innej, nie zapomnij wyszukać w Internecie nowych trików (i daj mi znać!).

Przegląd kodu źródłowego

Jeśli source code aplikacji jest dostępny w github, oprócz przeprowadzenia przez Ciebie White box test aplikacji istnieją pewne informacje, które mogą być useful dla bieżącego Black-Box testing:

  • Czy istnieje plik Change-log lub Readme lub Version albo jakikolwiek plik z informacją o wersji dostępną przez web?
  • Jak i gdzie są zapisywane credentials? Czy istnieje jakiś (dostępny?) file z credentials (usernames lub passwords)?
  • Czy passwords są w plain text, encrypted czy jaki hashing algorithm jest używany?
  • Czy używa jakiegokolwiek master key do szyfrowania czegoś? Jaki algorithm jest używany?
  • Czy możesz uzyskać dostęp do któregokolwiek z tych plików wykorzystując jakąś vulnerability?
  • Czy w github znajdują się jakieś interesujące informacje (rozwiązane i nierozwiązane) w issues? Albo w commit history (może jakieś password introduced inside an old commit)?

Source code Review / SAST Tools

Automatyczne skanery

Skanery automatyczne ogólnego przeznaczenia

nikto -h <URL>
whatweb -a 4 <URL>
wapiti -u <URL>
W3af
zaproxy #You can use an API
nuclei -ut && nuclei -target <URL>

# https://github.com/ignis-sec/puff (client side vulns fuzzer)
node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi2rVUN/?query=FUZZ"

Skanery CMS

Jeśli używany jest CMS, nie zapomnij uruchomić skanera, możesz znaleźć coś ciekawego:

Clusterd: JBoss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfish
CMSScan: WordPress, Drupal, Joomla, vBulletin strony pod kątem problemów bezpieczeństwa. (GUI)
VulnX: Joomla, Wordpress, Drupal, PrestaShop, Opencart
CMSMap: (W)ordpress, (J)oomla, (D)rupal lub (M)oodle
droopscan: Drupal, Joomla, Moodle, Silverstripe, Wordpress

cmsmap [-f W] -F -d <URL>
wpscan --force update -e --url <URL>
joomscan --ec -u <URL>
joomlavs.rb #https://github.com/rastating/joomlavs

Na tym etapie powinieneś już mieć pewne informacje o serwerze WWW używanym przez klienta (jeśli podano jakieś dane) oraz kilka trików, o których warto pamiętać podczas testu. Jeśli masz szczęście, znalazłeś nawet CMS i uruchomiłeś jakiś skaner.

Step-by-step Web Application Discovery

Od tego momentu zaczniemy wchodzić w interakcję z aplikacją webową.

Initial checks

Default pages with interesting info:

  • /robots.txt
  • /sitemap.xml
  • /crossdomain.xml
  • /clientaccesspolicy.xml
  • /.well-known/
  • Check also comments in the main and secondary pages.

Forcing errors

Serwery WWW mogą zachowywać się nieoczekiwanie, gdy wysyłane są do nich nietypowe dane. Może to otworzyć vulnerabilities lub spowodować disclosure of sensitive information.

  • Access fake pages like /whatever_fake.php (.aspx,.html,.etc)
  • Add “[]”, “]]”, and “[[” in cookie values and parameter values to create errors
  • Generate error by giving input as /~randomthing/%s at the end of URL
  • Try different HTTP Verbs like PATCH, DEBUG or wrong like FAKE

Check if you can upload files (PUT verb, WebDav)

If you find that WebDav is enabled but you don’t have enough permissions for uploading files in the root folder try to:

  • Brute Force credentials
  • Upload files via WebDav to the rest of found folders inside the web page. You may have permissions to upload files in other folders.

SSL/TLS podatności

  • Jeśli aplikacja nie wymusza korzystania z HTTPS w żadnej części, to jest podatna na MitM
  • Jeśli aplikacja wysyła dane wrażliwe (hasła) przez HTTP, to jest to poważna podatność.

Use testssl.sh to checks for vulnerabilities (In Bug Bounty programs probably these kind of vulnerabilities won’t be accepted) and use a2sv to recheck the vulnerabilities:

./testssl.sh [--htmlfile] 10.10.10.10:443
#Use the --htmlfile to save the output inside an htmlfile also

# You can also use other tools, by testssl.sh at this momment is the best one (I think)
sslscan <host:port>
sslyze --regular <ip:port>

Informacje o podatnościach SSL/TLS:

Spidering

Uruchom jakiegoś rodzaju spider w obrębie aplikacji webowej. Celem spidera jest znaleźć jak najwięcej ścieżek w testowanej aplikacji. W związku z tym web crawling i źródła zewnętrzne powinny być użyte do odnalezienia jak największej liczby prawidłowych ścieżek.

  • gospider (go): HTML spider, LinkFinder w plikach JS oraz źródła zewnętrzne (Archive.org, CommonCrawl.org, VirusTotal.com).
  • hakrawler (go): HML spider, z LinkFider dla plików JS i Archive.org jako źródło zewnętrzne.
  • dirhunt (python): HTML spider, wskazuje również “juicy files”.
  • evine (go): Interaktywny CLI HTML spider. Przeszukuje także Archive.org
  • meg (go): To narzędzie nie jest spiderem, ale może być przydatne. Możesz podać plik z hostami i plik ze ścieżkami, a meg pobierze każdą ścieżkę na każdym hoście i zapisze odpowiedź.
  • urlgrab (go): HTML spider z możliwością renderowania JS. Wygląda jednak na nieutrzymywane, prekompilowana wersja jest stara, a aktualny kod nie kompiluje się.
  • gau (go): HTML spider, który używa dostawców zewnętrznych (wayback, otx, commoncrawl)
  • ParamSpider: Ten skrypt znajdzie URL-e z parametrami i je wypisze.
  • galer (go): HTML spider z możliwością renderowania JS.
  • LinkFinder (python): HTML spider z możliwościami beautify JS, potrafi wyszukać nowe ścieżki w plikach JS. Warto też zerknąć na JSScanner, który jest wrapperem LinkFinder.
  • goLinkFinder (go): Do wyciągania endpointów zarówno z kodu HTML jak i osadzonych plików javascript. Przydatne dla bug hunterów, red teamerów, infosec ninja.
  • JSParser (python2.7): Skrypt w pythonie 2.7 używający Tornado i JSBeautifier do parsowania względnych URL-i z plików JavaScript. Przydatne do łatwego odkrywania żądań AJAX. Wygląda na nieutrzymany.
  • relative-url-extractor (ruby): Dla podanego pliku (HTML) wyciąga URL-e używając sprytnych wyrażeń regularnych do znalezienia i wyciągnięcia względnych URL-i z “brzydkich” (minified) plików.
  • JSFScan (bash, several tools): Zbiera interesujące informacje z plików JS używając kilku narzędzi.
  • subjs (go): Znajduje pliki JS.
  • page-fetch (go): Ładuje stronę w headless browser i wypisuje wszystkie URL-e załadowane podczas ładowania strony.
  • Feroxbuster (rust): Narzędzie do odkrywania treści łączące kilka opcji z poprzednich narzędzi.
  • Javascript Parsing: Rozszerzenie Burp do znajdowania ścieżek i parametrów w plikach JS.
  • Sourcemapper: Narzędzie, które podając URL do .js.map pobierze dla Ciebie beautified kod JS.
  • xnLinkFinder: Narzędzie służące do odkrywania endpointów dla danego targetu.
  • waymore: Odkrywa linki z wayback machine (również pobierając odpowiedzi z wayback i szukając w nich kolejnych linków)
  • HTTPLoot (go): Crawl (nawet przez wypełnianie formularzy) i także znajduje wrażliwe info używając specyficznych regexów.
  • SpiderSuite: Spider Suite to zaawansowany, wielofunkcyjny GUI web security Crawler/Spider zaprojektowany dla profesjonalistów cyberbezpieczeństwa.
  • jsluice (go): Pakiet Go i command-line tool do ekstrakcji URL-i, ścieżek, sekretów i innych interesujących danych z kodu źródłowego JavaScript.
  • ParaForge: ParaForge to proste Burp Suite extension do ekstrakcji parametrów i endpointów z requestów, by tworzyć custom wordlisty do fuzzingu i enumeracji.
  • katana (go): Świetne narzędzie do tego.
  • Crawley (go): Wypisuje każdy link, który potrafi znaleźć.

Brute Force directories and files

Zacznij brute-forcing od folderu root i upewnij się, że bruteforcisz wszystkie znalezione katalogi używając tej metody oraz wszystkie katalogi odkryte przez Spidering (możesz robić to rekursywnie i dopisywać na początku użytej wordlisty nazwy znalezionych katalogów).
Narzędzia:

  • Dirb / Dirbuster - Dołączone do Kali, stare (i wolne) lecz funkcjonalne. Pozwalają na zaakceptowanie self-signed certyfikatów i wyszukiwanie rekursywne. Zbyt wolne w porównaniu z innymi opcjami.
  • Dirsearch (python): Nie pozwala na self-signed certyfikaty, ale umożliwia wyszukiwanie rekursywne.
  • Gobuster (go): Pozwala na self-signed certyfikaty, nie ma jednak wyszukiwania rekursywnego.
  • Feroxbuster - Fast, supports recursive search.
  • wfuzz wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ
  • ffuf - Fast: ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ
  • uro (python): To nie jest spider, ale narzędzie, które biorąc listę znalezionych URL-i usunie “zduplikowane” URL-e.
  • Scavenger: Burp Extension do tworzenia listy katalogów z historii Burp dla różnych stron.
  • TrashCompactor: Usuwa URL-e o zduplikowanej funkcjonalności (bazując na importach js).
  • Chamaleon: Używa wapalyzer do wykrywania użytych technologii i wyboru odpowiednich wordlistów.

Zalecane słowniki:

Zauważ, że za każdym razem gdy podczas brute-forcingu lub spideringu zostanie odkryty nowy katalog, powinien on zostać Brute-Forced.

What to check on each file found

  • Broken link checker: Znajdź broken linki w HTML-ach, które mogą być podatne na takeovery
  • File Backups: Gdy znajdziesz wszystkie pliki, szukaj backupów wszystkich plików wykonywalnych (“.php”, “.aspx”…). Typowe warianty nazewnictwa backupu to: file.ext~, #file.ext#, ~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp oraz file.old. Możesz też użyć narzędzia bfac lub backup-gen.
  • Discover new parameters: Możesz użyć narzędzi takich jak Arjun, parameth, x8 oraz Param Miner do odkrywania ukrytych parametrów. Jeśli to możliwe, spróbuj wyszukać ukryte parametry w każdym wykonywalnym pliku webowym.
  • Arjun all default wordlists: https://github.com/s0md3v/Arjun/tree/master/arjun/db
  • Param-miner “params” : https://github.com/PortSwigger/param-miner/blob/master/resources/params
  • Assetnote “parameters_top_1m”: https://wordlists.assetnote.io/
  • nullenc0de “params.txt”: https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773
  • Comments: Sprawdź komentarze we wszystkich plikach — możesz znaleźć w nich credentials lub ukrytą funkcjonalność.
  • Jeśli grasz w CTF, “typowym” trikiem jest ukrycie informacji w komentarzach po prawej stronie strony (używając setek spacji, żeby nie było widać danych, gdy otworzysz źródło w przeglądarce). Inną możliwością jest użycie wielu nowych linii i ukrycie informacji w komentarzu na dole strony.
  • API keys: Jeśli znajdziesz jakikolwiek API key, istnieją przewodniki pokazujące jak używać API keys dla różnych platform: keyhacks, zile, truffleHog, SecretFinder, RegHex, DumpsterDive, EarlyBird
  • Google API keys: Jeśli znajdziesz API key wyglądający jak AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik możesz użyć projektu gmapapiscanner aby sprawdzić, do których API klucz ma dostęp.
  • S3 Buckets: Podczas spideringu sprawdź, czy jakiś subdomain lub link nie odnosi się do S3 bucketu. W takim przypadku sprawdź uprawnienia bucketu.

Special findings

Podczas spideringu i brute-forcingu możesz natrafić na interesujące znaleziska, o których musisz poinformować.

Interesting files

403 Forbidden/Basic Authentication/401 Unauthorized (bypass)

403 & 401 Bypasses

502 Proxy Error

Jeśli jakaś strona odpowiada tym kodem, prawdopodobnie to źle skonfigurowany proxy. Jeśli wyślesz żądanie HTTP takie jak: GET https://google.com HTTP/1.1 (z host headerem i innymi typowymi nagłówkami), proxy spróbuje uzyskać dostęp do google.com i w ten sposób możesz znaleźć SSRF.

NTLM Authentication - Info disclosure

Jeśli serwer żądający uwierzytelnienia działa na Windows lub znajdziesz stronę logowania żądającą Twoich credentials (i nazwy domeny), możesz spowodować wyciek informacji.
Wyślij nagłówek: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=” i z powodu działania NTLM authentication, serwer odpowie wewnętrznymi informacjami (wersja IIS, wersja Windows…) w nagłówku “WWW-Authenticate”.
Możesz to zautomatyzować używając nmap pluginu “http-ntlm-info.nse”.

HTTP Redirect (CTF)

Możliwe jest umieszczenie treści wewnątrz redirection. Ta treść nie będzie widoczna dla użytkownika (ponieważ przeglądarka wykona przekierowanie), ale coś może być w ten sposób ukryte.

Web Vulnerabilities Checking

Po przeprowadzeniu kompleksowej enumeracji aplikacji webowej czas sprawdzić wiele możliwych podatności. Checklistę znajdziesz tutaj:

Web Vulnerabilities Methodology

Więcej informacji o web vulns znajdziesz w:

Monitor Pages for changes

Możesz użyć narzędzi takich jak https://github.com/dgtlmoon/changedetection.io do monitorowania stron pod kątem modyfikacji, które mogłyby wprowadzić podatności.

HackTricks Automatic Commands

HackTricks Automatic Commands ```yaml Protocol_Name: Web #Protocol Abbreviation if there is one. Port_Number: 80,443 #Comma separated if there is more than one. Protocol_Description: Web #Protocol Abbreviation Spelled out

Entry_1: Name: Notes Description: Notes for Web Note: | https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/index.html

Entry_2: Name: Quick Web Scan Description: Nikto and GoBuster Command: nikto -host {Web_Proto}://{IP}:{Web_Port} &&&& gobuster dir -w {Small_Dirlist} -u {Web_Proto}://{IP}:{Web_Port} && gobuster dir -w {Big_Dirlist} -u {Web_Proto}://{IP}:{Web_Port}

Entry_3: Name: Nikto Description: Basic Site Info via Nikto Command: nikto -host {Web_Proto}://{IP}:{Web_Port}

Entry_4: Name: WhatWeb Description: General purpose auto scanner Command: whatweb -a 4 {IP}

Entry_5: Name: Directory Brute Force Non-Recursive Description: Non-Recursive Directory Brute Force Command: gobuster dir -w {Big_Dirlist} -u {Web_Proto}://{IP}:{Web_Port}

Entry_6: Name: Directory Brute Force Recursive Description: Recursive Directory Brute Force Command: python3 {Tool_Dir}dirsearch/dirsearch.py -w {Small_Dirlist} -e php,exe,sh,py,html,pl -f -t 20 -u {Web_Proto}://{IP}:{Web_Port} -r 10

Entry_7: Name: Directory Brute Force CGI Description: Common Gateway Interface Brute Force Command: gobuster dir -u {Web_Proto}://{IP}:{Web_Port}/ -w /usr/share/seclists/Discovery/Web-Content/CGIs.txt -s 200

Entry_8: Name: Nmap Web Vuln Scan Description: Tailored Nmap Scan for web Vulnerabilities Command: nmap -vv –reason -Pn -sV -p {Web_Port} –script=banner,(http* or ssl*) and not (brute or broadcast or dos or external or http-slowloris* or fuzzer) {IP}

Entry_9: Name: Drupal Description: Drupal Enumeration Notes Note: | git clone https://github.com/immunIT/drupwn.git for low hanging fruit and git clone https://github.com/droope/droopescan.git for deeper enumeration

Entry_10: Name: WordPress Description: WordPress Enumeration with WPScan Command: | ?What is the location of the wp-login.php? Example: /Yeet/cannon/wp-login.php wpscan –url {Web_Proto}://{IP}{1} –enumerate ap,at,cb,dbe && wpscan –url {Web_Proto}://{IP}{1} –enumerate u,tt,t,vp –passwords {Big_Passwordlist} -e

Entry_11: Name: WordPress Hydra Brute Force Description: Need User (admin is default) Command: hydra -l admin -P {Big_Passwordlist} {IP} -V http-form-post ‘/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log In&testcookie=1:S=Location’

Entry_12: Name: Ffuf Vhost Description: Simple Scan with Ffuf for discovering additional vhosts Command: ffuf -w {Subdomain_List}:FUZZ -u {Web_Proto}://{Domain_Name} -H “Host:FUZZ.{Domain_Name}” -c -mc all {Ffuf_Filters}

</details>

> [!TIP]
> Ucz się i ćwicz Hacking AWS:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Ucz się i ćwicz Hacking GCP: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Ucz się i ćwicz Hacking Azure: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Wsparcie dla HackTricks</summary>
>
> - Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
> - **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Dziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na githubie.
>
> </details>