Натыкано)
Если мы имеем загрузку файлов по блек листу + апач(nix) и отсутствие проверки
содержимого загружаемого файла, то все это может привести к XSS.
Дело в том, что браузером файлы:
- с "неизвестным" расширением или без расширения
- начинающиеся с html/js кода
- отсутсвующим content-type от веб сервера
будут интерпритированны как html. Т.е. файл sss.sss с содержимым
выдаст ксс, так как апач по умолчанию не отправит content-type в response, а браузер
расценит его как text/html.
Тот же файл, но, например, с содержимым:
Код:
Code:
#!/bin/bash
alert()
браузер воспримет как text/plain, несмотря на то, что content-type также отсутсвует.
Такие ксски по факту являются stored, хотя эксплуатация их больше относится к
reflected, но обладают некоторыми преимуществами:
1) Учитывая название топика, это длинна.
Объем кода зависит лишь от размера файла, который нам позволяют заливать.
Reflected и stored например могут быть ограничены кодом, или длинной url, если
попадают из GET. Проинклудить код удаленно не всегда представляется возможным.
2) Обход некоторых ограничений CSP, WAF, защитных плагинов типа NoScript для FF.
3) "Легитимность" ссылки.
Нет необходимости пытаться скрыть подозрительную ссылку, она вполне "обычна".
4) Может что-то еще...
Гугл по этому вопросу несильно был ко мне дружелюбен, поэтому чутка расписал,
хотя я думаю все об этом знали.
Собственно для чего это все?
Как выяснилось, такое можно применить и для загрузки файлов по белому листу в редких случаях.
Дело в том, что браузер, например, файл ss.mp3 при открытии через обертку
Код:
Code:
file:///Desktop/ss.mp3
откроет его как audio/mpeg. И даже если содержимое его будет alert(),
браузер все равно попытается его открыть как mp3.
Однако, если апач каким-то образом не знает об mp3 и, всвязи с этим, вернет
response без content-type, браузер будет интерпритировать файл по содержимому,
и наш алерт отработает.
В файле мим типов mp3 будет однозначно, с распространенными расширениями не прокатит.
Но иногда разрабы могут разрешать заливать некоторые не слишком распространенные
расширения. Что впринципе мне и попалось, допускалась возможность заливки расширений:
1) aac - аудио
2) thm - изображение
3) и что-то там еще
а апач + отсутсвие mime type для этих файлов позволяло выполнить XSS.
Как на вин не знаю, не тыкал, ну и результаты могут отличаться от дистрибутива)