11211 - Pentesting Memcache
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
wikipedia'dan:
Memcached (telaffuz: mem-cashed, mem-cash-dee) genel amaçlı dağıtık bellek önbellekleme sistemidir. Genellikle, dinamik veritabanı destekli web sitelerini hızlandırmak için verileri ve nesneleri RAM'de önbelleğe alarak, harici bir veri kaynağının (örneğin bir veritabanı veya API) okunma sayısını azaltmak için kullanılır.
Memcached SASL'yi desteklese de, çoğu örnek kimlik doğrulama olmadan açığa çıkar.
Varsayılan port: 11211
Bir memcache örneğinde kaydedilmiş tüm bilgileri dışarı aktarmak için şunları yapmalısınız:
Aktif öğeler ile slab'ları bulun
Daha önce tespit edilen slab'ların anahtar adlarını alın
Anahtar adlarını alarak kaydedilmiş veriyi dışarı aktarın
Bu hizmetin sadece bir cache olduğunu unutmayın, bu nedenle veri görünebilir ve kaybolabilir.
Memcache alanında, verileri slab'lar aracılığıyla düzenlemeye yardımcı olan bir protokolde, depolanan verileri incelemek için belirli komutlar mevcuttur, ancak dikkate değer kısıtlamalarla birlikte:
Anahtarlar yalnızca slab sınıfına göre dökülebilir, benzer içerik boyutuna sahip anahtarları gruplar.
Her slab sınıfı için bir sayfa limiti vardır, bu da 1MB veri ile eşdeğerdir.
Bu özellik resmi değildir ve topluluk forumlarında tartışıldığı gibi herhangi bir zamanda sona erdirilebilir.
Potansiyel olarak gigabaytlarca veriden yalnızca 1MB dökme kısıtlaması özellikle önemlidir. Ancak, bu işlevsellik belirli ihtiyaçlara bağlı olarak anahtar kullanım desenleri hakkında içgörüler sunabilir. Mekaniklerle daha az ilgilenenler için, araçlar bölümüne bir ziyaret, kapsamlı döküm için yardımcı programları ortaya çıkarır. Alternatif olarak, memcached kurulumlarıyla doğrudan etkileşim için telnet kullanma süreci aşağıda özetlenmiştir.
Memcache'in bellek organizasyonu çok önemlidir. Memcache'i "-vv" seçeneğiyle başlatmak, ürettiği slab sınıflarını ortaya çıkarır, aşağıda gösterildiği gibi:
Tüm mevcut slab'ları görüntülemek için aşağıdaki komut kullanılır:
Tek bir anahtarın memcached 1.4.13'e eklenmesi, slab sınıflarının nasıl doldurulduğunu ve yönetildiğini gösterir. Örneğin:
"key" eklemeden sonra "stats slabs" komutunu çalıştırmak, slab kullanımına dair ayrıntılı istatistikler sağlar:
Bu çıktı, aktif slab türlerini, kullanılan parçaları ve operasyonel istatistikleri ortaya koyarak okuma ve yazma işlemlerinin verimliliği hakkında bilgiler sunar.
Başka bir yararlı komut, "stats items", tahliyeler, bellek kısıtlamaları ve öğe yaşam döngüleri hakkında veri sağlar:
Bu istatistikler, farklı içerik boyutları için önbellek verimliliği, bellek tahsisi ve büyük nesneleri önbelleğe alma kapasitesi dahil olmak üzere uygulama önbellekleme davranışı hakkında eğitimli varsayımlar yapmaya olanak tanır.
1.4.31'den önceki sürümler için, anahtarlar slab sınıfı tarafından dökülür:
Örneğin, sınıf #1'de bir anahtarı dökmek için:
Bu yöntem, slab sınıfları üzerinde yineleme yaparak anahtar değerlerini çıkarır ve isteğe bağlı olarak döküm yapar.
Memcache sürüm 1.4.31 ve üzeri ile, üretim ortamında anahtarları dökmek için yeni, daha güvenli bir yöntem tanıtılmıştır; bu yöntem, sürüm notlarında detaylandırıldığı gibi, engellemeyen mod kullanmaktadır. Bu yaklaşım geniş bir çıktı üretir, bu nedenle verimlilik için 'nc' komutunun kullanılmasını öneririz. Örnekler şunlardır:
Table from here.
libmemcached
Memcached işleminizi dondurur!!! Bunu üretimde kullanırken dikkatli olun. Yine de bunu kullanarak 1MB sınırlamasını aşabilir ve gerçekten tüm anahtarları dökebilirsiniz.
memcached 1.4'ten önce, varsayılan maksimum slab boyutu nedeniyle 1MB'den daha büyük nesneleri depolayamazsınız.
Eğer izin verilen maksimumdan daha büyük bir zaman aşımı ile bir anahtar “set” veya “add” etmeye çalışırsanız, memcached bu değeri bir Unix zaman damgası olarak ele alacağı için beklediğiniz sonucu alamayabilirsiniz. Ayrıca, zaman damgası geçmişte ise hiçbir şey yapmaz. Komutunuz sessizce başarısız olur.
Bu nedenle, maksimum ömrü kullanmak istiyorsanız 2592000 belirtin. Örnek:
Dokümantasyonda “incr” kullanarak 64bit bir değerin taşmasını sağlamakla ilgili bir şeyler söylese de, bu durum değerin kaybolmasına neden olur. Değerin tekrar “add”/“set” ile oluşturulması gerekir.
memcached kendisi replikasyonu desteklemez. Eğer gerçekten buna ihtiyacınız varsa, 3. parti çözümleri kullanmalısınız:
repcached: Çoklu-master asenkron replikasyon (memcached 1.2 yaman seti)
Couchbase memcached arayüzü: CouchBase'i memcached yerine kullanın
yrmcds: memcached uyumlu Master-Slave anahtar değer deposu
twemproxy (aka nutcracker): memcached desteği olan proxy
port:11211 "STAT pid"
"STAT pid"
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)