6379 - Pentesting Redis
Deneyimli hackerlar ve ödül avcıları ile iletişim kurmak için HackenProof Discord sunucusuna katılın!
Hackleme İçgörüleri Hackleme heyecanını ve zorluklarını ele alan içeriklerle etkileşime geçin
Gerçek Zamanlı Hack Haberleri Hızlı tempolu hackleme dünyasında gerçek zamanlı haberler ve içgörülerle güncel kalın
En Son Duyurular Yayınlanan en yeni ödül avı programları ve önemli platform güncellemeleri hakkında bilgi sahibi olun
Bize katılın Discord ve bugün en iyi hackerlarla işbirliğine başlayın!
Temel Bilgiler
Belgelerden alıntı: Redis, açık kaynaklı (BSD lisanslı), bellek içi veri yapıları deposu olarak kullanılan bir veritabanı, önbellek ve mesaj aracıdır.
Varsayılan olarak Redis, düz metin tabanlı bir protokol kullanır, ancak ssl/tls de uygulayabileceğinizi unutmamalısınız. Redis'i ssl/tls ile çalıştırmayı buradan nasıl öğreneceğinizi öğrenin.
Varsayılan port: 6379
Otomatik Numaralandırma
Bir Redis örneğinden bilgi elde etmeye yardımcı olabilecek bazı otomatik araçlar:
Manuel Numaralandırma
Banner
Redis, bir metin tabanlı protokol olduğundan, sadece komutu bir sokete gönderebilirsiniz ve dönen değerler okunabilir olacaktır. Ayrıca Redis'in ssl/tls kullanarak çalıştırılabileceğini unutmayın (ancak bu çok garip).
Normal bir Redis örneğine bağlanmak için sadece nc
kullanabilir veya redis-cli
'yi de kullanabilirsiniz:
İlk deneyebileceğiniz komut info
. Redis örneğinin bilgileriyle bir çıktı döndürebilir veya aşağıdakine benzer bir şey dönebilir:
Bu son durumda, Redis örneğine erişmek için geçerli kimlik bilgilerine ihtiyacınız olduğu anlamına gelir.
Redis Kimlik Doğrulaması
Redis varsayılan olarak kimlik bilgileri olmadan erişilebilir. Bununla birlikte, yalnızca şifreyi veya kullanıcı adını + şifreyi desteklemek üzere yapılandırılabilir.
requirepass
parametresiyle redis.conf dosyasına bir şifre belirlemek mümkündür veya hizmet yeniden başlatılana kadar geçici olarak bağlanarak ve çalıştırarak: config set requirepass p@ss$12E45
.
Ayrıca, bir kullanıcı adı redis.conf dosyası içindeki masteruser
parametresinde yapılandırılabilir.
Yalnızca şifre yapılandırıldıysa kullanılan kullanıcı adı "varsayılan" dır. Ayrıca, Redis'in yalnızca şifre veya kullanıcı adı + şifre ile yapılandırılıp yapılandırılmadığını harici olarak bulmanın bir yolu olmadığını unutmayın.
Bu gibi durumlarda Redis ile etkileşimde bulunmak için geçerli kimlik bilgilerini bulmanız gerekecektir, bu nedenle kaba kuvvet uygulayabilirsiniz. Geçerli kimlik bilgilerini bulduğunuzda oturumu doğrulamanız gerekecektir bağlantıyı kurduktan sonra aşağıdaki komutla:
Geçerli kimlik bilgileri şu şekilde yanıtlanacaktır: +OK
Kimlik doğrulamalı numaralandırma
Eğer Redis sunucusu anonim bağlantılara izin veriyorsa veya geçerli kimlik bilgilerine sahipseniz, hizmet için aşağıdaki komutları kullanarak numaralandırma sürecini başlatabilirsiniz:
Diğer Redis komutları burada bulunabilir ve burada** bulunabilir.**
Redis komutlarının bir örneğin adı redis.conf dosyasında değiştirilebilir veya kaldırılabilir. Örneğin, bu satır FLUSHDB komutunu kaldıracaktır:
Daha fazla bilgi için Redis servisini güvenli bir şekilde yapılandırma hakkında buraya bakabilirsiniz: https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04
Ayrıca Redis komutlarının gerçek zamanlı olarak izlenebilir olduğu komut monitor
ile veya en yavaş 25 sorguyu almak için slowlog get 25
komutu ile izleyebilirsiniz.
Daha fazla ilginç bilgi için diğer Redis komutları hakkında buraya bakabilirsiniz: https://lzone.de/cheat-sheet/Redis
Veritabanı Dökme
Redis içinde veritabanları 0'dan başlayan numaralardır. "Keyspace" bölümünde info
komutunun çıktısında kullanılıp kullanılmadığını bulabilirsiniz:
Veya sadece tüm keyspace'leri (veritabanları) alabilirsiniz:
O örnekte veritabanı 0 ve 1 kullanılıyor. Veritabanı 0'da 4 anahtar ve veritabanı 1'de 1 anahtar bulunmaktadır. Varsayılan olarak Redis veritabanı 0'ı kullanacaktır. Örneğin veritabanı 1'i dökmek için şunları yapmanız gerekmektedir:
Eğer GET <KEY>
komutunu çalıştırırken -WRONGTYPE Operation against a key holding the wrong kind of value
hatasını alırsanız, bu anahtarın bir dize veya tamsayı olmaktan başka bir şey olabileceğini ve onu görüntülemek için özel bir operatöre ihtiyaç duyduğunu gösterir.
Anahtarın türünü öğrenmek için TYPE
komutunu kullanın, aşağıdaki örnek listesi ve hash anahtarları için geçerlidir.
npm ile veritabanını dökün redis-dump veya python redis-utils
Deneyimli hackerlar ve ödül avcıları ile iletişim kurmak için HackenProof Discord sunucusuna katılın!
Hacking İçgörüleri Hacking'in heyecanını ve zorluklarını inceleyen içeriklerle etkileşime geçin
Gerçek Zamanlı Hack Haberleri Hızlı tempolu hacking dünyasında gerçek zamanlı haberler ve içgörülerle güncel kalın
En Son Duyurular Yeni ödül avı başlatmaları ve önemli platform güncellemeleri hakkında bilgi sahibi olun
Bize katılın Discord ve bugün en iyi hackerlarla işbirliğine başlayın!
Redis RCE
Etkileşimli Kabuk
redis-rogue-server, Redis(<=5.0.5) içinde etkileşimli bir kabuk veya ters kabuk otomatik olarak alabilir.
PHP Webshell
Bilgi buradan. Web sitesi klasörünün yolunu bilmelisiniz:
Şablon Webshell
Webshell erişiminde istisna oluşursa, yedekleme yaptıktan sonra veritabanını boşaltabilir ve tekrar deneyebilirsiniz, veritabanını geri yüklemeyi unutmayın.
Önceki bölümde olduğu gibi, bir şablon motoru tarafından yorumlanacak bir html şablon dosyasını da üzerine yazabilir ve bir shell elde edebilirsiniz.
Örneğin, aşağıdaki bu yazıda belirtildiği gibi, saldırganın nunjucks şablon motoru tarafından yorumlanan bir html içine bir ters shell enjekte ettiğini görebilirsiniz:
Birçok şablon motorunun önbelleğe aldığı şablonlar bellekte tutulduğundan, bunları üzerine yazsanız bile yeni olan çalıştırılmayabilir. Bu durumlarda, ya geliştirici otomatik yeniden yükleme işlemini etkin bıraktı ya da hizmet üzerinde bir DoS gerçekleştirmeniz gerekebilir (ve bunun otomatik olarak yeniden başlatılmasını beklersiniz).
SSH
Örnek buradan
Lütfen config get dir
sonucunun diğer manuel saldırı komutlarından sonra değişebileceğine dikkat edin. Redis'e giriş yaptıktan hemen sonra bunu çalıştırmanızı öneririz. config get dir
çıktısında redis kullanıcısının ev dizinini (genellikle /var/lib/redis veya /home/redis/.ssh) bulabilir ve bunu bildiğinizde authenticated_users
dosyasını yazabileceğiniz yeri bilirsiniz. Yazma izinleriniz olan diğer geçerli bir kullanıcının ev dizinini bildiğinizde bunu da kötüye kullanabilirsiniz:
Bilgisayarınızda bir ssh genel-özel anahtar çifti oluşturun:
ssh-keygen -t rsa
Genel anahtarı bir dosyaya yazın:
(echo -e "\n\n"; cat ~/id_rsa.pub; echo -e "\n\n") > spaced_key.txt
Dosyayı redis'e aktarın:
cat spaced_key.txt | redis-cli -h 10.85.0.52 -x set ssh_key
Genel anahtarı redis sunucusundaki authorized_keys dosyasına kaydedin:
Son olarak, özel anahtarla redis sunucusuna ssh yapabilirsiniz: ssh -i id_rsa redis@10.85.0.52
Bu teknik burada otomatikleştirilmiştir: https://github.com/Avinash-acid/Redis-Server-Exploit
Crontab
Son örnek Ubuntu için, Centos için yukarıdaki komut şöyle olmalıdır: redis-cli -h 10.85.0.52 config set dir /var/spool/cron/
Bu yöntem aynı zamanda bitcoin kazanmak için de kullanılabilir: yam
Redis Modülü Yükleme
https://github.com/n0b0dyCN/RedisModules-ExecuteCommand adresinden talimatları takip ederek keyfi komutları yürütmek için bir redis modülü derleyebilirsiniz.
Ardından derlenen modülü yüklemek için bir yola ihtiyacınız olacak.
Yüklenen modülü çalışma zamanında
MODULE LOAD /path/to/mymodule.so
ile yükleyin.Doğru yüklendiğini kontrol etmek için yüklü modülleri listeleme:
MODULE LIST
Komutları yürütün:
İstediğiniz zaman modülü kaldırın:
MODULE UNLOAD mymodule
LUA kum havuzu atlatma
Buradan Redis'in Lua kodunu kum havuzunda çalıştırmak için EVAL komutunu kullandığını görebilirsiniz. Bağlantılı yazıda dofile fonksiyonunu kullanarak bunu nasıl kötüye kullandığınızı görebilirsiniz, ancak görünüşe göre artık bu mümkün değil. Neyse, Lua kum havuzunu atlatabilirseniz sistemde keyfi komutlar yürütebilirsiniz. Ayrıca, aynı yazıdan, DoS'a neden olmak için bazı seçenekler görebilirsiniz.
Lua'dan kaçmak için bazı CVE'ler:
Ana-Slave Modülü
Ana redis tüm işlemleri otomatik olarak slave redis'e senkronize eder, bu da redis zafiyetini bir slave redis olarak görebileceğimiz anlamına gelir, ana redis'e bağlı olan kendi kontrolümüzdeki slave redis'e komut girebiliriz.
Redis'e konuşma yoluyla SSRF
Eğer Redis'e açık metin isteği gönderebiliyorsanız, Redis ile iletişim kurabilirsiniz çünkü Redis isteği satır satır okur ve anlamadığı satırlara sadece hatalarla yanıt verir:
Bu nedenle, bir web sitesinde bir SSRF açığı bulursanız ve bazı başlıkları (belki bir CRLF açığı ile) veya POST parametrelerini kontrol edebilirseniz, Redis'e keyfi komutlar gönderebilirsiniz.
Örnek: Gitlab SSRF + CRLF ile Shell
Gitlab11.4.7'de bir SSRF açığı ve bir CRLF keşfedildi. SSRF açığı, yeni bir proje oluşturulurken URL'den proje içe aktarma işlevselliğinde bulunuyordu ve [0:0:0:0:0:ffff:127.0.0.1] formundaki keyfi IP'lere erişime izin veriyordu (bu, 127.0.0.1'e erişecekti), ve CRLF açığı sadece URL'ye %0D%0A karakterlerini ekleyerek sömürüldü.
Bu nedenle, bu açıkları kullanarak gitlab'dan kuyrukları yöneten Redis örneğiyle iletişim kurmak ve bu kuyrukları kod yürütme elde etmek için kötüye kullanmak mümkündü. Redis kuyruk kötüye kullanım yükü şuydu:
Ve URL kodu çözme isteği SSRF'yi ve CRLF'yi kötüye kullanarak whoami
komutunu çalıştırmak ve çıktıyı nc
aracılığıyla geri göndermek:
Bir nedenle (bu bilginin alındığı https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/ yazarı için) sömürme işlemi git
şemasıyla çalıştı, http
şemasıyla değil.
Deneyimli hackerlar ve ödül avcıları ile iletişim kurmak için HackenProof Discord sunucusuna katılın!
Hacking İçgörüleri Hacking'in heyecanını ve zorluklarını inceleyen içeriklerle etkileşime girin
Gerçek Zamanlı Hack Haberleri Hızlı tempolu hacking dünyasını gerçek zamanlı haberler ve içgörülerle takip edin
En Son Duyurular Yeni ödül avı başlatmaları ve önemli platform güncellemeleri hakkında bilgilenin
Bize Discord katılın ve bugün en iyi hackerlarla işbirliğine başlayın!
Last updated