вольтаж
1.03K subscribers
38 photos
6 videos
7 files
63 links
Кибершумные заметки о безопасности веба, инфры и головы

связь - @w0ltage
Download Telegram
3
ПАПКИ ПАПКИ 😲УКА ПАПКИ

Бывает, решился на мысль, зашёл в тг, увидел диско шар уведомлений по чатам, отвлёкся и уже забыл как хотел измениться.

Как оказалось, с тг премиумом, эту вонючую папку "Все чаты", можно выкинуть в конец списка и забыть о ней

Что делать:
- создай / выбери канал что хочешь держать на виду всегда
- настройки -> папки, создай ещё одну папку и добавь туда выбранный канал
- перемести папку на первое место в списке

Поздравляю, ты выбыл из крысиных бегов за вниманием.

Для авторов тг каналов — рекомендую закинуть в папку канал с заметками для постов

#lifeops
Please open Telegram to view this post
VIEW IN TELEGRAM
73
наконец-то узнал как атаковать эту синюю коробку

#infrastructure #web #research
Forwarded from Pentest Notes
Подготовил для вас подробное руководство по тестированию на проникновение Outlook Web Access (OWA). 😈

➡️ В статье я разобрал все основные атаки и уязвимости OWA. Собрал и структурировал самое полезное в одном месте.

➡️ Также материал идеально подойдет для тех, кто все еще путает между собой OWA, Outlook и MS Exchange :)

Даже если вы раньше не сталкивались с почтовыми сервисами Microsoft, после прочтения смело можете бежать проверять их на безопасность. 🥤

Ссылка на статью

💫 @pentestnotes | #pentest #OWA #Exchange
Please open Telegram to view this post
VIEW IN TELEGRAM
75
WAPPALYZER В ТЕРМИНАЛЕ

🍭 s0md3v/wappalyzer-next

~год искал CLI тулзу, что сможет раскрывать tech stack столь же хорошо как wappalyzer расширение в браузере

как оказалось, легче запускать headless firefox с wappalyzer, чем пытаться сделать open source wappalyzer-like сканеры (1 2)

#tool #recon
Please open Telegram to view this post
VIEW IN TELEGRAM
83
Forwarded from вольтаж
httpx использует собственную разработку projectdiscovery, о которой также сказано в посте — wappalyzergo

знаешь как она определеяет стек?
оно отправляет один запрос и смотрит на ответ

об этом даже issue создавали
https://github.com/projectdiscovery/httpx/issues/959

в то же время, благодаря headless firefox, wappalyzer успевает захватить все подгружаемые JS и определить полный стек
41
file://localhost/etc/passwd
что вернёт?

Да, вернётся /etc/passwd.

В RFC 8089, верный формат протокола описан как file://<host>/<path>, в то время как все шпоры на LFR при SSRF говорят лишь о file:///<path>

Причём, в <host> возможно вписать домен. Система резолвнет его, и если тот указывает на 127.0.0.1, то вернётся содержимое файла. В противном случае получишь лишь отстук в DNS.

питон пок

from urllib.request import urlopen

content = urlopen(
"file://yoogle.com/etc/passwd", timeout=2,
).read().decode('utf-8')

print(content)


Представил сколько возможностей для обхода фильтров? И это не последний твой приступ FOMO за сегодня.

В статье The Minefield Between Syntaxes от @yeswehack, автор вскрывает проблемы разных синтаксисов и как парсеры выживают с ними.

Представим, ты нашёл SSTI, но WAF блокирует символ $
Что делать?


Неприятно, но не критично, ведь в Python / Perl возможно представить символ через \N{CHARACTER NAME}.

Пример обхода фильтра
\N{dollar sign}{7*7} == ${7*7} == 49


Уже на стену лезешь? Погоди, я с тобой ещё не закончил.

Давай дальше по загрузке файлов. Видел же в Content-Disposition есть параметр filename?

В RFC 6266 описан базовый подход с именем файла, но RFC 8187 вышибает дверь с... чего.. какие юникод байты 😱


# RFC 6266
filename="image.png"

# RFC 8187
filename*=UTF8''image%0a.png


RFC 8187 вводит новые правила для filename параметра, включая поддержку всего Unicode + способности кодировать произвольные байты через %

То есть, ты можешь закодировать перенос строки (%0a == \n) и всячески ломать как парсинг имени файла, так и куда тот запишется.

. . .

FOMO карусель закрыта.
Как восстановишь силы, пробегись по статье автора ради:
⚀ разбор CVE из-за проблем синтаксиса [^]

⚀ кейс бб, из cache poisoning в stored xss через пролом валидации parse_url в PHP [^]

⚀ кейс бб, из слепого чтения файлов через SSRF в arbitrary file read [^]


Затем разнеси CTF по ресерчу
1. обход фильтров SSTI [^]

2. иной подход к протоколу file:// [^]

3. пролом parse_url в PHP [^]


#web #bypass #server_side #guide
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
32248
нет слов одни эмоции
Forwarded from HaHacking
⚠️  #web #offense #события #заметки

➡️Что по поводу React2Shell (CVE-2025-55182 / CVE-2025-66478)?

Исходя из обновлённых react2shell.com (ресурс от автора CVE) и репозитория msanft/CVE-2025-55182, на данный момент имеем следующее: подтверждается, что наконец стали распространяться валидные PoC, не требующие подключения vm#runInThisContext, child_process#exec, fs#writeFile и им подобных;

⚡️ UPD:

Уже доступен оригинальный PoC, использованный для репорта уязвимости вендору!



🐇 Проблема

Сервер и клиент обмениваются чанками, передавая их через form-data — причём чанки могут содержать ссылки друг на друга.  До этого коммита не проверялось, принадлежит ли ключ объекту — можно было добраться до прототипа;

С помощью нагрузки вроде "$1:__proto__:constructor:constructor" можно получить [Function: Function]глобальный конструктор;


Если чанк имеет поле then, то уязвимый сервер думает, что это промис — делает await decodeReplyFromBusboy(...) и вызывает then(resolve, reject);

Соответственно, можем сформировать специальный объект, где then указывал бы на Function


files = {
    "0": (None, '{"then":"$1:__proto__:constructor:constructor"}'),
    "1": (None, '{"x":1}'),
}



🐇 Эксплуатация

0️⃣ Десериализатор React через getChunck берёт чанк с ID=0 как корневой для разбора ссылок;

1️⃣ Через специальный синтаксис ($@) можно сослаться из чанка ID=1 на чанк ID=0, который вернул бы сырой чанк вместо разобранного объекта;

2️⃣ Когда .status вредоносного чанка = "resolved_model", мы попадаем в initializeModelChunk — где .value парсится как JSON, резолвятся ссылки и вызывается reviveModel, куда передаётся _response из чанка;

3️⃣ При обработке blob'ов с префиксом $B происходит вызов response._formData.get(response._prefix + obj);

4️⃣ Значит, в ._formData — указываем на конструктор Function, а в ._prefix — на произвольный код;

5️⃣ response._formData.get(response._prefix + "0") превратится в Function("█████████") ⚡️

6️⃣ Эксплуатация происходит во время десериализации, ещё до валидации запроса через getActionModIdOrError;  В запросе должен быть заголовок Next-Action


🐇 Полезная нагрузка

crafted_chunk = {
    "then": "$1:__proto__:then",
    "status": "resolved_model",
    "reason": -1,
    "value": '{"then": "$B0"}',
    "_response": {
        "_prefix": f"███████████████████;",
        "_formData": {
            "get": "$1:constructor:constructor",
        },
    },
}

files = {
    "0": (None, json.dumps(crafted_chunk)),
    "1": (None, '"$@0"'),
}


Разбирая полезную нагрузку по пунктам:
▪️"then": "$1:__proto__:then"
➡️ чтобы чанк ID=0 переписал собственный .then();

▪️"status": "resolved_model"
➡️ чтобы Chunk.prototype.then перешёл к выполнению initializeModelChunk;

▪️"reason": -1
➡️ чтобы не упасть на моменте toString в initializeModelChunk;

▪️"value": '{"then": "$B0"}'
➡️ чтобы после второго прохода десериализации превратить в thenable и добраться до response._formData.get(response._prefix + obj);

▪️"_prefix"
➡️ здесь произвольный код для выполнения;

▪️"_formData"
➡️ здесь указываем на конструктор;



🐇 Обнаружение & Митигация

   🧩   WAF правила:  AWS / Google Cloud / Azure

   🧩   Шаблон Nuclei:  projectdiscovery/nuclei-templates/.../CVE-2025-55182.yaml


CVE-2025-55182
Уязвимые версии:  от React 19 до React 19.2.0
Починили в React 19.2.1

Починили тут:  facebook/react/commit/7dc9...8700
Объявили тут:  react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components


CVE-2025-66478
Уязвимые версии:  от Next.js 15 до Next.js 16
Починили в этих версиях

Починили тут:  vercel/next.js/commit/6ef90...07b2
Объявили тут:  nextjs.org/blog/CVE-2025-66478




➡️Здесь и здесь — подробный разбор причины, следствия и эксплуатации, а также PoC от сильного тайваньского CTF'ера:

   🧩   msanft/CVE-2025-55182

   🧩   maple3142/48bc...f5f3


⚡️ А здесь – сразу несколько PoC'ов от оригинального автора CVE:

   🧩   lachlan2k/React2Shell-CVE-2025-55182-original-poc


➡️Stay safe!

   @HaHacking  🐇
Please open Telegram to view this post
VIEW IN TELEGRAM
74
пацаны, не гоняйте за эксплойтами 1дей, вы системе ещё нужны
42
🎇 сводка по react2shell безумию

events
* китайские группировки сориентировались за 30 часов и начали раскидывать майнеры монеро и LD_PRELOAD руткиты
* добрые (😈) хакеры пробивают таргеты и затем патчат их, устраивая дефейс с "сервер уязвим, фиксаните пж"

* Vercel вышли на h1 с программой по обходам их WAF. платят 50к$ за обход react2shell. уже получили репортов на 750к$

facts
* легче обновиться, чем защищаться waf'ом
* все сдают react2shell в бб и надеются на деньги
* багхантеры написали браузерное расширение на детект
* nuclei добавили смешные правила на детект
(кто пропустит сложение чисел в powershell?)

vuln
* в эксплойтие, для массовых детектов, в _prefix используют js функции вместо child_process
(curl не всегда есть в контейнере, но fetch() всегда есть в node runtime)

* react2shell не оставляет следов на диске, от чего все жалуются на сложность детекта
* уязвим не только next.js, но и прочее во влиянии react rsc: react router, vite rsc, parcel rsc, waku, redwood sdk


слушай, вОЛьТаЖ, а что почитать? не хочу вникать в килотонны текста


Включай этот absolute cinema. Это будут лучшие 40 минут за день.

https://youtu.be/tdDHUoi_TdQ
https://youtu.be/tdDHUoi_TdQ
https://youtu.be/tdDHUoi_TdQ

Автор содрал кожу с реакта, расставил в нём брейкпоинтов и прошёлся по всему пути эксплоита, объясняя логику внутренностей реакта на важных чекпоинтах (их больше 20)

Если останутся силы, затем нырни в килотонну текста от CEO Vercel. После видео - it's starting to make sense

https://x.com/rauchg/status/1997362942929440937

#CVE_2025_55182 #web
Please open Telegram to view this post
VIEW IN TELEGRAM
607
вольтаж
🎇 сводка по react2shell безумию events * китайские группировки сориентировались за 30 часов и начали раскидывать майнеры монеро и LD_PRELOAD руткиты * добрые (😈) хакеры пробивают таргеты и затем патчат их, устраивая дефейс с "сервер уязвим, фиксаните пж"…
40 прожатий ⚪️ на посту и делаю разбор react2shell на русском + сюрприз

будет плотно, тяжело и с картинками.
всё как ты любишь.

upd: быстро же вы набрали. задача была взята в работу!
Please open Telegram to view this post
VIEW IN TELEGRAM
593
I wish you pain and suffering.


За этот год выгорел с пентеста, нырнул в стартапы с hao.vc, совмещая с работой и сомнениями.

Раз, питчдеки в стрессе, два, фулстак лид, три, проект закрыли, кодим следующий... четыре, делегировал обязанности и воспламенился пентестом вновь.

Пять, зачем я сделал это круг? Шесть, ресерчи до утра и безрезультатное бб. Семь, криты и пакеты денег. Восемь, я доволен этим годом (?)

Было больно, но я вырос и преодолел вязкое болото своих страхов.

Желаю и тебе, в новом году, сложнейших испытаний и отчаяния, ведь я знаю, что ты преодолеешь всё и найдешь своё место среди звёзд 🌃

And it will be better than anything else you can imagine. If you're going to try, go all the way.

There is no other feeling like that. You will be alone with the gods, and the nights will flame with fire.

You will ride life straight to perfect laughter. It's the only good fight there is.

[^]
Please open Telegram to view this post
VIEW IN TELEGRAM
14
This media is not supported in your browser
VIEW IN TELEGRAM
32
103
первый крит на бб ☠️

Все совпадения случайны, да и вообще, просыпайся, багбаунти не существует. Погнали грызть бананы и прыгать по деревьям.


Одним холодным декабрьским вечером, сканер обнаруживает IIS сервер, уязвимый к cokieless сессии и shortname enum, благодаря чему даёт вытаскивать DLL библиотеки.


https://target.com/(S(X))/b/(S(X))in/Newtonsoft.Json.dll


Пару минут гуглежа и попадается статья SWARM'ов о пробиве вебчика по этому же сценарию.

Из хаоса информации и непонимая, выстроилась цель - раскопать кастомные DLL библиотеки.

Помня, что сервер уязвим к shortname enumeration, пробую подобрать имена через shortscan.


shortscan --timeout 20 --fullurl --stabilise --patience 1 --verbosity 1 https://target.com


БИНГО! Я ПОЛУЧИЛ ничего.

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

Среди мусора попалась Swashbuckle.Core.dll (автоматически генерит swagger)

Развернул Windows виртуалку, скачал ilspy (декомпилятор .NET) и начал смотреть что же там есть, ведь ИИ подсказал "в DLL должен быть определен путь к Swagger".

Около получаса прыгаю по коду и интерфейсу, ментально привыкая к .NET. Кое-как костылями натыкаюсь на путь к сваггеру
/swagger/docs/v1

Ликуя, вписываю в браузер иииИИ... сваггер не открывается. Сервер возвращает 404 и не более. Десятки раз перепроверил код, посоветовался с ИИ, пробовал обойти всякими методами и софтами.

Лишь через час вспоминаю, что сервер же уязвим к cookieless сессии! Складываю (S(X)) и путь к сваггеру


/(S(X))/swagger/docs/v1


ОТКРЫВАЕТСЯ СВАГГЕР 👁

Смотрю, изучаю, пробую API на вкус, затем вспоминаю истинную цель похода на сваггер - подобрать имена DLL библиотек.

Собрал ключевые слова со сваггера, закинул в ИИ и попросил сгенерировать ещё один словарь, но уже только кастомных библиотек. Подождал, скачал, запустил подбор и получил хиты!


/(S(X))/b/(S(X))in/COMPANY.core.dll
/(S(X))/b/(S(X))in/LONGASSDOMAIN.dll
/(S(X))/b/(S(X))in/COMPANYX.mvc.dll


Быстро, с потным руками и болью в спине (уже шёл 3-й час ночи), кидаю DLL'ки в ilspy и смотрю код сервиса. Кода слишком много, но и нельзя останаливаться. Надо выкачать весь код и уже затем браться за анализ.

Заметил, что в каждой DLL, в начале кода, были расписаны импорты внешних библиотек. С ИИ написал базовый скрипт, что забирал все импорты из DLL и собирал их в единый словарь


# Bulk extract from all DLLs in a directory
$dlls = Get-ChildItem -Path "C:\Users\w0ltage\Desktop\company-dlls\new" -Filter "*.dll"

foreach ($dll in $dlls) {
try {
$asm = [System.Reflection.Assembly]::ReflectionOnlyLoadFrom($dll.FullName)
$asm.GetReferencedAssemblies() | ForEach-Object {
$_.Name
}
} catch {
Write-Host "Could not load $($dll.Name): $($_.Exception.Message)" -ForegroundColor Red
}
}


Так подобрал ещё десяток библиотек.
На этом заканчиваю сессию багхантинга и ложусь спать.

Следующий день, казалось, был холоднее предыдущего. Впрочем, это не мешало моим пальцам искать уязвимости по небоскребам кода, словно собирая подарки на рождество. I live for this shit.

Следуя по сценарию SWARM'ов, следующим этапом надо было найти RCE. Часы шли медленно, но я не сдавался. Структуры, классы, импорты, утилиты, связки, креды, заголовки, внутренние адреса.

Спустя много дней ручного анализа кода, перепробовав кучу вариантов десера, логических баг и других вагонов уязвимостей.

Ещё пару часов отчаяния и попадается API эндпоинт /journal/get/{id}


/journal/get/8


Без аутентификации, вернулись чьи-то персональные данные. Край данных оказался на числе в почти 7 миллионов. Считай все эти 7кк ПДн торчали в интернет без аутентификации многие годы.

Заполнил репорт с уровнем критичности "высокий", но вендор сам повысил до критического и щедро наградил за находку.

В коде были найдены ещё пара лоу-медиум уязвимостей и всё.

Остался без RCE, но с первым критом 🚗
Please open Telegram to view this post
VIEW IN TELEGRAM
105422