内网信息收集技术博客

在渗透测试的流程中,当我们通过 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 帮我们梳理复杂的域内关系,这些工具能大幅提高我们的渗透效率。

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


参考资料

相关推荐
计算机安禾1 小时前
【计算机网络】第22篇:传输层安全——TLS握手协议的状态机与密钥派生
计算机网络·安全
霸时斌子1 小时前
/etc/fstab 重复挂载条目
linux·安全
techdashen1 小时前
你的社交数据,凭什么归平台所有?用 Cloudflare 搭建去中心化社交应用
服务器·去中心化·php
Sombra_Olivia2 小时前
Vulhub 中的 Cacti-CVE-2023-39361
安全·web安全·渗透测试·vulhub
Waay10 小时前
“红帽系统管理二”知识点问答题:第11章 管理网络安全
网络·安全·web安全
niucloud-admin10 小时前
PHP V6 单商户常见问题——汇付支付提示暂未开通延时入账权限问题
php
sweet丶14 小时前
加密算法、摘要指纹、签名、CA证书全面梳理笔记
安全
大方子15 小时前
【PolarCTF】PHP反序列化初试
网络安全·polarctf
他是龙55116 小时前
71:Python安全 & 反序列化 & PYC反编译 & 格式化字符串安全
开发语言·python·安全