6379 - Pentesting Redis
HackenProof Discord सर्वर में शामिल होकर अनुभवी हैकर्स और बग बाउंटी हंटर्स के साथ संवाद करें!
हैकिंग इंसाइट्स हैकिंग के रोमांच और चुनौतियों में डूबने वाली सामग्री के साथ जुड़ें
रियल-टाइम हैक न्यूज़ तेजी से बदलती हैकिंग दुनिया के साथ कदम से कदम रहें अपडेटेड
नवीनतम घोषणाएं नवीनतम बग बाउंटी लॉन्च और महत्वपूर्ण प्लेटफॉर्म अपडेट के साथ सूचित रहें
हमारे साथ जुड़ें Discord और आज ही शीर्ष हैकर्स के साथ सहयोग करना शुरू करें!
मूल जानकारी
दस्तावेज़ से: Redis एक ओपन सोर्स (बीएसडी लाइसेंस), इन-मेमोरी डेटा संरचना स्टोर के रूप में उपयोग किया जाता है, जो एक डेटाबेस, कैश और संदेश ब्रोकर के रूप में उपयोग किया जाता है।
डिफ़ॉल्ट रेडिस उपयोग करता है एक प्लेन-टेक्स्ट आधारित प्रोटोकॉल, लेकिन आपको ध्यान में रखना होगा कि यह ssl/tls भी लागू कर सकता है। यहाँ से Redis को ssl/tls के साथ चलाना सीखें।
डिफ़ॉल्ट पोर्ट: 6379
स्वचालित गणना
कुछ स्वचालित उपकरण जो एक रेडिस उदाहरण से जानकारी प्राप्त करने में मदद कर सकते हैं:
मैनुअल जांच
बैनर
रेडिस एक टेक्स्ट आधारित प्रोटोकॉल है, आप सॉकेट में कमांड भेज सकते हैं और वापस आने वाले मान पढ़ सकते हैं। याद रखें कि रेडिस ssl/tls का उपयोग करके भी चल सकता है (लेकिन यह बहुत अजीब है)।
सामान्य रेडिस उदाहरण में आप सिर्फ nc
का उपयोग करके कनेक्ट कर सकते हैं या आप redis-cli
का भी उपयोग कर सकते हैं:
पहला कमांड जो आप प्रयास कर सकते हैं वह है info
। यह Redis इंस्टेंस की जानकारी के साथ आउटपुट वापस कर सकता है या कुछ इस प्रकार का आउटपुट वापस आ सकता है:
रेडिस प्रमाणीकरण
डिफ़ॉल्ट रूप से रेडिस को पहुंचा जा सकता है बिना प्रमाणों के। हालांकि, इसे केवल पासवर्ड, या उपयोगकर्ता नाम + पासवर्ड का समर्थन करने के लिए कॉन्फ़िगर किया जा सकता है।
आप redis.conf फ़ाइल में requirepass
पैरामीटर के साथ एक पासवर्ड सेट कर सकते हैं या सेवा पुनः आरंभ होने तक अस्थायी रूप से इसे कनेक्ट करके और चलाकर: config set requirepass p@ss$12E45
।
इसके अलावा, redis.conf फ़ाइल में masteruser
पैरामीटर में एक उपयोगकर्ता नाम कॉन्फ़िगर किया जा सकता है।
अगर केवल पासवर्ड कॉन्फ़िगर किया गया है तो उपयोग किया जाने वाला उपयोगकर्ता नाम "डिफ़ॉल्ट" है। इसके अलावा, ध्यान दें कि बाहरी रूप से पता नहीं चलता है कि रेडिस केवल पासवर्ड या उपयोगकर्ता नाम + पासवर्ड के साथ कॉन्फ़िगर किया गया था।
इस तरह के मामलों में आपको रेडिस के साथ बातचीत करने के लिए मान्य प्रमाणों को खोजने की आवश्यकता होगी, ताकि आप इसे ब्रूट-फ़ोर्स कर सकें। यदि आप मान्य प्रमाण पता लगा लेते हैं तो आपको सत्र का प्रमाणीकरण करने की आवश्यकता होगी जब आप कनेक्शन स्थापित कर लेते हैं:
मान्य क्रेडेंशियल्स का जवाब दिया जाएगा: +OK
प्रमाणीकृत जांच
यदि Redis सर्वर अनाम संयोजन की अनुमति देता है या यदि आपने मान्य क्रेडेंशियल्स प्राप्त किए हैं, तो निम्नलिखित कमांड का उपयोग करके सेवा के लिए जांच प्रक्रिया प्रारंभ कर सकते हैं:
अन्य Redis कमांड यहाँ पाए जा सकते हैं और यहाँ।
नोट करें कि एक इंस्टेंस के Redis कमांड को नामांकित या redis.conf फ़ाइल में हटा दिया जा सकता है। उदाहरण के लिए यह लाइन FLUSHDB कमांड को हटा देगी:
एक Redis सेवा को सुरक्षित ढंग से कॉन्फ़िगर करने के बारे में अधिक जानकारी यहाँ है: https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04
आप यहाँ से भी रीडिस कमांडों को वास्तविक समय में मॉनिटर कर सकते हैं जो कमांड monitor
के साथ निष्पादित किए गए हैं या 25 सबसे धीमे क्वेरी को प्राप्त कर सकते हैं slowlog get 25
अधिक रीडिस कमांडों के बारे में रोचक जानकारी यहाँ पाएं: https://lzone.de/cheat-sheet/Redis
डेटाबेस का डंप
रीडिस में डेटाबेस संख्याएँ 0 से शुरू होती हैं। आप यह जान सकते हैं कि क्या कोई भी उपयोग में है या नहीं कमांड info
के आउटपुट में "Keyspace" चंक में:
या आप सीधे सभी कीस्पेसेस (डेटाबेस) प्राप्त कर सकते हैं:
उस उदाहरण में डेटाबेस 0 और 1 का उपयोग किया जा रहा है। डेटाबेस 0 में 4 कुंजियाँ हैं और डेटाबेस 1 में 1 है। डिफ़ॉल्ट रूप से Redis डेटाबेस 0 का उपयोग करेगा। उदाहारण के लिए डेटाबेस 1 के लिए डंप करने के लिए आपको निम्नलिखित करना होगा:
यदि आप GET <KEY>
चलाते समय -WRONGTYPE Operation against a key holding the wrong kind of value
त्रुटि मिलती है, तो इसका मतलब है कि कुंजी एक स्ट्रिंग या पूर्णांक से भिन्न है और इसे प्रदर्शित करने के लिए विशेष ऑपरेटर की आवश्यकता है।
कुंजी के प्रकार को जानने के लिए, TYPE
कमांड का उपयोग करें, नीचे सूची और हैश कुंजियों के लिए उदाहरण दिया गया है।
npm redis-dump या पायथन redis-utils
HackenProof Discord सर्वर में शामिल होकर अनुभवी हैकर्स और बग बाउंटी हंटर्स के साथ संवाद करें!
हैकिंग इंसाइट्स हैकिंग के रोमांच और चुनौतियों में डूबने वाली सामग्री के साथ जुड़ें
रियल-टाइम हैक न्यूज़ रियल-टाइम न्यूज़ और अंतर्दृष्टि के माध्यम से हैकिंग दुनिया के तेजी से बदलते संसार में अद्यतन रहें
नवीनतम घोषणाएं नवीनतम बग बाउंटी लॉन्च और महत्वपूर्ण प्लेटफ़ॉर्म अपडेट के साथ सूचित रहें
हमारे साथ जुड़ें Discord और आज ही शीर्ष हैकर्स के साथ सहयोग करना शुरू करें!
Redis RCE
इंटरैक्टिव शैल
redis-rogue-server स्वचालित रूप से Redis(<=5.0.5) में एक इंटरैक्टिव शैल या रिवर्स शैल प्राप्त कर सकता है।
PHP वेबशेल
जानकारी यहाँ से। आपको वेबसाइट फ़ोल्डर का पथ पता होना चाहिए:
यदि वेबशेल एक्सेस असफल हो जाए, तो आप बैकअप के बाद डेटाबेस को खाली करके फिर से प्रयास कर सकते हैं, ध्यान रखें कि डेटाबेस को पुनर्स्थापित करना।
टेम्पलेट वेबशेल
पिछले खंड में की तरह, आप किसी एचटीएमएल टेम्पलेट फ़ाइल को अधिक लिख सकते हैं जो एक टेम्पलेट इंजन द्वारा व्याख्या किया जाएगा और एक शेल प्राप्त कर सकते हैं।
उदाहरण के लिए, इस व्रिटअप का पालन करते हुए, आप देख सकते हैं कि हमलावर ने एक एचटीएमएल में रेव शेल इंजेक्ट किया जिसे नंजक्स टेम्पलेट इंजन द्वारा व्याख्या किया गया था:
कृपया ध्यान दें कि कई टेम्पलेट इंजन कैश में टेम्पलेट को मेमोरी में स्टोर किया जाता है, इसलिए यदि आप उन्हें ओवरराइट करते हैं, तो नया वाला नहीं चलाया जाएगा। इस प्रकार के मामलों में, या तो डेवलपर ने स्वचालित पुनरावृत्ति सक्रिय छोड़ दी है या आपको सेवा पर डीओएस करना होगा (और उम्मीद करें कि यह स्वचालित रूप से पुनः लॉन्च होगा)।
SSH
उदाहरण यहाँ से
कृपया ध्यान दें कि config get dir
परिणाम किसी अन्य मैन्युअल एक्सप्लॉइट कमांड के बाद बदल सकता है। सुझाव दिया जाता है कि आप इसे रन करें जल्दी से रेडिस में लॉगिन करने के बाद। config get dir
के आउटपुट में आप रेडिस उपयोगकर्ता का होम (सामान्यत: /var/lib/redis या /home/redis/.ssh) पा सकते हैं, और जानकारी होने पर आप यह जान जाते हैं कि आप कहां authenticated_users
फ़ाइल लिख सकते हैं जिसके माध्यम से आप ssh के माध्यम से रेडिस उपयोगकर्ता के साथ पहुंच सकते हैं। यदि आपको अन्य मान्य उपयोगकर्ता के होम का पता है जिसमें आपके पास लेखनीय अनुमति है, तो आप इसका दुरुपयोग भी कर सकते हैं:
अपने पीसी पर एक ssh पब्लिक-प्राइवेट कुंजी जोड़ें:
ssh-keygen -t rsa
पब्लिक कुंजी को एक फ़ाइल में लिखें:
(echo -e "\n\n"; cat ~/id_rsa.pub; echo -e "\n\n") > spaced_key.txt
फ़ाइल को रेडिस में आयात करें:
cat spaced_key.txt | redis-cli -h 10.85.0.52 -x set ssh_key
रेडिस सर्वर पर authorized_keys फ़ाइल में पब्लिक कुंजी को सहेजें:
अंत में, आप प्राइवेट कुंजी के साथ रेडिस सर्वर पर ssh कर सकते हैं: ssh -i id_rsa redis@10.85.0.52
यह तकनीक यहाँ स्वचालित है: https://github.com/Avinash-acid/Redis-Server-Exploit
Crontab
अंतिम उदाहरण यूबंटू के लिए है, Centos के लिए, ऊपर का कमांड यह होना चाहिए: redis-cli -h 10.85.0.52 config set dir /var/spool/cron/
इस विधि का उपयोग बिटकॉइन कमाने के लिए भी किया जा सकता है: yam
रेडिस मॉड्यूल लोड करें
https://github.com/n0b0dyCN/RedisModules-ExecuteCommand से निर्देशों का पालन करते हुए आप किसी भी कमांड को निषेधात्मक रूप से चलाने के लिए एक रेडिस मॉड्यूल को कंपाइल कर सकते हैं।
फिर आपको कंपाइल किया गया मॉड्यूल अपलोड करने की कोई विधि चाहिए
MODULE LOAD /path/to/mymodule.so
के साथ रनटाइम में अपलोड किए गए मॉड्यूल को लोड करेंयह सुनिश्चित करने के लिए कि यह सही ढंग से लोड हुआ है, लोड किए गए मॉड्यूल की सूची करें:
MODULE LIST
कमांड चलाएं:
जब चाहें तब मॉड्यूल को अनलोड करें:
MODULE UNLOAD mymodule
LUA सैंडबॉक्स बाईपास
यहाँ आप देख सकते हैं कि रेडिस EVAL कमांड का उपयोग लुआ कोड सैंडबॉक्स को चलाने के लिए करता है। लिंक किए गए पोस्ट में आप देख सकते हैं कि इसे dofile फ़ंक्शन का उपयोग करके कैसे दुरुपयोग किया जा सकता है, लेकिन शायद यह अब और संभव नहीं है। चाहे तो, यदि आप लुआ सैंडबॉक्स को बाईपास कर सकते हैं तो आप सिस्टम पर निर्देशित कमांड चला सकते हैं। इसके अलावा, उसी पोस्ट से आप कुछ DoS कारणों के विकल्प देख सकते हैं।
कुछ CVEs जिनसे लुआ से बाहर निकलने के लिए:
मास्टर-स्लेव मॉड्यूल
मास्टर रेडिस सभी ऑपरेशन अपने आप स्लेव रेडिस में स्वचालित रूप से सिंक्रनाइज़ कर देता है, जिसका मतलब है कि हम व्यक्तिगत रूप से नियंत्रित रेडिस के रूप में सुरक्षा रेडिस को एक स्लेव रेडिस के रूप में देख सकते हैं, जो हमारे नियंत्रण में है, फिर हम अपने रेडिस में कमांड दर्ज कर सकते हैं।
SSRF रेडिस से बातचीत
यदि आप स्पष्ट पाठ अनुरोध रेडिस को भेज सकते हैं, तो आप इसके साथ संवाद कर सकते हैं क्योंकि रेडिस अनुरोध को पंक्ति द्वारा पढ़ेगा और उसे उन पंक्तियों के लिए केवल त्रुटियां देगा जिन्हें वह समझता नहीं है:
इसलिए, अगर आप एक वेबसाइट में SSRF vuln खोजते हैं और आप कुछ हेडर्स (शायद CRLF vuln के साथ) या POST parameters को नियंत्रित कर सकते हैं, तो आप Redis को विषयास्पद कमांड भेज सकेंगे।
उदाहरण: Gitlab SSRF + CRLF से शैल
Gitlab11.4.7 में एक SSRF वंलरेबिलिटी और एक CRLF खोजे गए थे। SSRF वंलरेबिलिटी आयात प्रोजेक्ट से URL कार्यक्षमता में थी जब एक नया प्रोजेक्ट बनाया जा रहा था और इसे अनियमित IPs तक पहुंचने की अनुमति दी गई थी [0:0:0:0:0:ffff:127.0.0.1] (यह 127.0.0.1 तक पहुंचेगा), और CRLF vuln का शोषण केवल URL में %0D%0A वर्ण जोड़कर किया गया था।
इसलिए, यह संभव था कि इन वंलरेबिलिटीज का दुरुपयोग करके Redis उदाहरण से बातचीत करना जो gitlab से कतारें प्रबंधित करता है और उन कतारों का दुरुपयोग करके कोड क्रियान्वयन प्राप्त करना संभव था। Redis कतार दुरुपयोग पेलोड है:
और URL encode अनुरोध SSRF का दुरुपयोग और CRLF को whoami
को निष्पादित करने और nc
के माध्यम से आउटपुट भेजने के लिए है:
किसी कारणवश (जैसे https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/ के लेखक के लिए जहां से यह जानकारी ली गई थी) उत्पीड़न git
योजना के साथ काम कर गया था और http
योजना के साथ नहीं।
HackenProof Discord सर्वर में शामिल होकर अनुभवी हैकर्स और बग बाउंटी हंटर्स के साथ संवाद करें!
हैकिंग इंसाइट्स हैकिंग के उत्साह और चुनौतियों में डूबने वाली सामग्री के साथ जुड़ें
रियल-टाइम हैक समाचार रियल-टाइम समाचार और अंदरूनी दुनिया के साथ अद्यतन रहें
नवीनतम घोषणाएं नवीनतम बग बाउंटी लॉन्च और महत्वपूर्ण प्लेटफ़ॉर्म अपडेट के साथ सूचित रहें
हमारे साथ जुड़ें Discord और आज ही शीर्ष हैकर्स के साथ सहयोग करना शुरू करें!
Last updated