这是「CYLOG 安全攻防」系列的第十三篇。上一篇我们聊了文件上传漏洞——一张「图」,变成服务器后门。这个系列会用真实场景讲透基础安全攻防,兼顾原理与实操。
⚖️ 法律与风险边界
免责声明:本文所有内容仅用于合法安全研究与技术学习,禁止对任何未授权目标进行扫描与攻击。未经授权的网络探测与攻击属于违法行为,后果自负。
接了个新客户的活,做上线前安全巡检。第一件事不是装扫描器,是先问了一句话:你们的公网 IP 有哪些?对方甩过来一个网段,我扫了一遍,半小时后电话打回去:你们有个 Redis 挂在公网上,没设密码,数据已经裸奔了。
那边安静了三秒,然后问我:你怎么知道的?我说:我没黑进去,我只是敲门——挨个端口敲了一遍,发现门没锁。
—— 网络安全 · 黑客日常 · CYLOG 端口扫描入门 一张网卡,看穿你的暴露面 这是「CYLOG 安全攻防」系列的第三篇
端口扫描:敲门听声的艺术
端口 = 服务器上「门」的编号。服务在端口上监听(22 是 SSH,80 是 HTTP,3306 是 MySQL),攻击者扫描就是在「敲门听声」:门开着(端口开放)→ 里面是什么服务(版本识别)→ 有没有已知漏洞(对照 CVE)。三步走完,攻击面就画出来了。
2026 年 7 月网络测绘平台 Censys 报告:全球仍有 900 多万台设备把管理端口(22/3389/8080)暴露在公网。攻击者不需要「黑进」你的网络——他只需要在公网扫到你。
下面我们来做一下预演
原理前置:nmap 是怎么知道端口开着的
TCP 连接有个三次握手:客户端发 SYN(在吗?)→ 服务器回 SYN+ACK(在,能连)→ 客户端回 ACK(好,连上了)。
nmap 的 SYN 扫描(半开扫描)耍了个聪明:只发第一步 SYN,收到 SYN+ACK 就判断「端口开放」,然后直接发 RST 断开——不完成握手。优势是扫描速度快、不会在目标应用层留下完整连接记录;但网络层的 SYN 报文仍可被防火墙、入侵检测系统捕获,并非严格意义上的隐蔽扫描。
还有一点新手容易踩坑:在 root 权限下,-sS(SYN 半开扫描)是 nmap 的默认扫描方式;普通用户权限下默认使用全连接扫描 -sT。权限不同,默认行为不同。
除了 SYN 扫描,常见的扫描类型还有:全连接扫描(-sT,完成完整三次握手,结果最准确但速度慢、易留日志);UDP 扫描(-sU,扫 DNS、SNMP 等 UDP 服务,速度慢但极易被忽略,常成为高危入口);隐蔽扫描类(FIN/Null/Xmas,利用 TCP 协议规则绕过部分防火墙检测,适合有基础防护的目标)。
好,原理懂了,继续
环境准备:先做对,再动手
🖥️ 环境准备
攻击机:Kali Linux 2026.x(nmap 7.95 / rustscan 2.x) 靶机:Metasploitable 2(自带大量漏洞服务的练习靶机,本地 VM) 网络:Host-Only 模式 动手前先确认:kali@attack:~$ nmap --version
$ bash ⧉ 一键复制
# 攻击机装 rustscan(如未安装)
kali@attack:~$ sudo apt install -y rustscan
# 确认靶机可达
kali@attack:~$ ping -c 2 192.168.56.20
# 期望输出:2 packets transmitted, 2 received
⚠️ 错误预演(翻车现场)
ping 不通?①靶机没开机或网络模式不是 Host-Only/桥接;②防火墙拦了 ICMP——换 nmap -sn 192.168.56.0/24 试主机发现;③VM 网络没起,重启靶机网卡。
实操复现:从全端口到漏洞线索
⚖️ 法律与风险边界
安全提示:以下演示仅在你自己搭建的靶机(如 Metasploitable 2)上执行,请勿对任何未经授权的真实网络/服务器进行扫描。
正式扫端口前,先做主机存活探测,快速定位网段内的开机设备——这是渗透测试的标准流程:
$ bash ⧉ 一键复制
# 仅探测主机存活,不扫描端口
kali@attack:~$ nmap -sn 192.168.56.0/24
# 期望输出(节选):
# Nmap scan report for 192.168.56.20
# Host is up (0.0012s latency)
-sn 只发探测包判断「哪些机器开着」,不扫端口,速度快、动静小。定位到存活主机后,再进入端口扫描。
$ bash ⧉ 一键复制
# 第一步:全端口快速发现(-p- 扫全部 65535 个可用端口,1-65535;0 为保留端口)
kali@attack:~$ nmap -p- --min-rate 2000 192.168.56.20
# -p- 表示 1-65535 全端口;--min-rate 控制最小发包速率
# 期望输出(节选):
# PORT STATE SERVICE
# 21/tcp open ftp
# 22/tcp open ssh
# 80/tcp open http
# 3306/tcp open mysql
解读:21(FTP)、22(SSH)、80(HTTP)、3306(MySQL)——四个端口四种服务,每一个都是潜在入口。风险速览:
· 21/tcp FTP:若支持匿名登录,可直接读取、上传服务器文件;
· 22/tcp SSH:远程管理端口,存在弱口令即可被暴力破解登录;
· 80/tcp HTTP:Web 服务入口,可进一步测试 XSS、SQL 注入等 Web 漏洞;
· 3306/tcp MySQL:数据库端口,空密码/弱口令可直接拖走全部数据。
⚠️ 错误预演(翻车现场)
全端口扫描慢?①--min-rate 2000 提高发包速率(内网测试可用,公网别乱开);②只扫常见端口 nmap -F(Fast 模式 100 个常用端口);③不要对未经授权的目标扫描——见文末法律边界。
$ bash ⧉ 一键复制
# 第二步:服务版本识别(关键一步——版本号直接对应漏洞库)
kali@attack:~$ nmap -sV -sC 192.168.56.20
# 期望输出(节选):
# 21/tcp open ftp vsftpd 2.3.4
# |_ftp-anon: Anonymous FTP login allowed (FTP code 230)
# 22/tcp open ssh OpenSSH 5.1p1 Debian 6
# 80/tcp open http Apache httpd 2.2.8
# vsftpd 2.3.4 对应 CVE-2011-2523(后门漏洞)——漏洞库直接命中
看到 vsftpd 2.3.4 + Anonymous FTP login allowed:攻击者已经拿到两个路径——①FTP 匿名登录(无密码进文件系统);②vsftpd 后门 CVE-2011-2523(可直接弹 shell)。
✅ 成功预演 · 结果解读
能力边界说明:-sC 会执行默认类别的 NSE 脚本,完成基础服务信息探测;它不一定覆盖特定漏洞检测。针对 vsftpd 后门这种具体漏洞,需用 --script 指定对应脚本:nmap --script ftp-vsftpd-backdoor -p 21 目标IP。
🛡️ 防御清单
💡 新手常见踩坑: ① 虚拟机环境扫不通:优先检查两台机器网络模式是否一致(同 Host-Only/同桥接)、目标防火墙是否拦截; ② 扫描结果全为 filtered:大概率是目标防火墙拦截了报文,可尝试降低扫描速率、切换扫描方式; ③ 公网扫描被封 IP:禁止对公网未授权目标扫描,自有资产扫描也建议降低速率,避免被运营商或云厂商拦截。
预演之后,我们需要知道的事
工具对比:nmap vs rustscan【技术的迭代】
维度
nmap
rustscan
开发语言
C
Rust
全端口速度
中等(顺序扫描)
极快(并行分批)
核心定位
功能全面,自带 400+ NSE 脚本,支持版本/漏洞检测
专注端口发现,快而精简
实战用法
端口发现 + 深度检测一站式完成
先快速发现开放端口,再转交 nmap 深度检测
适用场景
渗透测试事实标准
中少量目标快速全端口扫描首选
$ bash ⧉ 一键复制
# rustscan 实战:先快扫全端口,再交给 nmap 细查
kali@attack:~$ rustscan -a 192.168.56.20 --range 1-65535 -- -sV
# 第一段参数给 rustscan,-- 之后给 nmap(rustscan 把发现的开放端口传给 nmap)
# 期望输出:Open 21,22,80,3306 → 自动调 nmap -sV 细查
防御落地:先于攻击者看清自己
🛡️ 防御清单
🛡️ ① 收敛暴露面:管理端口(22/3389/8080)只对白名单 IP 开放,用防火墙/安全组限制——性价比最高的一步。 🛡️ ② 公网自查:每月用 nmap + Shodan/Censys 查自己公网资产,删掉无用开放端口。 🛡️ ③ 服务更新:扫描出的服务版本对照 CVE 库,高危立即升级——vsftpd 2.3.4 这种古董不该存在于 2026 年。 🛡️ ④ 堡垒机/端口敲门:SSH 走堡垒机,公网不可见。端口敲门(Port Knocking):通过依次访问一组指定的闭合端口,触发防火墙自动开放管理端口,公网常态下端口处于关闭状态,属于进阶隐匿防护方案。
$ bash ⧉ 一键复制
# 自查:自己扫自己的公网 IP(先确认是你自己的资产!)
kali@attack:~$ nmap -sV 你的公网IP
# 查本机开放了哪些端口在监听:
kali@attack:~$ sudo ss -tlnp | head -20
# 期望输出:本地所有 LISTEN 状态的端口和进程
# 防火墙白名单示例(ufw):
# sudo ufw allow from 你的办公IP to any port 22 proto tcp
ss -tlnp 会列出本机所有监听端口——你会发现有些服务(比如某个测试用的 MySQL)你自己都忘了它还开着。这些「忘了关的门」,就是攻击者最喜欢的入口。
做安全巡检这么多年,见过最多的漏洞从来不是什么 0day,而是「忘了关的端口」「没设密码的服务」。攻击技巧再花哨,防守侧只要把暴露面收干净,就能挡住 90% 的自动化攻击。
最后:让我们回到那个 Redis
那个客户的 Redis 后来怎么处理的?关公网、设密码、绑内网、数据备份。巡检报告里我写了一句:不是攻击者太强,是门一直没锁。
扫描不产生破坏,但它画出了你的暴露面。先于攻击者看清自己,是防御的第一步。
上一篇聊了文件上传漏洞,下一篇我们聊 SSL 剥离:不破解加密,骗你放弃加密。
⚖️ 法律与风险边界
法律与风险边界:未经授权对他人网络/服务器进行端口扫描,违反《网络安全法》第二十七条;若扫描后进一步实施侵入、获取数据、破坏系统等行为,将涉嫌《刑法》第 285 条、第 286 条相关罪名,面临刑事处罚。所有测试仅限自有资产、企业授权范围或合规 SRC 平台。公网测绘数据(Shodan 等)属于第三方平台,仅用于了解自身暴露面。
— · END · —
🔐 本日志仅用于网络安全教学 · 请勿用于非法用途
虚构日记 · 时间地点人物均已虚拟化 · 防御永远比攻击更有价值