80,443 - Pentesting Web Methodology
Jeśli interesuje Cię kariera w dziedzinie hakowania i hakowanie niemożliwych do zhakowania - rekrutujemy! (wymagana biegła znajomość języka polskiego w mowie i piśmie).
Podstawowe informacje
Usługa internetowa jest najbardziej powszechną i rozległą usługą, w której istnieje wiele różnych rodzajów podatności.
Domyślny port: 80 (HTTP), 443(HTTPS)
Wskazówki dotyczące interfejsu API sieciowego
pageWeb API PentestingPodsumowanie metodologii
W tej metodologii zakładamy, że zamierzasz zaatakować domenę (lub subdomenę) i tylko ją. Dlatego powinieneś zastosować tę metodologię do każdej odkrytej domeny, subdomeny lub IP z nieokreślonym serwerem sieciowym w zakresie.
Wersja serwera (Podatny?)
Identyfikacja
Sprawdź, czy istnieją znane podatności dla wersji serwera, która jest używana. Nagłówki HTTP i ciasteczka odpowiedzi mogą być bardzo przydatne do identyfikacji używanych technologii i/lub wersji. Skan Nmap może zidentyfikować wersję serwera, ale również mogą być przydatne narzędzia whatweb, webtech lub https://builtwith.com/:
Szukaj podatności aplikacji internetowej w wersji](../../generic-methodologies-and-resources/search-exploits.md)
Sprawdź, czy istnieje WAF
Triki technologii internetowych
Kilka trików do znajdowania podatności w różnych znanych technologiach używanych:
Miej na uwadze, że ta sama domena może używać różnych technologii na różnych portach, folderach i subdomenach. Jeśli aplikacja internetowa używa jakiejkolwiek znanej technologii/platformy wymienionej wcześniej lub innej, nie zapomnij szukać w Internecie nowych trików (i daj mi znać!).
Przegląd kodu źródłowego
Jeśli kod źródłowy aplikacji jest dostępny na github, oprócz przeprowadzenia testu White box aplikacji na własną rękę, istnieje kilka informacji, które mogą być przydatne do obecnego testu Black-Box:
Czy istnieje dziennik zmian lub plik Readme lub informacje o wersji lub cokolwiek z informacjami o wersji dostępnymi przez sieć?
Jak i gdzie są zapisane dane uwierzytelniające? Czy istnieje jakiś (dostępny?) plik z danymi uwierzytelniającymi (nazwy użytkowników lub hasła)?
Czy hasła są w czystym tekście, zaszyfrowane czy który algorytm haszowania jest używany?
Czy jest używany klucz główny do szyfrowania czegoś? Jaki algorytm jest używany?
Czy możesz uzyskać dostęp do któregokolwiek z tych plików wykorzystując jakąś podatność?
Czy istnieją interesujące informacje w githubie (rozwiązane i nierozwiązane) problemy? Lub w historii commitów (może jakieś hasło wprowadzone w starym commicie)?
Automatyczne skanery
Automatyczne skanery ogólnego przeznaczenia
Skanery CMS
Jeśli jest używany CMS, nie zapomnij uruchomić skanera, być może znajdziesz coś interesującego:
CMSMap: (W)ordpress, (J)oomla, (D)rupal lub (M)oodle
W tym momencie powinieneś już mieć pewne informacje na temat serwera WWW używanego przez klienta (jeśli jakiekolwiek dane zostały podane) oraz kilka sztuczek, które warto mieć na uwadze podczas testu. Jeśli masz szczęście, możesz nawet znaleźć system zarządzania treścią (CMS) i uruchomić skaner.
Odkrywanie aplikacji internetowej krok po kroku
Od tego momentu zaczniemy wchodzić w interakcje z aplikacją internetową.
Sprawdzenia początkowe
Domyślne strony z ciekawymi informacjami:
/robots.txt
/sitemap.xml
/crossdomain.xml
/clientaccesspolicy.xml
/.well-known/
Sprawdź również komentarze na głównej i pomocniczych stronach.
Wymuszanie błędów
Serwery WWW mogą zachowywać się niespodziewanie, gdy do nich wysyłane są dziwne dane. Może to otworzyć luki w zabezpieczeniach lub ujawnić poufne informacje.
Otwórz fałszywe strony takie jak /cokolwiek_fake.php (.aspx,.html,.itp)
Dodaj "[]", "]]" i "[[" w wartościach ciasteczka oraz wartościach parametrów aby wywołać błędy
Wygeneruj błąd, wpisując dane wejściowe jako
/~randomthing/%s
na końcu URLSpróbuj użyć różnych czasowników HTTP jak PATCH, DEBUG lub niepoprawny, np. FAKE
Sprawdź, czy możesz przesyłać pliki (metoda PUT, WebDav)
Jeśli odkryjesz, że WebDav jest włączony, ale nie masz wystarczających uprawnień do przesyłania plików w folderze głównym, spróbuj:
Próbuj siłowo hasła
Prześlij pliki za pomocą WebDav do pozostałych znalezionych folderów na stronie internetowej. Możesz mieć uprawnienia do przesyłania plików do innych folderów.
Układy SSL/TLS
Jeśli aplikacja nie wymusza użycia HTTPS w żadnej części, to jest podatna na atak typu MitM
Jeśli aplikacja wysyła poufne dane (hasła) za pomocą HTTP. To jest wysokie ryzyko.
Użyj testssl.sh do sprawdzania luk w zabezpieczeniach (W programach Bug Bounty prawdopodobnie tego rodzaju luki nie będą akceptowane) i użyj a2sv do ponownego sprawdzenia podatności:
Informacje dotyczące podatności SSL/TLS:
Przeglądanie stron
Uruchom jakiś rodzaj pająka w sieci. Celem pająka jest znalezienie jak największej liczby ścieżek w testowanej aplikacji. Dlatego należy użyć przeglądania stron internetowych i źródeł zewnętrznych, aby znaleźć jak najwięcej prawidłowych ścieżek.
gospider (go): Pająk HTML, LinkFinder w plikach JS i źródła zewnętrzne (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
hakrawler (go): Pająk HML, z LinkFider dla plików JS i Archive.org jako źródło zewnętrzne.
dirhunt (python): Pająk HTML, wskazuje również "soczyste pliki".
evine (go): Interaktywny pająk HTML w wierszu poleceń. Szuka także w Archive.org.
meg (go): To narzędzie nie jest pająkiem, ale może być przydatne. Możesz wskazać plik z hostami i plik z ścieżkami, a meg pobierze każdą ścieżkę na każdym hoście i zapisze odpowiedź.
urlgrab (go): Pająk HTML z możliwościami renderowania JS. Jednak wygląda na to, że nie jest rozwijany, skompilowana wersja jest stara, a obecny kod nie kompiluje się.
gau (go): Pająk HTML korzystający z dostawców zewnętrznych (wayback, otx, commoncrawl)
ParamSpider: Ten skrypt znajdzie adresy URL z parametrami i je wymieni.
galer (go): Pająk HTML z możliwościami renderowania JS.
LinkFinder (python): Pająk HTML, z możliwościami upiększania JS zdolny do wyszukiwania nowych ścieżek w plikach JS. Warto również spojrzeć na JSScanner, który jest nakładką na LinkFinder.
goLinkFinder (go): Do wyodrębniania punktów końcowych zarówno w źródle HTML, jak i osadzonych plikach javascript. Przydatne dla łowców błędów, drużyn czerwonych i ninja bezpieczeństwa informacji.
JSParser (python2.7): Skrypt python 2.7 używający Tornado i JSBeautifier do analizowania względnych adresów URL z plików JavaScript. Przydatne do łatwego odkrywania żądań AJAX. Wygląda na to, że nie jest rozwijany.
relative-url-extractor (ruby): Dla danego pliku (HTML) wyodrębni adresy URL z niego, używając sprytnego wyrażenia regularnego do znalezienia i wyodrębnienia względnych adresów URL z brzydkich (zmniejszonych) plików.
JSFScan (bash, kilka narzędzi): Zbiera interesujące informacje z plików JS za pomocą kilku narzędzi.
subjs (go): Znajdź pliki JS.
page-fetch (go): Ładuje stronę w przeglądarce bez wyświetlania i drukuje wszystkie załadowane adresy URL do załadowania strony.
Feroxbuster (rust): Narzędzie do odkrywania treści łączące kilka opcji poprzednich narzędzi
Javascript Parsing: Rozszerzenie Burp do znajdowania ścieżek i parametrów w plikach JS.
Sourcemapper: Narzędzie, które podając adres URL .js.map, uzyska uporządkowany kod JS
xnLinkFinder: Jest to narzędzie używane do odkrywania punktów końcowych dla określonego celu.
waymore: Odkryj linki z maszyny wayback (pobierając również odpowiedzi w wayback i szukając więcej linków
HTTPLoot (go): Przeglądaj (nawet poprzez wypełnianie formularzy) i znajduj również informacje poufne, korzystając z określonych wyrażeń regularnych.
SpiderSuite: Spider Suite to zaawansowany wielofunkcyjny pająk GUI do bezpieczeństwa sieciowego zaprojektowany dla profesjonalistów cyberbezpieczeństwa.
jsluice (go): Jest to pakiet Go i narzędzie wiersza poleceń do wyodrębniania adresów URL, ścieżek, sekretów i innych interesujących danych z kodu źródłowego JavaScript.
ParaForge: ParaForge to proste rozszerzenie Burp Suite do wyodrębniania parametrów i punktów końcowych z żądania w celu utworzenia niestandardowej listy słów do fuzzowania i wyliczania.
katana (go): Niesamowite narzędzie do tego.
Przeciążanie katalogów i plików
Rozpocznij przeciążanie od folderu głównego i upewnij się, że przeciążysz wszystkie znalezione katalogi korzystając z tej metody i wszystkich katalogów odkrytych przez Przeglądanie stron (możesz to zrobić przeciążając rekurencyjnie i dodając na początku używanej listy słów nazwy znalezionych katalogów). Narzędzia:
Dirb / Dirbuster - Zawarte w Kali, stare (i wolne) ale funkcjonalne. Pozwalają na automatyczne podpisywanie certyfikatów i rekurencyjne wyszukiwanie. Zbyt wolne w porównaniu z innymi opcjami.
Dirsearch (python): Nie pozwala na automatyczne podpisywanie certyfikatów, ale pozwala na rekurencyjne wyszukiwanie.
Gobuster (go): Pozwala na automatyczne podpisywanie certyfikatów, nie ma rekurencyjnego wyszukiwania.
Feroxbuster - Szybki, obsługuje rekurencyjne wyszukiwanie.
wfuzz
wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ
ffuf - Szybki:
ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ
uro (python): To nie jest pająk, ale narzędzie, które po podaniu listy znalezionych adresów URL usunie "zduplikowane" adresy URL.
Scavenger: Rozszerzenie Burp do tworzenia listy katalogów z historii burp różnych stron
TrashCompactor: Usuń adresy URL z zduplikowanymi funkcjonalnościami (oparte na importach js)
Chamaleon: Wykorzystuje wapalyzer do wykrywania używanych technologii i wybiera listy słów do użycia.
Polecane słowniki:
raft-large-directories-lowercase.txt
directory-list-2.3-medium.txt
RobotsDisallowed/top10000.txt
/usr/share/wordlists/dirb/common.txt
/usr/share/wordlists/dirb/big.txt
/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
Zauważ, że za każdym razem, gdy odkryjesz nowy katalog podczas ataku brutalnej siły lub przeszukiwania, należy go poddać atakowi brutalnej siły.
Co sprawdzić w każdym znalezionym pliku
Sprawdzacz uszkodzonych linków: Znajdź uszkodzone linki wewnątrz plików HTML, które mogą być podatne na przejęcia
Kopie zapasowe plików: Gdy znajdziesz wszystkie pliki, poszukaj kopii zapasowych wszystkich plików wykonywalnych (".php", ".aspx"...). Powszechne warianty nazewnictwa kopii zapasowych to: file.ext~, #file.ext#, ~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp i file.old. Możesz również skorzystać z narzędzi bfac lub backup-gen.
Odkryj nowe parametry: Możesz użyć narzędzi takich jak Arjun, parameth, x8 i Param Miner do odkrywania ukrytych parametrów. Jeśli możesz, spróbuj wyszukać ukryte parametry w każdym pliku wykonywalnym na stronie internetowej.
Wszystkie domyślne listy słów Arjuna: 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
Komentarze: Sprawdź komentarze we wszystkich plikach, możesz znaleźć dane uwierzytelniające lub ukrytą funkcjonalność.
Jeśli grasz w CTF, „powszechnym” trikiem jest ukrycie informacji wewnątrz komentarzy na prawej stronie strony (używając setek spacji, aby nie widzieć danych podczas otwierania kodu źródłowego w przeglądarce). Inna możliwość to użycie kilku nowych linii i ukrycie informacji w komentarzu na dole strony internetowej.
Klucze API: Jeśli znajdziesz jakikolwiek klucz API, istnieje przewodnik wskazujący, jak korzystać z kluczy API różnych platform: keyhacks, zile, truffleHog, SecretFinder, RegHex, DumpsterDive, EarlyBird
Klucze Google API: Jeśli znajdziesz jakiś klucz API wyglądający jak AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik, możesz użyć projektu gmapapiscanner do sprawdzenia, do których interfejsów API ma dostęp klucz.
S3 Buckets: Podczas przeszukiwania zwróć uwagę, czy jakikolwiek poddomena lub jakikolwiek link jest powiązany z jakimś kubłem S3. W takim przypadku sprawdź uprawnienia kubła.
Specjalne znaleziska
Podczas przeszukiwania i atakowania brutalnej siły możesz natrafić na interesujące rzeczy, na które musisz zwrócić uwagę.
Interesujące pliki
Szukaj linków do innych plików wewnątrz plików CSS.
Jeśli znajdziesz plik .env, można w nim znaleźć informacje takie jak klucze API, hasła do baz danych i inne informacje.
Jeśli znajdziesz punkty końcowe API, również powinieneś je przetestować. Nie są to pliki, ale prawdopodobnie będą na nie podobne.
Pliki JS: W sekcji przeszukiwania wspomniano o kilku narzędziach, które mogą wydobywać ścieżki z plików JS. Również interesujące będzie monitorowanie każdego znalezionego pliku JS, ponieważ w niektórych przypadkach zmiana może wskazywać na potencjalną podatność wprowadzoną w kodzie. Możesz użyć na przykład JSMon.
Deobfuskator i dekoder JavaScript: https://lelinhtinh.github.io/de4js/, https://www.dcode.fr/javascript-unobfuscator
Uporządkowujący JavaScript: http://jsbeautifier.org/, http://jsnice.org/
Deobfuskacja JsFuck (javascript z znakami:"[]!+" https://ooze.ninja/javascript/poisonjs/)
TrainFuck:
+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.
W kilku przypadkach będziesz musiał zrozumieć wyrażenia regularne używane, co może być przydatne: https://regex101.com/
Możesz również monitorować pliki, w których wykryto formularze, ponieważ zmiana w parametrze lub pojawienie się nowego formularza może wskazywać na potencjalnie nową podatną funkcjonalność.
403 Forbidden/Basic Authentication/401 Unauthorized (omijanie)
page403 & 401 Bypasses502 Proxy Error
Jeśli jakakolwiek strona odpowiada tym kodem, prawdopodobnie jest to źle skonfigurowany serwer proxy. Jeśli wyślesz żądanie HTTP takie jak: GET https://google.com HTTP/1.1
(z nagłówkiem hosta i innymi standardowymi nagłówkami), serwer proxy spróbuje uzyskać dostęp do google.com i znajdziesz SSRF.
Autoryzacja NTLM - Ujawnianie informacji
Jeśli działający serwer wymaga autoryzacji Windows lub znajdziesz logowanie proszące o dane uwierzytelniające (i proszące o nazwę domeny), możesz spowodować ujawnienie informacji.
Wyślij nagłówek: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”
i ze względu na to, jak działa autoryzacja NTLM, serwer odpowie wewnętrznymi informacjami (wersja IIS, wersja Windows...) w nagłówku "WWW-Authenticate".
Możesz to zautomatyzować za pomocą wtyczki nmap "http-ntlm-info.nse".
Przekierowanie HTTP (CTF)
Możliwe jest umieszczenie treści wewnątrz przekierowania. Ta treść nie będzie pokazywana użytkownikowi (ponieważ przeglądarka wykonuje przekierowanie), ale coś może być ukryte w niej.
Sprawdzanie podatności sieci Web
Teraz, gdy wykonano kompleksowe wyliczenie aplikacji sieci Web, nadszedł czas, aby sprawdzić wiele możliwych podatności. Możesz znaleźć listę kontrolną tutaj:
pageWeb Vulnerabilities MethodologyDowiedz się więcej o podatnościach sieci Web:
Monitorowanie stron pod kątem zmian
Możesz użyć narzędzi takich jak https://github.com/dgtlmoon/changedetection.io, aby monitorować strony pod kątem modyfikacji, które mogą wprowadzić podatności.
Jeśli interesuje Cię kariera hakera i hakerskie wyzwania - rekrutujemy! (wymagana biegła znajomość języka polskiego w mowie i piśmie).
Automatyczne polecenia HackTricks
Last updated