
Эксплойт и патч 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 пользователя
id
Тогда атака должна быть успешной, и euid должен быть 0 (root).
# Запуск скрипта catalina.sh как демона
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, и перезапуск инициируется системой init Linux. Используя преимущества Linux init, мы можем с помощью символической ссылки изменить владельца любого файла на пользователя Tomcat. Если мы создадим симлинк catalina.out на любой файл, мы сможем работать с любым файлом в системе с привилегиями root, которые предоставляет catalina.out. Это типичная эксплуатация DLL-перехвата (DLL hijacking).