Получи случайную криптовалюту за регистрацию!

Кавычка

Логотип телеграм канала @webpwn — Кавычка К
Логотип телеграм канала @webpwn — Кавычка
Адрес канала: @webpwn
Категории: Технологии , Блоги
Язык: Русский
Количество подписчиков: 13.96K
Описание канала:

Практическая безопасность. Уязвимости и атаки на веб-приложения.
Платный канал, для тех, кому хочется побольше:
https://t.me/ k-umqRXUENFlYTBi

Рейтинги и Отзывы

2.50

2 отзыва

Оценить канал webpwn и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

0

4 звезд

1

3 звезд

0

2 звезд

0

1 звезд

1


Последние сообщения

2022-11-14 13:36:53 #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¶m2=test&...¶m500=test

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

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

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

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

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

HTTP/1.1 200 OK
Content-Length: 18


- Time 13:36:23



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

HTTP/1.1 200 OK
Content-Length: 37


- Time 13:37:48

+

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

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

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

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

Пример использования: x8 -u "https://example.com/" -w
2.9K viewsImpact, 10:36
Открыть/Комментировать
2022-11-09 13:37:06 Service Worker - это скрипт, запускаемый браузером в фоновом процессе. Думаю, еще не самая используемая технология пентестерами, а ведь с помощью нее можно придумать какую-нибудь интересную эксплуатацию уязвимостей. Большинство использует как кэш в твоем браузере, а кто-то, наверное, всякие гадости делает?

Чтобы посмотреть, что у тебя крутится-вертится, нужно открыть chrome://serviceworker-internals/. Если ты активный пользователь интернета, будешь неприятно удивлен

Например, вот логика простого перехватчика запросов, которые заканчиваются на js. Если происходит fetch (а это даже просто подключаемый js на страницу с помощью тега

При следующем посещении все 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'
}));
});

И вместо , будет содержимое POST-запроса

>
5.1K viewsBo0oM, 10:37
Открыть/Комментировать
2022-08-11 13:37:01 Приложения на Django в debug режиме раскрывают содержимое environment переменных при необработанном исключении.
Несмотря на наличие автоматического сокрытия значений, для переменных соответствующих регулярному выражению API|TOKEN|KEY|SECRET|PASS|SIGNATURE, часто это приводит к утечкам через нестандартные имена переменных.

Если обнаружить debug режим можно просто обратившись к несуществующей странице, то вызвать exception иногда бывает проблематично. Даже с раскрытием существующих в приложении путей через 404-ую страницу.
Но существуют и более универсальные подходы.

Пример 1
Нестандартные символы в Host. Правда с учетом облачных сервисов этот вариант срабатывает редко.

GET / HTTP/1.1
Host: '"

Invalid HTTP_HOST header: '\'"'. The domain name provided is not valid according to RFC 1034/1035.

Пример 2
Использование большего количества переменных в 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=
8.3K viewsBo0oM, 10:37
Открыть/Комментировать
2022-08-09 13:37:01
Один из способов узнать, что через какой-то веб-сервер проксируется Apache, это отправить ему заголовок
Max-Forwards: 0
В ответе будет ошибка.

>
8.9K viewsBo0oM, 10:37
Открыть/Комментировать
2022-07-25 13:37:06 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

>
15.4K viewsBo0oM, 10:37
Открыть/Комментировать
2022-07-21 13:37:06
Druid Monitor для отслеживания состояния проектов на Java
/druid/weburi.html

>
15.3K viewsBo0oM, 10:37
Открыть/Комментировать
2022-07-19 13:37:06 Короч, на пентесте была защита от дураков, каждая отправка запроса (POST x-www-form-urlencoded или application/json) подписывалась. Причем бралась сессия, текущий timestamp, сортировались параметры, все это оборачивалось в md5.
Эта проверка целостности передавалась в заголовке, и если не совпадала с текущими данными в POST, то обработка прерывалась. А без этого, естественно, ни Intuder, ни Scanner не работал.

Запилили плагин для Burp, добавляется через Extender -> Add -> Python, вдруг пригодится в будущем.

>
14.5K viewsBo0oM, 10:37
Открыть/Комментировать
2022-06-30 13:37:06 RCE эксплойт на Bitrix <= 20.100.0

>
17.1K viewsBo0oM, 10:37
Открыть/Комментировать
2022-06-24 17:14:46
Анонс Cure53 о том, что они убьют XSS как класс уязвимостей похож на правду. DOMPurify теперь встроен в браузеры и тестируется.


// this is safe by default
document.body.setHTML('unsafe HTML here')

Как потестить:
Firefox: about:config#dom.security.sanitizer.enabled
Chrome: chrome://flags#enable-experimental-web-platform-features

Как думаете, взлетит или будет на уровне CSP (у одного из ста)?

https://wicg.github.io/sanitizer-api/#dom-element-sethtml
19.4K viewsBo0oM, edited  14:14
Открыть/Комментировать