Трюки с произвольной загрузкой файлов в Java


Результаты нормализации имени файла зависят от реализации различных JAR библиотек и личных привычек разработчиков. Это можно использовать для обхода средств защиты. Ниже представлены способы загрузки файла с именем pyn3rd.jsp для некоторых популярных методов:

1. Метод getSubmittedFileName()

Для данного метода достаточно поместить обратный слеш в имя файла:

filename="pyn3rd.j\sp"

После нормализации на сервер загрузится файл с именем pyn3rd.jsp.

Кроме обратного слеша, можно оставить параметр filename без закрывающей двойной кавычки и поместить в конце расширения произвольный символ:

filename="pyn3rd.\jspz

2. Метод getOriginalFilename()

Этот метод позволяет получить имя файла напрямую без изменений. Однако, когда мы используем другой метод StringUtils.cleanPath() для нормализации имени файла, которое принимает метод getOriginalFilename() появляется особенность, позволяющая обойти проверку имени:

filename="pyn3rd.jsp/./././."

3. Метод Apache commons-fileupload/commons-io

Добавляем в конце имени файла / или /[ПРОБЕЛ] или / c другими нулевыми значениями (\r\n и т.д.)

filename="pyn3rd.jsp/"

Кроме того, если вставить символы после / или /[ПРОБЕЛ] , то все, что после слеша, будет принято за имя файла.

filename="pyn3rd.jsp/a"

Ссылка на блог



*

Отправить комментарий (0)
Новые Старые