服务器信息枚举

判断是否虚拟化

systemd-detect-virt #识别系统运行环境,看是否虚拟化

image-20240625200028837

查找当前shell是否处于docker中

grep 'docker' /proc/1/cgroup

查看系统信息

uname -a #可以看到操作系统名称、版本、架构、主机名、内核版本信息等

查看内核版本信息

uname -r

查看系统架构信息

uname -m

查看发行版本信息

cat /etc/*-release

查看系统主机名信息

hostname
uname -n

用户信息枚举

查看当前用户

whoami

查看当前用户详细信息

id #包含用户名、用户ID和用户所属组及组ID

查看所有用户信息

cat /etc/passwd

查看系统中所有用户组

cat /etc/group

查看id和对应组信息

for i in $(cut -d ":" -f1 /etc/passwd 2>/dev/null);do id $i;done

查看当前登陆到系统的用户信息

w #可以输出用户的登录名、所使用的终端、当前正在执行的命令、登陆时间和系统运行时间等信息

查看当前登陆的用户

users #仅会列出用户名

历史登陆信息

last

查找系统中所有超管用户

grep -v -E "^#" /etc/passwd 2>/dev/null | awk -F: '$3 == 0 {print $1}' 2>/dev/null

环境配置枚举

  • 系统路径:PATH环境变量存储了系统中可执行文件的位置
  • 用户信息:HOME环境变量存储了用户的家目录路径,USER环境变量存储了用户名
  • 命令行选项:SHELL环境变量存储了用户的默认Shell程序的路径
  • 其他信息:LANGUAGE环境变量存储了用户的默认语言环境

环境变量配置不当可能导致权限提升

查看系统环境变量

env 2>/dev/null | grep -v 'LS_COLORS' 2>/dev/null

查看可执行文件路径信息

echo $PATH

查看用户环境配置文件

cat /etc/profile

/etc/profile是Linux的一个配置文件,包含了系统级别的配置信息;在启动时被读取,并设置系统的环境变量、用户变量、Shell选项等。profile还可以包含shell脚本用于执行一些初始化和配置工作

查看可用Shell路径

cat /etc/shells

image-20240625202026353

网络信息枚举

查看网络接口信息

ifconfig -a
ip addr show

还可以通过查看IP配置文件来查看网络接口信息

  • Ubuntu18之前查看/etc/network/interfaces文件
  • Ubuntu18之后查看/etc/netplan/*.yaml
  • CentOS 8及之前查看/etc/sysconfig/network-scripts/ifcfg-*文件
  • CentOS Stream 9查看/etc/NetworkManager/system-connections/下的文件

查看ARP缓存信息

arp -a

查看路由信息

route

查看网络连接信息

netstat -antlp 2>/dev/null #查看所有网络连接信息
netstat -ntpl 2>/dev/null #查看正在监听的TCP端口
netstat -nupl 2>/dev/null #查看正在监听的UDP端口

查看DNS信息

cat /etc/resolv.conf #查看该DNS配置文件,里面保存了本地系统用于域名解析的DNS服务器信息

系统进程枚举

查看系统进程

ps aux 2>/dev/null
ps aux 2>/dev/null | grep 'root' 2>/dev/null #查看以root权限运行的进程
ps aux 2>/dev/null | awk '{print $11}' | xargs -r ls -la 2>/dev/null | awk '!x[$0]++' 2>/dev/null #查看进程所对应的二进制文件及权限信息

特权访问枚举

查看sudoers文件

cat /etc/sudoers #该配置文件用于授权某些用户以超级权限执行特定的命令,默认情况该文件只有root能读取

查看是否可以无密码使用sudo

echo '' | sudo -S -l -k
  • -S表示从标准输入获取密码,也就是上面的空密码
  • -l 表示列出当前用户能用的权限
  • -k 表示重置时间戳,也就是下次再执行sudo时便需要输入密码

cron任务枚举

查看所有cron任务

列出/etc/下所有以cron开头的文件的详细信息

ls -la /etc/cron* 2>/dev/null

这是一些可能的文件:

  • /etc/crontab:该文件是cron的主配置文件,用来管理全局定时任务,即对整个系统有效的定时任务,包含任务的时间、命令以及执行此任务的用户。此配置任务还包含:SHELL字段,用来指定运行任务时使用的Shell路径信息;PATH字段,用来指定运行cron作业时使用的环境变量路径的值。
  • /etc/cron.d目录,该目录下也一般存放系统级别的定时任务
  • /etc/cron.daily、/etc/cron.hourly、/etc/cron.monthly、/etc/cron.weekly目录下分别指定了每天、每小时、每个月、每周运行一次的脚本。

所有用户的定时任务

列举所有用户的定时任务(需要root权限)

for user in $(getent passwd | cut -f1 -d:); do echo "### Crontabs for $user ####"; crontab -u $user -l; done

查看当前用户的定时任务

crontab -l

查看其他用户的定时任务

crontab -l -u <用户名>

软件信息枚举

CentOS查看已安装程序

yum list installed

Debian、Ubuntu查看已安装程序

dpkg -l
apt list

文件枚举

查看系统是否安装了文件传输、Shell反弹、代码编译等工具

which nc 2>/dev/null;which netcat 2>/dev/null;which wget 2>/dev/null;which nmap 2>/dev/null;which gcc 2>/dev/null;which curl 2>/dev/null;

查看系统敏感文件权限

ls -al /etc/passwd 2>/dev/null;ls -al /etc/group 2>/dev/null;ls -al /etc/profile 2>/dev/null;ls -al /etc/shadow 2>/dev/null;

查看特殊权限文件

find / -perm -u=s -type f 2>/dev/null #查看SUID权限文件
find / -perm -g=s -type f 2>/dev/null #查看SGID权限文件

查看可写文件

#查找不属于当前用户但是当前用户可写的文件(排除/proc/和/sys/目录下的文件)
find / -writable ! -user `whoami` -type f ! -path "/proc/*" ! -path "/sys/*" -exec ls -al {} \; 2>/dev/null
#另一种方式
find / -perm -2 -type f ! -path "/proc/*" ! -path "/sys/*" -exec ls -al {} \; 2>/dev/null

查看指定扩展名文件

find / -name *.bak -type f 2>/dev/null

查找关键字文件

#在当前目录及其子目录中查找扩展名为.php的文件,搜索并列出文件内容包含pass的行,并输出行号
find . -name "*.php" -print0 | xargs -0 grep -i -n "pass"

查看历史命令记录文件

查找可能存在的历史命令记录文件,如Bash历史记录文件、MySQL历史记录文件等等。

ls -al ~/.*_history 2>/dev/null

image-20240625211315620

其中bash_history记录历史命令,我们可能从中获得一些服务的凭据之类的重要信息。

查看隐藏文件

比如有些管理员会将难记忆的密码通过隐藏文件的方式保存,我们可以通过bash历史命令文件进行搜索查看并获取一些敏感信息

这是一个示例查找命令

find / -name ".*" -type f -path "/home/*" -exec ls -al {} \; 2>/dev/null
cat ~/.bash_history | grep -i passw #在历史命令搜索指定字符串

查看配置文件

find / -name "*.ovpn" -type f -path "/home/*" -exec ls -al {} \; 2>/dev/null #.ovpn是虚拟专用网络的配置文件扩展名,即vpn

查找之后我们就可以去看看里面的文件有什么信息

查看SSH私钥文件

find / -name id_rsa 2>/dev/null

如果能找到的话,我们就可以将该文件复制到kali,然后执行下面命令以root用户登陆目标服务器

chmod 600 id_rsa #设置权限
ssh -i id_rsa root@<目标主机的ip> #使用id_rsa文件连接

信息搜集辅助工具

Metasploit模块

在Metasoloit的post/linux/gather/文件夹下有很多针对服务器信息搜集的后渗透模块。

开源脚本搜集信息

比如LinEnum,它可以获取服务器的各种信息,其实该脚本就是多条命令的集合,也可以自己写。