<summary><strong>AWS hackleme becerilerini sıfırdan ileri seviyeye öğrenmek için</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>'ı öğrenin!</strong></summary>
* **Şirketinizi HackTricks'te reklamını görmek isterseniz** veya **HackTricks'i PDF olarak indirmek isterseniz** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**'ı takip edin**.
* **Hacking hilelerinizi paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna **PR göndererek** katkıda bulunun.
[Belgelerden](https://redis.io/topics/introduction) alınan bilgilere göre, Redis, açık kaynaklı (BSD lisanslı), bellekte **veri yapısı deposu** olarak kullanılan bir **veritabanı**, önbellek ve mesaj aracıdır.
Redis varsayılan olarak düz metin tabanlı bir protokol kullanır, ancak **ssl/tls** de uygulayabileceğinizi unutmamanız gerekmektedir. Redis'i [buradan ssl/tls ile çalıştırmayı öğrenin](https://fossies.org/linux/redis/TLS.md).
Redis, bir **metin tabanlı protokol** olduğundan, komutu bir sokete göndererek dönen değerleri okuyabilirsiniz. Ayrıca Redis'in **ssl/tls** kullanarak çalışabilmesini de unutmayın (ancak bu çok garip bir durumdur).
Redis **varsayılan olarak** kimlik bilgisi olmadan erişilebilir. Bununla birlikte, yalnızca şifre veya kullanıcı adı + şifre desteği sağlamak için **yapılandırılabilir**.\
`redis.conf` dosyasında `requirepass` parametresiyle **bir şifre belirlenebilir** veya hizmet yeniden başlatılana kadar geçici olarak bağlanarak `config set requirepass p@ss$12E45` komutunu çalıştırabilirsiniz.\
Ayrıca, `redis.conf` dosyasındaki `masteruser` parametresiyle bir **kullanıcı adı** yapılandırılabilir.
Bu gibi durumlarda, Redis ile etkileşimde bulunmak için **geçerli kimlik bilgilerini bulmanız gerekecektir**, bu nedenle [**brute-force**](../generic-methodologies-and-resources/brute-force.md#redis) yöntemini deneyebilirsiniz.\
**Geçerli kimlik bilgilerini bulduğunuzda, bağlantıyı kurduktan sonra oturumu doğrulamak için aşağıdaki komutu kullanmanız gerekmektedir:**
Eğer Redis sunucusu **anonim bağlantılara** izin veriyorsa veya geçerli kimlik bilgilerine sahipseniz, aşağıdaki **komutları** kullanarak hizmetin numaralandırma sürecini başlatabilirsiniz:
Unutmayın ki bir örneğin **Redis komutları yeniden adlandırılabilir** veya _redis.conf_ dosyasından kaldırılabilir. Örneğin, bu satır FLUSHDB komutunu kaldıracaktır:
Redis servisini güvenli bir şekilde yapılandırma hakkında daha fazla bilgi için buraya bakabilirsiniz: [https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04](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 izlenebileceği **`monitor`** komutuyla veya en yavaş **25 sorgunun** alınabileceği **`slowlog get 25`** komutuyla izleme yapabilirsiniz.
Redis içinde **veritabanları 0'dan başlayan sayılarla** temsil edilir. "Keyspace" bölümünde `info` komutunun çıktısında kullanılan herhangi bir veritabanını bulabilirsiniz:
O örnekte **0 ve 1 numaralı veritabanları** kullanılıyor. **0 numaralı veritabanı 4 anahtar içerirken, 1 numaralı veritabanı 1 anahtar içerir**. Redis varsayılan olarak 0 numaralı veritabanını kullanır. Örneğin 1 numaralı veritabanını dökümlemek 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, 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.
[**redis-rogue-server**](https://github.com/n0b0dyCN/redis-rogue-server), Redis(<=5.0.5) üzerinde otomatik olarak etkileşimli bir kabuk veya ters kabuk alabilir.
[**Buradan**](https://web.archive.org/web/20191201022931/http://reverse-tcp.xyz/pentest/database/2017/02/09/Redis-Hacking-Tips.html) bilgi alın. Web sitesi klasörünün **yolunu** bilmelisiniz:
Örneğin, [**bu yazıda**](https://www.neteye-blog.com/2022/05/cyber-apocalypse-ctf-2022-red-island-writeup/) görebileceğiniz gibi, saldırgan **nunjucks şablon motoru tarafından yorumlanan bir html içine bir ters kabuk enjekte etmiştir:**
Not edin ki **birkaç şablon motoru önbelleğe alır** şablonları**bellekte**, bu yüzden onları üzerine yazsanız bile, yeni olan **çalıştırılmaz**. Bu durumlarda, ya geliştirici otomatik yeniden yükleme işlemini etkin bıraktı ya da hizmet üzerinde bir DoS yapmanız gerekiyor (ve otomatik olarak yeniden başlatılmasını bekliyorsunuz).
Lütfen **`config get dir`** sonucunun diğer manuel saldırı komutlarından sonra değişebileceğinin farkında olun. Redis'e giriş yaptıktan hemen sonra bunu çalıştırmanızı öneririm. **`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 ve **redis kullanıcısıyla** ssh üzerinden erişebileceğiniz yeri bilirsiniz. Yazma izinlerine sahip olduğunuz başka geçerli bir kullanıcının ev dizinini de biliyorsanız, onu da kötüye kullanabilirsiniz:
**Bu teknik burada otomatikleştirilmiştir:** [https://github.com/Avinash-acid/Redis-Server-Exploit](https://github.com/Avinash-acid/Redis-Server-Exploit)
1. [https://github.com/n0b0dyCN/RedisModules-ExecuteCommand](https://github.com/n0b0dyCN/RedisModules-ExecuteCommand) adresindeki talimatları takip ederek **keyfi komutları çalıştırmak için bir redis modülü derleyebilirsiniz**.
2. Ardından, derlenen modülü **yüklemek için bir yol**a ihtiyacınız vardır.
3. Yüklenen modülü çalışma zamanında `MODULE LOAD /path/to/mymodule.so` komutuyla **yükleyin**.
4. Doğru bir şekilde yüklendiğini kontrol etmek için **yüklenen modülleri listele**mek için `MODULE LIST` komutunu kullanın.
[**Burada**](https://www.agarri.fr/blog/archives/2014/09/11/trying\_to\_hack\_redis\_via\_http\_requests/index.html) Redis'in **Lua kodunu sandbox** içinde çalıştırmak için **EVAL** komutunu kullandığını görebilirsiniz. Bağlantılı gönderide **dofile** fonksiyonunu kullanarak bunu **kötüye kullanmanın** nasıl olduğunu görebilirsiniz, ancak [görünüşe göre](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval) artık mümkün değil. Neyse ki, Lua sandbox'ı atlatırsanız sistemde **keyfi komutlar** çalıştırabilirsiniz. Ayrıca, aynı gönderide DoS'a neden olacak bazı**seçenekler** de bulunmaktadır.
Ana redis tüm işlemler otomatik olarak slave redis'e senkronize edilir, bu da zafiyetli redis'i kendi kontrolümüzdeki ana redis'e bağlı bir slave redis olarak görebileceğimiz anlamına gelir, böylece kendi redis'imize komut girebiliriz.
Eğer Redis'e **açık metin** istek gönderebilirseniz, 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 zafiyeti** bulursanız ve bazı**başlıkları** (belki de bir CRLF zafiyeti ile) veya **POST parametrelerini****kontrol edebilirseniz**, Redis'e keyfi komutlar gönderebilirsiniz.
**Gitlab11.4.7** sürümünde bir **SSRF** zafiyeti ve bir **CRLF** keşfedildi. **SSRF** zafiyeti, yeni bir proje oluştururken **URL'den proje içe aktarma işlevselliğinde** bulunuyordu ve \[0:0:0:0:0:ffff:127.0.0.1] formunda keyfi IP'lere erişime izin veriyordu (bu, 127.0.0.1'e erişecektir), ve **CRLF** zafiyeti sadece **URL'ye %0D%0A** karakterlerini ekleyerek istismar edildi.
Bu nedenle, bu zafiyetleri **gitlab** tarafından **kuyrukları yöneten** Redis örneğiyle konuşmak için **kötüye kullanmak mümkün oldu** 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ü:
Ve **SSRF'yi** istismar etmek için **URL kodlaması** isteği ve `whoami` komutunu çalıştırmak ve çıktıyı`nc` aracılığıyla geri göndermek için **CRLF** kullanarak yapılan istek:
_Bir nedenden dolayı (bu bilginin alındığı_ [_https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/_](https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/) _adresindeki yazarın belirttiği gibi) bu saldırı, `http` şeması yerine `git` şemasıyla çalıştı._
* **Şirketinizi HackTricks'te reklam vermek isterseniz** veya **HackTricks'i PDF olarak indirmek isterseniz** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'i keşfedin
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)'u **takip edin**.