<summary><strong>Impara l'hacking AWS da zero a eroe con</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**Gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
Da [i documenti](https://redis.io/topics/introduction): Redis è un **archivio di strutture dati** in memoria open source (con licenza BSD), utilizzato come **database**, cache e message broker).
Di default Redis utilizza un protocollo basato su testo semplice, ma devi tenere presente che può anche implementare **ssl/tls**. Scopri come [eseguire Redis con ssl/tls qui](https://fossies.org/linux/redis/TLS.md).
Redis è un **protocollo basato su testo**, puoi semplicemente **inviare il comando in un socket** e i valori restituiti saranno leggibili. Ricorda anche che Redis può essere eseguito utilizzando **ssl/tls** (ma questo è molto strano).
Il **primo comando** che potresti provare è **`info`**. Potrebbe **restituire un output con informazioni** sull'istanza di Redis **o qualcosa** del genere potrebbe essere restituito:
**Per impostazione predefinita** Redis può essere accesso **senza credenziali**. Tuttavia, può essere **configurato** per supportare **solo password o username + password**.\
È possibile **impostare una password** nel file _**redis.conf**_ con il parametro `requirepass`**o temporaneamente** fino al riavvio del servizio collegandosi ad esso ed eseguendo: `config set requirepass p@ss$12E45`.\
In casi come questo sarà **necessario trovare credenziali valide** per interagire con Redis, quindi potresti provare a [**forzare l'accesso**](../generic-methodologies-and-resources/brute-force.md#redis).\
**Nel caso in cui tu abbia trovato credenziali valide, è necessario autenticare la sessione** dopo aver stabilito la connessione con il comando:
Se il server Redis permette **connessioni anonime** o se hai ottenuto credenziali valide, puoi avviare il processo di enumerazione del servizio utilizzando i seguenti **comandi**:
Nota che i **comandi Redis di un'istanza possono essere rinominati** o rimossi nel file _redis.conf_. Ad esempio, questa riga rimuoverà il comando FLUSHDB:
Ulteriori informazioni su come configurare in modo sicuro un servizio Redis qui: [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)
Puoi anche **monitorare in tempo reale i comandi Redis** eseguiti con il comando **`monitor`** o ottenere i **25 query più lenti** con **`slowlog get 25`**
All'interno di Redis i **database sono numerati a partire da 0**. Puoi verificare se qualcuno è in uso nell'output del comando `info` all'interno del blocco "Keyspace":
Nell'esempio, il **database 0 e 1** vengono utilizzati. **Il database 0 contiene 4 chiavi e il database 1 contiene 1**. Per impostazione predefinita, Redis utilizzerà il database 0. Per eseguire il dump ad esempio del database 1, è necessario eseguire:
In caso si riceva il seguente errore `-WRONGTYPE Operazione su una chiave che contiene un tipo di valore errato` durante l'esecuzione di `GET <KEY>` è perché la chiave potrebbe essere qualcos'altro rispetto a una stringa o un intero e richiede un operatore speciale per visualizzarla.
**Scarica il database con npm** [**redis-dump**](https://www.npmjs.com/package/redis-dump) **o python** [**redis-utils**](https://pypi.org/project/redis-utils/)
[**redis-rogue-server**](https://github.com/n0b0dyCN/redis-rogue-server) può ottenere automaticamente una shell interattiva o una shell inversa in Redis (<=5.0.5).
Informazioni da [**qui**](https://web.archive.org/web/20191201022931/http://reverse-tcp.xyz/pentest/database/2017/02/09/Redis-Hacking-Tips.html). Devi conoscere il **percorso** della **cartella del sito Web**:
Come nella sezione precedente, è possibile sovrascrivere alcuni file di modello html che verranno interpretati da un motore di modelli e ottenere una shell.
Ad esempio, seguendo [**questo articolo**](https://www.neteye-blog.com/2022/05/cyber-apocalypse-ctf-2022-red-island-writeup/), è possibile vedere che l'attaccante ha iniettato una **shell inversa in un html** interpretato dal **motore di modelli nunjucks:**
Nota che **diversi motori di template memorizzano** i template in **memoria**, quindi anche se li sovrascrivi, il nuovo **non verrà eseguito**. In questi casi, o lo sviluppatore ha lasciato attivo il ricaricamento automatico o è necessario eseguire un attacco DoS sul servizio (e aspettarsi che venga riavviato automaticamente).
Si prega di notare che il risultato di **`config get dir`** può cambiare dopo altri comandi di exploit manuali. Si consiglia di eseguirlo per primo subito dopo il login in Redis. Nell'output di **`config get dir`** potresti trovare la **home** dell'utente **redis** (di solito _/var/lib/redis_ o _/home/redis/.ssh_), e sapendo questo saprai dove puoi scrivere il file `authenticated_users` per accedere via ssh **con l'utente redis**. Se conosci la home di un altro utente valido in cui hai permessi di scrittura, puoi anche abusarne:
1. Seguendo le istruzioni da [https://github.com/n0b0dyCN/RedisModules-ExecuteCommand](https://github.com/n0b0dyCN/RedisModules-ExecuteCommand) è possibile **compilare un modulo redis per eseguire comandi arbitrari**.
[**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 modalità sandbox**. Nel post collegato puoi vedere **come abusarlo** utilizzando 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 la sandbox Lua** potresti **eseguire comandi arbitrari** sul sistema. Inoltre, dallo stesso post puoi vedere alcune **opzioni per causare DoS**.
Il redis master tutte le operazioni vengono sincronizzate automaticamente con il redis slave, il che significa che possiamo considerare la vulnerabilità redis come un redis slave, connesso al redis master che controlliamo, quindi possiamo inserire il comando nel nostro redis.
Se puoi inviare una richiesta **in testo chiaro a Redis**, puoi **comunicare con esso** poiché Redis leggerà riga per riga la richiesta e risponderà solo con errori alle righe che non comprende:
Pertanto, se trovi una vulnerabilità **SSRF** in un sito web e puoi **controllare** alcuni **intestazioni** (forse con una vulnerabilità CRLF) o **parametri POST**, sarai in grado di inviare comandi arbitrari a Redis.
In **Gitlab11.4.7** è stata scoperta una vulnerabilità **SSRF** e una **CRLF**. La vulnerabilità **SSRF** era nella **funzionalità di importazione del progetto da URL** durante la creazione di un nuovo progetto e consentiva di accedere a IP arbitrari nella forma \[0:0:0:0:0:ffff:127.0.0.1] (questo accederà a 127.0.0.1), e la vulnerabilità **CRLF** è stata sfruttata aggiungendo semplicemente i caratteri **%0D%0A** all'**URL**.
Pertanto, era possibile **abusare di queste vulnerabilità per comunicare con l'istanza Redis** che **gestisce le code** da **gitlab** e abusare di quelle code per **ottenere l'esecuzione del codice**. Il payload di abuso della coda Redis è:
_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 presa questa informazione) lo sfruttamento ha funzionato con lo schema `git` e non con lo schema `http`._
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**