前言
日常大家可能接触web漏洞比较多而对其他端口及协议不那么了解,其实其他协议漏洞在渗透中也同样重要只是平时可能接触得不多。本文将介绍FTP协议、FTP匿名用户登录及其具体流程分析和自动化利用demo。
FTP简介
FTP是File Transfer Protocol(文件传输协议)的简称,用于internet上的控制文件的双向传输。
很多人以为FTP是一个服务,实际上FTP 是一个协议而不是一个服务,应用到FTP协议的服务有很多,常用的就是vsftpd。
FTP有三种用户模式:
- 匿名用户模式:
- 允许任何人无需提供用户名和密码即可登录 FTP 服务器。
- 通常对访问权限有严格限制,只能访问特定的公共目录,并且可能无法进行上传、删除等操作。
- 本地用户模式:
- 使用服务器操作系统中的本地用户账号和密码进行登录。
- 登录后,用户的权限与在本地操作系统中的权限相同。
- 比如,服务器上有个用户名为“user1”,其在操作系统中具有特定的文件和目录权限,那么在通过 FTP 以“user1”登录时,将拥有相同的权限。
- 虚拟用户模式:
- 这并非真正的操作系统用户,而是 FTP 服务器自定义的用户。
- 具有特定的权限配置,可根据需求灵活设置权限,实现更精细的访问控制。
- 常用于需要为 FTP 服务创建特殊权限用户,而又不想直接使用本地系统用户的情况。
FTP协议占用情况:
21端口:命令控制,用于接收客户端执行的FTP命令。
20端口:数据传输,用于上传、下载文件数据。、
FTP服务搭建-vsftpd
vsftpd默认以匿名用户访问,不修改配置文件的话本身就存在匿名用户登录漏洞。
vsftpd安装
yum -y install vsftpd
服务启动
systemctl vsftpd start
防火墙规则放行
firewall-cmd --zone=public --add-service=ftp --permanent
firewall-cmd --zone=public --add-port=21/tcp --permanent
复现分析
进行连接
ftp 192.168.174.128
输入用户名 anonymous和ftp都行
经过测试发现密码置为空或者是随意输入都可成功登录
抓包分析
首先进行TCP三次握手建立连接
建立连接后服务端向客户端发送包,表示服务已为新连接的用户就绪以及一些服务信息
客户端发送包表示表示服务器需要切换到UTF8字符集进行工作
服务端再向客户端回包表示表示命令执行成功且已在工作再UTF8模式下
接下来就是整个登录的流程,包括指定用户、输入密码和登录成功
指定登录用户
提示输入密码
输入密码
提示登录成功
脚本测试
可以使用python
的ftplib
库模拟FTP协议登陆的行为来进行自动化测试
简单demo
# -*- coding:utf-8 -*-
"""
@Created on : 2024/8/1 16:28
@Auther: c
@Des:
"""
import ftplib
from loguru import logger
def anonymous_login(ip):
try:
ftp = ftplib.FTP(ip)
logger.info("尝试匿名用户登录" + ip)
ftp.login()
except ftplib.all_errors as e:
logger.info(f"匿名用户利用失败: {e}")
else:
logger.info("存在匿名用户" + ip)
if __name__ == '__main__':
anonymous_login('192.168.174.128')
我们可以具体跟进看到login函数
默认的用户为anonymous
密码为anonymous@
确实是登录成功了
修复措施
vsftpd下禁用匿名用户登录需修改配置文件/etc/vsftpd/vsftpd.conf
,将anonymous_enable=YES
修改为anonymous_enable=NO
,再重新启动服务。
再次用脚本测试
可以看到登陆失败
在wireshark中同样也是
总结
针对端口协议自动化探测及利用的脚本编写在此只做了简单demo示例。如果想更进一步,可以对端口进行遍历或指定探测,与特定服务返回数据包中固定字段进行匹配识别出协议再打对应协议漏洞poc。