SOME - Same Origin Method Execution

Support HackTricks

Same Origin Method Execution

Існують випадки, коли ви можете виконати обмежений javascript на сторінці. Наприклад, у випадку, коли ви можете контролювати значення зворотного виклику, яке буде виконано.

У таких випадках одне з найкращих, що ви можете зробити, це доступитися до DOM, щоб викликати будь-яку чутливу дію, яку ви можете знайти там (наприклад, натискаючи кнопку). Однак зазвичай ви знайдете цю вразливість у малих кінцевих точках без будь-яких цікавих речей у DOM.

У цих сценаріях ця атака буде дуже корисною, оскільки її мета полягає в тому, щоб зловживати обмеженим виконанням JS всередині DOM з іншої сторінки з того ж домену з набагато цікавими діями.

В основному, потік атаки виглядає наступним чином:

  • Знайти зворотний виклик, яким ви можете зловживати (потенційно обмежений до [\w\._]).

  • Якщо він не обмежений і ви можете виконати будь-який JS, ви можете просто зловживати цим як звичайним XSS

  • Змусити жертву відкрити сторінку, контрольовану зловмисником

  • Сторінка відкриється сама в іншому вікні (нове вікно матиме об'єкт opener, що посилається на початкове)

  • Початкова сторінка завантажить сторінку, де знаходиться цікавий DOM.

  • Друга сторінка завантажить вразливу сторінку, зловживаючи зворотним викликом і використовуючи об'єкт opener, щоб доступитися та виконати деяку дію на початковій сторінці (яка тепер містить цікавий DOM).

Зверніть увагу, що навіть якщо початкова сторінка отримує доступ до нового URL після створення другої сторінки, об'єкт opener другої сторінки все ще є дійсним посиланням на першу сторінку в новому DOM.

Більше того, для того щоб друга сторінка могла використовувати об'єкт opener, обидві сторінки повинні бути в одному походженні. Це причина, чому, щоб зловживати цією вразливістю, вам потрібно знайти якийсь вид XSS в одному походженні.

Exploitation

Example

  • Ви можете знайти вразливий приклад на https://www.someattack.com/Playground/

  • Зверніть увагу, що в цьому прикладі сервер генерує javascript код і додає його до HTML на основі вмісту параметра зворотного виклику: <script>opener.{callbacl_content}</script> . Ось чому в цьому прикладі вам не потрібно явно вказувати використання opener.

  • Також перевірте цей CTF звіт: https://ctftime.org/writeup/36068

References

Support HackTricks

Last updated