用户与权限枚举脚本

在渗透测试中,权限枚举是提权前的关键步骤。通过系统地枚举用户、权限配置和潜在的提权路径,可以发现系统中的安全弱点。


/etc/passwd解析

基础用户枚举

#!/bin/bash
# enum_users.sh - 用户枚举脚本
 
echo "[+] 枚举系统用户..."
 
# 获取所有用户
echo "[+] 所有用户:"
cat /etc/passwd | cut -d: -f1
 
# 获取可登录用户
echo "[+] 可登录用户:"
grep -v "nologin\|false\|sync\|halt\|shutdown" /etc/passwd | cut -d: -f1
 
# 获取UID为0的用户(root权限)
echo "[+] UID为0的用户:"
awk -F: '$3 == 0 {print $1}' /etc/passwd
 
# 获取有bash shell的用户
echo "[+] 有bash shell的用户:"
grep "bash\|sh$" /etc/passwd | cut -d: -f1
 
# 获取最近登录的用户
echo "[+] 最近登录的用户:"
lastlog | grep -v "Never" | awk '{print $1}'

用户属性分析

#!/bin/bash
# enum_user_props.sh - 用户属性分析
 
echo "[+] 分析用户属性..."
 
for user in $(cut -d: -f1 /etc/passwd); do
    echo "=== $user ==="
    echo "  UID: $(id -u $user 2>/dev/null)"
    echo "  GID: $(id -g $user 2>/dev/null)"
    echo "  Groups: $(id -Gn $user 2>/dev/null)"
    echo "  Home: $(eval echo ~$user 2>/dev/null)"
    echo "  Shell: $(grep "^$user:" /etc/passwd | cut -d: -f7)"
done

用户配置文件分析

#!/bin/bash
# enum_user_configs.sh - 用户配置文件分析
 
echo "[+] 分析用户配置文件..."
 
for user_home in /home/*; do
    user=$(basename $user_home)
    echo "=== $user ==="
    if [ -f "$user_home/.bashrc" ]; then
        echo "  .bashrc: $(wc -l < $user_home/.bashrc) 行"
    fi
    if [ -f "$user_home/.bash_history" ]; then
        echo "  .bash_history: $(wc -l < $user_home/.bash_history) 行"
    fi
    if [ -d "$user_home/.ssh" ]; then
        echo "  SSH密钥: $(ls $user_home/.ssh/ 2>/dev/null | wc -l) 个"
    fi
done

sudo -l权限枚举

基础sudo枚举

#!/bin/bash
# enum_sudo.sh - sudo权限枚举
 
echo "[+] 枚举sudo权限..."
echo "[+] 当前用户sudo权限:"
sudo -l 2>/dev/null
 
echo "[+] 所有用户的sudo权限:"
for user in $(cut -d: -f1 /etc/passwd); do
    sudo_info=$(sudo -l -U $user 2>/dev/null)
    if [ $? -eq 0 ]; then
        echo "=== $user ==="
        echo "$sudo_info"
    fi
done

sudo配置分析

#!/bin/bash
# enum_sudo_config.sh - sudo配置分析
 
echo "[+] 分析sudo配置..."
echo "[+] sudoers文件内容:"
cat /etc/sudoers 2>/dev/null
 
echo "[+] sudoers.d目录:"
ls -la /etc/sudoers.d/ 2>/dev/null
cat /etc/sudoers.d/* 2>/dev/null
 
echo "[+] sudo日志:"
grep "sudo" /var/log/auth.log 2>/dev/null | tail -20
grep "sudo" /var/log/secure 2>/dev/null | tail -20

sudo提权路径分析

#!/bin/bash
# enum_sudo_escalation.sh - sudo提权路径分析
 
echo "[+] 分析sudo提权路径..."
 
ESCALATION_CMDS="vim vi nano find locate nmap less more man awk perl python ruby php bash sh ftp env git svn wget curl ssh-keygen tcpdump apt yum systemctl mount dd tar docker lxc"
 
for cmd in $ESCALATION_CMDS; do
    if sudo -l 2>/dev/null | grep -q "$cmd"; then
        echo "[!] 发现可提权命令: $cmd"
    fi
done

SUID/SGID文件枚举

基础SUID枚举

#!/bin/bash
# enum_suid.sh - SUID文件枚举
 
echo "[+] 枚举SUID文件..."
echo "[+] SUID文件:"
find / -perm -4000 -type f 2>/dev/null
 
echo "[+] SGID文件:"
find / -perm -2000 -type f 2>/dev/null
 
echo "[+] SUID+SGID文件:"
find / -perm -6000 -type f 2>/dev/null

可利用的SUID文件

#!/bin/bash
# enum_suid_exploitable.sh - 可利用的SUID文件
 
echo "[+] 检查可利用的SUID文件..."
 
EXPLOITABLE="/bin/bash /bin/sh /bin/dash /usr/bin/find /usr/bin/vim /usr/bin/vi /usr/bin/nmap /usr/bin/less /usr/bin/more /usr/bin/nano /usr/bin/cp /usr/bin/awk /usr/bin/perl /usr/bin/python /usr/bin/ruby /usr/bin/env /usr/bin/ftp /usr/bin/telnet /usr/bin/strace /usr/bin/ltrace /usr/bin/gdb /usr/bin/dd /usr/bin/curl /usr/bin/wget /usr/bin/nc /usr/bin/socat"
 
for file in $EXPLOITABLE; do
    if [ -u "$file" ] || [ -g "$file" ]; then
        echo "[!] 发现可利用的SUID文件: $file"
        ls -la $file
    fi
done

SUID配置分析

#!/bin/bash
# enum_suid_config.sh - SUID配置分析
 
echo "[+] 分析SUID配置..."
echo "[+] SUID文件详细信息:"
find / -perm -4000 -type f -exec ls -la {} \; 2>/dev/null
 
echo "[+] SUID文件所有者分析:"
find / -perm -4000 -type f -exec stat -c "%U:%G %n" {} \; 2>/dev/null
 
echo "[+] 最近修改的SUID文件:"
find / -perm -4000 -type f -mtime -30 -exec ls -la {} \; 2>/dev/null

可写目录枚举

基础可写目录枚举

#!/bin/bash
# enum_writable.sh - 可写目录枚举
 
echo "[+] 枚举可写目录..."
echo "[+] 当前用户可写的目录:"
find / -writable -type d 2>/dev/null | head -20
 
echo "[+] 所有用户可写的目录:"
find / -perm -o+w -type d 2>/dev/null | head -20
 
echo "[+] 全局可写的目录:"
find / -perm -002 -type d 2>/dev/null | head -20

可写文件枚举

#!/bin/bash
# enum_writable_files.sh - 可写文件枚举
 
echo "[+] 枚举可写文件..."
echo "[+] 当前用户可写的文件:"
find / -writable -type f 2>/dev/null | head -20
 
echo "[+] 所有用户可写的文件:"
find / -perm -o+w -type f 2>/dev/null | head -20
 
echo "[+] 可写的配置文件:"
find /etc -writable -type f 2>/dev/null

目录权限分析

#!/bin/bash
# enum_dir_perms.sh - 目录权限分析
 
echo "[+] 分析目录权限..."
 
DIRS="/ /etc /tmp /var/tmp /home /root /opt /usr/local /usr/bin /usr/sbin /bin /sbin"
 
for dir in $DIRS; do
    if [ -d "$dir" ]; then
        perms=$(stat -c "%a %U %G" "$dir" 2>/dev/null)
        echo "$dir: $perms"
    fi
done

cron任务枚举

基础cron枚举

#!/bin/bash
# enum_cron.sh - cron任务枚举
 
echo "[+] 枚举cron任务..."
 
# 系统cron任务
echo "[+] 系统cron任务:"
cat /etc/crontab 2>/dev/null
 
# cron.d目录
echo "[+] cron.d目录:"
ls -la /etc/cron.d/ 2>/dev/null
cat /etc/cron.d/* 2>/dev/null
 
# 用户cron任务
echo "[+] 用户cron任务:"
for user in $(cut -d: -f1 /etc/passwd); do
    crontab -u $user -l 2>/dev/null | grep -v "^#"
done
 
# cron目录
echo "[+] cron目录:"
ls -la /etc/cron.hourly/ 2>/dev/null
ls -la /etc/cron.daily/ 2>/dev/null
ls -la /etc/cron.weekly/ 2>/dev/null
ls -la /etc/cron.monthly/ 2>/dev/null

cron可写性分析

#!/bin/bash
# enum_cron_writable.sh - cron可写性分析
 
echo "[+] 分析cron可写性..."
 
# 检查cron脚本是否可写
for cron_dir in /etc/cron.d /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly; do
    if [ -d "$cron_dir" ]; then
        echo "=== $cron_dir ==="
        find $cron_dir -writable -type f 2>/dev/null
    fi
done
 
# 检查cron脚本引用的文件
echo "[+] 检查cron引用的文件:"
grep -rh "^\S" /etc/cron* 2>/dev/null | awk '{print $NF}' | while read file; do
    if [ -f "$file" ] && [ -w "$file" ]; then
        echo "[!] 可写的cron引用文件: $file"
    fi
done

内核版本与漏洞检测

内核版本信息

#!/bin/bash
# enum_kernel.sh - 内核版本信息
 
echo "[+] 获取内核信息..."
 
# 内核版本
echo "[+] 内核版本:"
uname -a
 
# 内核编译信息
echo "[+] 内核编译信息:"
cat /proc/version
 
# 内核模块
echo "[+] 已加载的内核模块:"
lsmod 2>/dev/null | head -20
 
# 内核配置
echo "[+] 内核配置:"
cat /boot/config-$(uname -r) 2>/dev/null | grep -i "security" | head -10

内核漏洞检测

#!/bin/bash
# enum_kernel_vulns.sh - 内核漏洞检测
 
echo "[+] 检测内核漏洞..."
 
KERNEL_VERSION=$(uname -r)
echo "[+] 内核版本: $KERNEL_VERSION"
 
# 常见内核漏洞
VULNS=(
    "DirtyCow|CVE-2016-5195|2.6.22 <= 4.8.3"
    "DirtyPipe|CVE-2022-0847|5.8 <= 5.16.11"
    "PwnKit|CVE-2021-4034|所有版本"
    "DirtySock|CVE-2017-6074|所有版本"
    "StackRot|CVE-2023-3269|6.1 <= 6.4"
)
 
for vuln in "${VULNS[@]}"; do
    name=$(echo $vuln | cut -d'|' -f1)
    cve=$(echo $vuln | cut -d'|' -f2)
    versions=$(echo $vuln | cut -d'|' -f3)
    echo "[?] $name ($cve) - 影响版本: $versions"
done

网络配置枚举

网络接口信息

#!/bin/bash
# enum_network.sh - 网络配置枚举
 
echo "[+] 枚举网络配置..."
 
# 网络接口
echo "[+] 网络接口:"
ip addr show 2>/dev/null || ifconfig 2>/dev/null
 
# 路由表
echo "[+] 路由表:"
ip route show 2>/dev/null || route -n 2>/dev/null
 
# ARP表
echo "[+] ARP表:"
arp -a 2>/dev/null || ip neigh show 2>/dev/null
 
# DNS配置
echo "[+] DNS配置:"
cat /etc/resolv.conf 2>/dev/null
 
# hosts文件
echo "[+] hosts文件:"
cat /etc/hosts 2>/dev/null

防火墙规则

#!/bin/bash
# enum_firewall.sh - 防火墙规则枚举
 
echo "[+] 枚举防火墙规则..."
 
# iptables
echo "[+] iptables规则:"
iptables -L -n 2>/dev/null
 
# nftables
echo "[+] nftables规则:"
nft list ruleset 2>/dev/null
 
# firewalld
echo "[+] firewalld规则:"
firewall-cmd --list-all 2>/dev/null
 
# ufw
echo "[+] ufw规则:"
ufw status 2>/dev/null

综合权限枚举脚本

完整枚举脚本

#!/bin/bash
# enum_all.sh - 综合权限枚举脚本
 
REPORT="enum_$(date +%Y%m%d).txt"
 
echo "======================================" > $REPORT
echo "权限枚举报告" >> $REPORT
echo "时间: $(date)" >> $REPORT
echo "======================================" >> $REPORT
 
# 用户枚举
echo -e "\n[用户枚举]" >> $REPORT
echo "UID为0的用户:" >> $REPORT
awk -F: '$3 == 0 {print $1}' /etc/passwd >> $REPORT
echo "可登录用户:" >> $REPORT
grep -v "nologin\|false" /etc/passwd | cut -d: -f1 >> $REPORT
 
# sudo权限
echo -e "\n[sudo权限]" >> $REPORT
sudo -l >> $REPORT 2>/dev/null
 
# SUID文件
echo -e "\n[SUID文件]" >> $REPORT
find / -perm -4000 -type f 2>/dev/null >> $REPORT
 
# 可写目录
echo -e "\n[可写目录]" >> $REPORT
find / -writable -type d 2>/dev/null | head -20 >> $REPORT
 
# cron任务
echo -e "\n[cron任务]" >> $REPORT
cat /etc/crontab >> $REPORT 2>/dev/null
 
# 内核信息
echo -e "\n[内核信息]" >> $REPORT
uname -a >> $REPORT
 
echo "[+] 报告已保存到 $REPORT"

最佳实践

  1. 系统化枚举:按照固定流程进行枚举,确保不遗漏关键信息
  2. 结果记录:及时记录枚举结果,便于后续分析
  3. 重点突出:优先关注高风险发现,如可提权的sudo命令、SUID文件等
  4. 交叉验证:多个来源验证发现的信息,确保准确性
  5. 隐蔽性:在生产环境中尽量减少对系统的影响

最后更新:2026-08-22