泷羽Sec-分享网络安全 | 安全产品测评 | 网站建设 - RCE
type: channel
link: https://longyusec.com/tag/rce/
items: Python很慢？这十个方法让你的代码执行速度提升3倍！
items: 2026最新ubuntu镜像地址，ubuntu镜像下载
items: kali Linux Shell编程：基础到进阶
items: 从0-1讲解RCE漏洞绕过，Windows与LinuxRCE漏洞绕过实战解析
items: PHP反序列化漏洞从入门到深入8k图文介绍，以及phar伪协议的利用
items: phpStudy 小皮 Windows面板 存在RCE漏洞（nday）
items: 安全狗waf绕过-sql注入
items: ftp匿名登录

Python很慢？这十个方法让你的代码执行速度提升3倍！
type: item
date: 2026-06-25T20:20:00+08:00
description: 前言Python，作为一种动态类型的解释性语言，确实在执行速度上可能不如C这样的静态类型的编译语言。但是，通过一些技巧和策略，我们可以显著提升Python代码的性能。本文将探讨如何通过优化方法使Python代码运行得更快、更高效。我们将利用Python的timeit模块来精确测量代码的执行时间。注意：timeit模块在默认情况下会重复执行代码一百万次，以确保测量结果的准确性和稳定性def print_hi(name): print(f'Hi, {name}') if __name__ == '__main__': # 执行print_hi('PyCharm')方法 t = timeit.Timer(setup='from __main__ import print_hi', stmt='print_hi("PyCharm")') t.timeit()如何计算Python脚本的运行时间呢？在time模块中time.perf_counter()提供了一个高精度的计时器，适合测量短时间，例如import time # 记录程序开始时间 start_time = time.perf_counter() # 你的代码逻辑 # ... # 记录程序结束时间 end_time = time.perf_counter() # 计算程序运行时间 run_time = end_time - start_time print(f"程序运行时间：{run_time} 秒")介绍一、I/O密集型操作I/O密集型操作（Input/Output Intensive Operation）指的是那些在执行过程中，大部分时间都花在等待输入/输出操作完成的程序或任务。I/O操作包括从磁盘读取数据、写入数据到磁盘、网络通信等。这些操作通常涉及到硬件设备，因此它们的执行速度受到硬件性能和I/O带宽的限制。他们的特点有：\1. 等待时间：程序在执行I/O操作时，往往需要等待数据从外部设备传输到内存，或从内存传输到外部设备，这会导致程序的执行被阻塞。\2. CPU利用效率：由于I/O操作的等待时间，CPU在这段时间内可能处于空闲状态，导致CPU利用率不高。\3. 性能瓶颈：I/O操作的速度往往成为程序性能的瓶颈，尤其是在数据量大或传输速度慢的情况下。例如，使用I/O密集型操作print，运行一百万次import time import timeit def print_hi(name): print(f'Hi, {name}') return if __name__ == '__main__': start_time = time.perf_counter() # 执行print_hi('PyCharm')方法 t = timeit.Timer(setup='from __main__ import print_hi', stmt='print_hi("PyCharm")') t.timeit() end_time = time.perf_counter() run_time = end_time - start_time print(f"程序运行时间：{run_time} 秒")运行结果为3s而不使用i/o操作执行一个方法，即调用这个print_hi('xxxx')空方法，不使用print()，程序明显快了不少def print_hi(name): # print(f'Hi, {name}') return如果代码中必要的时候，例如文件读写，可以使用如下方法提高效率异步I/O：使用异步编程模式例如asyncio，允许程序在等待I/O操作完成时继续执行其他任务，从而提高CPU利用率。缓冲：使用缓冲区暂存数据，减少I/O操作的频率。并行处理：并行执行多个I/O操作，以提高整体的数据处理速度。优化数据结构：选择合适的数据结构，减少数据的读取和写入次数。二、使用生成器生成列表、字典在Python 2.7及其后续版本中，引入了对列表、字典和集合生成器的改进，这些改进让数据结构的构建过程更加简明和高效。1、传统方法def fun1(): list=[] for i in range(100): list.append(i) if __name__ == '__main__': start_time = time.perf_counter() t = timeit.Timer(setup='from __main__ import fun1', stmt='fun1()') t.timeit() end_time = time.perf_counter() run_time = end_time - start_time print(f"程序运行时间：{run_time} 秒") #…

2026最新ubuntu镜像地址，ubuntu镜像下载
type: item
date: 2026-03-29T15:08:52+08:00
description: 软件源镜像地址（用于 /etc/apt/sources.list）镜像站软件源地址阿里云http://mirrors.aliyun.com/ubuntu/清华大学https://mirrors.tuna.tsinghua.edu.cn/ubuntu/中科大https://mirrors.ustc.edu.cn/ubuntu/网易http://mirrors.163.com/ubuntu/华为云https://mirrors.huaweicloud.com/ubuntu/腾讯云https://mirrors.cloud.tencent.com/ubuntu/搜狐http://mirrors.sohu.com/ubuntu/南京大学https://mirrors.nju.edu.cn/ubuntu/上海交通大学https://mirrors.sjtug.sjtu.edu.cn/ubuntu/浙江大学http://mirrors.zju.edu.cn/ubuntu/重庆大学http://mirrors.cqu.edu.cn/ubuntu/兰州大学http://mirror.lzu.edu.cn/ubuntu/哈尔滨工业大学https://mirrors.hit.edu.cn/ubuntu/北京外国语大学https://mirrors.bfsu.edu.cn/ubuntu/中国科学技术大学https://mirrors.ustc.edu.cn/ubuntu/ （同上）清华大学开源软件镜像站https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ （同上）Ubuntu ISO 镜像下载地址镜像站ISO 目录地址阿里云https://mirrors.aliyun.com/ubuntu-releases/清华大学https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/中科大https://mirrors.ustc.edu.cn/ubuntu-releases/网易http://mirrors.163.com/ubuntu-releases/华为云https://mirrors.huaweicloud.com/ubuntu-releases/腾讯云https://mirrors.cloud.tencent.com/ubuntu-releases/南京大学https://mirrors.nju.edu.cn/ubuntu-releases/上海交通大学https://mirrors.sjtug.sjtu.edu.cn/ubuntu-releases/浙江大学http://mirrors.zju.edu.cn/ubuntu-releases/重庆大学http://mirrors.cqu.edu.cn/ubuntu-releases/兰州大学http://mirror.lzu.edu.cn/ubuntu-releases/哈尔滨工业大学https://mirrors.hit.edu.cn/ubuntu-releases/北京外国语大学https://mirrors.bfsu.edu.cn/ubuntu-releases/3. 其他说明软件源 地址通常直接写入 /etc/apt/sources.list，替换 archive.ubuntu.com 或 ports.ubuntu.com。ISO 镜像 地址可直接在浏览器中访问，选择需要的版本（如 22.04/、24.04/）下载。部分镜像站（如清华、中科大、阿里云）同时提供 arm64/ppc64el 等架构的软件源，适合树莓派等设备。如果您的网络在教育网内，推荐使用教育网镜像（如清华、中科大、上海交大等），速度更快。如需特定版本或架构的源配置，可参考各镜像站的官方帮助页面。

kali Linux Shell编程：基础到进阶
type: item
date: 2025-05-18T18:34:36+08:00
description: kali Linux Shell编程：基础到进阶在Linux系统中，shell编程是一项基本技能，它不仅能够提高系统操作效率，还能让你更好地理解和掌控Linux。本文将带领你从shell编程的基础入门，逐步进阶到复杂应用，通过改写和扩展原有内容，使内容更加丰富且保持低重复率。一、Shell编程基础1. Shell简介Shell是一种命令行界面，用于用户与操作系统进行交互。它也是一种脚本语言，允许用户编写程序自动执行一系列命令。Linux系统中常见的Shell类型包括bash、zsh、csh等，其中bash是最常用的Shell之一。代码示例：#!/bin/bash echo "Hello, Shell World!"以上脚本使用bash Shell，打印“Hello, Shell World!”。2. 创建和执行Shell脚本创建Shell脚本的第一步是创建一个文本文件，并写入Shell命令。然后，你需要给这个文件添加执行权限，最后通过终端执行它。示例步骤：使用文本编辑器（如vim或nano）创建脚本文件，例如hello.sh。在文件中写入以下内容：#!/bin/bash # A simple hello world script echo "Hello, World from a Shell Script!"保存并退出编辑器。给脚本文件添加执行权限：chmod +x hello.sh。执行脚本：./hello.sh。3. Shell脚本的基本语法Shell脚本的基本语法包括变量定义、条件语句、循环语句等。变量定义与使用：#!/bin/bash # Define a variable name="John Doe" # Use the variable echo "Hello, $name!"条件语句：Shell脚本中的条件语句主要有if、elif、else。#!/bin/bash # Check the number of arguments if [ $# -eq 0 ]; then echo "No arguments provided." elif [ $# -eq 1 ]; then echo "One argument provided: $1" else echo "Multiple arguments provided." fi4. Shell中的循环Shell支持多种循环，包括for循环和while循环。For循环：#!/bin/bash # Loop through numbers 1 to 5 for i in {1..5}; do echo "Number $i" doneWhile循环：#!/bin/bash counter=1 while [ $counter -le 5 ]; do echo "Number $counter" ((counter++)) done二、Shell编程进阶1. 函数定义与调用在Shell脚本中，函数允许你将代码块封装起来，以便在脚本中重复使用。#!/bin/bash # Define a function greet() { echo "Hello, $1!" } # Call the function greet "Alice" greet "Bob"2. 数组的使用Shell脚本支持一维数组，可以通过索引来访问数组元素。#!/bin/bash # Declare an array fruits=("Apple" "Banana" "Cherry") # Iterate through the array for fruit in "${fruits[@]}"; do echo "$fruit" done3. 正则表达式与文本处理Shell脚本中可以使用正则表达式来匹配文本字符串。grep命令是处理文本和正则表达式的好帮手。#!/bin/bash # Use grep to find lines containing 'error' grep "error" log.txt使用awk和sed工具可以进行更复杂的文本处理。使用awk处理文本：#!/bin/bash # Print the first and third fields of each line in a file awk '{print $1, $3}' file.txt4. 读取用户输入Shell脚本可以读取用户输入，用于交互式操作。#!/bin/bash # Read user input echo "Enter your name: " read name echo "Hello, $name!"5. 文件与目录操作Shell脚本提供了丰富的命令来操作文件和目录，如ls、cp、mv、rm等。列出当前…

从0-1讲解RCE漏洞绕过，Windows与LinuxRCE漏洞绕过实战解析
type: item
date: 2025-05-18T18:32:25+08:00
description: 从0-1讲解RCE漏洞绕过，Windows与Linux/RCE漏洞绕过方式总结----实战解析前言本文讲解了Windows/Linux的常见命令以及命令执行漏洞的绕过方式，靶场环境为CTFhub，分别有命令注入、cat过滤、空格过滤、过滤目录分隔符、运算符过滤，这几种绕过方式Windows我们在Windows命令行中执行命令的时候，是不区分大小写的C:\>WHOAMI yv\administrator 在命令行中可以有无数个"C:\>wh""""oami yv\administrator C:\>wh""""""""""""""""""""""""""""""oami yv\administrator 不能有两个连续的^C:\>whoa^mi yv\administrator C:\>whoam^^i 'whoam^i' 不是内部或外部命令，也不是可运行的程序 或批处理文件。 C:\>who^a^m^i yv\administrator 在命令中如果 " 在^之前，此时"的数量必须为偶数C:\>who""a^mi yv\administrator C:\>who"a^mi 'who"a^mi' 不是内部或外部命令，也不是可运行的程序 或批处理文件。 在命令中"在^之后，且带有参数，则”也需要带有偶数C:\>n^et" user 'net" user' 不是内部或外部命令，也不是可运行的程序 或批处理文件。 C:\>n^et"" user \\YV 的用户帐户 ------------------------------------------------------------------------------- Administrator DefaultAccount Guest mysql WDAGUtilityAccount www 命令成功完成。 也可以使用()对命令进行包裹C:\>(whoami) yv\administrator C:\>(n^et"" user) \\YV 的用户帐户 ------------------------------------------------------------------------------- Administrator DefaultAccount Guest mysql WDAGUtilityAccount www 命令成功完成。 ()的数量不设上限C:\>(((whoami))) yv\administrator 使用变量简单拼接%%局部分开每个变量C:\>set cmd1=who C:\>set cmd2=am C:\>set cmd3=i C:\>%cmd1%%cmd2%%cmd3% yv\administrator 变量拼接方式二C:\>set cmd1=who C:\>set cmd3=i C:\>%cmd1%am%cmd3% yv\administrator 变量拼接方式三C:\>set cmd1=wh"""o C:\>set cmd3=i""" C:\>%cmd1%am%cmd3% yv\administrator 变量拼接方式四 ^C:\>set cmd1=wh""""o # 这里需要偶数，因为在变量拼接结果中有 ^ C:\>set cmd3=i""" # 后面正常多少个 " 都行 C:\>%cmd1%a^m%cmd3% yv\administrator 含有参数的命令，net userC:\>set cmd1=s""er C:\>set cmd2=t u C:\>set cmd3=n^e C:\>%cmd3%%cmd2%%cmd1% \\YV 的用户帐户 ------------------------------------------------------------------------------- Administrator DefaultAccount Guest mysql WDAGUtilityAccount www 命令成功完成。 一次性执行多条命令C:\>cmd /C "set cmd1=s""ser && set cmd2=t u && set cmd3=n^e && %cmd3%%cmd2%%cmd1%" \\YV 的用户帐户 ------------------------------------------------------------------------------- Administrator DefaultAccount Guest mysql WDAGUtilityAccount www 命令成功完成。 Windows环境变量切分先设置一个变量C:\>set cmd=whoami C:\>%c…

PHP反序列化漏洞从入门到深入8k图文介绍，以及phar伪协议的利用
type: item
date: 2025-05-18T18:32:24+08:00
description: 前言本文内容主要分为三个部分：原理详解、漏洞练习和防御方法。这是一篇针对PHP反序列化入门者的手把手教学文章，特别适合刚接触PHP反序列化的师傅们。本文的特色在于对PHP反序列化原理进行了深入细致的分析，并提供了一系列由简入深的PHP反序列化习题，配以详细的练习和分析讲解。序列化介绍序列化是指将变量转换为一种可保存或传输的字符串形式的过程；而反序列化则是在需要的时候，将这个字符串重新转换回原来的变量形式以供使用。这两个过程相辅相成，为数据的存储和传输提供了极大的便利，同时也使得程序更加易于维护和扩展。例子将一大段对象序列化压缩成字符串.然后根据要求反序列化重新构造对象.(②是序列化的格式,下文详解)class Person { public $name; //public 修饰的这个成员在任何地方都可以使用 private $age; //private 修饰的成员只能被 其所在类 的其他成员访问 protected $sex; //protected 修饰的类成员 所在类的子类以及同一个包内的其他类 访问 function sayName() { echo $this->name; } function sayAge() { echo $this->age; } function saySex() { echo $this->sex; } function __construct($name, $age,$sex) { $this->name = $name; $this->age = $age; $this->sex = $sex;//protected修饰的sex } } $person=new Person('张三',20,'boy'); $person->sayName();//张三 $person->sayAge();//20 $person->saySex();//boy echo ' '; // 序列化：serialize将php的遍历变量（数组、对象等）转化成一个 可以存储或传输的字符串 表示的函数。即---对象压缩成字符串 echo serialize($person);//O:6:"Person":3:{s:4:"name";s:6:"张三";s:11:"Personage";i:20;s:6:"*sex";s:3:"boy";} echo " "; // 因为我们需要使用url进行测试，所以将这个转化后的字符串进行url编码，便于之后进行反序列化测试 echo urlencode(serialize($person));//O%3A6%3A%22Person%22%3A3%3A%7Bs%3A4%3A%22name%22%3Bs%3A6%3A%22%E5%BC%A0%E4%B8%89%22%3Bs%3A11%3A%22%00Person%00age%22%3Bi%3A20%3Bs%3A6%3A%22%00%2A%00sex%22%3Bs%3A3%3A%22boy%22%3B%7D get.php进行反序列化，将上面进行url编码的内容传到这个php，进行反序列化（将字符串还原成对象）<?php $html =unserialize($_GET['html']); echo $html; 在上面的代码中我们可以看到序列化之后的内容为，将其进行分段详细解析O:6:"Person":3:{s:4:"name";s:6:"张三";s:11:"Personage";i:20;s:6:"*sex";s:3:"boy";} O : 自定义对象 object 6 : 类名的长度 :3 : 3个成员属性 s:4 : 你的成员属性名 长度为4 ,并且是一个字符串 string s:3 : 刚刚那个成员属性对应的值 是string类型,并且长度是3位 s:11:"Personage" : 因为该属性是私有属性,所以需要在属性名前加上类名,方便我们进行反序列化的时候的识别. i:20 : 20是age的属性值 , i是代表 integer类型 s:6:"*sex"; sex这个属性是一个受保护的属性,特征就是 * 号 s:3:"boy : 代表 string类型,属性值长度为3位 boy对应是 sex的属性值 private和 protected详解//protected举例 class Animal { protected $name; //构造函数，即当你创建一个新对象时，这个方法会自动被调用，用于被初始化对象。 //构造函数可以接收参数，这些参数可以用来设置对象的初始状态。 public function __construct($name) { $this->name = $name; } protected funct…

phpStudy 小皮 Windows面板 存在RCE漏洞（nday）
type: item
date: 2025-05-18T18:32:24+08:00
description: https://mp.weixin.qq.com/s/VcD3Gb8oTk0d5bW72e0P-A

安全狗waf绕过-sql注入
type: item
date: 2025-05-18T18:32:24+08:00
description: 安全狗WAF绕过系列一、WAF概述WAF（Web应用防火墙）作为一种专为Web应用程序设计的安全防护工具，其核心功能在于通过实施一系列针对HTTP/HTTPS协议的安全策略，来增强Web应用的安全性。WAF内置了精心设计的检测逻辑与规则集，这些规则旨在对每一个进入系统的请求内容进行细致审查，并对任何违反安全策略的请求采取即时且有效的防御措施，从而维护Web应用环境的纯净与安全。二、WAF工作机制详解WAF的工作流程精心构建，涵盖四个关键环节：预处理、规则匹配、响应处理以及日志记录，共同编织成一张紧密的安全防护网。 预处理阶段：此阶段，WAF首先担任起“守门人”的角色，对所有进入的数据请求流量进行初步筛选，确认其是否遵循HTTP/HTTPS协议标准。紧接着，WAF会利用预设的白名单机制，快速识别并放行那些已知安全或信任的URL请求，直接引导它们进入后端Web服务器进行处理。对于未能通过白名单验证的请求，WAF则进一步深入，对其数据包进行精细解析，为后续的安全检测做准备。 规则匹配阶段：此为核心环节，WAF利用其内置的强大规则引擎，对经过解析的数据包进行深度扫描与匹配。这些规则覆盖了广泛的攻击场景与模式，包括但不限于SQL注入、跨站脚本（XSS）、命令注入等常见Web安全威胁。通过这一过程，WAF能够精准识别出潜在的恶意请求，为后续的安全响应奠定坚实基础。 响应处理阶段：基于规则匹配的结果，WAF的响应处理模块将采取针对性的防御措施。对于符合安全规则的请求，WAF会毫无阻碍地将其转发至后端Web服务器，确保用户请求得到及时响应。而对于那些被判定为恶意或异常的请求，WAF则展现出其防御实力，通过阻断请求、记录日志或触发告警等多种方式，有效遏制潜在的安全风险，保护Web应用免受侵害。 三、常见的WAF绕过姿势常见的WAF（Web应用防火墙）绕过姿势包括但不限于以下几种： 提交方式变换：许多WAF默认配置下主要对GET请求进行过滤，而忽略POST请求、Cookie、HTTP头等其他提交方式。因此，可以尝试将攻击载荷通过不同的提交方式进行发送，以绕过WAF的检测。 大小写替换和编码绕过：利用WAF规则可能不区分大小写或无法完全解析编码后的攻击载荷，通过将攻击语句中的关键字进行大小写替换或使用URL编码、Base64编码等方式进行编码，以绕过WAF的过滤规则。 事件函数变换：WAF会重点识别触发JavaScript代码执行的事件函数字段，如onclick。通过变换事件函数名称或利用其他不常见的事件函数，可以尝试绕过WAF的识别。 注释符和内联注释：使用SQL注释符（如--、#）或HTML/JavaScript注释（如 、//）来绕过WAF对特定关键字的过滤。有时，将攻击载荷与注释符结合使用，可以欺骗WAF使其忽略部分攻击载荷。 分片传输：通过调整HTTP请求中的Content-Length头部，将攻击载荷分成多个部分发送，可能导致WAF无法完整解析请求内容，从而绕过检测。 利用WAF软肋：WAF在部署时可能因性能考虑而留下一些软肋，如对某些特殊字符或组合的检测不够严格。通过分析和测试WAF的行为，可能发现并利用这些软肋进行绕过。 爬虫白名单绕过：部分WAF提供爬虫白名单功能，通过伪装成爬虫（修改User-Agent或模拟爬虫行为）可能绕过WAF的检测。 高并发流量攻击：通过发送大量垃圾数据或高并发请求，使WAF设备进入Bypass IPS模式或达到性能极限，从而暂时或永久性地绕过WAF的防护。 请注意，上述绕过姿势仅供安全研究和教育目的使用。未经授权的渗透测试和网络攻击是非法行为，可能会对个人和组织造成严重的法律后果。在进行任何渗透测试之前，请确保已获得合法授权。四、安全狗绕过姿势环境：phpstudy—apache2.4.39安全狗官网v4.0下载（应该是最新版）：https://www.safedog.cn/website_safedog.html当然如果需要套件，我都给你准备好了关注后台回复【安全狗】即可获取，感谢宝子们一直以来的关注在开始之前，如果没有SQL注入基础的的童鞋，还请观看我的另外一篇文章，1w字超详细解析。以下内容皆使用sqli第一关进行测试测试 id=1' and 1=1http://192.168.209.131/Less-1/?id=-1' and 1=1在之前的尝试中，我们发现直接使用“and 1=1”这种方法似乎并不奏效，这很可能是因为安全狗系统识别并过滤了“and”这个词。为了更深入地了解安全狗是如何识别并拦截这类操作的，我们可以尝试将“and 1=1”进行拆分http://192.168.10.129:8080/sqli/Less-1/?id=1' and --+ http://192.168.10.129…

ftp匿名登录
type: item
date: 2025-05-18T18:29:02+08:00
description: FTP协议-匿名用户登录前言日常大家可能接触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服务搭建-vsftpdvsftpd默认以匿名用户访问，不修改配置文件的话本身就存在匿名用户登录漏洞。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。