当前位置: 首页 > news >正文

FTP协议-匿名用户登录 从0到1

前言

日常大家可能接触web漏洞比较多而对其他端口及协议不那么了解,其实其他协议漏洞在渗透中也同样重要只是平时可能接触得不多。本文将介绍FTP协议、FTP匿名用户登录及其具体流程分析和自动化利用demo。

FTP简介

FTP是File Transfer Protocol(文件传输协议)的简称,用于internet上的控制文件的双向传输。

很多人以为FTP是一个服务,实际上FTP 是一个协议而不是一个服务,应用到FTP协议的服务有很多,常用的就是vsftpd。

FTP有三种用户模式:

  1. 匿名用户模式:
  • 允许任何人无需提供用户名和密码即可登录 FTP 服务器。
  • 通常对访问权限有严格限制,只能访问特定的公共目录,并且可能无法进行上传、删除等操作。

  1. 本地用户模式:
  • 使用服务器操作系统中的本地用户账号和密码进行登录。
  • 登录后,用户的权限与在本地操作系统中的权限相同。
  • 比如,服务器上有个用户名为“user1”,其在操作系统中具有特定的文件和目录权限,那么在通过 FTP 以“user1”登录时,将拥有相同的权限。

  1. 虚拟用户模式:
  • 这并非真正的操作系统用户,而是 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模式下

接下来就是整个登录的流程,包括指定用户、输入密码和登录成功

指定登录用户

提示输入密码

输入密码

提示登录成功

脚本测试

可以使用pythonftplib库模拟FTP协议登陆的行为来进行自动化测试

简单demo

# -*- coding:utf-8 -*-
"""
@Created on : 2024/8/1 16:28
@Auther: c
@Des: 
"""
import ftplibfrom loguru import loggerdef 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。

相关文章:

FTP协议-匿名用户登录 从0到1

前言 日常大家可能接触web漏洞比较多而对其他端口及协议不那么了解,其实其他协议漏洞在渗透中也同样重要只是平时可能接触得不多。本文将介绍FTP协议、FTP匿名用户登录及其具体流程分析和自动化利用demo。 FTP简介 FTP是File Transfer Protocol(文件传…...

【UltraVNC】私有远程工具VNC机器部署方式

旨在解决监控端非固定IP的计算机A,远程连接受控端非固定IP的计算机B。如果没有独立公网IP,是不能直接远程桌面的,所以需要一个服务器来中转双方的数据。 一、UltraVNC下载和安装 ----------免费开源远程控制工具——UltraVNC 官网:Home - UltraVNC VNC OFFICIAL SITE, R…...

五大无线领夹麦克风误区科普:领夹麦杂音干扰不耐用问题必须规避

在选购无线领夹麦克风的道路上,不少新手因经验不足,容易落入性能低下的产品陷阱。这些麦克风不仅信号不稳定,音质差强人意,甚至在使用一段时间后出现信号衰减、杂音加重等现象。这并非偶然,而是市场中充斥着大量品质参…...

适合金融行业的企业级跨网文件交换系统

在金融领域,文件交换平台的作用不可小觑,它关乎数据的保密性、稳定性,并且必须遵守严格的合规标准。那么,一个适合金融业跨网文件交换的系统应该具备哪些特质,又是如何满足这些需求的呢?镭速跨网文件交换系…...

vba发邮件的几种方法:新人如何快速上手?

vba发邮件的几种方法有哪些!vba自动化邮件发送技巧! 对于新人来说,快速掌握VBA发邮件的几种方法,不仅可以节省大量时间,还能提高工作质量。AokSend将详细介绍几种常见的VBA发邮件的方法,帮助新人快速上手&…...

豆瓣评分8.7!Python pandas创始人亲码的数据分析入门手册!

在众多解释型语言中,Python最大的特点是拥有一个巨大而活跃的科学计算社区。进入21世纪以来,在行业应用和学术研究中采用python进行科学计算的势头越来越猛。 近年来,由于Python有不断改良的库(主要是pandas),使其成为数据处理任…...

关于linux上root连接mysql时遇到的一点小问题以及rsync通过ssh的文件同步传输以及免密码传输的实现

一、关于linux上root连接mysql时遇到的一点小问题 今天因为工作需要,需要使用root连接一下很久没有连接过的mysql服务器了,一看找不到root密码了,记得当时我在搭建整个mysql主从的时候,我明明把root密码记录在了txt文件上的&#…...

一、Socket介绍(也叫套接字)

一、定义 通过IP地址或者端口 将两个电脑连接起来; Socket是网络通信最常用的,除了这个还有HTTP; Http是一个弱联网;Socket用于长连接,使用的是Tcp; 除了这个还有一个SuperSocket,是对Socket…...

虚拟现实技术的发展现状如何?

虚拟现实(VR)技术自2016年被广泛认为是元年之后,经历了快速增长和随后的调整期。目前,VR行业正处于快速发展期,技术不断进步,应用场景持续拓展。2024年VR技术发展现状概述: 1、行业发展阶段&am…...

实时美颜技术的实现:视频美颜SDK与直播美颜工具的最佳实践

视频美颜SDK与直播美颜工具的诞生,为主播美颜一需求提供了技术支撑。接下来,笔者将深入探讨实时美颜技术的实现及其在视频美颜SDK与直播美颜工具中的最佳实践。 一、实时美颜技术的核心原理 具体来说,主要包括以下几个步骤: 1.…...

Java中的司机抢单实现:并发问题与解决方案

文章目录 司机抢单的基础实现乐观锁解决并发问题 总结 在共享经济的浪潮中,像滴滴打车这样的服务已经成为我们生活中不可或缺的一部分。对于司机和平台来说,抢单是一个关键环节,如何在保证系统高效运行的同时,确保抢单过程的公平与…...

2、Unity【基础】Mono中的重要内容

Unity基础 MonoBehavior中的重要内容 文章目录 Mono中的重要内容1、延迟函数1、延迟函数概念2、延迟函数使用3、延迟函数受对象失活销毁影响思考1 利用延时函数实现计时器思考2 延时销毁 2、协同程序1、Unity是否支持多线程2、协同程序概念3、协同程序和线程的区别4、协程的使用…...

C++11:右值引用、移动语义和完美转发

目录 前言 1. 左值引用和右值引用 2. 引用范围 3. 左值引用的缺陷 4. 右值引用的作用 5. 右值引用的深入场景 6. 完美转发 总结 前言 C11作为一次重大的更新,引入了许多革命性的特性,其中之一便是右值引用和移动语义。本文将深入探讨其中引入的…...

【大模型部署及其应用 】RAG检索技术和生成模型的应用程序架构:RAG 使用 Meta AI 的 Llama 3

目录 RAG检索技术和生成模型的应用程序架构1. **基本概念**2. **工作原理**3. **RAG的优势**4. **常见应用场景**5. **RAG的挑战**6. **技术实现**参考RAG 使用 Meta AI 的 Llama 3亲自尝试运行主笔记本与文档应用聊天关键架构组件1. 自定义知识库2. 分块3. 嵌入模型4. 矢量数据…...

python 速成指南

第一节. 过程式 python python 的一个特点是不通过大括号 {} 来划定代码块,而是通过缩进。如果和 C/C++ 类比的话,就是在左括号的地方不要换行,然后用一个冒号 (:) 替代, C/C++ 大括号内部的东西,缩进一个 tab 或者几个空格都可以(但需要保持一致),比如: if (x <…...

多重示例详细说明Eureka原理实践

Eureka原理&#xff08;Eureka Principle&#xff09;是指在长时间的思考和积累之后&#xff0c;通过偶然的瞬间获得灵感或发现解决问题的方法的一种认知现象。这个过程通常包括三个主要阶段&#xff1a;准备阶段、潜伏期以及突然的灵感爆发。下面详细说明Eureka原理的实践步骤…...

Qt下让程序只运行一个实例,避免重复打开

参考 【实现QT单例程序 QSystemSemaphore QSharedMemory】 做了一点点更改&#xff0c;主要是在openEuler上用时遇到的一点问题。 QSharedMemory *unimem nullptr; void checkExist() {QString memName "SingleApp"; // 注意这名字要每个工程不一样&#xff0c;否…...

考研交流平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家&#xff0c;服务很多代码文档&#xff0c;百分百好评&#xff0c;战绩可查&#xff01;&#xff01;入职于互联网大厂&#xff0c;可以交流&#xff0c;共同进步。有保障的售后 代码参考数据库参…...

哈希表--有效的字母异位词

给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram", t "nagaram" 输出: true示例 2: 输…...

GC终结标记 SuspendEE 是怎么回事

一&#xff1a;背景 1. 讲故事 写这篇是起源于训练营里有位朋友提到了一个问题&#xff0c;在 !t -special 输出中有一个 SuspendEE 字样&#xff0c;这个字样在 coreclr 中怎么弄的&#xff1f;输出如下&#xff1a; 0:000> !t -special ThreadCount: 3 UnstartedTh…...

Ubuntu 中GCC交叉编译工具链安装

​ Ubuntu 自带的 gcc 编译器是针对 X86 架构的&#xff0c;如果要编译的是 ARM 架构的代码&#xff0c;就需要一个在 X86 架构的 PC 上运行&#xff0c;可以编译 ARM 架 构代码的 GCC 编译器&#xff0c;这个编译器就叫做交叉编译器&#xff0c;总结一下交叉编译器就是&#x…...

JEXL(Java Expression Language)用法概览

JEXL&#xff08;Java Expression Language&#xff09;是一个用于在Java应用程序中解析和执行表达式的库。JEXL的设计目的是通过提供一种类似于脚本语言的语法&#xff0c;使得可以在应用程序中动态地计算表达式的值。JEXL常用于模板引擎、规则引擎和配置文件等场景。 下面介…...

NC 完全二叉树结点数

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 给定一棵完全…...

点灯案例优化(二) 利用位运算修改特定位

前面&#xff0c;我们对点灯代码进行了第一次优化&#xff0c;效果如下 尽管第一次优化以后代码可读性确实高了不少&#xff0c;也看起来更加简洁&#xff0c;但是&#xff0c;这里仍旧存在一个很严重的问题&#xff1a;就在每一个表达式右边&#xff0c;我们给寄存器的数据赋值…...

【C++备忘录】

记录一些C比较好用的代码块&#xff0c;方便自个查看。 使用std::copy 快速打印序列 #include <iostream> #include <algorithm> #include <iterator>int main() {int a[5] { 1, 2, 3, 4, 5 };copy(begin(a), end(a), ostream_iterator<int>(cout, …...

java编程 斐波拉契数列算法集锦【斐波拉契数列】【下】【集合类】【Stream函数式编程】

斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;是一个非常经典的递归问题。斐波那契数列的算法描述&#xff1a; 斐波那契数列&#xff0c;一个令人着迷而又充满神秘色彩的数字序列&#xff0c;它以0和1作为起始&#xff…...

智慧园区三维可视化平台

背景 随着物联网、人工智能等新一代信息技术的发展&#xff0c;数字孪生技术逐渐成为实现这一目标的关键工具。数字孪生技术能够对物理世界进行高精度、全要素的映射&#xff0c;并实时动态反映其变化情况&#xff0c;从而为园区提供精准的管理和服务。 方案简介 智慧园区数字…...

Redis 有序集合【实现排行榜】

使用 Redis 的 Sorted Set 数据结构可以非常高效地实现实时排行榜功能。Sorted Set 允许将元素按分数进行排序&#xff0c;同时支持插入、删除和查询操作&#xff0c;且这些操作的时间复杂度较低&#xff0c;非常适合处理高并发的场景。 实现思路 插入操作&#xff1a;当用户…...

ORACLE数据库管理系统介绍

1.ORACLE的特点: 可移植性 ORACLE采用C语言开发而成,故产品与硬件和操作系统具有很强的独立性。从大型机到微机上都可运行ORACLE的产品。可在UNIX、DOS、Windows等操作系统上运行。可兼容性 由于采用了国际标准的数据查询语言SQL,与IBM的SQL/DS、DB2等均兼容。并提供读取其它…...

C# 中Linq探讨 Or条件拼接

在C#中&#xff0c;没有直接内置于.NET Core或.NET Framework中的NuGet包能够直接“拼接”LINQ的OR条件&#xff0c;因为LINQ本身设计为一种声明式编程模型&#xff0c;用于查询数据集合。然而&#xff0c;你可以通过一些方式来实现多个条件以OR逻辑组合的效果&#xff0c;而不…...

网站如何做图片特效/seo全称

使用的是XHScrollMenu和UIPageViewController来构建5个页面:ViewController1, ViewController2, ViewController3, ViewController4, ViewController5。XHScrollMenu和UIPageViewController左右滑动均可以控制页面的切换。一般情况下是正确的。但如果点击了menu&#xff0c;切换…...

广告网站设计方案/公司网站优化方案

2019独角兽企业重金招聘Python工程师标准>>> GC所关注的是哪一部分内存的回收&#xff1f; GC所关注的一般是指Java堆和方法区内存。因为程序计数器、虚拟机栈、本地方法栈这三个区域都是随线程而生&#xff0c;随线程而灭。 GC如何判断对象是否存活&#xff1f; GC…...

政府网站建设愿景/steam交易链接在哪里看

前言 前两篇文章二叉树和二叉搜索树中已经涉及到了二叉树的三种遍历。递归写法&#xff0c;仅仅要理解思想&#xff0c;几行代码。但是非递归写法却非常不easy。这里特地总结下&#xff0c;透彻解析它们的非递归写法。当中。中序遍历的非递归写法最简单&#xff0c;后序遍历最难…...

厦门网站制作公司推荐/网站策划书模板

文章目录编程工具spyderIPYHONanaconda是集成很多工具的集成平台&#xff0c;将很多第三方的开发调试环境集成到了一起。anaconda来源于包管理和环境管理工具conda可以管理调试包编程工具spyder ipython对运行结果显示&#xff0c;文件导航实际应用不太需要&#xff0c;如下改界…...

建设工程协会网站/疫情最新政策最新消息

基于HTML和JS实现的保护海洋动物、保护环境的硬核小游戏 《西瓜皮斯拉》 目录 基于HTML和JS实现的保护海洋动物、保护环境的硬核小游戏 1 《西瓜皮斯拉》 1 Part1. 作品设计 2 作品主题 2 作品设计思路 2 单人模式&#xff1a; 2 双人模式&#xff1a; 3 Part2. 代码设计 3 模…...

怎样注册小程序店铺/莆田百度seo公司

目录 1、编程题&#xff1a;最高分是多少 2、编程题2&#xff1a;简单错误记录 3、编程题3&#xff1a;扑克牌大小 1、编程题&#xff1a;最高分是多少 答案&#xff1a; let line; while(linereadline()){let linesline.split( );let studentNum,operationNum;studentNump…...