* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
**Memcached** (pronúncia: mem-cached, mem-cash-dee) é um sistema de [cache de memória distribuída](https://en.wikipedia.org/wiki/Memory\_caching) geral. É frequentemente usado para acelerar sites dinâmicos baseados em banco de dados, armazenando em cache dados e objetos na RAM para reduzir o número de vezes que uma fonte de dados externa (como um banco de dados ou API) deve ser lida. (De [wikipedia](https://en.wikipedia.org/wiki/Memcached))\
Embora o Memcached suporte o SASL, a maioria das instâncias é **exposta sem autenticação**.
Este é um manual para explorar vulnerabilidades no serviço de cache Memcached. O Memcached é um sistema de cache distribuído de alto desempenho que armazena dados em memória RAM. Ele é frequentemente usado para acelerar aplicativos da web, como sites de comércio eletrônico e redes sociais.
#### Verificando se o serviço Memcached está em execução
Antes de começar a explorar o Memcached, é importante verificar se o serviço está em execução na máquina de destino. Isso pode ser feito usando o comando `nmap` para verificar as portas abertas na máquina:
```
nmap -p 11211 <ip_address>
```
Se a porta 11211 estiver aberta, o serviço Memcached está em execução na máquina.
#### Explorando o serviço Memcached
Uma vez que o serviço Memcached esteja em execução, você pode começar a explorar possíveis vulnerabilidades. Algumas das técnicas de exploração mais comuns incluem:
- **Ataques de negação de serviço (DoS)**: o Memcached pode ser usado para realizar ataques de DoS em outras máquinas. Isso é feito enviando solicitações falsas para o serviço Memcached, fazendo com que ele envie grandes quantidades de dados para a máquina de destino.
- **Exfiltração de dados**: o Memcached pode ser usado para exfiltrar dados de outras máquinas. Isso é feito enviando dados para o serviço Memcached e, em seguida, recuperando-os de outra máquina.
- **Execução remota de código**: o Memcached pode ser usado para executar código arbitrário em outras máquinas. Isso é feito enviando comandos especiais para o serviço Memcached, que são então executados na máquina de destino.
#### Prevenção de vulnerabilidades do Memcached
Para prevenir vulnerabilidades do Memcached, é importante seguir as melhores práticas de segurança, como:
- **Restringir o acesso ao serviço Memcached**: o serviço Memcached deve ser restrito apenas a máquinas confiáveis e não deve ser acessível a partir da Internet pública.
- **Usar autenticação**: o Memcached suporta autenticação, o que pode ajudar a prevenir ataques de DoS e exfiltração de dados.
- **Manter o software atualizado**: é importante manter o software Memcached atualizado com as últimas correções de segurança para prevenir vulnerabilidades conhecidas.
O protocolo memcache fornece [comandos](https://lzone.de/articles/memcached.htm) para visualizar os dados organizados por slabs (categorias de dados de um determinado intervalo de tamanho). No entanto, existem algumas limitações significativas:
1. Você só pode despejar chaves por classe de slab (chaves com tamanho de conteúdo aproximado)
2. Você só pode despejar uma página por classe de slab (1MB de dados)
3. Esta é uma funcionalidade não oficial que [pode ser removida a qualquer momento.](https://groups.google.com/forum/?fromgroups=#!topic/memcached/1-T8I-RVGKM)
A segunda limitação é provavelmente a mais difícil, porque 1MB de vários gigabytes é quase nada. Ainda assim, pode ser útil observar como você usa um subconjunto de suas chaves. Mas isso pode depender do seu caso de uso. Se você não se importa com os detalhes técnicos, pule para a seção de [ferramentas](https://lzone.de/cheat-sheet/memcached#tools) para aprender sobre as ferramentas que permitem despejar tudo facilmente. Alternativamente, siga o guia a seguir e tente os comandos [usando telnet](https://lzone.de/articles/memcached.htm) contra sua configuração do memcached. **Como Funciona** Primeiro, você precisa saber como o memcache organiza sua memória. Se você iniciar o memcache com a opção "-vv", verá as classes de slab que ele cria. Por exemplo:
Na configuração impressa acima, o memcache manterá 6898 peças de dados entre 121 e 152 bytes em um único slab de tamanho 1MB (6898\*152). Todos os slabs têm tamanho de 1MB por padrão. Use o seguinte comando para imprimir todos os slabs existentes no momento:
O exemplo mostra que temos apenas um tipo de slab ativo, o #1. Como nossa chave tem apenas um byte de tamanho, ela se encaixa no menor tamanho possível de chunk. As estatísticas do slab mostram que atualmente existe apenas uma página da classe de slab e que apenas um chunk é usado. **O mais importante é que ele mostra um contador para cada operação de escrita (set, incr, decr, cas, touch) e um para gets. Usando esses contadores, você pode determinar a taxa de acertos!** Você também pode obter outro conjunto de informações usando "stats items" com contadores interessantes sobre evasões e contadores de falta de memória.
**O que podemos deduzir até agora...** Dadas as informações estatísticas por classe de blocos, já podemos deduzir muitas coisas sobre o comportamento do aplicativo:
Claro, para responder às perguntas, você precisa conhecer os objetos de cache do seu aplicativo. **Agora: Como Despejar Chaves?** As chaves podem ser despejadas por classe de blocos usando o comando "stats cachedump".
O comando "cachedump" retorna um item por linha. O primeiro número entre chaves indica o tamanho em bytes e o segundo o timestamp da criação. Dado o nome da chave, agora você também pode despejar o valor usando.
Na versão do memcache 1.4.31 e superior, há um novo comando para despejar as chaves da memória em modo não-bloqueante (leia https://github.com/memcached/memcached/wiki/ReleaseNotes1431). Este método é seguro para ser executado em produção. A saída não é consistente, mas é boa o suficiente para encontrar chaves, seu tempo exato de expiração (EXP) e o último tempo de acesso (LA). Devido à enorme saída gerada, é recomendável usar o comando ‘nc’. Exemplos:
EXP=-1 significa que o item nunca expira. EXP=1590718787 (Sex Maio 29 02:19:47 GMT 2020) mantém o timestamp Unix quando o item deve expirar. LA=1590712292 (Seg Maio 25 05:55:57 GMT 2020) mantém o timestamp Unix quando o item foi acessado pela última vez.
| PHP | [memcache.php](http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/) | GUI de monitoramento do Memcache que também permite o dumping de chaves. | | |
| libmemcached | [peep](http://blog.evanweaver.com/2009/04/20/peeping-into-memcached/) | **Congela seu processo memcached!!!** Tenha cuidado ao usá-lo em produção. Ainda assim, você pode contornar a limitação de 1MB e realmente despejar **todas** as chaves. | | |
Se você tentar "set" ou "add" uma chave com um tempo limite maior do que o máximo permitido, pode não obter o que espera, porque o memcached trata o valor como um timestamp Unix. Além disso, se o timestamp estiver no passado, não fará nada. Seu comando falhará silenciosamente.
Apesar da documentação dizer algo sobre o valor de transbordamento de 64 bits usando "incr" faz com que o valor desapareça. É necessário criá-lo novamente usando "add" / "set".
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).