hacktricks/network-services-pentesting/11211-memcache
2024-05-02 15:12:16 +00:00
..
memcache-commands.md Translated ['binary-exploitation/rop-return-oriented-programing/ret2lib/ 2024-05-02 15:12:16 +00:00
README.md Translated to Turkish 2024-02-10 18:14:16 +00:00

11211 - Memcache Pentesting

AWS hackleme becerilerinizi sıfırdan ileri seviyeye taşıyın htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile!

HackTricks'ı desteklemenin diğer yolları:

Protokol Bilgisi

wikipedia'den alınan bilgilere göre:

Memcached (telaffuz: mem-cashed, mem-cash-dee), genel amaçlı bir dağıtık bellek önbellekleme sistemidir. Sıklıkla, veri ve nesneleri RAM'de önbelleğe alarak (veritabanı veya API gibi harici bir veri kaynağının okunma sayısını azaltarak) dinamik veritabanı destekli web sitelerinin hızını artırmak için kullanılır.

Memcached, SASL'yi desteklemesine rağmen, çoğu örnek kimlik doğrulama olmadan açığa çıkar.

Varsayılan port: 11211

PORT      STATE SERVICE
11211/tcp open  unknown

Saptama

El ile

Bir memcache örneğinde kaydedilen tüm bilgileri dışarı çıkarmak için şunları yapmanız gerekmektedir:

  1. Aktif öğeleri olan slab'ları bulun
  2. Önceden tespit edilen slab'ların anahtar isimlerini alın
  3. Anahtar isimlerini alarak kaydedilen verileri dışarı çıkarın

Unutmayın, bu hizmet sadece bir önbellek olduğundan, veriler görünüp kaybolabilir.

echo "version" | nc -vn -w 1 <IP> 11211      #Get version
echo "stats" | nc -vn -w 1 <IP> 11211        #Get status
echo "stats slabs" | nc -vn -w 1 <IP> 11211  #Get slabs
echo "stats items" | nc -vn -w 1 <IP> 11211  #Get items of slabs with info
echo "stats cachedump <number> 0" | nc -vn -w 1 <IP> 11211  #Get key names (the 0 is for unlimited output size)
echo "get <item_name>" | nc -vn -w 1 <IP> 11211  #Get saved info

#This php will just dump the keys, you need to use "get <item_name> later"
sudo apt-get install php-memcached
php -r '$c = new Memcached(); $c->addServer("localhost", 11211); var_dump( $c->getAllKeys() );'

Kılavuz2

Bu bölümde, Memcached sunucusuna manuel olarak saldırmak için kullanılabilecek bazı teknikler hakkında bilgi bulacaksınız.

Memcached Nedir?

Memcached, dağıtılmış bir bellek nesne önbellekleme sistemi olarak kullanılan bir açık kaynaklı yazılımdır. Genellikle web uygulamalarında performansı artırmak için kullanılır. Memcached, bellek içindeki verileri hızlı bir şekilde depolamak ve erişmek için kullanılır.

Memcached Sunucusuna Saldırı

Memcached sunucusuna saldırmak için aşağıdaki adımları izleyebilirsiniz:

  1. Memcached sunucusunun IP adresini belirleyin.
  2. Memcached sunucusuna bağlanmak için bir Memcached istemcisi kullanın.
  3. Memcached sunucusuna bağlandıktan sonra, stats komutunu kullanarak sunucu hakkında bilgi alabilirsiniz. Bu bilgiler, saldırı için faydalı olabilir.
  4. Memcached sunucusuna saldırmak için get veya set komutlarını kullanabilirsiniz. get komutu, belirli bir anahtar için değeri almanızı sağlar. set komutu ise belirli bir anahtar için değer atamanızı sağlar.
  5. Memcached sunucusuna saldırırken, önbelleğe alınmış verileri veya hassas bilgileri elde etmek için farklı anahtarlar deneyebilirsiniz.
  6. Saldırı sırasında, Memcached sunucusuna çok sayıda istek göndererek hizmetin yanıt verememesini sağlayabilirsiniz. Bu, hizmetin kullanılamaz hale gelmesine neden olabilir.

Memcached Sunucusunu Koruma

Memcached sunucusunu korumak için aşağıdaki adımları izleyebilirsiniz:

  1. Memcached sunucusunu güvenli bir ağa yerleştirin ve güvenlik duvarı kullanarak erişimi sınırlayın.
  2. Memcached sunucusunun varsayılan olarak herhangi bir kimlik doğrulama gerektirmediğinden emin olun. Kimlik doğrulama gerektiren bir yapılandırma kullanmak daha güvenlidir.
  3. Memcached sunucusunun sadece güvenilir IP adreslerinden erişilebilir olduğundan emin olun.
  4. Memcached sunucusunun sürümünü güncel tutun ve güvenlik yamalarını düzenli olarak uygulayın.
  5. Memcached sunucusunun halka açık bir IP adresine sahip olmadığından emin olun. Eğer halka açık bir IP adresine sahipse, erişimi sınırlamak için bir VPN veya güvenlik duvarı kullanın.

Bu adımları izleyerek, Memcached sunucusunun güvenliğini artırabilir ve saldırılara karşı koruyabilirsiniz.

sudo apt install libmemcached-tools
memcstat --servers=127.0.0.1 #Get stats
memcdump --servers=127.0.0.1 #Get all items
memccat  --servers=127.0.0.1 <item1> <item2> <item3> #Get info inside the item(s)

Otomatik

Memcache sunucusuna otomatik olarak saldırmak için birkaç araç mevcuttur. Bu araçlar, hedef sunucunun IP adresini ve Memcache sunucusunun varsayılan olarak kullandığı 11211 portunu gerektirir.

Memcrashed

Memcrashed, Memcache sunucusuna DDoS saldırıları gerçekleştirmek için kullanılan bir araçtır. Bu araç, hedef sunucuya büyük miktarda sahte istek göndererek sunucunun kaynaklarını tüketir ve hizmet kesintisine neden olur.

Kullanımı oldukça basittir. Aşağıdaki komutu kullanarak Memcrashed'ı çalıştırabilirsiniz:

memcrashed.py <hedef_IP_adresi>

Memcached-Deleter

Memcached-Deleter, Memcache sunucusundaki tüm verileri silmek için kullanılan bir araçtır. Bu araç, hedef sunucuya bağlanır, tüm anahtarları listeler ve ardından tüm anahtarları siler.

Kullanımı oldukça basittir. Aşağıdaki komutu kullanarak Memcached-Deleter'ı çalıştırabilirsiniz:

memcached-deleter.py <hedef_IP_adresi>

Memcrashed-DDoS

Memcrashed-DDoS, Memcache sunucusuna DDoS saldırıları gerçekleştirmek için kullanılan bir başka araçtır. Bu araç, hedef sunucuya büyük miktarda sahte istek göndererek sunucunun kaynaklarını tüketir ve hizmet kesintisine neden olur.

Kullanımı oldukça basittir. Aşağıdaki komutu kullanarak Memcrashed-DDoS'ı çalıştırabilirsiniz:

memcrashed-ddos.py <hedef_IP_adresi>

Bu araçlar, yalnızca yasal ve izinli pentest faaliyetleri için kullanılmalıdır. Herhangi bir hedefe saldırmadan önce mutlaka izin almalısınız. Aksi takdirde, yasa dışı faaliyetlere katıldığınızdan dolayı yasal sorumluluklarla karşı karşıya kalabilirsiniz.

nmap -n -sV --script memcached-info -p 11211 <IP>   #Just gather info
msf > use auxiliary/gather/memcached_extractor      #Extracts saved data
msf > use auxiliary/scanner/memcached/memcached_amp #Check is UDP DDoS amplification attack is possible

Memcache Anahtarlarının Dump Edilmesi

Memcache dünyasında, verileri slab'larla düzenlemeye yardımcı olan bir protokol olan memcache için depolanan verileri incelemek için belirli komutlar bulunur, ancak dikkate değer kısıtlamalarla:

  1. Anahtarlar, benzer içerik boyutuna sahip anahtarları gruplandıran slab sınıfına göre sadece dump edilebilir.
  2. Her slab sınıfı için bir sayfa limiti vardır, bu da 1MB veriye eşittir.
  3. Bu özellik resmi olmayıp herhangi bir zamanda sonlandırılabilir, topluluk forumlarında tartışılmıştır.

Potansiyel olarak gigabaytlarca veriden sadece 1MB'ın dump edilebilmesi kısıtlaması özellikle önemlidir. Bununla birlikte, bu işlevsellik, belirli ihtiyaçlara bağlı olarak anahtar kullanım desenleri hakkında bilgi sağlayabilir. Mekaniklerle daha az ilgilenenler için, araçlar bölümüne giderek kapsamlı dump etme araçlarına ulaşılabilir. Alternatif olarak, memcached kurulumlarıyla doğrudan etkileşim için telnet kullanma süreci aşağıda açıklanmıştır.

Nasıl Çalışır

Memcache'in bellek düzenlemesi önemlidir. Memcache'i "-vv" seçeneğiyle başlatmak, oluşturduğu slab sınıflarını ortaya çıkarır, aşağıda gösterildiği gibi:

$ memcached -vv
slab class   1: chunk size        96 perslab   10922
[...]

Mevcut tüm slab'ları görüntülemek için aşağıdaki komut kullanılır:

stats slabs

memcached 1.4.13'e tek bir anahtar eklemek, slab sınıflarının nasıl oluşturulduğunu ve yönetildiğini gösterir. Örneğin:

set mykey 0 60 1
1
STORED

"stats slabs" komutunu çalıştırmak, anahtar ekleme sonrasında slab kullanımı hakkında detaylı istatistikler sağlar:

stats slabs
[...]

Bu çıktı, etkin slab türlerini, kullanılan parçaları ve işletimsel istatistikleri ortaya koyarak okuma ve yazma işlemlerinin verimliliği hakkında bilgi sağlar.

"stats items" adlı başka bir kullanışlı komut, atma, bellek kısıtlamaları ve öğe yaşam döngüleri hakkında veri sağlar:

stats items
[...]

Bu istatistikler, farklı içerik boyutları için önbellek verimliliği, bellek tahsisi ve büyük nesneleri önbelleğe alma kapasitesi gibi uygulama önbellekleme davranışı hakkında bilinçli varsayımlar yapmayı mümkün kılar.

Anahtarları Dökme

1.4.31 öncesindeki sürümlerde, anahtarlar slab sınıfına göre dökülür:

stats cachedump <slab class> <number of items to dump>

Örneğin, 1. sınıfta bir anahtarın içeriğini dökmek için:

stats cachedump 1 1000
ITEM mykey [1 b; 1350677968 s]
END

Bu yöntem, slab sınıflarını dolaşarak anahtar değerlerini çıkartır ve isteğe bağlı olarak döker.

MEMCACHE ANAHTARLARININ DÖKÜLMESİ (VER 1.4.31+)

Memcache sürümü 1.4.31 ve üzeriyle birlikte, üretim ortamında anahtarları dökmek için yeni ve daha güvenli bir yöntem tanıtılmıştır. Bu yöntem, sürüm notlarında detaylı olarak açıklandığı gibi, bloke etmeyen bir mod kullanır. Bu yaklaşım geniş çaplı çıktı üretir, bu nedenle verimlilik için 'nc' komutunun kullanılması önerilir. Örnekler şunları içerir:

echo 'lru_crawler metadump all' | nc 127.0.0.1 11211 | head -1
echo 'lru_crawler metadump all' | nc 127.0.0.1 11211 | grep ee6ba58566e234ccbbce13f9a24f9a28

DUMPING ARAÇLARI

Tablo buradan.

Programlama Dilleri Araçlar İşlevsellik
PHP basit script Anahtar isimlerini yazdırır.
Perl basit script Anahtarları ve değerleri yazdırır.
Ruby basit script Anahtar isimlerini yazdırır.
Perl memdump CPAN modülünde bulunan bir araç Memcached-libmemcached ached/)
PHP memcache.php Anahtarları dökme yapmanıza izin veren Memcache İzleme Arayüzü
libmemcached peep Memcached işleminizi dondurur!!! Bu aracı üretim ortamında kullanırken dikkatli olun. Yine de, 1MB sınırlamasını aşabilir ve tüm anahtarları gerçekten dökme yapabilirsiniz.

Sorun Giderme

1MB Veri Sınırlaması

Unutmayın ki memcached 1.4 öncesinde, varsayılan maksimum slab boyutu nedeniyle 1MB'den daha büyük nesneleri depolayamazsınız.

Asla 30 Günden Büyük Bir Zaman Aşımı Ayarlamayın!

İzin verilen maksimumdan daha büyük bir zaman aşımıyla bir anahtar "set" veya "add" etmeye çalışırsanız, beklediğiniz sonucu almayabilirsiniz çünkü memcached değeri bir Unix zaman damgası olarak işler. Ayrıca, zaman damgası geçmişte ise hiçbir şey yapmaz. Komut sessizce başarısız olur.

Bu nedenle, maksimum ömür için 2592000'ü belirtmek isterseniz. Örnek:

set my_key 0 2592000 1
1

Taşma Durumunda Kaybolan Anahtarlar

Belgelendirmede 64 bit taşma durumunda "incr" kullanarak bir değeri taşırken, değerin kaybolmasına neden olduğu belirtilse de, değer tekrar "add"/"set" kullanılarak oluşturulması gerekmektedir.

Replikasyon

memcached kendisi replikasyonu desteklemez. Gerçekten ihtiyacınız varsa, 3. taraf çözümler kullanmanız gerekmektedir:

Komutlar Hile Kağıdı

{% content-ref url="memcache-commands.md" %} memcache-commands.md {% endcontent-ref %}

Shodan

  • port:11211 "STAT pid"
  • "STAT pid"

Referanslar

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'ı desteklemenin diğer yolları: