AppSecs – Telegram
Можно приписывать теперь плашку BugBounty?
6
Недавно проходил VolgaCTF, в котором я принимал участие в составе команды SiBears 🐻

Попался достаточно интересный таск на SQL-инъекцию, который удалось успешно решить. Решил поделиться размышлениями и ходом действий в решении таска.

🔍 Writeup-SQL-injection-task-VolgaCTF-2025
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥121
Forwarded from Whitehat Lab
🔄 🚩 💻Список площадок для оттачивания навыков этичного хакинга, подойдет для тренировок CTF.

😉 Hack The Box
Windows, *nix машины для самостоятельного пентеста. Во free тарифе всегда доступно 20 машин. Обучение, академия, лабы и т.д. Есть огромное количество CTF заданий в различных категориях.
Возможность сдать экзамены и получить сертификаты CBBH (Certified Bug Bounty Hunter), CPTS (Certified Penetration Testing Specialist), CWEE (Certified Web Exploitation Expert) и CDSA (Certified Defensive Security Analyst) 🙃


😉 TryHackMe
Аналог HackTheBox без CTF заданий. Академия в наличии, также присутствует free тариф 😁


😉 PortSwigger
Академия веб пентеста от создателей BurpSuite. Для сдачи экзамена необходима активная подписка на Burp Suite Professional, цена экзамена 99$ 😈


😉 CTFtime
Информацию почти обо всех прошедших и предстоящих CTF соревнованиях можно найти здесь


😉 HackerLab
Русскоязычная площадка 😎. Большое (300+) количество CTF задач в самых различных категориях (web, crypto, rev, pwn, osint и т.д.), в наличии Windows и Linux машины. Есть бесплатный тариф


😉 CryptoHack
Один из лучших ресурсов с задачами по криптографии. Нравится криптография ? Вам сюда, от азов до сложнейших задач


😉 Standoff365
Киберполигон от компании 😎 Positive Technologies. Это виртуальная инфраструктура с реалистичными копиями IT-систем из разных отраслей. Достаточно высокий порог вхождения. Ежегодно проводятся турниры, куда вы можете отобраться со своей командой


😉 TaipanByte CTF
Русскоязычная площадка от ребят из команды TaipanByte, большое кол-во тасков (80+) во всех основных категориях


😉 pwn.college
Образовательная платформа, позволяющая изучать и практиковать основные концепции кибербезопасности. Рассчитана на новичков


😉 Kontra
Appsec тренировки, LLM, owasp top10, owasp api top10, aws top10 и т.д.


😉 Linux Journey
Путешествие в мир Linux, основные команды, лабы, руководства


😉 OverTheWire Bandit
Игра из 34 уровней для изучения Linux


😉 Crackmes
Большое количество (~4000) крякми для изучения. Подойдет реверсерам


😉 Pwnable
Для любителей бинарной эксплуатации (PWN)


😉 Cyber-Ed
Русскоязычная площадка. One task of the month - выкладывают по 1ой CTF задаче в месяц, в этом году планируют 10 заданий в категориях: web, pwn, crypto, reverse, misc и т.д.


😉 Root Me
Огромное (500+) кол-во заданий в самых разных категориях


😉 picoCTF
Площадка с CTF заданиями начального уровня, почти на все задания можно найти райтапы


😉 Exploit Education
ВМ Phoenix для изучения уязвимостей, разработки эксплойтов, отладки программного обеспечения и общих проблем кибербезопасности
Темы - Network programming, Stack overflows, Format string vulnerabilities, Heap overflows


😉 0xf.at
Парольные загадки (ребусы), например, пароль это сумма чисел от 1 до 446, соответственно надо написать простенькую автоматизацию и ввести в поле ввода


😉 Hacker Test
Простенький хакер квест состоящий из 20 уровней


⚠️ P.S. Если вы знаете подобные площадки, лично проверяли и они заслуживают внимания, пишите пожалуйста в бота обратной связи - @wh_feedback_bot

#htb #crackmes #bandit #hacking #ctf #ethical

✈️ Whitehat Lab
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥3
Представим ситуацию, у нас реализуется web-приложение с stateless сессиями — с использованием accessToken. Пользователь проходит аутентификацию, и backend-сервер выпускает accessToken и передает его клиенту.
Классический вопрос: «Где хранить accessToken на клиенте?».

Если JS-коду не нужно взаимодействовать с токеном, то единственным безопасным вариантом является хранение токена в Cookie с атрибутами HttpOnly, SameSite, Secure. Однако, как быть, если такая необходимость есть? Хранить токен в localStorage?

😏Чем плохо такое решение? Если хранить accessToken в localStorage, то при XSS у злоумышленника будет доступ к хранилищу браузера, и токен может быть украден.

На практике мне встречалась реализация, где разработчики и рыбку съели и токен хранили в Cookie, и подставляли его в HTTP Header через JS.
Как? Всё просто — они реализовали API, который возвращает в теле ответа все Cookie, которые передавались в HTTP запросе. JS-код брал токен из ответа и подставлял в HTTP заголовок Bearer для следующего запроса. По сути это обход защиты атрибута HttpOnly.

😏Чем плох этот вариант? Помимо XSS, при небезопасной конфигурации CORS, злоумышленник сможет получить токен жертвы из ответа сервера, заманив ее на подконтрольный ресурс.

Существует еще одно решение — хранить токен в переменной JS и обернуть его в замыкание. Однако у злоумышленника останется возможность влиять на контекст выполнения. Поэтому, более безопасный метод - предотвратить вмешательство с помощью XSS в среду выполнения, которая имеет токен, достигая изоляции контекста. В веб-фронтенде это можно сделать с помощью Web Workers.

Web Workers это механизм, который позволяет скрипту выполняться в фоновом потоке, который отделен от основного потока веб-приложения.


Идея заключается в том, чтобы поместить все запросы API в рабочий поток. Благодаря изоляции среды выполнения, если в рабочем потоке нет XSS, основной поток не может вмешаться в рабочего и не может получить доступ к его данным. Это обеспечивает безопасность токена.

Web Worker делится на три вида:
Dedicated workers: используется только одним скриптом
Shared workers: может использоваться несколькими скриптами в разных окнах/фреймах.
Service Workers: выполняет роль прокси-сервера для взаимодействия между веб-приложением, браузером и сетью.

🔍 В этой статье описывается пример использование Dedicated Worker и обоснование отказа от Service Worker.

🔍 В этой статье, напротив, используется Service Worker + описываются другие примеры использования «прослойки» между фронтом и беком. Например, в кейсе, который я описывал выше (с API, которая возвращает Cookie в ответе), можно было бы использовать прокси на бэке, отказавшись вовсе от работы JS-кода с токеном в браузере пользователя.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍64🔥3
Что будет, если скрестить XSS и CSRF? Получится XSSI.

👁Cross Site Script Inclusion (XSSI) — это техника атаки (или уязвимость), позволяющая злоумышленникам похищать данные определенного типа через origin boundaries (дословно «границы сайта»), путем включения целевых данных с помощью тега SCRIPT в веб-страницу злоумышленника, как показано ниже:


<SCRIPT src="http://target.example.jp/secret"></SCRIPT>


Браузеры исполняют все скрипты, загруженные через тег <noscript>, в едином глобальном контексте страницы. Это означает, что когда внешний скрипт загружается через <noscript src="...">, его код выполняется как часть основной страницы, и все объявленные в нём переменные, функции и данные становятся доступны для другого JavaScript-кода на этой странице.

Один из примеров, который мне понравился:

HTTP ответ при посещении URL http://victim.com/service/csvendpoint:

HTTP/1.1 200 OK
Content-Type: text/csv
Content-Disposition: attachment; filename="a.csv"
Content-Length: 13

1,abc,def,ghi


Зловредный код на подконтрольном злоумышленнике ресурсе:

<!--error handler -->
<noscript>window.onerror = function(err) {alert(err)}</noscript>
<!--load target CSV -->
<noscript src="http://victim.com/service/csvendpoint"></noscript>


В итоге, когда браузер попробует отрендерить CSV как JS-код, это приведет к раскрытию данных злоумышленнику (см. вложенную картинку).

Ресурсы для самостоятельного изучения:
- https://owasp.org/www-project-web-security-testing-guide/v41/4-Web_Application_Security_Testing/11-Client_Side_Testing/13-Testing_for_Cross_Site_Script_Inclusion
- https://www.mbsd.jp/Whitepaper/xssi.pdf
- https://www.scip.ch/en/?labs.20160414
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
Недавно зарепортил интересный недостаток, который достаточно высоко оценили с уровнем критичности high, но повысить impact получилось благодаря объединению двух low/medium недостатков.
На некотором ресурсе X есть возможность оставлять комментарий в формате Markdown с некоторыми html-тегами. «Опасные» теги, такие как <noscript>, <iframe>, <img> фильтруются. Однако была возможность использовать другие интересные теги.
1. Тег <form>. Первая мысль - создание поддельной формы логина. Уже неплохо, но выглядит немного странным наличие такой формы в комментах. Можно оценить в low/medium.
2. Тег <style>. Наводит на мысли о CSS injection. Если вы читали данный пост, то видели о возможности кражи данных HTML-страницы, например пользовательский ввод или csrf-токен. В моем случае не было ничего критичного.
Но была возможность изменять глобальные стили страницы с использование dangling markup, который позволял выходить за контекст стилей комментария.
Например, данный код сделал текст комментария красным, а текст родительской страницы синим

<div style="color:red">LOL
<style>
* {
color: blue;
}
</style>


Использование этих двух тегов позволило оставлять в комментах форму логина, которая выглядела идентично той, что используется в системе, но при этом скрывать весь остальный контент на странице через стили. Получается такая фишинговая страница прямо на странице целевого сайта. Данный недостаток уже оценился в high и вырос в цене.
👍10🔥81
Forwarded from SHADOW:Group
Год назад эту защиту нельзя было обойти, однако сейчас это стало реально. Про интересную особенность рассказали в X.

Дело в том, что раньше нельзя было использовать точку в протоколе, но теперь браузер Chromium ее поддерживает (URL вернет действительное имя хоста с любым недействительным протоколом, даже с точкой)

Соответственно, мы можем использовать пэйлоад типа evil.com://www.example.com. Хост www.example.com будет в списке разрешенных, к параметру добавится префикс «https://» и мы получим редирект на https://evil.com//www.example.com.

#web #bypass
👍6
Окак

А отказаться можно?
🌚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