
استغلال وتصحيح CVE-2016-1240
1.قم بتثبيت Tomcat 7 على الجهاز الافتراضي
sudo apt-get install tomcat7
2.إذا فشلت الخطوة الأولى، قم بتعيين JDK_DIRS="/usr/lib/jvm/java-8-oracle" وأضف العبارتين “export JAVA_HOME=/usr/lib/jvm/java-8-oracle” و “export CATALINA_HOME=/usr/share/tomcat7”. ثم أعد تثبيت Tomcat 7
3.قم بتعيين كلمة مرور أولية لمستخدم Tomcat
sudo passwd tomcat7
4.قم بتعيين صدفة الدخول لمستخدم Tomcat
sudo usrmod -s /bin/bash tomcat7
5.أنشئ صدفة مستخدم Tomcat 7
ssh tomcat7@localhost
1.أنشئ سكربتات الاستغلال attack.sh في /tmp من خلال صدفة مستخدم Tomcat7 ثم اجعل أكواد الاستغلال قابلة للتنفيذ
touch attack.sh
chmod +x attack.sh
2.شغّل كود الاستغلال
./attack.sh
3.أعد تشغيل خادم Tomcat للتحقق من نتيجة الهجوم.
sudo service tomcat7 restart
4.تحقق من معرّف المستخدم
id
عندها يجب أن ينجح الهجوم وأن يكون euid مساويًا 0 وهو الجذر (root).
# Run the catalina.sh script as a daemon
set +e
touch "$CATALINA_PID" "$CATALINA_BASE"/logs/catalina.out
chown $TOMCAT7_USER "$CATALINA_PID" "$CATALINA_BASE"/logs/catalina.out
start-stop-daemon --start -b -u "$TOMCAT7_USER" -g "$TOMCAT7_GROUP" \
-c "$TOMCAT7_USER" -d "$CATALINA_TMPDIR" -p "$CATALINA_PID" \
-x /bin/bash -- -c "$AUTHBIND_COMMAND $TOMCAT_SH"
status="$?"
set +a -e
return $status
الكود أعلاه هو مفتاح تصعيد الامتيازات. حيث أنه يعمل بصلاحيات الجذر (root)، يمكنه فعل أي شيء نريده. ثم نحتاج إلى تغيير مالك catalina.out ليكون مستخدم tomcat7. وبعد إعادة تشغيل Tomcat، سنتمكن من قراءة الملف الذي يشير إليه catalina.
بشكل أكثر تحديدًا، عند إعادة تشغيل Tomcat، فإنه سيغيّر مالك catalina.out إلى مستخدم Tomcat، ويتم استدعاء إعادة التشغيل بواسطة Linux init. من خلال استغلال Linux init، يمكننا استخدام رابط رمزي (symlink) لتغيير مالك أي ملف إلى مستخدم tomcat. إذا أنشأنا رابطًا رمزيًا من catalina.out إلى أي ملف، فيمكننا التعامل مع أي ملف في النظام بصلاحية الجذر التي يمنحها catalina.out. هذا استغلال نموذجي لاختطاف DLL.