内网信息收集技术博客

在渗透测试的流程中,当我们通过 Web 漏洞、钓鱼等方式拿下目标边界服务器的权限后,真正的内网渗透才刚刚开始。而信息收集作为渗透的核心,在内网阶段更是重中之重 ------ 有效的信息收集能帮我们快速摸清内网拓扑、定位高价值目标,大幅缩短渗透周期。今天我们就来完整梳理内网信息收集的全流程,从基础概念到工具使用,带你吃透这内网渗透的第一步。

一、内网渗透的前置认知

在开始学习内网信息收集之前,我们需要先搞清楚内网环境的基础概念,这是我们后续所有操作的前提。

1.1 什么是内网与内网渗透?

很多刚接触渗透的朋友会疑惑,外网和内网到底有什么区别?简单来说:

  • 外网:也就是我们常说的互联网,是全球计算机都能互相访问的公共网络。

  • 内网:也叫局域网,是企业、家庭内部搭建的私有网络,这些网络里的设备通常不会直接暴露在公网,只能内部互相访问。

内网渗透,就是我们在拿下边界服务器的权限后,以这台服务器为跳板,对内网进行进一步的探测、渗透,最终拿下内网中其他高价值主机(比如域控制器、运维服务器)的过程。

图:内网渗透的典型流程,从边界突破到逐步渗透整个内网

整个内网渗透的流程,通常会遵循「信息收集→代理搭建→权限提升→横向移动→拿下域控」的路径,而我们今天要讲的信息收集,就是这整个流程的起点。

1.2 内网的管理模式:从工作组到域

内网里的计算机管理,通常有两种模式,这也是我们必须要搞懂的基础概念:

工作组(Work Group)

工作组是最基础的资源管理模式,它把不同的电脑按功能分组,方便资源共享。这种模式非常简单,适合小型网络,比如小网吧、十几个人的小公司,每台电脑的账号密码都是独立的,自己管自己。

域(Domain)

当企业的网络规模越来越大,几百上千台主机的时候,工作组的管理模式就会变得非常混乱,这时候就会用到域环境

域是一种集中式的管理模式,企业可以把所有的电脑、用户都加入到域中,由一台统一的 \\ 域控制器(Domain Controller,简称 DC)\\ 来统一管理所有的账号、权限、策略。

图:AD 域环境的基础架构,所有用户和主机都由域控制器统一管理

域环境里有几个核心的概念:

  • 单域:整个内网只有一个域,是最常见的小型企业域环境。

  • 父域与子域 :大型企业会在主域下划分出子域,比如总公司的域是company\.com,分公司的子域可以是branch\.company\.com

  • 域树:多个有信任关系的域组成的集合,共享同一个连续的命名空间。

  • 域林:多个独立的域树组成的集合,它们之间建立了信任关系,可以跨域访问资源。

  • 域控制器(DC):域的核心服务器,存储了整个域的账号、密码、权限信息,负责验证所有域用户的登录,相当于整个域的 "门卫"。

一个典型的域渗透场景: 某个域用户需要安装 Visio 软件,联系了域管理员。管理员用自己的域管理员账号登录了这台普通员工的主机,帮他安装了软件。这时候,这台主机的本地管理员就可以用mimikatz工具,从系统内存里抓取到域管理员的登录密码,直接用这个密码就能控制整个域的所有主机!

这就是域渗透的核心逻辑:域管理员的账号可以登录域内的任意主机,只要我们能在任意一台域成员主机上拿到域管理员的凭证,就能直接拿下整个域的控制权。

二、基础内网信息收集:摸清当前主机的情况

当我们刚拿下一台主机的权限时,我们对这台主机一无所知:它是什么系统?当前用户有什么权限?它在哪个网段?开了哪些端口?这时候我们就需要用基础的信息收集命令,先把这台主机的情况摸清楚。

这些命令是通用的,不管是不是域环境,都可以用来收集基础信息:

2.1 查看当前用户与权限

复制代码
whoami /all

这个命令会帮我们查看当前登录的用户,以及这个用户所属的用户组、拥有的特权信息。通过这个命令,我们可以快速判断当前用户的权限,判断是否需要进行提权操作。

2.2 查看网络配置信息

复制代码
ipconfig /all

这个命令会输出主机的 IP 地址、子网掩码、网关、DNS 服务器、主机名等信息。通过这个命令,我们可以知道当前主机所在的内网网段,为后续的网段扫描划定范围。

2.3 查看路由信息

复制代码
route print

路由表会告诉我们这台主机可以直接访问哪些网络段,很多时候内网里会有多个不同的网段,通过路由表我们就能知道哪些网段是我们可以去探测的,不会做无用功。

2.4 查看操作系统信息

复制代码
systeminfo

这个命令会输出非常详细的系统信息:主机名、操作系统版本、系统目录、当前主机是属于工作组还是域、安装的系统补丁、网卡信息等等。这些信息可以帮我们判断系统有没有可以利用的漏洞,比如有没有没打补丁的提权漏洞。

2.5 查看端口与连接信息

复制代码
netstat -ano

这个命令会列出主机所有的端口监听情况,以及当前主机和其他主机的网络连接。通过这个命令,我们可以发现主机开了哪些服务,有没有和其他内网主机的连接,甚至能发现一些没被防火墙挡住的端口。

2.6 查看会话与进程

复制代码
# 查看当前主机的客户端会话
net session
​
# 查看当前运行的进程
tasklist

通过会话列表,我们可以知道有没有其他用户登录过这台主机;通过进程列表,我们可以判断主机上运行了什么软件,有没有杀毒软件、有没有数据库之类的应用。

2.7 查看计划任务与自启动

复制代码
# 查看所有计划任务
schtasks /query /v /fo list
​
# 查看自启动程序
wmic startup get caption,command,location,user

这两个命令可以帮我们发现主机上的持久化机制,也能帮我们找到一些管理员的自动脚本,有时候这些脚本里会硬编码密码。

2.8 查看杀毒软件信息

很多时候我们需要知道目标主机上装了什么杀毒软件,才能避开它的检测,我们可以用 WMIC 命令来查询:

复制代码
# 获取杀软名称
WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List
​
# 获取杀软名称和安装路径
WMIC /namespace:\\root\SecurityCenter2 path antivirusproduct GET displayName,productState,pathToSignedProductExe

三、域内专属信息收集:摸清域环境的全貌

如果我们发现当前主机是加入了域的,那我们就可以进行域内的专属信息收集,来摸清整个域的情况:有哪些用户?有哪些管理员?域控制器在哪?

3.1 先判断:当前是不是域环境?

首先我们要先确认,当前主机是不是在域环境里,有几个简单的命令可以判断:

复制代码
# 查看当前主机的域信息
net config workstation
​
# 查询域的时间,如果能返回,说明存在域环境
net time /domain

如果这些命令能正常返回域的信息,那就说明我们当前处于域环境中,可以进行后续的域内信息收集了。

3.2 收集域用户信息

复制代码
# 列出整个域的所有用户
net user /domain
​
# 查看某个指定域用户的详细信息
net user <用户名> /domain

通过这个命令,我们就能拿到域里所有的用户账号,这些账号可以用来做后续的密码爆破、横向移动。

注意:只有域用户才有执行这些域查询的权限,本地用户默认是查不到域的信息的。

3.3 收集域用户组信息

域里的用户组能帮我们快速定位高价值的用户,比如管理员账号:

复制代码
# 列出域内所有的用户组
net group /domain
​
# 查看Domain Users组,也就是所有的域用户
net group "domain users" /domain
​
# 查看Domain Admins组,也就是所有的域管理员!
net group "domain admins" /domain
​
# 查看Enterprise Admins组,企业管理员,权限比域管理员更高
net group "Enterprise Admins" /domain

默认情况下,Domain Admins 组的用户,对域内所有的主机都有完全控制的权限,只要我们拿到这些用户的凭证,就能控制整个域。

3.4 查看域密码策略

复制代码
net accounts /domain

这个命令会返回域的密码策略,比如密码最小长度、密码最长使用期限、锁定策略等等。我们可以根据这个策略来构造密码字典,提高密码爆破的成功率。

3.5 定位域控制器

域控制器是我们的核心目标,我们需要找到它的位置:

复制代码
# 列出所有的域控制器主机名
net group "domain controllers" /domain
​
# 通过时间服务器找到主域控制器
net time /domain

拿到域控制器的主机名之后,我们可以用 ping 命令来解析它的 IP 地址:

复制代码
ping 主域控制器的主机名
# 如果返回的是IPv6地址,加-4参数指定IPv4
ping 主域控制器的主机名 -4

另外还有个小技巧:域控制器通常同时会充当域内的 DNS 服务器,所以我们之前用ipconfig /all查到的 DNS 服务器地址,大概率就是域控制器的 IP!

3.6 查看域信任关系

如果是多域的环境,我们还需要查看域之间的信任关系,这样才能知道我们能不能跨域渗透:

复制代码
nltest /domain_trusts

这个命令会列出当前域和其他域的信任关系,帮我们理清整个域林的结构。

四、凭据收集:用 CS 快速抓取用户密码

内网横向移动的核心,就是用户的登录凭证 ------ 密码或者哈希值。只要我们拿到了用户的凭证,就能用这些凭证登录其他的主机。

4.1 什么是 Hash 值?

Windows 系统里,用户的密码不会明文存储,而是会存储密码的 Hash 值。当我们登录的时候,系统会把你输入的密码算成 Hash,和存储的 Hash 对比。

而我们常用的mimikatz工具,就是从系统的lsass\.exe进程的内存里,把用户登录过的密码明文或者 Hash 值给抓取出来。这些 Hash 值可以直接用来做 Pass-the-Hash(哈希传递)攻击,不用破解成明文就能直接登录其他主机。

4.2 用 Cobalt Strike 快速收集凭据

在实际的渗透中,我们通常会用 Cobalt Strike(简称 CS)这个工具来简化整个操作,它集成了很多信息收集、凭据收集的功能,不用我们手动敲很多命令。

图:Cobalt Strike 工具的操作界面

整个流程非常简单:

  1. 主机上线:我们先把 CS 生成的木马传到目标主机,运行之后,这台主机就会上线到我们的 CS 控制台。

  2. 内网探测:我们可以用 CS 自带的网络探针,扫描内网里的存活主机,还有端口扫描,快速摸清内网的存活资产。

  3. 抓取用户凭据:我们可以直接用 CS 集成的 mimikatz,一键抓取内存里的用户密码和 Hash。

    注意:如果运行的时候报错,大概率是权限不够,我们需要先做提权,拿到 System 权限之后,再运行 mimikatz,就能成功抓取到所有的凭据了。

  4. 横向移动 :拿到用户的凭据之后,我们就可以用 CS 的横向移动功能,比如psexec,用拿到的账号密码,直接登录其他的内网主机,把我们的木马传上去,扩大我们的战果。

除了自带的功能,CS 还有很多强大的插件,比如 LSTAR、ladon 这些,都能帮我们更快速的收集内网的信息和凭据。

五、梳理内网拓扑:用 BloodHound 理清域内关系

当我们面对一个复杂的域环境的时候,手动的信息收集很难理清所有的用户、主机、组之间的关系,这时候我们就需要用到 \\BloodHound(猎犬)\\ 这个工具。

BloodHound 是一个域内信息梳理工具,它能自动收集域内的所有用户、组、计算机、会话信息,然后用图的方式给我们展示出来,帮我们快速找到渗透的路径,比如哪台主机上有域管理员的登录会话,哪个用户能访问哪台主机等等。

图:BloodHound 的操作界面,用图的方式展示域内所有的关系

它的使用步骤也很简单:

  1. 上传收集器 :把 BloodHound 的收集器SharpHound\.exe传到目标主机。

  2. 收集信息:在目标主机上运行命令,收集所有的域内信息:

    复制代码
    SharpHound.exe -c all

    运行完之后,会生成一个压缩包,里面就是收集到的所有信息。

  3. 启动本地服务:在我们自己的电脑上,启动 Neo4j 数据库服务,然后启动 BloodHound 客户端。

  4. 导入数据:把刚才收集到的压缩包导入到 BloodHound 里,它就会自动生成域内的关系图。

通过 BloodHound 的分析功能,我们可以一键找到:

  • 哪台主机上有域管理员的登录会话

  • 哪些用户可以被约束委派攻击

  • 最短的提权 / 渗透路径 ...

这些信息能帮我们在复杂的域环境里,快速找到最有效的渗透路线,不用再像无头苍蝇一样乱撞。

六、总结

内网信息收集是内网渗透的基础,只有把信息收集做足了,我们才能后续的渗透中少走弯路。今天我们梳理的核心知识点:

  1. 域的核心概念:域是集中式的内网管理模式,域控制器是域的核心,域管理员的凭证可以控制整个域。

  2. 信息收集的常用命令:从基础的主机信息,到域内的用户、组、域控信息,这些命令是我们手动收集信息的核心。

  3. 自动化工具的使用:CS 帮我们快速收集凭据、横向移动,BloodHound 帮我们梳理复杂的域内关系,这些工具能大幅提高我们的渗透效率。

内网渗透是一个循序渐进的过程,而信息收集就是这个过程的第一步,把这一步做好,后续的渗透就会事半功倍。


参考资料

相关推荐
Aphasia3111 天前
VPN 与内网穿透
安全
BingoGo1 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack1 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户3074596982072 天前
PHP 扩展——从入门到理解
php
Mr_愚人派2 天前
当"Claude"不再是 Claude:一次第三方 API 代理引发的 AI 身份伪造排查实录
人工智能·安全
鹏仔先生3 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
DaLi Yao3 天前
【无标题】
人工智能·安全
Alsn863 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
网络研究院3 天前
2026年网络安全
网络·安全·法律·法规·趋势·发展
云水一下3 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php