
RevSuit एक लचीला और शक्तिशाली रिवर्स कनेक्शन प्लेटफॉर्म है जो पेनिट्रेशन में लक्ष्य होस्ट से कनेक्शन प्राप्त करने के लिए डिज़ाइन किया गया है।
अंग्रेज़ी |简体中文
RevSuit एक लचीला और शक्तिशाली रिवर्स कनेक्शन प्लेटफ़ॉर्म है जो पैनेट्रेशन में लक्ष्य होस्ट से कनेक्शन प्राप्त करने के लिए डिज़ाइन किया गया है। यह वर्तमान में HTTP, DNS, RMI, LDAP, MySQL और FTP प्रोटोकॉल का समर्थन करता है।
लचीला:
शक्तिशाली:
नवीनतम रिलीज़ को सीधे डाउनलोड करें या निम्नलिखित चरणों का पालन करके बनाएँ:
git clone https://github.com/Li4n0/revsuit.git
cd revsuit/frontend && yarn install && yarn build
cd ../ && go build ./cmd/revsuit/revsuit.go
RevSuit पहली बार चलने पर डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइल उत्पन्न करेगा। अपनी आवश्यकताओं के अनुसार कॉन्फ़िगरेशन फ़ाइल को संशोधित करें, फिर पुनः चलाएँ। कॉन्फ़िगरेशन फ़ाइल का विस्तृत विवरण यहाँ पाया जा सकता है: Configuration Notes
IP स्थान की पुष्टि करने के लिए, इसे IP स्थान डेटाबेस का उपयोग करने की आवश्यकता है। डिफ़ॉल्ट रूप से QQwry को डेटा स्रोत के रूप में उपयोग किया जाता है, आप GeoIP का उपयोग करने के लिए कॉन्फ़िगरेशन को संशोधित भी कर सकते हैं। यदि चयनित डेटाबेस वर्तमान निर्देशिका में उपलब्ध नहीं है या डेटाबेस एक सप्ताह से अधिक समय से अपडेट किया गया है, तो RevSuit स्वचालित रूप से नवीनतम डेटाबेस डाउनलोड करेगा। यदि डाउनलोड विफल होता है, तो IpArea फ़ील्ड हमेशा शून्य रहेगा।
$ ./revsuit
2021/05/16 22:55:10 [ INFO] Downloading qqwry.dat...
____ _____ _ __
/ __ \___ _ __/ ___/__ __(_) /_
/ /_/ / _ \ | / /\__ \/ / / / / __/
/ _, _/ __/ |/ /___/ / /_/ / / /_
/_/ |_|\___/|___//____/\__,_/_/\__/
vBeta0.1
https://revsuit.pro
2021/05/16 22:55:22 [ INFO] Starting HTTP Server at :80, token:your_token
2021/05/16 22:55:22 [ INFO] Start to listen FTP PASV port at :2020, PasvIP is 10.9.8.7
2021/05/16 22:55:22 [ INFO] Starting FTP Server at :21
2021/05/16 22:55:22 [ INFO] Starting MySQL Server at :3306
2021/05/16 22:55:22 [ INFO] Starting RMI Server at :1099
2021/05/16 22:55:22 [ INFO] Starting DNS Server at :53
चलाने के बाद, आप HTTP सर्वर के /revsuit/admin/ पथ पर जा सकते हैं और कंट्रोल पैनल तक पहुँचने के लिए टोकन दर्ज कर सकते हैं।
उदाहरण के रूप में HTTP नियमों का निर्माण लें:
कुछ नोट्स इस प्रकार हैं:
name और flagFormat अद्वितीय हैं।FlagFormat रेगुलर एक्सप्रेशन सिंटैक्स का उपयोग करता है, और विभिन्न प्रोटोकॉल के लिए, flagFormat द्वारा मिलान किए गए फ़ील्ड अलग-अलग होते हैं, आप नियम बनाते समय विवरण प्राप्त करने के लिए संबंधित संकेतों की जांच कर सकते हैं।flagFormat में रेगुलर एक्सप्रेशन के नामित समूहन सेट कर सकते हैं, और मिलान समूह का परिणाम भी एक टेम्पलेट चर के रूप में उपयोग किया जाएगा।जैसा कि नीचे दिखाया गया है, हम एक नियम बनाते हैं जो HTTP प्रोटोकॉल के अंतर्निहित टेम्पलेट चर और कस्टम टेम्पलेट चर का उपयोग करता है, और इसका नाम test_create_rule रखता है:

फिर एक अनुरोध करें जो नियम को संतुष्ट करता है और प्रतिक्रिया देखें।

अनुरोध एक ही समय में प्लेटफ़ॉर्म पर लॉग किया जाएगा।

यदि आप अपने कार्यालय सॉफ़्टवेयर पर नए कनेक्शनों की सूचना प्राप्त करना चाहते हैं, तो आप कॉन्फ़िगरेशन फ़ाइल में संबंधित सॉफ़्टवेयर का वेबहुक पता कॉन्फ़िगर कर सकते हैं और संबंधित नियम के लिए Notice स्विच चालू कर सकते हैं। वर्तमान में केवल चार सॉफ़्टवेयर प्रकारों का समर्थन करता है: dingtalk, wechat, lark, slack। (डिस्कॉर्ड और टेलीग्राम का समर्थन योजना में है।)
यदि आप प्लेटफ़ॉर्म माइग्रेट कर रहे हैं या डेटा शुद्ध कर रहे हैं, तो नियमों को पुनः बनाना परेशानी भरा हो सकता है। इसीलिए प्लेटफ़ॉर्म नियमों के आयात और निर्यात का समर्थन करता है।
इस फ़ंक्शन का प्रवेश बिंदु Settings>RULES पर स्थित है।
नियम आयात और निर्यात के लिए yaml प्रारूप में संग्रहीत किए जाते हैं, जैसे निम्नलिखित:
http:
- name: test_create_rule
flag_format: (?P<what>\w+)\?
rank: 0
push_to_client: false
notice: false
response_status_code: "302"
response_headers:
Location: ${query.url}
response_body: ${header.say} ${what}
- name: other_rule
flag_format: other
rank: 1
push_to_client: false
notice: true
response_status_code: "200"
response_headers: { }
response_body: Hello Revsuit!
dns:
... ...
RevSuit को मेरे स्कैनर प्रोजेक्ट से अलग किया गया था, इसलिए इसका मूल समर्थन स्कैनर के साथ काम करता है।
RevSuit के दृष्टिकोण से, हम स्कैनर को एक क्लाइंट कहते हैं।
RevSuit क्लाइंट के साथ एक-तरफ़ा संचार चैनल स्थापित करने के लिए HTTP Server-sent Events (SSE) का उपयोग करता है।
चैनल का API है: /revsuit/api/events?message। क्लाइंट को पहले हेडर में Token: your token हेडर जोड़ना होगा, और फिर चैनल स्थापित करने के लिए API तक पहुँचना होगा। जब प्लेटफ़ॉर्म को एक नया कनेक्शन प्राप्त होता है, तो नियम द्वारा कैप्चर किया गया flag इस चैनल के माध्यम से क्लाइंट को भेजा जाएगा।

यहाँ एक सरल डेमो है जिसमें Golang की sse लाइब्रेरी का उपयोग उदाहरण के रूप में किया गया है।
जैसा कि ऊपर दिखाया गया है, RevSuit एकाधिक क्लाइंट का समर्थन करता है, और प्रत्येक क्लाइंट कनेक्टेड अवस्था में flag का एक पुश प्राप्त करता है, इसलिए वितरित स्कैनिंग का समर्थन किया जा सकता है।
यदि आप नहीं चाहते कि प्रत्येक क्लाइंट सभी flag पुश प्राप्त करे, तो आप sse कनेक्शन बनाते समय Flag-Filter अनुरोध हेडर का उपयोग करके उस क्लाइंट द्वारा प्राप्त किए जाने वाले flag का प्रारूप (रेगुलर एक्सप्रेशन) सेट कर सकते हैं:

RevSuit जब कोई क्लाइंट कनेक्शन नहीं होता है तो flag को अस्थायी रूप से कतार में संग्रहीत करेगा और क्लाइंट कनेक्ट होने पर इसे भेजेगा, ताकि आपको क्लाइंट के डिस्कनेक्ट होने के कारण भेद्यता से चूकने की चिंता न हो। (यह विशेष रूप से देरी-ट्रिगर भेद्यताओं की खोज के लिए सहायक है।)
वास्तविक दुनिया के भेद्यता स्कैनिंग परिदृश्य में, आप एक ही भेद्यता बिंदु के लिए बड़ी संख्या में विभिन्न पेलोड भेज सकते हैं, और वे सभी मान्य हो सकते हैं, जिसके परिणामस्वरूप बैकलिंक प्लेटफ़ॉर्म को कई अनुरोध प्राप्त हो सकते हैं, फिर भी वे एक ही भेद्यता के कारण होते हैं। यदि आप नहीं चाहते कि क्लाइंट को एक ही भेद्यता के लिए इतने सारे flags प्राप्त हों, तो आप नियम के flagFormat की flagGroup सुविधा का लाभ उठा सकते हैं।
FlagGroup नियम के flagFormat फ़ील्ड में अनाम समूह द्वारा मिलान की गई सामग्री है। प्लेटफ़ॉर्म समूहन में मिलान की गई सामग्री की जाँच करेगा, और फ़्लैग केवल तभी क्लाइंट को भेजा जाता है जब सामग्री (flagGroup) पहली बार कैप्चर की जाती है।
उदाहरण के लिए, SSRF स्कैनिंग।
सबसे पहले निम्नलिखित की तरह एक नियम बनाएँ:
http:
- name: ssrf
flag_format: (ssrf[a-z0-9]{6})[0-9]{1,3}
rank: 0
push_to_client: false
notice: false
response_status_code: "200"
response_headers: { }
response_body: "Here is a SSRF!"
मान लीजिए कि हमारा लक्ष्य https://www.testvuln.com?url=api.com&p=useless है, और SSRF के लिए हमारे पास 5 पेलोड हैं। स्कैनर द्वारा भेजा गया अंतिम अनुरोध हो सकता है ['https://www.testvuln.com?url=http://revsuit.com/ssrfa98oni1&p=useless','https://www.testvuln.com?url=http://revsuit.com/ssrfa98oni2&p=useless', ... ,'https://www.testvuln.com?url=//revsuit.com/ssrfa98oni5&p=useless']। वे सभी सफलतापूर्वक हमला कर सकते हैं।
हालाँकि, चूंकि नियम के flagFormat में अनाम समूहन का उपयोग किया गया है, प्लेटफ़ॉर्म जुड़े हुए flagGroup की क्वेरी करेगा, इस मामले में ssrfa98oni, और केवल इसकी पहली उपस्थिति पर क्लाइंट को flag भेजेगा, इसलिए क्लाइंट को केवल एक flag प्राप्त होगा: ssrfa98oni1। यह पहले ही साबित करता है कि लक्ष्य का url पैरामीटर असुरक्षित है।
वास्तविक पैनेट्रेशन टेस्टिंग परिदृश्यों में, कुछ कार्यों को RevSuit के विभिन्न मॉड्यूलों को संयोजित और मिलान करके आसानी से और जल्दी से किया जा सकता है। निम्नलिखित Java Web में ब्लाइंड XXE का एक उदाहरण है, जो दिखाता है कि RevSuit के HTTP और FTP मॉड्यूल का उपयोग करके, टेम्पलेट चर के साथ संयोजित करके, पोर्ट स्कैन को जल्दी से कैसे पूरा किया जाए।
पहले एक HTTP नियम बनाएँ जो evil.dtd लौटाता है, dtd की सामग्री के अनुसार प्रतिक्रिया को अनुकूलित करें ताकि वह RevSuit की FTP सेवा से कनेक्ट हो, और टेम्पलेट चर का उपयोग करके स्कैन किए जाने वाले होस्ट और पोर्ट को FTP के उपयोगकर्ता और पासवर्ड के माध्यम से FTP पर पास करें।

फिर एक FTP नियम बनाएँ जो उपयोगकर्ता और पासवर्ड टेम्पलेट चर से स्कैन किए जाने वाले होस्ट और पोर्ट को प्राप्त करता है, और Pasv पते पर सेट करता है।

फिर पोर्ट स्कैन के लक्ष्य को सेट करने के लिए evil.dtd URL में होस्ट और पोर्ट पैरामीटर सेट करके BurpSuit का उपयोग करके स्कैन लॉन्च करें।

चलने का प्रभाव इस प्रकार है:

ऐसा इसलिए है क्योंकि यदि Passive Address सुलभ नहीं है तो FTP कनेक्शन क्रैश हो जाएगा, हम यह निर्धारित कर सकते हैं कि कनेक्शन सामान्य रूप से बाहर निकलता है या नहीं, इस आधार पर पोर्ट खुला है या नहीं। इस उदाहरण के लिए, हमने सफलतापूर्वक पता लगाया कि पोर्ट 8005 और 8080 खुले हैं।
एक अधिक विस्तृत विकी तैयार की जा रही है, आप इससे पहले स्वयं अन्वेषण कर सकते हैं।
एक मुद्दा सबमिट करें या Weixin के माध्यम से मुझसे संपर्क करें: TGk0bjA2Cg==
यह प्रोजेक्ट निम्नलिखित उत्कृष्ट प्रोजेक्ट्स के कोड का उपयोग करता है:
मेरे मित्र @E99p1ant का धन्यवाद, इस प्रोजेक्ट के विकास के दौरान मुझे प्राप्त सभी सहायता और सलाह के लिए।
@Apache License 2.0