4、信息收集与侦察:系统信息收集、用户与组信息、网络信息、运行的进程与服务
各位同学,欢迎来到第四讲。前面我们聊了权限提升的基本概念和攻击面,今天要讲的,是真正动手前的「侦察」阶段。
说白了,信息收集就是「知己知彼」的第一步。你连目标系统跑什么内核、开了哪些端口、有哪些用户都不知道,谈何提权?我个人习惯,拿到一个shell之后,第一件事不是急着跑exp,而是先静下来,把系统里里外外摸一遍。这就像小偷踩点,你总得知道门朝哪开、有没有狗、几点没人吧?
4.1 系统信息收集:摸清底细
系统信息是提权的「地基」。你想想看,一个Windows Server 2003和一个Windows 10 22H2,它们的漏洞库完全不同。我曾在项目中遇到过一台看起来是Windows Server 2012的机器,结果一查内核版本,发现是2012 R2的早期版本,存在MS14-068的漏洞,直接一把梭拿下域控。
所以,第一步永远是:搞清楚你站在什么系统上。
4.1.1 操作系统版本与补丁
在Windows上,我最常用的命令是:
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Type"
wmic qfe list brief /format:table # 查看已安装的补丁
在Linux上,则是:
uname -a
cat /etc/os-release
cat /proc/version
嗯,这里要注意:systeminfo 有时候会被管理员禁用,或者输出内容太多。我习惯用 wmic 来快速定位补丁信息。补丁号就是你的「财富密码」——比如看到系统没打KB5005565,那PrintNightmare大概率能成。
4.1.2 系统架构与位数
32位还是64位?这决定了你后续使用的exp和工具。我见过有人拿64位的exp去打32位的系统,结果自然是白费功夫。
# Windows
wmic os get osarchitecture
# Linux
arch
getconf LONG_BIT
4.1.3 环境变量与敏感信息
环境变量里经常藏着宝贝。比如 PATH 里有没有可写目录?HOME 目录下有没有密钥文件?
# Windows
set
# Linux
env
我曾经在某个客户的服务器上,通过 env 直接看到了数据库连接字符串,里面明文写着密码。嗯,有时候提权不需要多高深的技术,信息收集做到位了,漏洞自己就送上门了。
4.2 用户与组信息:谁在系统里?
知道了系统是什么,接下来就要搞清楚「谁」在系统里。用户权限的分布,直接决定了你的提权路径。
4.2.1 当前用户与权限
先看看自己是谁:
# Windows
whoami
whoami /priv # 查看当前用户的特权
whoami /groups # 查看所属组
# Linux
id
whoami
whoami /priv 这个命令特别重要。它会列出当前用户拥有的所有特权,比如 SeImpersonatePrivilege、SeAssignPrimaryTokenPrivilege。如果你看到这些特权被启用,那恭喜你,土豆家族(Juicy Potato、Rogue Potato)的漏洞就可以安排上了。
SeImpersonatePrivilege 默认是禁用的,但通过某些服务启动的进程,这个特权会被启用。所以不要只看当前shell的权限,还要看进程的上下文。
4.2.2 列出所有用户与组
看看系统里都有哪些用户,特别是那些隐藏的、不常用的账户:
# Windows
net user
net localgroup administrators
# Linux
cat /etc/passwd
cat /etc/group
getent passwd
在Linux上,我习惯用 cat /etc/passwd 配合 awk -F: '$3 == 0 {print $1}' 来快速找出所有UID为0的用户——也就是root级别的账户。有时候管理员会创建一些后门账户,UID设成0,但名字看起来人畜无害,比如 backup、sync。
4.2.3 可登录用户与历史登录
谁最近登录过?有没有其他用户在线?这些信息能帮你判断系统是否活跃,以及是否有其他用户可能干扰你的操作。
# Windows
query user
qwinsta
# Linux
last
who
w
我记得有一次渗透测试,通过 last 发现一个管理员在几分钟前刚登录过,而且他的会话还没断开。我直接利用他的令牌,提权到了SYSTEM。
4.3 网络信息:地图与路径
网络信息告诉你两件事:我能去哪? 和 谁能来找我?
4.3.1 网络接口与IP地址
看看这台机器有几个网卡,连接了哪些网段:
# Windows
ipconfig /all
# Linux
ip addr
ifconfig
多网卡机器很常见。比如一台Web服务器,可能同时连着内网和外网。如果你只拿到了外网权限,但发现它还有一张内网网卡,那这台机器就是你的「跳板机」。
4.3.2 路由表与DNS
路由表告诉你流量怎么走,DNS告诉你域名解析到了哪里:
# Windows
route print
nslookup
# Linux
route -n
cat /etc/resolv.conf
我曾经通过查看路由表,发现目标机器能直接访问一个内网的数据库服务器。于是我没有继续在Web服务器上提权,而是直接通过它横向移动到了数据库服务器,拿到了核心数据。
4.3.3 开放端口与监听服务
这是信息收集的重中之重。你想想看,一个系统上跑着哪些服务,这些服务有没有漏洞?
# Windows
netstat -ano
netstat -anb # 显示关联的进程名(需要管理员权限)
# Linux
netstat -tulnp
ss -tulnp
lsof -i -P -n
netstat -anb 在Windows上非常有用,它能直接告诉你哪个进程在监听哪个端口。比如你看到端口445被 lsass.exe 监听,那说明SMB服务在运行,可以尝试永恒之蓝。如果看到端口3389被 svchost.exe 监听,那RDP服务开着,可以尝试爆破或者漏洞利用。
netstat -anb 需要管理员权限。如果你当前是普通用户,可以用 netstat -ano 先看端口和PID,然后用 tasklist /svc /FI "PID eq 1234" 来查进程名。
4.4 运行的进程与服务:找软柿子捏
进程和服务,是提权的「直接战场」。很多漏洞就藏在那些以高权限运行的服务里。
4.4.1 列出所有进程
# Windows
tasklist /v
wmic process list full
# Linux
ps aux
ps -ef
top -b -n 1
我习惯用 wmic process list full,因为它输出的信息最全,包括进程路径、启动参数、所属用户等。你可以快速筛选出以 SYSTEM 或 Administrator 权限运行的进程。
4.4.2 服务信息
服务是提权的「富矿」。很多服务以SYSTEM权限运行,但配置不当,导致普通用户能修改它的二进制文件或配置文件。
# Windows
sc query
wmic service list brief
# Linux
systemctl list-units --type=service
service --status-all
在Windows上,sc qc [服务名] 可以查看服务的详细配置,包括二进制路径、启动账户、依赖关系等。我曾经通过 sc qc 发现一个服务的二进制路径指向了一个普通用户可写的目录,直接替换了它的exe文件,服务重启后成功提权。
4.4.3 计划任务与定时任务
计划任务也是提权的常见入口。看看有没有以高权限运行的任务,并且任务脚本或程序是普通用户可写的。
# Windows
schtasks /query /fo LIST /v
# Linux
crontab -l
ls -la /etc/cron*
cat /etc/crontab
4.5 信息收集的「黄金三问」
最后,我总结一下信息收集阶段的三个核心问题。每次拿到一个shell,我都会在心里问自己这三遍:
- 我在哪? —— 系统版本、补丁、架构、网络环境。
- 我是谁? —— 当前用户、所属组、拥有的特权。
- 谁在我旁边? —— 其他用户、运行的进程、监听的服务、计划任务。
这三个问题回答清楚了,你的提权路径基本就浮出水面了。信息收集不是一次性的工作,而是贯穿整个渗透过程的。你可能会在后续的某个步骤中,突然想起「哦,刚才那个服务的路径我没仔细看」,然后回头再查一遍。
嗯,这一讲的内容就到这里。下一讲,我们会深入Windows的令牌机制,看看如何利用令牌窃取来提升权限。各位回去之后,可以找一台测试机,把今天讲的命令都跑一遍,看看你能收集到哪些信息。动手实践,永远是最好的学习方式。